Avoid rewriting soong_build outputs if unchanged

This changes bp2build codegen, symlink forest generation, and
soong_build so that they do not rewrite output files if the contents are
unchanged.

Bug: 266983462
Test: m droid
Test: canonical_perf.sh benchmarking
Test: Manually verified that rerunning analysis did not regenerate
out/soong/workspace/prebuilts/sdk/BUILD.bazel unless contents changed

Change-Id: I5ec227df7a32b53c7fa0d741fb1403a51931024b
This commit is contained in:
Chris Parsons
2023-02-06 22:37:41 -05:00
parent 871109e91d
commit 1a12d03230
2 changed files with 10 additions and 19 deletions

View File

@@ -25,6 +25,7 @@ import (
"sync/atomic"
"android/soong/shared"
"github.com/google/blueprint/pathtools"
)
// A tree structure that describes what to do at each directory in the created
@@ -116,25 +117,13 @@ func mergeBuildFiles(output string, srcBuildFile string, generatedBuildFile stri
generatedBuildFileContent = packageDefaultVisibilityRegex.ReplaceAll(generatedBuildFileContent, []byte{})
}
outFile, err := os.Create(output)
if err != nil {
return err
newContents := generatedBuildFileContent
if newContents[len(newContents)-1] != '\n' {
newContents = append(newContents, '\n')
}
newContents = append(newContents, srcBuildFileContent...)
_, err = outFile.Write(generatedBuildFileContent)
if err != nil {
return err
}
if generatedBuildFileContent[len(generatedBuildFileContent)-1] != '\n' {
_, err = outFile.WriteString("\n")
if err != nil {
return err
}
}
_, err = outFile.Write(srcBuildFileContent)
return err
return pathtools.WriteFileIfChanged(output, newContents, 0666)
}
// Calls readdir() and returns it as a map from the basename of the files in dir