Implement `host_required` and `target_required` properties.
They are counterparts of LOCAL_HOST_REQUIRED_MODULES and
LOCAL_TARGET_REQUIRED_MODULES respectively.
Fixes: 128693436
Test: treehugger, convert cts/hostsidetests/devicepolicy/Android.bp
Change-Id: Id66ffca6edffe18993ac51e8930f1d0e78178249
diff --git a/android/androidmk.go b/android/androidmk.go
index bd49e4c..42e1439 100644
--- a/android/androidmk.go
+++ b/android/androidmk.go
@@ -38,13 +38,15 @@
}
type AndroidMkData struct {
- Class string
- SubName string
- DistFile OptionalPath
- OutputFile OptionalPath
- Disabled bool
- Include string
- Required []string
+ Class string
+ SubName string
+ DistFile OptionalPath
+ OutputFile OptionalPath
+ Disabled bool
+ Include string
+ Required []string
+ Host_required []string
+ Target_required []string
Custom func(w io.Writer, name, prefix, moduleDir string, data AndroidMkData)
@@ -200,6 +202,8 @@
}
data.Required = append(data.Required, amod.commonProperties.Required...)
+ data.Host_required = append(data.Host_required, amod.commonProperties.Host_required...)
+ data.Target_required = append(data.Target_required, amod.commonProperties.Target_required...)
// Make does not understand LinuxBionic
if amod.Os() == LinuxBionic {
@@ -267,10 +271,7 @@
fmt.Fprintln(&data.preamble, "LOCAL_MODULE :=", name+data.SubName)
fmt.Fprintln(&data.preamble, "LOCAL_MODULE_CLASS :=", data.Class)
fmt.Fprintln(&data.preamble, "LOCAL_PREBUILT_MODULE_FILE :=", data.OutputFile.String())
-
- if len(data.Required) > 0 {
- fmt.Fprintln(&data.preamble, "LOCAL_REQUIRED_MODULES := "+strings.Join(data.Required, " "))
- }
+ WriteRequiredModulesSettings(&data.preamble, data)
archStr := amod.Arch().ArchType.String()
host := false
@@ -360,3 +361,15 @@
fmt.Fprintln(w, "include "+data.Include)
}
+
+func WriteRequiredModulesSettings(w io.Writer, data AndroidMkData) {
+ if len(data.Required) > 0 {
+ fmt.Fprintln(w, "LOCAL_REQUIRED_MODULES :=", strings.Join(data.Required, " "))
+ }
+ if len(data.Host_required) > 0 {
+ fmt.Fprintln(w, "LOCAL_HOST_REQUIRED_MODULES :=", strings.Join(data.Host_required, " "))
+ }
+ if len(data.Target_required) > 0 {
+ fmt.Fprintln(w, "LOCAL_TARGET_REQUIRED_MODULES :=", strings.Join(data.Target_required, " "))
+ }
+}
diff --git a/android/module.go b/android/module.go
index 201c27a..93966e1 100644
--- a/android/module.go
+++ b/android/module.go
@@ -133,6 +133,8 @@
InstallInRecovery() bool
RequiredModuleNames() []string
+ HostRequiredModuleNames() []string
+ TargetRequiredModuleNames() []string
// android.ModuleContext methods
// These are duplicated instead of embedded so that can eventually be wrapped to take an
@@ -269,6 +271,12 @@
// names of other modules to install if this module is installed
Required []string `android:"arch_variant"`
+ // names of other modules to install on host if this module is installed
+ Host_required []string `android:"arch_variant"`
+
+ // names of other modules to install on target if this module is installed
+ Target_required []string `android:"arch_variant"`
+
// relative path to a file to include in the list of notices for the device
Notice *string `android:"path"`
@@ -1459,6 +1467,14 @@
return ctx.module.base().commonProperties.Required
}
+func (ctx *androidModuleContext) HostRequiredModuleNames() []string {
+ return ctx.module.base().commonProperties.Host_required
+}
+
+func (ctx *androidModuleContext) TargetRequiredModuleNames() []string {
+ return ctx.module.base().commonProperties.Target_required
+}
+
func (ctx *androidModuleContext) Glob(globPattern string, excludes []string) Paths {
ret, err := ctx.GlobWithDeps(globPattern, excludes)
if err != nil {
diff --git a/android/prebuilt_etc.go b/android/prebuilt_etc.go
index 2a3e07e..3cadaeb 100644
--- a/android/prebuilt_etc.go
+++ b/android/prebuilt_etc.go
@@ -17,7 +17,6 @@
import (
"fmt"
"io"
- "strings"
)
// TODO(jungw): Now that it handles more than the ones in etc/, consider renaming this file.
@@ -157,7 +156,7 @@
fmt.Fprintln(w, "LOCAL_MODULE_PATH :=", "$(OUT_DIR)/"+p.installDirPath.RelPathString())
fmt.Fprintln(w, "LOCAL_INSTALLED_MODULE_STEM :=", p.outputFilePath.Base())
fmt.Fprintln(w, "LOCAL_UNINSTALLABLE_MODULE :=", !p.Installable())
- fmt.Fprintln(w, "LOCAL_REQUIRED_MODULES :=", strings.Join(data.Required, " "))
+ WriteRequiredModulesSettings(w, data)
if p.additionalDependencies != nil {
fmt.Fprint(w, "LOCAL_ADDITIONAL_DEPENDENCIES :=")
for _, path := range *p.additionalDependencies {
diff --git a/android/prebuilt_etc_test.go b/android/prebuilt_etc_test.go
index e0ade7e..fbdbc97 100644
--- a/android/prebuilt_etc_test.go
+++ b/android/prebuilt_etc_test.go
@@ -150,13 +150,17 @@
data := AndroidMkData{}
data.Required = append(data.Required, "modA", "moduleB")
+ data.Host_required = append(data.Host_required, "hostModA", "hostModB")
+ data.Target_required = append(data.Target_required, "targetModA")
expected := map[string]string{
- "LOCAL_MODULE": "foo",
- "LOCAL_MODULE_CLASS": "ETC",
- "LOCAL_MODULE_OWNER": "abc",
- "LOCAL_INSTALLED_MODULE_STEM": "foo.conf",
- "LOCAL_REQUIRED_MODULES": "modA moduleB",
+ "LOCAL_MODULE": "foo",
+ "LOCAL_MODULE_CLASS": "ETC",
+ "LOCAL_MODULE_OWNER": "abc",
+ "LOCAL_INSTALLED_MODULE_STEM": "foo.conf",
+ "LOCAL_REQUIRED_MODULES": "modA moduleB",
+ "LOCAL_HOST_REQUIRED_MODULES": "hostModA hostModB",
+ "LOCAL_TARGET_REQUIRED_MODULES": "targetModA",
}
mod := ctx.ModuleForTests("foo", "android_arm64_armv8-a_core").Module().(*PrebuiltEtc)
diff --git a/android/variable.go b/android/variable.go
index 21af31f..68a24ab 100644
--- a/android/variable.go
+++ b/android/variable.go
@@ -85,10 +85,12 @@
// are used for dogfooding and performance testing, and should be as similar to user builds
// as possible.
Debuggable struct {
- Cflags []string
- Cppflags []string
- Init_rc []string
- Required []string
+ Cflags []string
+ Cppflags []string
+ Init_rc []string
+ Required []string
+ Host_required []string
+ Target_required []string
}
// eng is true for -eng builds, and can be used to turn on additionaly heavyweight debugging