Stop LOG_DIR changes causing bp2build to rerun
Retrieving an environment var through Config.Getenv() automatically adds it to a soong.environment.used* file along with its current value. Changes to its current value will trigger a rebuild of the appropriate target. The LOG_DIR is a sub directory of DIST_DIR and on build servers DIST_DIR encodes the build number making it unique every time. So, using Config.Getenv("LOG_DIR") will mean the CI builds will never re-use the previous output. Previously, bp2build and symlink forrest both added LOG_DIR to their respective soong.environment.used* file. This change avoids that by passing through the value from the main() function which retrieves it using availableEnv["LOG_DIR"] which avoids it being added to that file. Bug: 257590265 Test: grep LOG_DIR out/soong/soong.environment.used* # Before this change it includes LOG_DIR, after it does not. Change-Id: Iac76aca2d5dc04f47b0924ab5afedef5014bc8b6
This commit is contained in:
@@ -347,14 +347,14 @@ func writeDepFile(outputFile string, eventHandler *metrics.EventHandler, ninjaDe
|
||||
// doChosenActivity runs Soong for a specific activity, like bp2build, queryview
|
||||
// or the actual Soong build for the build.ninja file. Returns the top level
|
||||
// output file of the specific activity.
|
||||
func doChosenActivity(ctx *android.Context, configuration android.Config, extraNinjaDeps []string) string {
|
||||
func doChosenActivity(ctx *android.Context, configuration android.Config, extraNinjaDeps []string, metricsDir string) string {
|
||||
if configuration.BuildMode == android.SymlinkForest {
|
||||
runSymlinkForestCreation(configuration, extraNinjaDeps)
|
||||
runSymlinkForestCreation(configuration, extraNinjaDeps, metricsDir)
|
||||
return symlinkForestMarker
|
||||
} else if configuration.BuildMode == android.Bp2build {
|
||||
// Run the alternate pipeline of bp2build mutators and singleton to convert
|
||||
// Blueprint to BUILD files before everything else.
|
||||
runBp2Build(configuration, extraNinjaDeps)
|
||||
runBp2Build(configuration, extraNinjaDeps, metricsDir)
|
||||
return bp2buildMarker
|
||||
} else if configuration.IsMixedBuildsEnabled() {
|
||||
runMixedModeBuild(configuration, ctx, extraNinjaDeps)
|
||||
@@ -465,7 +465,7 @@ func main() {
|
||||
ctx := newContext(configuration)
|
||||
ctx.EventHandler.Begin("soong_build")
|
||||
|
||||
finalOutputFile := doChosenActivity(ctx, configuration, extraNinjaDeps)
|
||||
finalOutputFile := doChosenActivity(ctx, configuration, extraNinjaDeps, logDir)
|
||||
|
||||
ctx.EventHandler.End("soong_build")
|
||||
writeMetrics(configuration, ctx.EventHandler, logDir)
|
||||
@@ -614,7 +614,7 @@ func bazelArtifacts() []string {
|
||||
// Ideally, bp2build would write a file that contains instructions to the
|
||||
// symlink tree creation binary. Then the latter would not need to depend on
|
||||
// the very heavy-weight machinery of soong_build .
|
||||
func runSymlinkForestCreation(configuration android.Config, extraNinjaDeps []string) {
|
||||
func runSymlinkForestCreation(configuration android.Config, extraNinjaDeps []string, metricsDir string) {
|
||||
eventHandler := &metrics.EventHandler{}
|
||||
|
||||
var ninjaDeps []string
|
||||
@@ -651,7 +651,6 @@ func runSymlinkForestCreation(configuration android.Config, extraNinjaDeps []str
|
||||
|
||||
writeDepFile(symlinkForestMarker, eventHandler, ninjaDeps)
|
||||
touch(shared.JoinPath(topDir, symlinkForestMarker))
|
||||
metricsDir := configuration.Getenv("LOG_DIR")
|
||||
codegenMetrics := bp2build.ReadCodegenMetrics(metricsDir)
|
||||
if codegenMetrics == nil {
|
||||
m := bp2build.CreateCodegenMetrics()
|
||||
@@ -660,13 +659,13 @@ func runSymlinkForestCreation(configuration android.Config, extraNinjaDeps []str
|
||||
//TODO (usta) we cannot determine if we loaded a stale file, i.e. from an unrelated prior
|
||||
//invocation of codegen. We should simply use a separate .pb file
|
||||
}
|
||||
writeBp2BuildMetrics(codegenMetrics, configuration, eventHandler)
|
||||
writeBp2BuildMetrics(codegenMetrics, eventHandler, metricsDir)
|
||||
}
|
||||
|
||||
// Run Soong in the bp2build mode. This creates a standalone context that registers
|
||||
// an alternate pipeline of mutators and singletons specifically for generating
|
||||
// Bazel BUILD files instead of Ninja files.
|
||||
func runBp2Build(configuration android.Config, extraNinjaDeps []string) {
|
||||
func runBp2Build(configuration android.Config, extraNinjaDeps []string, metricsDir string) {
|
||||
var codegenMetrics *bp2build.CodegenMetrics
|
||||
eventHandler := &metrics.EventHandler{}
|
||||
eventHandler.Do("bp2build", func() {
|
||||
@@ -716,12 +715,11 @@ func runBp2Build(configuration android.Config, extraNinjaDeps []string) {
|
||||
if configuration.IsEnvTrue("BP2BUILD_VERBOSE") {
|
||||
codegenMetrics.Print()
|
||||
}
|
||||
writeBp2BuildMetrics(codegenMetrics, configuration, eventHandler)
|
||||
writeBp2BuildMetrics(codegenMetrics, eventHandler, metricsDir)
|
||||
}
|
||||
|
||||
// Write Bp2Build metrics into $LOG_DIR
|
||||
func writeBp2BuildMetrics(codegenMetrics *bp2build.CodegenMetrics,
|
||||
configuration android.Config, eventHandler *metrics.EventHandler) {
|
||||
func writeBp2BuildMetrics(codegenMetrics *bp2build.CodegenMetrics, eventHandler *metrics.EventHandler, metricsDir string) {
|
||||
for _, event := range eventHandler.CompletedEvents() {
|
||||
codegenMetrics.AddEvent(&bp2build_metrics_proto.Event{
|
||||
Name: event.Id,
|
||||
@@ -729,7 +727,6 @@ func writeBp2BuildMetrics(codegenMetrics *bp2build.CodegenMetrics,
|
||||
RealTime: event.RuntimeNanoseconds(),
|
||||
})
|
||||
}
|
||||
metricsDir := configuration.Getenv("LOG_DIR")
|
||||
if len(metricsDir) < 1 {
|
||||
fmt.Fprintf(os.Stderr, "\nMissing required env var for generating bp2build metrics: LOG_DIR\n")
|
||||
os.Exit(1)
|
||||
|
Reference in New Issue
Block a user