diff --git a/android/bazel.go b/android/bazel.go index 37e9219a4..e764b1864 100644 --- a/android/bazel.go +++ b/android/bazel.go @@ -510,12 +510,6 @@ func (b *BazelModuleBase) shouldConvertWithBp2build(ctx shouldConvertModuleConte } module := p.module - // In api_bp2build mode, all soong modules that can provide API contributions should be converted - // This is irrespective of its presence/absence in bp2build allowlists - if ctx.Config().BuildMode == ApiBp2build { - _, providesApis := module.(ApiProvider) - return providesApis - } propValue := b.bazelProperties.Bazel_module.Bp2build_available packagePath := moduleDirWithPossibleOverride(ctx, module, p.moduleDir) diff --git a/android/config.go b/android/config.go index 01c39f09a..645a263cb 100644 --- a/android/config.go +++ b/android/config.go @@ -87,7 +87,6 @@ type CmdArgs struct { SymlinkForestMarker string Bp2buildMarker string BazelQueryViewDir string - BazelApiBp2buildDir string ModuleGraphFile string ModuleActionsFile string DocFile string @@ -121,9 +120,6 @@ const ( // express build semantics. GenerateQueryView - // Generate BUILD files for API contributions to API surfaces - ApiBp2build - // Create a JSON representation of the module graph and exit. GenerateModuleGraph @@ -641,7 +637,6 @@ func NewConfig(cmdArgs CmdArgs, availableEnv map[string]string) (Config, error) setBuildMode(cmdArgs.SymlinkForestMarker, SymlinkForest) setBuildMode(cmdArgs.Bp2buildMarker, Bp2build) setBuildMode(cmdArgs.BazelQueryViewDir, GenerateQueryView) - setBuildMode(cmdArgs.BazelApiBp2buildDir, ApiBp2build) setBuildMode(cmdArgs.ModuleGraphFile, GenerateModuleGraph) setBuildMode(cmdArgs.DocFile, GenerateDocFile) setBazelMode(cmdArgs.BazelMode, "--bazel-mode", BazelProdMode) diff --git a/android/register.go b/android/register.go index 64b0207e7..df97c75e4 100644 --- a/android/register.go +++ b/android/register.go @@ -197,13 +197,6 @@ func (ctx *Context) RegisterForBazelConversion() { RegisterMutatorsForBazelConversion(ctx, bp2buildPreArchMutators) } -// RegisterForApiBazelConversion is similar to RegisterForBazelConversion except that -// it only generates API targets in the generated workspace -func (ctx *Context) RegisterForApiBazelConversion() { - registerModuleTypes(ctx) - RegisterMutatorsForApiBazelConversion(ctx, bp2buildPreArchMutators) -} - // Register the pipeline of singletons, module types, and mutators for // generating build.ninja and other files for Kati, from Android.bp files. func (ctx *Context) Register() { diff --git a/android/testing.go b/android/testing.go index 5ad7ad07f..32357db80 100644 --- a/android/testing.go +++ b/android/testing.go @@ -467,12 +467,6 @@ func (ctx *TestContext) RegisterForBazelConversion() { RegisterMutatorsForBazelConversion(ctx.Context, ctx.bp2buildPreArch) } -// RegisterForApiBazelConversion prepares a test context for API bp2build conversion. -func (ctx *TestContext) RegisterForApiBazelConversion() { - ctx.config.BuildMode = ApiBp2build - RegisterMutatorsForApiBazelConversion(ctx.Context, ctx.bp2buildPreArch) -} - func (ctx *TestContext) ParseFileList(rootDir string, filePaths []string) (deps []string, errs []error) { // This function adapts the old style ParseFileList calls that are spread throughout the tests // to the new style that takes a config. diff --git a/bp2build/Android.bp b/bp2build/Android.bp index 6b50a2e24..b675e5e28 100644 --- a/bp2build/Android.bp +++ b/bp2build/Android.bp @@ -62,7 +62,6 @@ bootstrap_go_package { "cc_test_conversion_test.go", "cc_yasm_conversion_test.go", "conversion_test.go", - "droidstubs_conversion_test.go", "filegroup_conversion_test.go", "genrule_conversion_test.go", "gensrcs_conversion_test.go", diff --git a/bp2build/build_conversion.go b/bp2build/build_conversion.go index cd1bc7f19..906036330 100644 --- a/bp2build/build_conversion.go +++ b/bp2build/build_conversion.go @@ -175,9 +175,6 @@ const ( // This mode is used for discovering and introspecting the existing Soong // module graph. QueryView - - // ApiBp2build - generate BUILD files for API contribution targets - ApiBp2build ) type unconvertedDepsMode int @@ -196,8 +193,6 @@ func (mode CodegenMode) String() string { return "Bp2Build" case QueryView: return "QueryView" - case ApiBp2build: - return "ApiBp2build" default: return fmt.Sprintf("%d", mode) } @@ -774,10 +769,6 @@ func GenerateBazelTargets(ctx *CodegenContext, generateFilegroups bool) (convers errs = append(errs, err) } targets = append(targets, t) - case ApiBp2build: - if aModule, ok := m.(android.Module); ok && aModule.IsConvertedByBp2build() { - targets, errs = generateBazelTargets(bpCtx, aModule) - } default: errs = append(errs, fmt.Errorf("Unknown code-generation mode: %s", ctx.Mode())) return diff --git a/bp2build/build_conversion_test.go b/bp2build/build_conversion_test.go index 8ee0439c0..3887c5da9 100644 --- a/bp2build/build_conversion_test.go +++ b/bp2build/build_conversion_test.go @@ -1879,30 +1879,6 @@ filegroup { }) } -func TestGenerateApiBazelTargets(t *testing.T) { - bp := ` - custom { - name: "foo", - api: "foo.txt", - } - ` - expectedBazelTarget := MakeBazelTarget( - "custom_api_contribution", - "foo", - AttrNameToString{ - "api": `"foo.txt"`, - }, - ) - registerCustomModule := func(ctx android.RegistrationContext) { - ctx.RegisterModuleType("custom", customModuleFactoryHostAndDevice) - } - RunApiBp2BuildTestCase(t, registerCustomModule, Bp2buildTestCase{ - Blueprint: bp, - ExpectedBazelTargets: []string{expectedBazelTarget}, - Description: "Generating API contribution Bazel targets for custom module", - }) -} - func TestGenerateConfigSetting(t *testing.T) { bp := ` custom { diff --git a/bp2build/cc_library_conversion_test.go b/bp2build/cc_library_conversion_test.go index 890acc6fa..246f1693e 100644 --- a/bp2build/cc_library_conversion_test.go +++ b/bp2build/cc_library_conversion_test.go @@ -2839,205 +2839,6 @@ cc_library { ) } -func TestCcApiContributionsWithHdrs(t *testing.T) { - bp := ` - cc_library { - name: "libfoo", - stubs: { symbol_file: "libfoo.map.txt", versions: ["28", "29", "current"] }, - llndk: { symbol_file: "libfoo.map.txt", override_export_include_dirs: ["dir2"]}, - export_include_dirs: ["dir1"], - } - ` - expectedBazelTargets := []string{ - MakeBazelTarget( - "cc_api_library_headers", - "libfoo.module-libapi.headers", - AttrNameToString{ - "export_includes": `["dir1"]`, - }), - MakeBazelTarget( - "cc_api_library_headers", - "libfoo.vendorapi.headers", - AttrNameToString{ - "export_includes": `["dir2"]`, - }), - MakeBazelTarget( - "cc_api_contribution", - "libfoo.contribution", - AttrNameToString{ - "api": `"libfoo.map.txt"`, - "library_name": `"libfoo"`, - "api_surfaces": `[ - "module-libapi", - "vendorapi", - ]`, - "hdrs": `[ - ":libfoo.module-libapi.headers", - ":libfoo.vendorapi.headers", - ]`, - }), - } - RunApiBp2BuildTestCase(t, cc.RegisterLibraryBuildComponents, Bp2buildTestCase{ - Blueprint: bp, - Description: "cc API contributions to module-libapi and vendorapi", - ExpectedBazelTargets: expectedBazelTargets, - }) -} - -func TestCcApiSurfaceCombinations(t *testing.T) { - testCases := []struct { - bp string - expectedApi string - expectedApiSurfaces string - description string - }{ - { - bp: ` - cc_library { - name: "a", - stubs: {symbol_file: "a.map.txt"}, - }`, - expectedApi: `"a.map.txt"`, - expectedApiSurfaces: `["module-libapi"]`, - description: "Library that contributes to module-libapi", - }, - { - bp: ` - cc_library { - name: "a", - llndk: {symbol_file: "a.map.txt"}, - }`, - expectedApi: `"a.map.txt"`, - expectedApiSurfaces: `["vendorapi"]`, - description: "Library that contributes to vendorapi", - }, - { - bp: ` - cc_library { - name: "a", - llndk: {symbol_file: "a.map.txt"}, - stubs: {symbol_file: "a.map.txt"}, - }`, - expectedApi: `"a.map.txt"`, - expectedApiSurfaces: `[ - "module-libapi", - "vendorapi", - ]`, - description: "Library that contributes to module-libapi and vendorapi", - }, - } - for _, testCase := range testCases { - expectedBazelTargets := []string{ - MakeBazelTarget( - "cc_api_contribution", - "a.contribution", - AttrNameToString{ - "library_name": `"a"`, - "hdrs": `[]`, - "api": testCase.expectedApi, - "api_surfaces": testCase.expectedApiSurfaces, - }, - ), - } - RunApiBp2BuildTestCase(t, cc.RegisterLibraryBuildComponents, Bp2buildTestCase{ - Blueprint: testCase.bp, - Description: testCase.description, - ExpectedBazelTargets: expectedBazelTargets, - }) - } -} - -// llndk struct property in Soong provides users with several options to configure the exported include dirs -// Test the generated bazel targets for the different configurations -func TestCcVendorApiHeaders(t *testing.T) { - testCases := []struct { - bp string - expectedIncludes string - expectedSystemIncludes string - description string - }{ - { - bp: ` - cc_library { - name: "a", - export_include_dirs: ["include"], - export_system_include_dirs: ["base_system_include"], - llndk: { - symbol_file: "a.map.txt", - export_headers_as_system: true, - }, - } - `, - expectedIncludes: "", - expectedSystemIncludes: `[ - "base_system_include", - "include", - ]`, - description: "Headers are exported as system to API surface", - }, - { - bp: ` - cc_library { - name: "a", - export_include_dirs: ["include"], - export_system_include_dirs: ["base_system_include"], - llndk: { - symbol_file: "a.map.txt", - override_export_include_dirs: ["llndk_include"], - }, - } - `, - expectedIncludes: `["llndk_include"]`, - expectedSystemIncludes: `["base_system_include"]`, - description: "Non-system Headers are ovverriden before export to API surface", - }, - { - bp: ` - cc_library { - name: "a", - export_include_dirs: ["include"], - export_system_include_dirs: ["base_system_include"], - llndk: { - symbol_file: "a.map.txt", - override_export_include_dirs: ["llndk_include"], - export_headers_as_system: true, - }, - } - `, - expectedIncludes: "", // includes are set to nil - expectedSystemIncludes: `[ - "base_system_include", - "llndk_include", - ]`, - description: "System Headers are extended before export to API surface", - }, - } - for _, testCase := range testCases { - attrs := AttrNameToString{} - if testCase.expectedIncludes != "" { - attrs["export_includes"] = testCase.expectedIncludes - } - if testCase.expectedSystemIncludes != "" { - attrs["export_system_includes"] = testCase.expectedSystemIncludes - } - - expectedBazelTargets := []string{ - MakeBazelTarget("cc_api_library_headers", "a.vendorapi.headers", attrs), - // Create a target for cc_api_contribution target - MakeBazelTarget("cc_api_contribution", "a.contribution", AttrNameToString{ - "api": `"a.map.txt"`, - "api_surfaces": `["vendorapi"]`, - "hdrs": `[":a.vendorapi.headers"]`, - "library_name": `"a"`, - }), - } - RunApiBp2BuildTestCase(t, cc.RegisterLibraryBuildComponents, Bp2buildTestCase{ - Blueprint: testCase.bp, - ExpectedBazelTargets: expectedBazelTargets, - }) - } -} - func TestCcLibraryStubsAcrossConfigsDuplicatesRemoved(t *testing.T) { runCcLibraryTestCase(t, Bp2buildTestCase{ Description: "stub target generation of the same lib across configs should not result in duplicates", diff --git a/bp2build/cc_library_headers_conversion_test.go b/bp2build/cc_library_headers_conversion_test.go index 072f5b3b4..a592ca978 100644 --- a/bp2build/cc_library_headers_conversion_test.go +++ b/bp2build/cc_library_headers_conversion_test.go @@ -123,69 +123,6 @@ cc_library_headers { }) } -func TestCcApiHeaders(t *testing.T) { - fs := map[string]string{ - "bar/Android.bp": `cc_library_headers { name: "bar_headers", }`, - } - bp := ` - cc_library_headers { - name: "foo_headers", - export_include_dirs: ["dir1", "dir2"], - export_header_lib_headers: ["bar_headers"], - - arch: { - arm: { - export_include_dirs: ["dir_arm"], - }, - x86: { - export_include_dirs: ["dir_x86"], - }, - }, - - target: { - android: { - export_include_dirs: ["dir1", "dir_android"], - }, - windows: { - export_include_dirs: ["dir_windows"], - }, - } - } - ` - expectedBazelTargets := []string{ - MakeBazelTarget("cc_api_library_headers", "foo_headers.contribution.arm", AttrNameToString{ - "export_includes": `["dir_arm"]`, - "arch": `"arm"`, - }), - MakeBazelTarget("cc_api_library_headers", "foo_headers.contribution.x86", AttrNameToString{ - "export_includes": `["dir_x86"]`, - "arch": `"x86"`, - }), - MakeBazelTarget("cc_api_library_headers", "foo_headers.contribution.androidos", AttrNameToString{ - "export_includes": `["dir_android"]`, // common includes are deduped - }), - // Windows headers are not exported - MakeBazelTarget("cc_api_library_headers", "foo_headers.contribution", AttrNameToString{ - "export_includes": `[ - "dir1", - "dir2", - ]`, - "deps": `[ - "//bar:bar_headers.contribution", - ":foo_headers.contribution.arm", - ":foo_headers.contribution.x86", - ":foo_headers.contribution.androidos", - ]`, - }), - } - RunApiBp2BuildTestCase(t, cc.RegisterLibraryHeadersBuildComponents, Bp2buildTestCase{ - Blueprint: bp, - Description: "Header library contributions to API surfaces", - ExpectedBazelTargets: expectedBazelTargets, - Filesystem: fs, - }) -} - // header_libs has "variant_prepend" tag. In bp2build output, // variant info(select) should go before general info. func TestCcLibraryHeadersOsSpecificHeader(t *testing.T) { diff --git a/bp2build/conversion.go b/bp2build/conversion.go index 35a1400a0..da4b5cf1f 100644 --- a/bp2build/conversion.go +++ b/bp2build/conversion.go @@ -145,7 +145,7 @@ func createBuildFiles(buildToTargets map[string]BazelTargets, mode CodegenMode) targets.sort() var content string - if mode == Bp2Build || mode == ApiBp2build { + if mode == Bp2Build { content = `# READ THIS FIRST: # This file was automatically generated by bp2build for the Bazel migration project. # Feel free to edit or test it, but do *not* check it into your version control system. diff --git a/bp2build/droidstubs_conversion_test.go b/bp2build/droidstubs_conversion_test.go deleted file mode 100644 index 12c1cfe32..000000000 --- a/bp2build/droidstubs_conversion_test.go +++ /dev/null @@ -1,104 +0,0 @@ -// Copyright 2022 Google Inc. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package bp2build - -import ( - "testing" - - "android/soong/android" - "android/soong/java" -) - -func registerJavaApiModules(ctx android.RegistrationContext) { - java.RegisterSdkLibraryBuildComponents(ctx) - java.RegisterStubsBuildComponents(ctx) -} - -func TestDroidstubsApiContributions(t *testing.T) { - bp := ` - droidstubs { - name: "framework-stubs", - check_api: { - current: { - api_file: "framework.current.txt", - }, - }, - } - - // Modules without check_api should not generate a Bazel API target - droidstubs { - name: "framework-docs", - } - - // java_sdk_library is a macro that creates droidstubs - java_sdk_library { - name: "module-stubs", - srcs: ["A.java"], - - // These api surfaces are added by default, but add them explicitly to make - // this test hermetic - public: { - enabled: true, - }, - system: { - enabled: true, - }, - - // Disable other api surfaces to keep unit test scope limited - module_lib: { - enabled: false, - }, - test: { - enabled: false, - }, - } - ` - expectedBazelTargets := []string{ - MakeBazelTargetNoRestrictions( - "java_api_contribution", - "framework-stubs.contribution", - AttrNameToString{ - "api": `"framework.current.txt"`, - "api_surface": `"publicapi"`, - "target_compatible_with": `["//build/bazel/platforms/os:android"]`, - }), - MakeBazelTargetNoRestrictions( - "java_api_contribution", - "module-stubs.stubs.source.contribution", - AttrNameToString{ - "api": `"api/current.txt"`, - "api_surface": `"publicapi"`, - "target_compatible_with": `["//build/bazel/platforms/os:android"]`, - }), - MakeBazelTargetNoRestrictions( - "java_api_contribution", - "module-stubs.stubs.source.system.contribution", - AttrNameToString{ - "api": `"api/system-current.txt"`, - "api_surface": `"systemapi"`, - "target_compatible_with": `["//build/bazel/platforms/os:android"]`, - }), - } - RunApiBp2BuildTestCase(t, registerJavaApiModules, Bp2buildTestCase{ - Blueprint: bp, - ExpectedBazelTargets: expectedBazelTargets, - Filesystem: map[string]string{ - "api/current.txt": "", - "api/removed.txt": "", - "api/system-current.txt": "", - "api/system-removed.txt": "", - }, - }) -} diff --git a/bp2build/testing.go b/bp2build/testing.go index 42d955e42..997df64a4 100644 --- a/bp2build/testing.go +++ b/bp2build/testing.go @@ -108,15 +108,6 @@ func RunBp2BuildTestCase(t *testing.T, registerModuleTypes func(ctx android.Regi runBp2BuildTestCaseWithSetup(t, bp2buildSetup, tc) } -func RunApiBp2BuildTestCase(t *testing.T, registerModuleTypes func(ctx android.RegistrationContext), tc Bp2buildTestCase) { - t.Helper() - apiBp2BuildSetup := android.GroupFixturePreparers( - android.FixtureRegisterWithContext(registerModuleTypes), - SetApiBp2BuildTestRunner, - ) - runBp2BuildTestCaseWithSetup(t, apiBp2BuildSetup, tc) -} - func runBp2BuildTestCaseWithSetup(t *testing.T, extraPreparer android.FixturePreparer, tc Bp2buildTestCase) { t.Helper() dir := "." @@ -180,27 +171,14 @@ func runBp2BuildTestCaseWithSetup(t *testing.T, extraPreparer android.FixturePre } // SetBp2BuildTestRunner customizes the test fixture mechanism to run tests in Bp2Build mode. -var SetBp2BuildTestRunner = android.FixtureSetTestRunner(&bazelTestRunner{Bp2Build}) +var SetBp2BuildTestRunner = android.FixtureSetTestRunner(&bazelTestRunner{}) -// SetApiBp2BuildTestRunner customizes the test fixture mechanism to run tests in ApiBp2build mode. -var SetApiBp2BuildTestRunner = android.FixtureSetTestRunner(&bazelTestRunner{ApiBp2build}) - -// bazelTestRunner customizes the test fixture mechanism to run tests of the bp2build and -// apiBp2build build modes. -type bazelTestRunner struct { - mode CodegenMode -} +// bazelTestRunner customizes the test fixture mechanism to run tests of the bp2build build mode. +type bazelTestRunner struct{} func (b *bazelTestRunner) FinalPreparer(result *android.TestResult) android.CustomTestResult { ctx := result.TestContext - switch b.mode { - case Bp2Build: - ctx.RegisterForBazelConversion() - case ApiBp2build: - ctx.RegisterForApiBazelConversion() - default: - panic(fmt.Errorf("unknown build mode: %d", b.mode)) - } + ctx.RegisterForBazelConversion() return &BazelTestResult{TestResult: result} } @@ -214,11 +192,7 @@ func (b *bazelTestRunner) PostParseProcessor(result android.CustomTestResult) { return } - codegenMode := Bp2Build - if ctx.Config().BuildMode == android.ApiBp2build { - codegenMode = ApiBp2build - } - codegenCtx := NewCodegenContext(config, ctx.Context, codegenMode, "") + codegenCtx := NewCodegenContext(config, ctx.Context, Bp2Build, "") res, errs := GenerateBazelTargets(codegenCtx, false) if bazelResult.CollateErrs(errs) { return diff --git a/cmd/soong_build/main.go b/cmd/soong_build/main.go index 20e366e8a..626f076a3 100644 --- a/cmd/soong_build/main.go +++ b/cmd/soong_build/main.go @@ -27,7 +27,6 @@ import ( "android/soong/android" "android/soong/android/allowlists" - "android/soong/bazel" "android/soong/bp2build" "android/soong/shared" "android/soong/ui/metrics/bp2build_metrics_proto" @@ -76,7 +75,6 @@ func init() { flag.StringVar(&cmdlineArgs.ModuleActionsFile, "module_actions_file", "", "JSON file to output inputs/outputs of actions of modules") flag.StringVar(&cmdlineArgs.DocFile, "soong_docs", "", "build documentation file to output") flag.StringVar(&cmdlineArgs.BazelQueryViewDir, "bazel_queryview_dir", "", "path to the bazel queryview directory relative to --top") - flag.StringVar(&cmdlineArgs.BazelApiBp2buildDir, "bazel_api_bp2build_dir", "", "path to the bazel api_bp2build directory relative to --top") flag.StringVar(&cmdlineArgs.Bp2buildMarker, "bp2build_marker", "", "If set, run bp2build, touch the specified marker file then exit") flag.StringVar(&cmdlineArgs.SymlinkForestMarker, "symlink_forest_marker", "", "If set, create the bp2build symlink forest, touch the specified marker file, then exit") flag.StringVar(&cmdlineArgs.OutFile, "o", "build.ninja", "the Ninja file to output") @@ -169,120 +167,6 @@ func runQueryView(queryviewDir, queryviewMarker string, ctx *android.Context) { touch(shared.JoinPath(topDir, queryviewMarker)) } -// Run the code-generation phase to convert API contributions to BUILD files. -// Return marker file for the new synthetic workspace -func runApiBp2build(ctx *android.Context, extraNinjaDeps []string) string { - ctx.EventHandler.Begin("api_bp2build") - defer ctx.EventHandler.End("api_bp2build") - // api_bp2build does not run the typical pipeline of soong mutators. - // Hoevever, it still runs the defaults mutator which can create dependencies. - // These dependencies might not always exist (e.g. in tests) - ctx.SetAllowMissingDependencies(ctx.Config().AllowMissingDependencies()) - ctx.RegisterForApiBazelConversion() - - // Register the Android.bp files in the tree - // Add them to the workspace's .d file - ctx.SetModuleListFile(cmdlineArgs.ModuleListFile) - if paths, err := ctx.ListModulePaths("."); err == nil { - extraNinjaDeps = append(extraNinjaDeps, paths...) - } else { - panic(err) - } - - // Run the loading and analysis phase - ninjaDeps, err := bootstrap.RunBlueprint(cmdlineArgs.Args, - bootstrap.StopBeforePrepareBuildActions, - ctx.Context, - ctx.Config()) - maybeQuit(err, "") - ninjaDeps = append(ninjaDeps, extraNinjaDeps...) - - // Add the globbed dependencies - ninjaDeps = append(ninjaDeps, writeBuildGlobsNinjaFile(ctx)...) - - // Run codegen to generate BUILD files - codegenContext := bp2build.NewCodegenContext(ctx.Config(), ctx, bp2build.ApiBp2build, topDir) - absoluteApiBp2buildDir := shared.JoinPath(topDir, cmdlineArgs.BazelApiBp2buildDir) - // 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()...) - - // Create soong_injection repository - soongInjectionFiles, workspaceFiles, err := bp2build.CreateSoongInjectionDirFiles(codegenContext, bp2build.CreateCodegenMetrics()) - maybeQuit(err, "") - absoluteSoongInjectionDir := shared.JoinPath(topDir, ctx.Config().SoongOutDir(), bazel.SoongInjectionDirName) - for _, file := range soongInjectionFiles { - // The API targets in api_bp2build workspace do not have any dependency on api_bp2build. - // But we need to create these files to prevent errors during Bazel analysis. - // These need to be created in Read-Write mode. - // This is because the subsequent step (bp2build in api domain analysis) creates them in Read-Write mode - // to allow users to edit/experiment in the synthetic workspace. - writeReadWriteFile(absoluteSoongInjectionDir, file) - } - for _, file := range workspaceFiles { - writeReadWriteFile(absoluteApiBp2buildDir, file) - } - - workspace := shared.JoinPath(ctx.Config().SoongOutDir(), "api_bp2build") - // Create the symlink forest - symlinkDeps, _, _ := bp2build.PlantSymlinkForest( - ctx.Config().IsEnvTrue("BP2BUILD_VERBOSE"), - topDir, - workspace, - cmdlineArgs.BazelApiBp2buildDir, - apiBuildFileExcludes(ctx)) - ninjaDeps = append(ninjaDeps, symlinkDeps...) - - workspaceMarkerFile := workspace + ".marker" - writeDepFile(workspaceMarkerFile, ctx.EventHandler, ninjaDeps) - touch(shared.JoinPath(topDir, workspaceMarkerFile)) - return workspaceMarkerFile -} - -// With some exceptions, api_bp2build does not have any dependencies on the checked-in BUILD files -// Exclude them from the generated workspace to prevent unrelated errors during the loading phase -func apiBuildFileExcludes(ctx *android.Context) []string { - ret := bazelArtifacts() - srcs, err := getExistingBazelRelatedFiles(topDir) - maybeQuit(err, "Error determining existing Bazel-related files") - for _, src := range srcs { - // Exclude all src BUILD files - if src != "WORKSPACE" && - src != "BUILD" && - src != "BUILD.bazel" && - !strings.HasPrefix(src, "build/bazel") && - !strings.HasPrefix(src, "external/bazel-skylib") && - !strings.HasPrefix(src, "prebuilts/clang") { - ret = append(ret, src) - } - } - // Android.bp files for api surfaces are mounted to out/, but out/ should not be a - // dep for api_bp2build. Otherwise, api_bp2build will be run every single time - ret = append(ret, ctx.Config().OutDir()) - return ret -} - func writeNinjaHint(ctx *android.Context) error { ctx.BeginEvent("ninja_hint") defer ctx.EndEvent("ninja_hint") @@ -551,9 +435,6 @@ func main() { // Run the alternate pipeline of bp2build mutators and singleton to convert // Blueprint to BUILD files before everything else. finalOutputFile = runBp2Build(ctx, extraNinjaDeps, metricsDir) - case android.ApiBp2build: - finalOutputFile = runApiBp2build(ctx, extraNinjaDeps) - writeMetrics(configuration, ctx.EventHandler, metricsDir) default: ctx.Register() isMixedBuildsEnabled := configuration.IsMixedBuildsEnabled() diff --git a/tests/bp2build_bazel_test.sh b/tests/bp2build_bazel_test.sh index 090114b97..8a64a56b9 100755 --- a/tests/bp2build_bazel_test.sh +++ b/tests/bp2build_bazel_test.sh @@ -407,38 +407,6 @@ EOF fi } -# Smoke test to verify api_bp2build worksapce does not contain any errors -function test_api_bp2build_empty_build() { - setup - run_soong api_bp2build - run_bazel build --config=android --config=api_bp2build //:empty -} - -# Verify that an *_api_contribution target can refer to an api file from -# another Bazel package. -function test_api_export_from_another_bazel_package() { - setup - # Parent dir Android.bp - mkdir -p foo - cat > foo/Android.bp << 'EOF' -cc_library { - name: "libfoo", - stubs: { - symbol_file: "api/libfoo.map.txt", - }, -} -EOF - # Child dir Android.bp - mkdir -p foo/api - cat > foo/api/Android.bp << 'EOF' -package{} -EOF - touch foo/api/libfoo.map.txt - # Run test - run_soong api_bp2build - run_bazel build --config=android --config=api_bp2build //foo:libfoo.contribution -} - function test_bazel_standalone_output_paths_contain_product_name { setup mkdir -p a diff --git a/ui/build/config.go b/ui/build/config.go index 5d1505abc..084d28d83 100644 --- a/ui/build/config.go +++ b/ui/build/config.go @@ -70,7 +70,6 @@ type configImpl struct { checkbuild bool dist bool jsonModuleGraph bool - apiBp2build bool // Generate BUILD files for Soong modules that contribute APIs bp2build bool queryview bool reportMkMetrics bool // Collect and report mk2bp migration progress metrics. @@ -869,8 +868,6 @@ func (c *configImpl) parseArgs(ctx Context, args []string) { c.jsonModuleGraph = true } else if arg == "bp2build" { c.bp2build = true - } else if arg == "api_bp2build" { - c.apiBp2build = true } else if arg == "queryview" { c.queryview = true } else if arg == "soong_docs" { @@ -970,7 +967,7 @@ func (c *configImpl) SoongBuildInvocationNeeded() bool { return true } - if !c.JsonModuleGraph() && !c.Bp2Build() && !c.Queryview() && !c.SoongDocs() && !c.ApiBp2build() { + if !c.JsonModuleGraph() && !c.Bp2Build() && !c.Queryview() && !c.SoongDocs() { // Command line was empty, the default Ninja target is built return true } @@ -1068,10 +1065,6 @@ func (c *configImpl) QueryviewMarkerFile() string { return shared.JoinPath(c.SoongOutDir(), "queryview.marker") } -func (c *configImpl) ApiBp2buildMarkerFile() string { - return shared.JoinPath(c.SoongOutDir(), "api_bp2build.marker") -} - func (c *configImpl) ModuleGraphFile() string { return shared.JoinPath(c.SoongOutDir(), "module-graph.json") } @@ -1113,10 +1106,6 @@ func (c *configImpl) Bp2Build() bool { return c.bp2build } -func (c *configImpl) ApiBp2build() bool { - return c.apiBp2build -} - func (c *configImpl) Queryview() bool { return c.queryview } @@ -1308,7 +1297,7 @@ func (c *configImpl) canSupportRBE() bool { func (c *configImpl) UseRBE() bool { // These alternate modes of running Soong do not use RBE / reclient. - if c.Bp2Build() || c.Queryview() || c.ApiBp2build() || c.JsonModuleGraph() { + if c.Bp2Build() || c.Queryview() || c.JsonModuleGraph() { return false } diff --git a/ui/build/soong.go b/ui/build/soong.go index b8543d929..44c20a013 100644 --- a/ui/build/soong.go +++ b/ui/build/soong.go @@ -41,7 +41,6 @@ const ( bp2buildWorkspaceTag = "bp2build_workspace" jsonModuleGraphTag = "modulegraph" queryviewTag = "queryview" - apiBp2buildTag = "api_bp2build" soongDocsTag = "soong_docs" // bootstrapEpoch is used to determine if an incremental build is incompatible with the current @@ -264,7 +263,6 @@ func bootstrapGlobFileList(config Config) []string { config.NamedGlobFile(bp2buildFilesTag), config.NamedGlobFile(jsonModuleGraphTag), config.NamedGlobFile(queryviewTag), - config.NamedGlobFile(apiBp2buildTag), config.NamedGlobFile(soongDocsTag), } } @@ -305,9 +303,6 @@ func bootstrapBlueprint(ctx Context, config Config) { } queryviewDir := filepath.Join(config.SoongOutDir(), "queryview") - // The BUILD files will be generated in out/soong/.api_bp2build (no symlinks to src files) - // The final workspace will be generated in out/soong/api_bp2build - apiBp2buildDir := filepath.Join(config.SoongOutDir(), ".api_bp2build") pbfs := []PrimaryBuilderFactory{ { @@ -354,15 +349,6 @@ func bootstrapBlueprint(ctx Context, config Config) { "--bazel_queryview_dir", queryviewDir, ), }, - { - name: apiBp2buildTag, - description: fmt.Sprintf("generating BUILD files for API contributions at %s", apiBp2buildDir), - config: config, - output: config.ApiBp2buildMarkerFile(), - specificArgs: append(baseArgs, - "--bazel_api_bp2build_dir", apiBp2buildDir, - ), - }, { name: soongDocsTag, description: fmt.Sprintf("generating Soong docs at %s", config.SoongDocsHtml()), @@ -533,10 +519,6 @@ func runSoong(ctx Context, config Config) { checkEnvironmentFile(ctx, soongBuildEnv, config.UsedEnvFile(queryviewTag)) } - if config.ApiBp2build() { - checkEnvironmentFile(ctx, soongBuildEnv, config.UsedEnvFile(apiBp2buildTag)) - } - if config.SoongDocs() { checkEnvironmentFile(ctx, soongBuildEnv, config.UsedEnvFile(soongDocsTag)) } @@ -608,10 +590,6 @@ func runSoong(ctx Context, config Config) { targets = append(targets, config.QueryviewMarkerFile()) } - if config.ApiBp2build() { - targets = append(targets, config.ApiBp2buildMarkerFile()) - } - if config.SoongDocs() { targets = append(targets, config.SoongDocsHtml()) }