Switch bp2build mutator to bottom up

This should be no-op, as the underlying mutator has not changed yet.

Some other refactoring is required and done in this CL:

- Delete some old, dead ApiBp2build code
- Fix casting to TopDownMutator when it's not necessary

This change is required to prepare for allowlist v2 work, as only
BottomUp mutators can AddDependency.

Bug: 285631638
Test: m nothing
Test: presubmits
Change-Id: I5212a5f5634cc13056195783e6df37ff8eb000da
This commit is contained in:
Chris Parsons
2023-09-22 16:21:53 +00:00
parent 68a3d9b33e
commit 6666d0f6b1
14 changed files with 26 additions and 301 deletions

View File

@@ -15,8 +15,6 @@
package cc
import (
"github.com/google/blueprint/proptools"
"android/soong/android"
"android/soong/bazel"
"android/soong/bazel/cquery"
@@ -175,106 +173,6 @@ func apiBazelTargets(ll bazel.LabelList) bazel.LabelList {
return bazel.MakeLabelList(labels)
}
func apiLibraryHeadersBp2Build(ctx android.TopDownMutatorContext, module *Module) {
// cc_api_library_headers have a 1:1 mapping to arch/no-arch
// For API export, create a top-level arch-agnostic target and list the arch-specific targets as its deps
// arch-agnostic includes
apiIncludes := getModuleLibApiIncludes(ctx, module)
// arch and os specific includes
archApiIncludes, androidOsIncludes := archOsSpecificApiIncludes(ctx, module)
for _, arch := range allArches { // sorted iteration
archApiInclude := archApiIncludes[arch]
if !archApiInclude.isEmpty() {
createApiHeaderTarget(ctx, archApiInclude)
apiIncludes.addDep(archApiInclude.name)
}
}
// os==android includes
if !androidOsIncludes.isEmpty() {
createApiHeaderTarget(ctx, androidOsIncludes)
apiIncludes.addDep(androidOsIncludes.name)
}
if !apiIncludes.isEmpty() {
// override the name from <mod>.module-libapi.headers --> <mod>.contribution
apiIncludes.name = android.ApiContributionTargetName(module.Name())
createApiHeaderTarget(ctx, apiIncludes)
}
}
func createApiHeaderTarget(ctx android.TopDownMutatorContext, includes apiIncludes) {
props := bazel.BazelTargetModuleProperties{
Rule_class: "cc_api_library_headers",
Bzl_load_location: "//build/bazel/rules/apis:cc_api_contribution.bzl",
}
ctx.CreateBazelTargetModule(
props,
android.CommonAttributes{
Name: includes.name,
SkipData: proptools.BoolPtr(true),
},
&includes.attrs,
)
}
var (
allArches = []string{"arm", "arm64", "x86", "x86_64"}
)
type archApiIncludes map[string]apiIncludes
func archOsSpecificApiIncludes(ctx android.TopDownMutatorContext, module *Module) (archApiIncludes, apiIncludes) {
baseProps := bp2BuildParseBaseProps(ctx, module)
i := bp2BuildParseExportedIncludes(ctx, module, &baseProps.includes)
archRet := archApiIncludes{}
for _, arch := range allArches {
includes := i.Includes.SelectValue(
bazel.ArchConfigurationAxis,
arch)
systemIncludes := i.SystemIncludes.SelectValue(
bazel.ArchConfigurationAxis,
arch)
deps := baseProps.deps.SelectValue(
bazel.ArchConfigurationAxis,
arch)
attrs := bazelCcLibraryHeadersAttributes{
Export_includes: bazel.MakeStringListAttribute(includes),
Export_system_includes: bazel.MakeStringListAttribute(systemIncludes),
}
apiDeps := apiBazelTargets(deps)
if !apiDeps.IsEmpty() {
attrs.Deps = bazel.MakeLabelListAttribute(apiDeps)
}
apiIncludes := apiIncludes{
name: android.ApiContributionTargetName(module.Name()) + "." + arch,
attrs: bazelCcApiLibraryHeadersAttributes{
bazelCcLibraryHeadersAttributes: attrs,
Arch: proptools.StringPtr(arch),
},
}
archRet[arch] = apiIncludes
}
// apiIncludes for os == Android
androidOsDeps := baseProps.deps.SelectValue(bazel.OsConfigurationAxis, bazel.OsAndroid)
androidOsAttrs := bazelCcLibraryHeadersAttributes{
Export_includes: bazel.MakeStringListAttribute(
i.Includes.SelectValue(bazel.OsConfigurationAxis, bazel.OsAndroid),
),
Export_system_includes: bazel.MakeStringListAttribute(
i.SystemIncludes.SelectValue(bazel.OsConfigurationAxis, bazel.OsAndroid),
),
}
androidOsApiDeps := apiBazelTargets(androidOsDeps)
if !androidOsApiDeps.IsEmpty() {
androidOsAttrs.Deps = bazel.MakeLabelListAttribute(androidOsApiDeps)
}
osRet := apiIncludes{
name: android.ApiContributionTargetName(module.Name()) + ".androidos",
attrs: bazelCcApiLibraryHeadersAttributes{
bazelCcLibraryHeadersAttributes: androidOsAttrs,
},
}
return archRet, osRet
}