Better Soong config namespace support.
Old macros (`add_soong_config/namespace` & `add_soong_config_var_value`) are going away, to be replaced with `soong_config_set`. A new macro, `soong_config_append` is added to append to the existing value. Also, flag the attempts to reference the values of the variables in the Soong config namespace. Bug: 200297238 Test: internal Change-Id: Idb6a31632db75d7faef038b83e6a86d9dcf1e736
This commit is contained in:
@@ -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}
|
||||
}
|
||||
|
@@ -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")
|
||||
`,
|
||||
},
|
||||
{
|
||||
|
Reference in New Issue
Block a user