diff --git a/android/rule_builder.go b/android/rule_builder.go index 85e29bd20..8b03124bf 100644 --- a/android/rule_builder.go +++ b/android/rule_builder.go @@ -58,6 +58,7 @@ type RuleBuilder struct { sboxInputs bool sboxManifestPath WritablePath missingDeps []string + args map[string]string } // NewRuleBuilder returns a newly created RuleBuilder. @@ -78,6 +79,17 @@ func (rb *RuleBuilder) SetSboxOutDirDirAsEmpty() *RuleBuilder { return rb } +// Set the phony_output argument. +// This causes the output files to be ignored. +// If the output isn't created, it's not treated as an error. +// The build rule is run every time whether or not the output is created. +func (rb *RuleBuilder) SetPhonyOutput() { + if rb.args == nil { + rb.args = make(map[string]string) + } + rb.args["phony_output"] = "true" +} + // RuleBuilderInstall is a tuple of install from and to locations. type RuleBuilderInstall struct { From Path @@ -726,6 +738,12 @@ func (r *RuleBuilder) build(name string, desc string, ninjaEscapeCommandString b commandString = proptools.NinjaEscape(commandString) } + args_vars := make([]string, len(r.args)) + i := 0 + for k, _ := range r.args { + args_vars[i] = k + i++ + } r.ctx.Build(r.pctx, BuildParams{ Rule: r.ctx.Rule(r.pctx, name, blueprint.RuleParams{ Command: commandString, @@ -734,7 +752,7 @@ func (r *RuleBuilder) build(name string, desc string, ninjaEscapeCommandString b Rspfile: proptools.NinjaEscape(rspFile), RspfileContent: rspFileContent, Pool: pool, - }), + }, args_vars...), Inputs: rspFileInputs, Implicits: inputs, OrderOnly: r.OrderOnlys(), @@ -744,6 +762,7 @@ func (r *RuleBuilder) build(name string, desc string, ninjaEscapeCommandString b Depfile: depFile, Deps: depFormat, Description: desc, + Args: r.args, }) }