androidbp: Improve target conditionals when host_supported
Properties need to be parsed twice to support different conditionals for
target and host modules. Then add 'android' target support that will
just be selected for target modules.
Change-Id: I8970d5a0d132324ac7e2a7fffc2b07e7c0da33c0
diff --git a/androidbp/cmd/androidbp.go b/androidbp/cmd/androidbp.go
index 5a924b1..7889588 100644
--- a/androidbp/cmd/androidbp.go
+++ b/androidbp/cmd/androidbp.go
@@ -96,16 +96,22 @@
disabledBuilds map[string]bool, isHostRule bool) (computedProps []string) {
for _, target := range props {
conditionals := targetScopedPropertyConditionals
+ altConditionals := hostScopedPropertyConditionals
if isHostRule {
- conditionals = hostScopedPropertyConditionals
+ conditionals, altConditionals = altConditionals, conditionals
}
conditional, ok := conditionals[target.Name.Name]
if !ok {
- // not found
- conditional = fmt.Sprintf(
- "ifeq(true, true) # ERROR: unsupported conditional host [%s]",
- target.Name.Name)
+ if _, ok := altConditionals[target.Name.Name]; ok {
+ // This is only for the other build type
+ continue
+ } else {
+ // not found
+ conditional = fmt.Sprintf(
+ "ifeq(true, true) # ERROR: unsupported conditional [%s]",
+ target.Name.Name)
+ }
}
var scopedProps []string
@@ -125,9 +131,13 @@
}
if len(scopedProps) > 0 {
- computedProps = append(computedProps, conditional)
- computedProps = append(computedProps, scopedProps...)
- computedProps = append(computedProps, "endif")
+ if conditional != "" {
+ computedProps = append(computedProps, conditional)
+ computedProps = append(computedProps, scopedProps...)
+ computedProps = append(computedProps, "endif")
+ } else {
+ computedProps = append(computedProps, scopedProps...)
+ }
}
}
@@ -201,14 +211,7 @@
fmt.Fprintf(w, "include $(%s)\n\n", moduleRule)
}
-func (w *androidMkWriter) handleModule(module *bpparser.Module) {
- moduleRule := fmt.Sprintf(module.Type.Name)
- if translation, ok := moduleTypeToRule[module.Type.Name]; ok {
- moduleRule = translation
- }
-
- isHostRule := strings.Contains(moduleRule, "HOST")
- hostSupported := false
+func (w *androidMkWriter) parsePropsAndWriteModule(moduleRule string, isHostRule bool, module *bpparser.Module) (hostSupported bool) {
standardProps := make([]string, 0, len(module.Properties))
disabledBuilds := make(map[string]bool)
for _, prop := range module.Properties {
@@ -231,13 +234,25 @@
// write out target build
w.writeModule(moduleRule, standardProps, disabledBuilds, isHostRule)
- if hostSupported {
+ return
+}
+
+func (w *androidMkWriter) handleModule(module *bpparser.Module) {
+ moduleRule := fmt.Sprintf(module.Type.Name)
+ if translation, ok := moduleTypeToRule[module.Type.Name]; ok {
+ moduleRule = translation
+ }
+
+ isHostRule := strings.Contains(moduleRule, "HOST")
+ hostSupported := w.parsePropsAndWriteModule(moduleRule, isHostRule, module)
+
+ if !isHostRule && hostSupported {
hostModuleRule := "NO CORRESPONDING HOST RULE" + moduleRule
if trans, ok := targetToHostModuleRule[moduleRule]; ok {
hostModuleRule = trans
}
- w.writeModule(hostModuleRule, standardProps,
- disabledBuilds, true)
+
+ w.parsePropsAndWriteModule(hostModuleRule, true, module)
}
}
diff --git a/androidbp/cmd/soong.go b/androidbp/cmd/soong.go
index 95c938e..c40b507 100644
--- a/androidbp/cmd/soong.go
+++ b/androidbp/cmd/soong.go
@@ -106,6 +106,7 @@
// TODO: host target?
var targetScopedPropertyConditionals = map[string]string{
+ "android": "",
"android32": "ifneq($(TARGET_IS_64_BIT), true)",
"not_android32": "ifeq($(TARGET_IS_64_BIT), true)",
"android64": "ifeq($(TARGET_IS_64_BIT), true)",