diff --git a/mk2rbc/mk2rbc.go b/mk2rbc/mk2rbc.go index b377fd828..6403612d7 100644 --- a/mk2rbc/mk2rbc.go +++ b/mk2rbc/mk2rbc.go @@ -46,6 +46,8 @@ const ( // product configuration Starlark files. baseName = "rblf" + soongNsPrefix = "SOONG_CONFIG_" + // And here are the functions and variables: cfnGetCfg = baseName + ".cfg" cfnMain = baseName + ".product_configuration" @@ -60,10 +62,14 @@ const ( const ( // Phony makefile functions, they are eventually rewritten // according to knownFunctions map - addSoongNamespace = "add_soong_config_namespace" - addSoongConfigVarValue = "add_soong_config_var_value" - fileExistsPhony = "$file_exists" - wildcardExistsPhony = "$wildcard_exists" + fileExistsPhony = "$file_exists" + // The following two macros are obsolete, and will we deleted once + // there are deleted from the makefiles: + soongConfigNamespaceOld = "add_soong_config_namespace" + soongConfigVarSetOld = "add_soong_config_var_value" + soongConfigAppend = "soong_config_append" + soongConfigAssign = "soong_config_set" + wildcardExistsPhony = "$wildcard_exists" ) const ( @@ -82,8 +88,10 @@ var knownFunctions = map[string]struct { "abspath": {baseName + ".abspath", starlarkTypeString, hiddenArgNone}, fileExistsPhony: {baseName + ".file_exists", starlarkTypeBool, hiddenArgNone}, wildcardExistsPhony: {baseName + ".file_wildcard_exists", starlarkTypeBool, hiddenArgNone}, - addSoongNamespace: {baseName + ".add_soong_config_namespace", starlarkTypeVoid, hiddenArgGlobal}, - addSoongConfigVarValue: {baseName + ".add_soong_config_var_value", starlarkTypeVoid, hiddenArgGlobal}, + soongConfigNamespaceOld: {baseName + ".soong_config_namespace", starlarkTypeVoid, hiddenArgGlobal}, + soongConfigVarSetOld: {baseName + ".soong_config_set", starlarkTypeVoid, hiddenArgGlobal}, + soongConfigAssign: {baseName + ".soong_config_set", starlarkTypeVoid, hiddenArgGlobal}, + soongConfigAppend: {baseName + ".soong_config_append", starlarkTypeVoid, hiddenArgGlobal}, "add-to-product-copy-files-if-exists": {baseName + ".copy_if_exists", starlarkTypeList, hiddenArgNone}, "addprefix": {baseName + ".addprefix", starlarkTypeList, hiddenArgNone}, "addsuffix": {baseName + ".addsuffix", starlarkTypeList, hiddenArgNone}, @@ -522,7 +530,6 @@ func (ctx *parseContext) handleAssignment(a *mkparser.Assignment) { return } name := a.Name.Strings[0] - const soongNsPrefix = "SOONG_CONFIG_" // Soong confuguration if strings.HasPrefix(name, soongNsPrefix) { ctx.handleSoongNsAssignment(strings.TrimPrefix(name, soongNsPrefix), a) @@ -615,7 +622,7 @@ func (ctx *parseContext) handleSoongNsAssignment(name string, asgn *mkparser.Ass for _, ns := range strings.Fields(s) { ctx.addSoongNamespace(ns) ctx.receiver.newNode(&exprNode{&callExpr{ - name: addSoongNamespace, + name: soongConfigNamespaceOld, args: []starlarkExpr{&stringLiteralExpr{ns}}, returnType: starlarkTypeVoid, }}) @@ -665,8 +672,12 @@ func (ctx *parseContext) handleSoongNsAssignment(name string, asgn *mkparser.Ass ctx.errorf(asgn, "no %s variable in %s namespace, please use add_soong_config_var_value instead", varName, namespaceName) return } + fname := soongConfigVarSetOld + if asgn.Type == "+=" { + fname = soongConfigAppend + } ctx.receiver.newNode(&exprNode{&callExpr{ - name: addSoongConfigVarValue, + name: fname, args: []starlarkExpr{&stringLiteralExpr{namespaceName}, &stringLiteralExpr{varName}, val}, returnType: starlarkTypeVoid, }}) @@ -1277,6 +1288,10 @@ func (ctx *parseContext) parseReference(node mkparser.Node, ref *mkparser.MakeSt returnType: starlarkTypeUnknown, } } + if strings.HasPrefix(refDump, soongNsPrefix) { + // TODO (asmundak): if we find many, maybe handle them. + return ctx.newBadExpr(node, "SOONG_CONFIG_ variables cannot be referenced: %s", refDump) + } if v := ctx.addVariable(refDump); v != nil { return &variableRefExpr{v, ctx.lastAssignment(v.name()) != nil} } diff --git a/mk2rbc/mk2rbc_test.go b/mk2rbc/mk2rbc_test.go index fe1fa0813..fc4a4a733 100644 --- a/mk2rbc/mk2rbc_test.go +++ b/mk2rbc/mk2rbc_test.go @@ -681,6 +681,8 @@ $(info $(abspath foo/bar)) $(info $(notdir foo/bar)) $(call add_soong_config_namespace,snsconfig) $(call add_soong_config_var_value,snsconfig,imagetype,odm_image) +$(call soong_config_set, snsconfig, foo, foo_value) +$(call soong_config_append, snsconfig, bar, bar_value) PRODUCT_COPY_FILES := $(call copy-files,$(wildcard foo*.mk),etc) PRODUCT_COPY_FILES := $(call product-copy-files-by-pattern,from/%,to/%,a b c) `, @@ -700,8 +702,10 @@ def init(g, handle): rblf.mkinfo("product.mk", rblf.dir((_foobar).split()[-1])) rblf.mkinfo("product.mk", rblf.abspath("foo/bar")) rblf.mkinfo("product.mk", rblf.notdir("foo/bar")) - rblf.add_soong_config_namespace(g, "snsconfig") - rblf.add_soong_config_var_value(g, "snsconfig", "imagetype", "odm_image") + rblf.soong_config_namespace(g, "snsconfig") + rblf.soong_config_set(g, "snsconfig", "imagetype", "odm_image") + rblf.soong_config_set(g, "snsconfig", "foo", "foo_value") + rblf.soong_config_append(g, "snsconfig", "bar", "bar_value") cfg["PRODUCT_COPY_FILES"] = rblf.copy_files(rblf.expand_wildcard("foo*.mk"), "etc") cfg["PRODUCT_COPY_FILES"] = rblf.product_copy_files_by_pattern("from/%", "to/%", "a b c") `, @@ -784,17 +788,21 @@ def init(g, handle): in: ` SOONG_CONFIG_NAMESPACES += cvd SOONG_CONFIG_cvd += launch_configs -SOONG_CONFIG_cvd_launch_configs += cvd_config_auto.json +SOONG_CONFIG_cvd_launch_configs = cvd_config_auto.json SOONG_CONFIG_cvd += grub_config SOONG_CONFIG_cvd_grub_config += grub.cfg +x := $(SOONG_CONFIG_cvd_grub_config) `, expected: `load("//build/make/core:product_config.rbc", "rblf") def init(g, handle): cfg = rblf.cfg(handle) - rblf.add_soong_config_namespace(g, "cvd") - rblf.add_soong_config_var_value(g, "cvd", "launch_configs", "cvd_config_auto.json") - rblf.add_soong_config_var_value(g, "cvd", "grub_config", "grub.cfg") + rblf.soong_config_namespace(g, "cvd") + rblf.soong_config_set(g, "cvd", "launch_configs", "cvd_config_auto.json") + rblf.soong_config_append(g, "cvd", "grub_config", "grub.cfg") + # MK2RBC TRANSLATION ERROR: SOONG_CONFIG_ variables cannot be referenced: SOONG_CONFIG_cvd_grub_config + # x := $(SOONG_CONFIG_cvd_grub_config) + rblf.warning("product.mk", "partially successful conversion") `, }, {