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
This commit is contained in:
Devin Moore
2024-07-15 22:31:24 +00:00
parent 5ab1eb8822
commit b6cc64ffc4

View File

@@ -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,
})
}