Parse genrule's cmd property
Instead of just passing this to ninja, use os.Expand to parse the variable substitutions. While we're here, define a new "genDir" variable that is the root of this module's generated directory. Bug: 31742855 Test: Ensure invalid variables cause error Test: Inspect commands in build.ninja Change-Id: Iff6d0499ab57367669e73df52ab7c647358da13b
This commit is contained in:
@@ -15,6 +15,8 @@
|
|||||||
package genrule
|
package genrule
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"os"
|
||||||
|
|
||||||
"github.com/google/blueprint"
|
"github.com/google/blueprint"
|
||||||
|
|
||||||
"android/soong"
|
"android/soong"
|
||||||
@@ -52,6 +54,7 @@ type generatorProperties struct {
|
|||||||
// $in: one or more input files
|
// $in: one or more input files
|
||||||
// $out: a single output file
|
// $out: a single output file
|
||||||
// $srcDir: the root directory of the source tree
|
// $srcDir: the root directory of the source tree
|
||||||
|
// $genDir: the sandbox directory for this tool; contains $out
|
||||||
// The host bin directory will be in the path
|
// The host bin directory will be in the path
|
||||||
Cmd string
|
Cmd string
|
||||||
|
|
||||||
@@ -109,8 +112,30 @@ func (g *generator) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
g.genPath = android.PathForModuleGen(ctx, "")
|
||||||
|
|
||||||
|
cmd := os.Expand(g.properties.Cmd, func(name string) string {
|
||||||
|
switch name {
|
||||||
|
case "$":
|
||||||
|
return "$$"
|
||||||
|
case "tool":
|
||||||
|
return "${tool}"
|
||||||
|
case "in":
|
||||||
|
return "${in}"
|
||||||
|
case "out":
|
||||||
|
return "${out}"
|
||||||
|
case "srcDir":
|
||||||
|
return "${srcDir}"
|
||||||
|
case "genDir":
|
||||||
|
return g.genPath.String()
|
||||||
|
default:
|
||||||
|
ctx.PropertyErrorf("cmd", "unknown variable '%s'", name)
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
})
|
||||||
|
|
||||||
g.rule = ctx.Rule(pctx, "generator", blueprint.RuleParams{
|
g.rule = ctx.Rule(pctx, "generator", blueprint.RuleParams{
|
||||||
Command: "PATH=$$PATH:$hostBin " + g.properties.Cmd,
|
Command: "PATH=$$PATH:$hostBin " + cmd,
|
||||||
}, "tool")
|
}, "tool")
|
||||||
|
|
||||||
var tool string
|
var tool string
|
||||||
@@ -134,8 +159,6 @@ func (g *generator) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
g.genPath = android.PathForModuleGen(ctx, "")
|
|
||||||
|
|
||||||
for _, task := range g.tasks(ctx) {
|
for _, task := range g.tasks(ctx) {
|
||||||
g.generateSourceFile(ctx, task, tool)
|
g.generateSourceFile(ctx, task, tool)
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user