diff options
author | 2023-03-09 23:05:47 +0000 | |
---|---|---|
committer | 2023-03-09 23:15:34 +0000 | |
commit | 98cb85624c44e2e6b31f55ea18e9f87163a7b788 (patch) | |
tree | 16a37b4e6bc6577689043e246192f643f212f404 | |
parent | bd52ea9ecf61a71b3b32f56c6e14adb48ad8ffb8 (diff) |
Generate a BUILD file for every Android.bp file in api_bp2build
workspace.
This is necessary to solve bazel package boundary issues where the api
file might exist in a different directory
Test: m api_bp2build && build/bazel/bin/bazel build --config=android
--config=api_bp2build //build/orchestrator/apis:system
Test: multitree_build system/nothing (in multitree)
Change-Id: Id64085d65a1943bdb394ea80c875db96ca373839
-rw-r--r-- | cmd/soong_build/main.go | 25 | ||||
-rw-r--r-- | cmd/soong_build/queryview.go | 4 |
2 files changed, 25 insertions, 4 deletions
diff --git a/cmd/soong_build/main.go b/cmd/soong_build/main.go index 5c187f6cf..9b5116022 100644 --- a/cmd/soong_build/main.go +++ b/cmd/soong_build/main.go @@ -136,7 +136,7 @@ func runQueryView(queryviewDir, queryviewMarker string, ctx *android.Context) { ctx.EventHandler.Begin("queryview") defer ctx.EventHandler.End("queryview") codegenContext := bp2build.NewCodegenContext(ctx.Config(), ctx, bp2build.QueryView, topDir) - err := createBazelWorkspace(codegenContext, shared.JoinPath(topDir, queryviewDir)) + err := createBazelWorkspace(codegenContext, shared.JoinPath(topDir, queryviewDir), false) maybeQuit(err, "") touch(shared.JoinPath(topDir, queryviewMarker)) } @@ -174,7 +174,28 @@ func runApiBp2build(ctx *android.Context, extraNinjaDeps []string) string { // Run codegen to generate BUILD files codegenContext := bp2build.NewCodegenContext(ctx.Config(), ctx, bp2build.ApiBp2build, topDir) absoluteApiBp2buildDir := shared.JoinPath(topDir, cmdlineArgs.BazelApiBp2buildDir) - err := createBazelWorkspace(codegenContext, absoluteApiBp2buildDir) + // Always generate bp2build_all_srcs filegroups in api_bp2build. + // This is necessary to force each Android.bp file to create an equivalent BUILD file + // and prevent package boundray issues. + // e.g. + // Source + // f/b/Android.bp + // java_library{ + // name: "foo", + // api: "api/current.txt", + // } + // + // f/b/api/Android.bp <- will cause package boundary issues + // + // Gen + // f/b/BUILD + // java_contribution{ + // name: "foo.contribution", + // api: "//f/b/api:current.txt", + // } + // + // If we don't generate f/b/api/BUILD, foo.contribution will be unbuildable. + err := createBazelWorkspace(codegenContext, absoluteApiBp2buildDir, true) maybeQuit(err, "") ninjaDeps = append(ninjaDeps, codegenContext.AdditionalNinjaDeps()...) diff --git a/cmd/soong_build/queryview.go b/cmd/soong_build/queryview.go index 35ae009bf..ce3218498 100644 --- a/cmd/soong_build/queryview.go +++ b/cmd/soong_build/queryview.go @@ -25,11 +25,11 @@ import ( ) // A helper function to generate a Read-only Bazel workspace in outDir -func createBazelWorkspace(ctx *bp2build.CodegenContext, outDir string) error { +func createBazelWorkspace(ctx *bp2build.CodegenContext, outDir string, generateFilegroups bool) error { os.RemoveAll(outDir) ruleShims := bp2build.CreateRuleShims(android.ModuleTypeFactories()) - res, err := bp2build.GenerateBazelTargets(ctx, false) + res, err := bp2build.GenerateBazelTargets(ctx, generateFilegroups) if err != nil { panic(err) } |