Enforce that output files are created in primary ninja execution

Missing output files in ninja execution will be treated as errors.
Products can bypass this using the newly introduced
BUILD_BROKEN_MISSING_OUTPUTS flag.

Test: m nothing # verified missingoutfile appears in out/soong.log
Test: checkbuild passes on presubmits

Change-Id: I4eebcd08aa57fc6ccf1688c32e0d1fe06d66ab9a
This commit is contained in:
Spandan Das
2024-06-24 17:38:27 +00:00
parent d6352efd1a
commit 8d8253f525
3 changed files with 26 additions and 3 deletions

View File

@@ -98,9 +98,10 @@ type configImpl struct {
// Autodetected
totalRAM uint64
brokenDupRules bool
brokenUsesNetwork bool
brokenNinjaEnvVars []string
brokenDupRules bool
brokenUsesNetwork bool
brokenNinjaEnvVars []string
brokenMissingOutputs bool
pathReplaced bool
@@ -1591,6 +1592,14 @@ func (c *configImpl) BuildBrokenNinjaUsesEnvVars() []string {
return c.brokenNinjaEnvVars
}
func (c *configImpl) SetBuildBrokenMissingOutputs(val bool) {
c.brokenMissingOutputs = val
}
func (c *configImpl) BuildBrokenMissingOutputs() bool {
return c.brokenMissingOutputs
}
func (c *configImpl) SetTargetDeviceDir(dir string) {
c.targetDeviceDir = dir
}

View File

@@ -235,6 +235,11 @@ func runMakeProductConfig(ctx Context, config Config) {
"BUILD_BROKEN_SRC_DIR_IS_WRITABLE",
"BUILD_BROKEN_SRC_DIR_RW_ALLOWLIST",
// Whether missing outputs should be treated as warnings
// instead of errors.
// `true` will relegate missing outputs to warnings.
"BUILD_BROKEN_MISSING_OUTPUTS",
// Not used, but useful to be in the soong.log
"TARGET_BUILD_TYPE",
"HOST_ARCH",
@@ -301,4 +306,5 @@ func runMakeProductConfig(ctx Context, config Config) {
config.SetBuildBrokenUsesNetwork(makeVars["BUILD_BROKEN_USES_NETWORK"] == "true")
config.SetBuildBrokenNinjaUsesEnvVars(strings.Fields(makeVars["BUILD_BROKEN_NINJA_USES_ENV_VARS"]))
config.SetSourceRootDirs(strings.Fields(makeVars["PRODUCT_SOURCE_ROOT_DIRS"]))
config.SetBuildBrokenMissingOutputs(makeVars["BUILD_BROKEN_MISSING_OUTPUTS"] == "true")
}

View File

@@ -77,6 +77,14 @@ func runNinjaForBuild(ctx Context, config Config) {
"-w", "dupbuild=err",
"-w", "missingdepfile=err")
if !config.BuildBrokenMissingOutputs() {
// Missing outputs will be treated as errors.
// BUILD_BROKEN_MISSING_OUTPUTS can be used to bypass this check.
args = append(args,
"-w", "missingoutfile=err",
)
}
cmd := Command(ctx, config, "ninja", executable, args...)
// Set up the nsjail sandbox Ninja runs in.