From 98cb85624c44e2e6b31f55ea18e9f87163a7b788 Mon Sep 17 00:00:00 2001 From: Spandan Das Date: Thu, 9 Mar 2023 23:05:47 +0000 Subject: [PATCH] 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 --- cmd/soong_build/main.go | 25 +++++++++++++++++++++++-- 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) }