From fc57d40bf1545160557bc613d296f44c910c1159 Mon Sep 17 00:00:00 2001 From: Cole Faust Date: Thu, 11 Apr 2024 12:09:44 -0700 Subject: [PATCH] Change the syntax for arch selecting and add os selecting This changes the syntax from select(variant("arch"), {...}) to select(arch(), {...}) to make it shorter and to make it clear that we can restrict what variants you can select on. Bug: 323382414 Test: m nothing --no-skip-soong-tests Change-Id: Iafe05b5f455895313a563ed6292f4016b58180b0 --- android/module.go | 29 ++++++++++++++++++----------- android/selects_test.go | 20 ++++++++++++++++++-- 2 files changed, 36 insertions(+), 13 deletions(-) diff --git a/android/module.go b/android/module.go index 47bc8295e..26261cca5 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: `