diff --git a/android/module.go b/android/module.go index a98456f5e..5fe379c8a 100644 --- a/android/module.go +++ b/android/module.go @@ -2169,20 +2169,27 @@ func (e configurationEvalutor) EvaluateConfiguration(condition proptools.Configu } } return proptools.ConfigurableValueUndefined() - case "variant": - if len(condition.Args) != 1 { - ctx.OtherModulePropertyErrorf(m, property, "variant requires 1 argument, found %d", len(condition.Args)) + case "arch": + if len(condition.Args) != 0 { + ctx.OtherModulePropertyErrorf(m, property, "arch requires no arguments, found %d", len(condition.Args)) return proptools.ConfigurableValueUndefined() } - if condition.Args[0] == "arch" { - if !m.base().ArchReady() { - ctx.OtherModulePropertyErrorf(m, property, "A select on arch was attempted before the arch mutator ran") - return proptools.ConfigurableValueUndefined() - } - return proptools.ConfigurableValueString(m.base().Arch().ArchType.Name) + if !m.base().ArchReady() { + ctx.OtherModulePropertyErrorf(m, property, "A select on arch was attempted before the arch mutator ran") + return proptools.ConfigurableValueUndefined() } - ctx.OtherModulePropertyErrorf(m, property, "Unknown variant %s", condition.Args[0]) - return proptools.ConfigurableValueUndefined() + return proptools.ConfigurableValueString(m.base().Arch().ArchType.Name) + case "os": + if len(condition.Args) != 0 { + ctx.OtherModulePropertyErrorf(m, property, "os requires no arguments, found %d", len(condition.Args)) + return proptools.ConfigurableValueUndefined() + } + // the arch mutator runs after the os mutator, we can just use this to enforce that os is ready. + if !m.base().ArchReady() { + ctx.OtherModulePropertyErrorf(m, property, "A select on os was attempted before the arch mutator ran (arch runs after os, we use it to lazily detect that os is ready)") + return proptools.ConfigurableValueUndefined() + } + return proptools.ConfigurableValueString(m.base().Os().Name) case "boolean_var_for_testing": // We currently don't have any other boolean variables (we should add support for typing // the soong config variables), so add this fake one for testing the boolean select diff --git a/android/selects_test.go b/android/selects_test.go index 1eb137beb..f912ce626 100644 --- a/android/selects_test.go +++ b/android/selects_test.go @@ -269,11 +269,11 @@ func TestSelects(t *testing.T) { }, }, { - name: "Select on variant", + name: "Select on arch", bp: ` my_module_type { name: "foo", - my_string: select(variant("arch"), { + my_string: select(arch(), { "x86": "my_x86", "x86_64": "my_x86_64", "arm": "my_arm", @@ -286,6 +286,22 @@ func TestSelects(t *testing.T) { my_string: proptools.StringPtr("my_arm64"), }, }, + { + name: "Select on os", + bp: ` + my_module_type { + name: "foo", + my_string: select(os(), { + "android": "my_android", + "linux": "my_linux", + default: "my_default", + }), + } + `, + provider: selectsTestProvider{ + my_string: proptools.StringPtr("my_android"), + }, + }, { name: "Unset value", bp: `