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
diff --git a/android/neverallow.go b/android/neverallow.go
index cf149b2..d288439 100644
--- a/android/neverallow.go
+++ b/android/neverallow.go
@@ -69,6 +69,7 @@
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.")
}