Merge "Delete ApiBp2build soong_build mode" into main

This commit is contained in:
Cole Faust 2023-09-06 18:04:25 +00:00 committed by Gerrit Code Review
commit 999881376b
16 changed files with 8 additions and 642 deletions

View file

@ -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)

View file

@ -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)

View file

@ -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() {

View file

@ -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.

View file

@ -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",

View file

@ -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

View file

@ -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 {

View file

@ -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",

View file

@ -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) {

View file

@ -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.

View file

@ -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": "",
},
})
}

View file

@ -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

View file

@ -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()

View file

@ -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

View file

@ -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
}

View file

@ -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())
}