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:
@@ -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
|
||||
}
|
||||
|
Reference in New Issue
Block a user