From b6cc64ffc426b1cfd1a6dd99997e9906725ce261 Mon Sep 17 00:00:00 2001 From: Devin Moore Date: Mon, 15 Jul 2024 22:31:24 +0000 Subject: [PATCH] Support phony_output as a BuildParam Arg in RuleBuilder This allows a build rule to set the phony_output argument to ninja. It's used to get ninja to ignore output files similar to .PHONY for make. It will cause the build rule to be run every time regardless of if or when the output file was created. Test: m android.hardware.bluetooth.audio-update-api && git restore bluetooth/audio/aidl/aidl_api/* && m android.hardware.bluetooth.audio-update-api Bug: 353287999 Change-Id: I47b0b9e3ce2d8cb637b0102031193c81de24a680 --- android/rule_builder.go | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) 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, }) }