Create Bazel symlink forest in a separate process.

This helps with incrementality a lot: the symlink forest must depend on
almost every directory in the source tree so that if a new file is added
or removed from *anywhere*, it is regenerated.

Previously, we couldn't do this without invoking bp2build, which is
quite wasteful because bp2build takes way more time than the symlink
forest creation, even though we do the latter in a very suboptimal way
at the moment.

This means that if a source file is added or removed (which does not
affect globs), we don't pay the cost of bp2build anymore.

Also refactored symlink_forest.go on the side. Too much state was being
passed around in arguments.

This change reimplements aosp/2263423 ; the semantics of not touching an
output file is the exact same as order-only inputs and the latter is a
bit fewer lines of code.

Test: Presubmits.
Change-Id: I565c580df8a01bacf175d56747c3f50743d4a4d4
This commit is contained in:
Lukacs T. Berki
2022-10-26 07:26:50 +00:00
parent ffd5b97267
commit c541cd27fa
8 changed files with 245 additions and 106 deletions

View File

@@ -69,6 +69,7 @@ func AddNeverAllowRules(rules ...Rule) {
func createBp2BuildRule() Rule {
return NeverAllow().
With("bazel_module.bp2build_available", "true").
NotIn("soong_tests"). // only used in tests
Because("setting bp2build_available in Android.bp is not " +
"supported for custom conversion, use allowlists.go instead.")
}