Loading mk2rbc/mk2rbc.go +9 −7 Original line number Diff line number Diff line Loading @@ -93,6 +93,7 @@ var knownFunctions = map[string]struct { "is-vendor-board-platform": {"!is-vendor-board-platform", starlarkTypeBool}, callLoadAlways: {"!inherit-product", starlarkTypeVoid}, callLoadIf: {"!inherit-product-if-exists", starlarkTypeVoid}, "patsubst": {baseName + ".mkpatsubst", starlarkTypeString}, "produce_copy_files": {baseName + ".produce_copy_files", starlarkTypeList}, "require-artifacts-in-path": {baseName + ".require_artifacts_in_path", starlarkTypeVoid}, "require-artifacts-in-path-relaxed": {baseName + ".require_artifacts_in_path_relaxed", starlarkTypeVoid}, Loading Loading @@ -1079,8 +1080,8 @@ func (ctx *parseContext) parseReference(node mkparser.Node, ref *mkparser.MakeSt switch expr.name { case "word": return ctx.parseWordFunc(node, args) case "subst": return ctx.parseSubstFunc(node, args) case "subst", "patsubst": return ctx.parseSubstFunc(node, expr.name, args) default: for _, arg := range args.Split(",") { arg.TrimLeftSpaces() Loading @@ -1095,13 +1096,13 @@ func (ctx *parseContext) parseReference(node mkparser.Node, ref *mkparser.MakeSt return expr } func (ctx *parseContext) parseSubstFunc(node mkparser.Node, args *mkparser.MakeString) starlarkExpr { func (ctx *parseContext) parseSubstFunc(node mkparser.Node, fname string, args *mkparser.MakeString) starlarkExpr { words := args.Split(",") if len(words) != 3 { return ctx.newBadExpr(node, "subst function should have 3 arguments") return ctx.newBadExpr(node, "%s function should have 3 arguments", fname) } if !words[0].Const() || !words[1].Const() { return ctx.newBadExpr(node, "subst function's from and to arguments should be constant") return ctx.newBadExpr(node, "%s function's from and to arguments should be constant", fname) } from := words[0].Strings[0] to := words[1].Strings[0] Loading @@ -1109,7 +1110,8 @@ func (ctx *parseContext) parseSubstFunc(node mkparser.Node, args *mkparser.MakeS words[2].TrimRightSpaces() obj := ctx.parseMakeString(node, words[2]) typ := obj.typ() if typ == starlarkTypeString { if typ == starlarkTypeString && fname == "subst" { // Optimization: if it's $(subst from, to, string), emit string.replace(from, to) return &callExpr{ object: obj, name: "replace", Loading @@ -1118,7 +1120,7 @@ func (ctx *parseContext) parseSubstFunc(node mkparser.Node, args *mkparser.MakeS } } return &callExpr{ name: "subst", name: fname, args: []starlarkExpr{&stringLiteralExpr{from}, &stringLiteralExpr{to}, obj}, returnType: obj.typ(), } Loading mk2rbc/mk2rbc_test.go +2 −0 Original line number Diff line number Diff line Loading @@ -628,6 +628,7 @@ def init(g, handle): PRODUCT_COPY_FILES := $(addprefix pfx-,a b c) PRODUCT_COPY_FILES := $(addsuffix .sff, a b c) PRODUCT_NAME := $(word 1, $(subst ., ,$(TARGET_BOARD_PLATFORM))) $(info $(patsubst %.pub,%,$(PRODUCT_ADB_KEYS))) `, expected: `load("//build/make/core:product_config.rbc", "rblf") Loading @@ -637,6 +638,7 @@ def init(g, handle): cfg["PRODUCT_COPY_FILES"] = rblf.addprefix("pfx-", "a b c") cfg["PRODUCT_COPY_FILES"] = rblf.addsuffix(".sff", "a b c") cfg["PRODUCT_NAME"] = ((g.get("TARGET_BOARD_PLATFORM", "")).replace(".", " ")).split()[0] rblf.mkinfo("product.mk", rblf.mkpatsubst("%.pub", "%", g.get("PRODUCT_ADB_KEYS", ""))) `, }, { Loading Loading
mk2rbc/mk2rbc.go +9 −7 Original line number Diff line number Diff line Loading @@ -93,6 +93,7 @@ var knownFunctions = map[string]struct { "is-vendor-board-platform": {"!is-vendor-board-platform", starlarkTypeBool}, callLoadAlways: {"!inherit-product", starlarkTypeVoid}, callLoadIf: {"!inherit-product-if-exists", starlarkTypeVoid}, "patsubst": {baseName + ".mkpatsubst", starlarkTypeString}, "produce_copy_files": {baseName + ".produce_copy_files", starlarkTypeList}, "require-artifacts-in-path": {baseName + ".require_artifacts_in_path", starlarkTypeVoid}, "require-artifacts-in-path-relaxed": {baseName + ".require_artifacts_in_path_relaxed", starlarkTypeVoid}, Loading Loading @@ -1079,8 +1080,8 @@ func (ctx *parseContext) parseReference(node mkparser.Node, ref *mkparser.MakeSt switch expr.name { case "word": return ctx.parseWordFunc(node, args) case "subst": return ctx.parseSubstFunc(node, args) case "subst", "patsubst": return ctx.parseSubstFunc(node, expr.name, args) default: for _, arg := range args.Split(",") { arg.TrimLeftSpaces() Loading @@ -1095,13 +1096,13 @@ func (ctx *parseContext) parseReference(node mkparser.Node, ref *mkparser.MakeSt return expr } func (ctx *parseContext) parseSubstFunc(node mkparser.Node, args *mkparser.MakeString) starlarkExpr { func (ctx *parseContext) parseSubstFunc(node mkparser.Node, fname string, args *mkparser.MakeString) starlarkExpr { words := args.Split(",") if len(words) != 3 { return ctx.newBadExpr(node, "subst function should have 3 arguments") return ctx.newBadExpr(node, "%s function should have 3 arguments", fname) } if !words[0].Const() || !words[1].Const() { return ctx.newBadExpr(node, "subst function's from and to arguments should be constant") return ctx.newBadExpr(node, "%s function's from and to arguments should be constant", fname) } from := words[0].Strings[0] to := words[1].Strings[0] Loading @@ -1109,7 +1110,8 @@ func (ctx *parseContext) parseSubstFunc(node mkparser.Node, args *mkparser.MakeS words[2].TrimRightSpaces() obj := ctx.parseMakeString(node, words[2]) typ := obj.typ() if typ == starlarkTypeString { if typ == starlarkTypeString && fname == "subst" { // Optimization: if it's $(subst from, to, string), emit string.replace(from, to) return &callExpr{ object: obj, name: "replace", Loading @@ -1118,7 +1120,7 @@ func (ctx *parseContext) parseSubstFunc(node mkparser.Node, args *mkparser.MakeS } } return &callExpr{ name: "subst", name: fname, args: []starlarkExpr{&stringLiteralExpr{from}, &stringLiteralExpr{to}, obj}, returnType: obj.typ(), } Loading
mk2rbc/mk2rbc_test.go +2 −0 Original line number Diff line number Diff line Loading @@ -628,6 +628,7 @@ def init(g, handle): PRODUCT_COPY_FILES := $(addprefix pfx-,a b c) PRODUCT_COPY_FILES := $(addsuffix .sff, a b c) PRODUCT_NAME := $(word 1, $(subst ., ,$(TARGET_BOARD_PLATFORM))) $(info $(patsubst %.pub,%,$(PRODUCT_ADB_KEYS))) `, expected: `load("//build/make/core:product_config.rbc", "rblf") Loading @@ -637,6 +638,7 @@ def init(g, handle): cfg["PRODUCT_COPY_FILES"] = rblf.addprefix("pfx-", "a b c") cfg["PRODUCT_COPY_FILES"] = rblf.addsuffix(".sff", "a b c") cfg["PRODUCT_NAME"] = ((g.get("TARGET_BOARD_PLATFORM", "")).replace(".", " ")).split()[0] rblf.mkinfo("product.mk", rblf.mkpatsubst("%.pub", "%", g.get("PRODUCT_ADB_KEYS", ""))) `, }, { Loading