From 90ba5f4e98a29c5ed3e6c1c9bb39118b9454e97b Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Wed, 2 Oct 2019 11:10:58 -0700 Subject: [PATCH] Add InstallInRoot to allow modules to install into root partition If InstallInRoot() returns true the module will be installed to $OUT/root or $OUT/recovery/root. Bug: 141877526 Test: m checkbuild Test: no change to build.ninja or Android-${TARGET_PRODUCT}.mk Test: TestPathForModuleInstall Change-Id: Id6e435c6019f11eeb5806528fd464dbf220b88d9 --- android/module.go | 10 ++++++++++ android/paths.go | 11 +++++++++-- android/paths_test.go | 39 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 58 insertions(+), 2 deletions(-) diff --git a/android/module.go b/android/module.go index a1a01a5cf..2d0c20d8c 100644 --- a/android/module.go +++ b/android/module.go @@ -157,6 +157,7 @@ type ModuleContext interface { InstallInTestcases() bool InstallInSanitizerDir() bool InstallInRecovery() bool + InstallInRoot() bool InstallBypassMake() bool RequiredModuleNames() []string @@ -196,6 +197,7 @@ type Module interface { InstallInTestcases() bool InstallInSanitizerDir() bool InstallInRecovery() bool + InstallInRoot() bool InstallBypassMake() bool SkipInstall() ExportedToMake() bool @@ -846,6 +848,10 @@ func (m *ModuleBase) InstallInRecovery() bool { return Bool(m.commonProperties.Recovery) } +func (m *ModuleBase) InstallInRoot() bool { + return false +} + func (m *ModuleBase) InstallBypassMake() bool { return false } @@ -1522,6 +1528,10 @@ func (m *moduleContext) InstallInRecovery() bool { return m.module.InstallInRecovery() } +func (m *moduleContext) InstallInRoot() bool { + return m.module.InstallInRoot() +} + func (m *moduleContext) InstallBypassMake() bool { return m.module.InstallBypassMake() } diff --git a/android/paths.go b/android/paths.go index 8bd2c61e7..e8b08b504 100644 --- a/android/paths.go +++ b/android/paths.go @@ -47,6 +47,7 @@ type ModuleInstallPathContext interface { InstallInTestcases() bool InstallInSanitizerDir() bool InstallInRecovery() bool + InstallInRoot() bool InstallBypassMake() bool } @@ -1159,8 +1160,12 @@ func modulePartition(ctx ModuleInstallPathContext) string { } else if ctx.InstallInTestcases() { partition = "testcases" } else if ctx.InstallInRecovery() { - // the layout of recovery partion is the same as that of system partition - partition = "recovery/root/system" + if ctx.InstallInRoot() { + partition = "recovery/root" + } else { + // the layout of recovery partion is the same as that of system partition + partition = "recovery/root/system" + } } else if ctx.SocSpecific() { partition = ctx.DeviceConfig().VendorPath() } else if ctx.DeviceSpecific() { @@ -1169,6 +1174,8 @@ func modulePartition(ctx ModuleInstallPathContext) string { partition = ctx.DeviceConfig().ProductPath() } else if ctx.SystemExtSpecific() { partition = ctx.DeviceConfig().SystemExtPath() + } else if ctx.InstallInRoot() { + partition = "root" } else { partition = "system" } diff --git a/android/paths_test.go b/android/paths_test.go index b66eb1e91..2e67272e0 100644 --- a/android/paths_test.go +++ b/android/paths_test.go @@ -204,6 +204,7 @@ type moduleInstallPathContextImpl struct { inTestcases bool inSanitizerDir bool inRecovery bool + inRoot bool } func (moduleInstallPathContextImpl) Fs() pathtools.FileSystem { @@ -232,6 +233,10 @@ func (m moduleInstallPathContextImpl) InstallInRecovery() bool { return m.inRecovery } +func (m moduleInstallPathContextImpl) InstallInRoot() bool { + return m.inRoot +} + func (m moduleInstallPathContextImpl) InstallBypassMake() bool { return false } @@ -313,6 +318,40 @@ func TestPathForModuleInstall(t *testing.T) { in: []string{"bin", "my_test"}, out: "target/product/test_device/system_ext/bin/my_test", }, + { + name: "root binary", + ctx: &moduleInstallPathContextImpl{ + baseModuleContext: baseModuleContext{ + target: deviceTarget, + }, + inRoot: true, + }, + in: []string{"my_test"}, + out: "target/product/test_device/root/my_test", + }, + { + name: "recovery binary", + ctx: &moduleInstallPathContextImpl{ + baseModuleContext: baseModuleContext{ + target: deviceTarget, + }, + inRecovery: true, + }, + in: []string{"bin/my_test"}, + out: "target/product/test_device/recovery/root/system/bin/my_test", + }, + { + name: "recovery root binary", + ctx: &moduleInstallPathContextImpl{ + baseModuleContext: baseModuleContext{ + target: deviceTarget, + }, + inRecovery: true, + inRoot: true, + }, + in: []string{"my_test"}, + out: "target/product/test_device/recovery/root/my_test", + }, { name: "system native test binary",