Merge "Create a ninja.environment file" am: 732592c151

Original change: https://android-review.googlesource.com/c/platform/build/soong/+/2460214

Change-Id: I5462a79eee0e6ef9961db3ffe48fae3e4e4c2321
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Treehugger Robot
2023-03-01 03:59:42 +00:00
committed by Automerger Merge Worker

View File

@@ -23,10 +23,16 @@ import (
"strings"
"time"
"android/soong/shared"
"android/soong/ui/metrics"
"android/soong/ui/status"
)
const (
// File containing the environment state when ninja is executed
ninjaEnvFileName = "ninja.environment"
)
// Constructs and runs the Ninja command line with a restricted set of
// environment variables. It's important to restrict the environment Ninja runs
// for hermeticity reasons, and to avoid spurious rebuilds.
@@ -186,6 +192,21 @@ func runNinjaForBuild(ctx Context, config Config) {
ctx.Verbosef(" %s", envVar)
}
// Write the env vars available during ninja execution to a file
ninjaEnvVars := cmd.Environment.AsMap()
data, err := shared.EnvFileContents(ninjaEnvVars)
if err != nil {
ctx.Panicf("Could not parse environment variables for ninja run %s", err)
}
// Write the file in every single run. This is fine because
// 1. It is not a dep of Soong analysis, so will not retrigger Soong analysis.
// 2. Is is fairly lightweight (~1Kb)
ninjaEnvVarsFile := shared.JoinPath(config.SoongOutDir(), ninjaEnvFileName)
err = os.WriteFile(ninjaEnvVarsFile, data, 0666)
if err != nil {
ctx.Panicf("Could not write ninja environment file %s", err)
}
// Poll the Ninja log for updates regularly based on the heartbeat
// frequency. If it isn't updated enough, then we want to surface the
// possibility that Ninja is stuck, to the user.