diff options
| -rw-r--r-- | android/neverallow.go | 1 | ||||
| -rw-r--r-- | etc/prebuilt_etc.go | 1 | ||||
| -rw-r--r-- | fsgen/prebuilt_etc_modules_gen.go | 25 |
3 files changed, 27 insertions, 0 deletions
diff --git a/android/neverallow.go b/android/neverallow.go index d590d8ec9..18e9a178b 100644 --- a/android/neverallow.go +++ b/android/neverallow.go @@ -245,6 +245,7 @@ func createInstallInRootAllowingRules() []Rule { Without("name", "librecovery_ui_ext"). With("install_in_root", "true"). NotModuleType("prebuilt_root"). + NotModuleType("prebuilt_vendor"). Because("install_in_root is only for init_first_stage or librecovery_ui_ext."), } } diff --git a/etc/prebuilt_etc.go b/etc/prebuilt_etc.go index dd274ad88..190d12951 100644 --- a/etc/prebuilt_etc.go +++ b/etc/prebuilt_etc.go @@ -574,6 +574,7 @@ func InitPrebuiltEtcModule(p *PrebuiltEtc, dirBase string) { p.installDirBase = dirBase p.AddProperties(&p.properties) p.AddProperties(&p.subdirProperties) + p.AddProperties(&p.rootProperties) } func InitPrebuiltRootModule(p *PrebuiltEtc) { diff --git a/fsgen/prebuilt_etc_modules_gen.go b/fsgen/prebuilt_etc_modules_gen.go index f21774443..902d18344 100644 --- a/fsgen/prebuilt_etc_modules_gen.go +++ b/fsgen/prebuilt_etc_modules_gen.go @@ -36,6 +36,7 @@ type prebuiltSrcGroupByInstallPartition struct { system_ext map[string][]srcBaseFileInstallBaseFileTuple product map[string][]srcBaseFileInstallBaseFileTuple vendor map[string][]srcBaseFileInstallBaseFileTuple + recovery map[string][]srcBaseFileInstallBaseFileTuple } func newPrebuiltSrcGroupByInstallPartition() *prebuiltSrcGroupByInstallPartition { @@ -44,6 +45,7 @@ func newPrebuiltSrcGroupByInstallPartition() *prebuiltSrcGroupByInstallPartition system_ext: map[string][]srcBaseFileInstallBaseFileTuple{}, product: map[string][]srcBaseFileInstallBaseFileTuple{}, vendor: map[string][]srcBaseFileInstallBaseFileTuple{}, + recovery: map[string][]srcBaseFileInstallBaseFileTuple{}, } } @@ -73,6 +75,8 @@ func appendIfCorrectInstallPartition(partitionToInstallPathList []partitionToIns srcMap = srcGroup.product case "vendor": srcMap = srcGroup.vendor + case "recovery": + srcMap = srcGroup.recovery } if srcMap != nil { srcMap[relativeInstallDir] = append(srcMap[relativeInstallDir], srcBaseFileInstallBaseFileTuple{ @@ -128,6 +132,7 @@ func processProductCopyFiles(ctx android.LoadHookContext) map[string]*prebuiltSr // System is intentionally added at the last to consider the scenarios where // non-system partitions are installed as part of the system partition partitionToInstallPathList := []partitionToInstallPath{ + {name: "recovery", installPath: "recovery/root"}, {name: "vendor", installPath: ctx.DeviceConfig().VendorPath()}, {name: "product", installPath: ctx.DeviceConfig().ProductPath()}, {name: "system_ext", installPath: ctx.DeviceConfig().SystemExtPath()}, @@ -155,6 +160,7 @@ type prebuiltModuleProperties struct { Soc_specific *bool Product_specific *bool System_ext_specific *bool + Recovery *bool Srcs []string Dsts []string @@ -174,6 +180,12 @@ type prebuiltSubdirProperties struct { Relative_install_path *string } +// Split install_in_root to a separate struct as it is part of rootProperties instead of +// properties +type prebuiltInstallInRootProperties struct { + Install_in_root *bool +} + var ( etcInstallPathToFactoryList = map[string]android.ModuleFactory{ "": etc.PrebuiltRootFactory, @@ -255,6 +267,8 @@ func prebuiltEtcModuleProps(moduleName, partition string) prebuiltModuleProperti moduleProps.Product_specific = proptools.BoolPtr(true) case "vendor": moduleProps.Soc_specific = proptools.BoolPtr(true) + case "recovery": + moduleProps.Recovery = proptools.BoolPtr(true) } moduleProps.No_full_install = proptools.BoolPtr(true) @@ -302,6 +316,16 @@ func createPrebuiltEtcModulesInDirectory(ctx android.LoadHookContext, partition, installBaseFiles = append(installBaseFiles, tuple.installBaseFile) } + // Recovery partition-installed modules are installed to `recovery/root/system` by + // default (See modulePartition() in android/paths.go). If the destination file + // directory is not `recovery/root/system/...`, it should set install_in_root to true + // to prevent being installed in `recovery/root/system`. + if partition == "recovery" && !strings.HasPrefix(destDir, "system") { + propsList = append(propsList, &prebuiltInstallInRootProperties{ + Install_in_root: proptools.BoolPtr(true), + }) + } + // Set appropriate srcs, dsts, and releative_install_path based on // the source and install file names if allCopyFileNamesUnchanged { @@ -347,6 +371,7 @@ func createPrebuiltEtcModules(ctx android.LoadHookContext) (ret []string) { ret = append(ret, createPrebuiltEtcModulesForPartition(ctx, "system_ext", srcDir, groupedSource.system_ext)...) ret = append(ret, createPrebuiltEtcModulesForPartition(ctx, "product", srcDir, groupedSource.product)...) ret = append(ret, createPrebuiltEtcModulesForPartition(ctx, "vendor", srcDir, groupedSource.vendor)...) + ret = append(ret, createPrebuiltEtcModulesForPartition(ctx, "recovery", srcDir, groupedSource.recovery)...) } return ret |