Remove ConvertWithBp2build implementations
Remove the ConvertWithBp2build implementations from all the module types, along with the related code. Bug: 315353489 Test: m blueprint_tests Change-Id: I212672286686a318893bc7348ddd5a5ec51e77a7
This commit is contained in:
763
cc/library.go
763
cc/library.go
@@ -24,28 +24,11 @@ import (
|
||||
"sync"
|
||||
|
||||
"android/soong/android"
|
||||
"android/soong/bazel"
|
||||
"android/soong/bazel/cquery"
|
||||
|
||||
"github.com/google/blueprint"
|
||||
"github.com/google/blueprint/pathtools"
|
||||
"github.com/google/blueprint/proptools"
|
||||
)
|
||||
|
||||
var (
|
||||
alwaysLinkLibraries = map[string]bool{
|
||||
// Coverage libraries are _always_ added as a whole_static_dep. By converting as these as
|
||||
// alwayslink = True, we can add these as to deps (e.g. as a regular static dep) in Bazel
|
||||
// without any extra complications in cc_shared_library roots to prevent linking the same
|
||||
// library repeatedly.
|
||||
"libprofile-extras_ndk": true,
|
||||
"libprofile-extras": true,
|
||||
"libprofile-clang-extras_ndk": true,
|
||||
"libprofile-clang-extras_cfi_support": true,
|
||||
"libprofile-clang-extras": true,
|
||||
}
|
||||
)
|
||||
|
||||
// LibraryProperties is a collection of properties shared by cc library rules/cc.
|
||||
type LibraryProperties struct {
|
||||
// local file name to pass to the linker as -unexported_symbols_list
|
||||
@@ -235,336 +218,6 @@ func RegisterLibraryBuildComponents(ctx android.RegistrationContext) {
|
||||
ctx.RegisterModuleType("cc_library_host_shared", LibraryHostSharedFactory)
|
||||
}
|
||||
|
||||
// TODO(b/199902614): Can this be factored to share with the other Attributes?
|
||||
// For bp2build conversion.
|
||||
type bazelCcLibraryAttributes struct {
|
||||
// Attributes pertaining to both static and shared variants.
|
||||
Srcs bazel.LabelListAttribute
|
||||
Srcs_c bazel.LabelListAttribute
|
||||
Srcs_as bazel.LabelListAttribute
|
||||
|
||||
Copts bazel.StringListAttribute
|
||||
Cppflags bazel.StringListAttribute
|
||||
Conlyflags bazel.StringListAttribute
|
||||
Asflags bazel.StringListAttribute
|
||||
|
||||
Hdrs bazel.LabelListAttribute
|
||||
|
||||
Deps bazel.LabelListAttribute
|
||||
Implementation_deps bazel.LabelListAttribute
|
||||
Dynamic_deps bazel.LabelListAttribute
|
||||
Implementation_dynamic_deps bazel.LabelListAttribute
|
||||
Whole_archive_deps bazel.LabelListAttribute
|
||||
Implementation_whole_archive_deps bazel.LabelListAttribute
|
||||
System_dynamic_deps bazel.LabelListAttribute
|
||||
|
||||
Export_includes bazel.StringListAttribute
|
||||
Export_system_includes bazel.StringListAttribute
|
||||
Local_includes bazel.StringListAttribute
|
||||
Absolute_includes bazel.StringListAttribute
|
||||
Linkopts bazel.StringListAttribute
|
||||
Rtti bazel.BoolAttribute
|
||||
|
||||
Stl *string
|
||||
Cpp_std *string
|
||||
C_std *string
|
||||
|
||||
// This is shared only.
|
||||
Additional_linker_inputs bazel.LabelListAttribute
|
||||
|
||||
// Common properties shared between both shared and static variants.
|
||||
Shared staticOrSharedAttributes
|
||||
Static staticOrSharedAttributes
|
||||
|
||||
Strip stripAttributes
|
||||
|
||||
Features bazel.StringListAttribute
|
||||
}
|
||||
|
||||
type aidlLibraryAttributes struct {
|
||||
Srcs bazel.LabelListAttribute
|
||||
Include_dir *string
|
||||
Tags bazel.StringListAttribute
|
||||
}
|
||||
|
||||
type ccAidlLibraryAttributes struct {
|
||||
Deps bazel.LabelListAttribute
|
||||
Implementation_deps bazel.LabelListAttribute
|
||||
Implementation_dynamic_deps bazel.LabelListAttribute
|
||||
Tags bazel.StringListAttribute
|
||||
|
||||
SdkAttributes
|
||||
includesAttributes
|
||||
}
|
||||
|
||||
type stripAttributes struct {
|
||||
Keep_symbols bazel.BoolAttribute
|
||||
Keep_symbols_and_debug_frame bazel.BoolAttribute
|
||||
Keep_symbols_list bazel.StringListAttribute
|
||||
All bazel.BoolAttribute
|
||||
None bazel.BoolAttribute
|
||||
}
|
||||
|
||||
func stripAttrsFromLinkerAttrs(la *linkerAttributes) stripAttributes {
|
||||
return stripAttributes{
|
||||
Keep_symbols: la.stripKeepSymbols,
|
||||
Keep_symbols_and_debug_frame: la.stripKeepSymbolsAndDebugFrame,
|
||||
Keep_symbols_list: la.stripKeepSymbolsList,
|
||||
All: la.stripAll,
|
||||
None: la.stripNone,
|
||||
}
|
||||
}
|
||||
|
||||
func libraryBp2Build(ctx android.Bp2buildMutatorContext, m *Module) {
|
||||
sharedAttrs := bp2BuildParseSharedProps(ctx, m)
|
||||
staticAttrs := bp2BuildParseStaticProps(ctx, m)
|
||||
baseAttributes := bp2BuildParseBaseProps(ctx, m)
|
||||
compilerAttrs := baseAttributes.compilerAttributes
|
||||
linkerAttrs := baseAttributes.linkerAttributes
|
||||
exportedIncludes := bp2BuildParseExportedIncludes(ctx, m, &compilerAttrs.includes)
|
||||
|
||||
srcs := compilerAttrs.srcs
|
||||
|
||||
sharedAttrs.Dynamic_deps.Add(baseAttributes.protoDependency)
|
||||
staticAttrs.Deps.Add(baseAttributes.protoDependency)
|
||||
|
||||
asFlags := compilerAttrs.asFlags
|
||||
if compilerAttrs.asSrcs.IsEmpty() && sharedAttrs.Srcs_as.IsEmpty() && staticAttrs.Srcs_as.IsEmpty() {
|
||||
// Skip asflags for BUILD file simplicity if there are no assembly sources.
|
||||
asFlags = bazel.MakeStringListAttribute(nil)
|
||||
}
|
||||
|
||||
sharedFeatures := baseAttributes.features.Clone().Append(sharedAttrs.Features)
|
||||
sharedFeatures.DeduplicateAxesFromBase()
|
||||
staticFeatures := baseAttributes.features.Clone().Append(staticAttrs.Features)
|
||||
staticFeatures.DeduplicateAxesFromBase()
|
||||
|
||||
staticCommonAttrs := staticOrSharedAttributes{
|
||||
Srcs: *srcs.Clone().Append(staticAttrs.Srcs),
|
||||
Srcs_c: *compilerAttrs.cSrcs.Clone().Append(staticAttrs.Srcs_c),
|
||||
Srcs_as: *compilerAttrs.asSrcs.Clone().Append(staticAttrs.Srcs_as),
|
||||
Copts: *compilerAttrs.copts.Clone().Append(staticAttrs.Copts),
|
||||
Hdrs: *compilerAttrs.hdrs.Clone().Append(staticAttrs.Hdrs),
|
||||
|
||||
Deps: *linkerAttrs.deps.Clone().Append(staticAttrs.Deps),
|
||||
Implementation_deps: *linkerAttrs.implementationDeps.Clone().Append(staticAttrs.Implementation_deps),
|
||||
Dynamic_deps: *linkerAttrs.dynamicDeps.Clone().Append(staticAttrs.Dynamic_deps),
|
||||
Implementation_dynamic_deps: *linkerAttrs.implementationDynamicDeps.Clone().Append(staticAttrs.Implementation_dynamic_deps),
|
||||
Implementation_whole_archive_deps: linkerAttrs.implementationWholeArchiveDeps,
|
||||
Whole_archive_deps: *linkerAttrs.wholeArchiveDeps.Clone().Append(staticAttrs.Whole_archive_deps),
|
||||
System_dynamic_deps: *linkerAttrs.systemDynamicDeps.Clone().Append(staticAttrs.System_dynamic_deps),
|
||||
Runtime_deps: linkerAttrs.runtimeDeps,
|
||||
SdkAttributes: Bp2BuildParseSdkAttributes(m),
|
||||
Native_coverage: baseAttributes.Native_coverage,
|
||||
Additional_compiler_inputs: compilerAttrs.additionalCompilerInputs,
|
||||
}
|
||||
|
||||
includeAttrs := includesAttributes{
|
||||
Export_includes: exportedIncludes.Includes,
|
||||
Export_absolute_includes: exportedIncludes.AbsoluteIncludes,
|
||||
Export_system_includes: exportedIncludes.SystemIncludes,
|
||||
Local_includes: compilerAttrs.localIncludes,
|
||||
Absolute_includes: compilerAttrs.absoluteIncludes,
|
||||
}
|
||||
|
||||
sharedCommonAttrs := staticOrSharedAttributes{
|
||||
Srcs: *srcs.Clone().Append(sharedAttrs.Srcs),
|
||||
Srcs_c: *compilerAttrs.cSrcs.Clone().Append(sharedAttrs.Srcs_c),
|
||||
Srcs_as: *compilerAttrs.asSrcs.Clone().Append(sharedAttrs.Srcs_as),
|
||||
Copts: *compilerAttrs.copts.Clone().Append(sharedAttrs.Copts),
|
||||
Hdrs: *compilerAttrs.hdrs.Clone().Append(sharedAttrs.Hdrs),
|
||||
|
||||
Deps: *linkerAttrs.deps.Clone().Append(sharedAttrs.Deps),
|
||||
Implementation_deps: *linkerAttrs.implementationDeps.Clone().Append(sharedAttrs.Implementation_deps),
|
||||
Dynamic_deps: *linkerAttrs.dynamicDeps.Clone().Append(sharedAttrs.Dynamic_deps),
|
||||
Implementation_dynamic_deps: *linkerAttrs.implementationDynamicDeps.Clone().Append(sharedAttrs.Implementation_dynamic_deps),
|
||||
Whole_archive_deps: *linkerAttrs.wholeArchiveDeps.Clone().Append(sharedAttrs.Whole_archive_deps),
|
||||
Implementation_whole_archive_deps: linkerAttrs.implementationWholeArchiveDeps,
|
||||
System_dynamic_deps: *linkerAttrs.systemDynamicDeps.Clone().Append(sharedAttrs.System_dynamic_deps),
|
||||
Runtime_deps: linkerAttrs.runtimeDeps,
|
||||
SdkAttributes: Bp2BuildParseSdkAttributes(m),
|
||||
Native_coverage: baseAttributes.Native_coverage,
|
||||
Additional_compiler_inputs: compilerAttrs.additionalCompilerInputs,
|
||||
}
|
||||
|
||||
staticTargetAttrs := &bazelCcLibraryStaticAttributes{
|
||||
staticOrSharedAttributes: staticCommonAttrs,
|
||||
includesAttributes: includeAttrs,
|
||||
|
||||
Cppflags: compilerAttrs.cppFlags,
|
||||
Conlyflags: compilerAttrs.conlyFlags,
|
||||
Asflags: asFlags,
|
||||
|
||||
Rtti: compilerAttrs.rtti,
|
||||
Stl: compilerAttrs.stl,
|
||||
Cpp_std: compilerAttrs.cppStd,
|
||||
C_std: compilerAttrs.cStd,
|
||||
|
||||
Features: *staticFeatures,
|
||||
}
|
||||
|
||||
sharedTargetAttrs := &bazelCcLibrarySharedAttributes{
|
||||
staticOrSharedAttributes: sharedCommonAttrs,
|
||||
includesAttributes: includeAttrs,
|
||||
|
||||
Cppflags: compilerAttrs.cppFlags,
|
||||
Conlyflags: compilerAttrs.conlyFlags,
|
||||
Asflags: asFlags,
|
||||
|
||||
Linkopts: linkerAttrs.linkopts,
|
||||
Rtti: compilerAttrs.rtti,
|
||||
Stl: compilerAttrs.stl,
|
||||
Cpp_std: compilerAttrs.cppStd,
|
||||
C_std: compilerAttrs.cStd,
|
||||
Use_version_lib: linkerAttrs.useVersionLib,
|
||||
|
||||
Additional_linker_inputs: linkerAttrs.additionalLinkerInputs,
|
||||
|
||||
Strip: stripAttrsFromLinkerAttrs(&linkerAttrs),
|
||||
Features: *sharedFeatures,
|
||||
bazelCcHeaderAbiCheckerAttributes: bp2buildParseAbiCheckerProps(ctx, m),
|
||||
|
||||
Fdo_profile: compilerAttrs.fdoProfile,
|
||||
}
|
||||
|
||||
if compilerAttrs.stubsSymbolFile != nil && len(compilerAttrs.stubsVersions.Value) > 0 {
|
||||
sharedTargetAttrs.Stubs_symbol_file = compilerAttrs.stubsSymbolFile
|
||||
}
|
||||
|
||||
sharedTargetAttrs.Stem = compilerAttrs.stem
|
||||
sharedTargetAttrs.Suffix = compilerAttrs.suffix
|
||||
|
||||
for axis, configToProps := range m.GetArchVariantProperties(ctx, &LibraryProperties{}) {
|
||||
for cfg, props := range configToProps {
|
||||
if props, ok := props.(*LibraryProperties); ok {
|
||||
if props.Inject_bssl_hash != nil {
|
||||
// This is an edge case applies only to libcrypto
|
||||
if m.Name() == "libcrypto" || m.Name() == "libcrypto_for_testing" {
|
||||
sharedTargetAttrs.Inject_bssl_hash.SetSelectValue(axis, cfg, props.Inject_bssl_hash)
|
||||
} else {
|
||||
ctx.PropertyErrorf("inject_bssl_hash", "only applies to libcrypto")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
staticProps := bazel.BazelTargetModuleProperties{
|
||||
Rule_class: "cc_library_static",
|
||||
Bzl_load_location: "//build/bazel/rules/cc:cc_library_static.bzl",
|
||||
}
|
||||
sharedProps := bazel.BazelTargetModuleProperties{
|
||||
Rule_class: "cc_library_shared",
|
||||
Bzl_load_location: "//build/bazel/rules/cc:cc_library_shared.bzl",
|
||||
}
|
||||
|
||||
if _, ok := alwaysLinkLibraries[m.Name()]; ok {
|
||||
staticTargetAttrs.Alwayslink = proptools.BoolPtr(true)
|
||||
}
|
||||
|
||||
var tagsForStaticVariant bazel.StringListAttribute
|
||||
if compilerAttrs.stubsSymbolFile == nil && len(compilerAttrs.stubsVersions.Value) == 0 {
|
||||
tagsForStaticVariant = android.ApexAvailableTagsWithoutTestApexes(ctx, m)
|
||||
}
|
||||
tagsForStaticVariant.Append(bazel.StringListAttribute{Value: staticAttrs.Apex_available})
|
||||
|
||||
tagsForSharedVariant := android.ApexAvailableTagsWithoutTestApexes(ctx, m)
|
||||
tagsForSharedVariant.Append(bazel.StringListAttribute{Value: sharedAttrs.Apex_available})
|
||||
|
||||
ctx.CreateBazelTargetModuleWithRestrictions(staticProps,
|
||||
android.CommonAttributes{
|
||||
Name: m.Name() + "_bp2build_cc_library_static",
|
||||
Tags: tagsForStaticVariant,
|
||||
// TODO: b/303307456 - Remove this when data is properly supported in cc rules.
|
||||
SkipData: proptools.BoolPtr(true),
|
||||
},
|
||||
staticTargetAttrs, staticAttrs.Enabled)
|
||||
ctx.CreateBazelTargetModuleWithRestrictions(sharedProps,
|
||||
android.CommonAttributes{
|
||||
Name: m.Name(),
|
||||
Tags: tagsForSharedVariant,
|
||||
// TODO: b/303307456 - Remove this when data is properly supported in cc rules.
|
||||
SkipData: proptools.BoolPtr(true),
|
||||
},
|
||||
sharedTargetAttrs, sharedAttrs.Enabled)
|
||||
|
||||
createStubsBazelTargetIfNeeded(ctx, m, compilerAttrs, exportedIncludes, baseAttributes)
|
||||
}
|
||||
|
||||
func createStubsBazelTargetIfNeeded(ctx android.Bp2buildMutatorContext, m *Module, compilerAttrs compilerAttributes, exportedIncludes BazelIncludes, baseAttributes baseAttributes) {
|
||||
if compilerAttrs.stubsSymbolFile != nil && len(compilerAttrs.stubsVersions.Value) > 0 {
|
||||
stubSuitesProps := bazel.BazelTargetModuleProperties{
|
||||
Rule_class: "cc_stub_suite",
|
||||
Bzl_load_location: "//build/bazel/rules/cc:cc_stub_library.bzl",
|
||||
}
|
||||
soname := m.Name() + ".so"
|
||||
stubSuitesAttrs := &bazelCcStubSuiteAttributes{
|
||||
Symbol_file: compilerAttrs.stubsSymbolFile,
|
||||
Versions: compilerAttrs.stubsVersions,
|
||||
Export_includes: exportedIncludes.Includes,
|
||||
Soname: &soname,
|
||||
Source_library_label: proptools.StringPtr(m.GetBazelLabel(ctx, m)),
|
||||
Deps: baseAttributes.deps,
|
||||
Api_surface: proptools.StringPtr("module-libapi"),
|
||||
}
|
||||
if _, isNdk := ctx.ModuleFromName(m.Name() + ".ndk"); isNdk {
|
||||
stubSuitesAttrs.Included_in_ndk = proptools.BoolPtr(true)
|
||||
}
|
||||
|
||||
ctx.CreateBazelTargetModule(stubSuitesProps, android.CommonAttributes{
|
||||
Name: m.Name() + "_stub_libs",
|
||||
// TODO: b/303307456 - Remove this when data is properly supported in cc rules.
|
||||
SkipData: proptools.BoolPtr(true),
|
||||
},
|
||||
stubSuitesAttrs)
|
||||
|
||||
// Add alias for the stub shared_library in @api_surfaces repository
|
||||
currentModuleLibApiDir := ctx.Config().ApiSurfacesDir(android.ModuleLibApi, "current")
|
||||
actualLabelInMainWorkspace := bazel.Label{
|
||||
Label: fmt.Sprintf("@//%s:%s%s", ctx.ModuleDir(), m.Name(), stubsSuffix),
|
||||
}
|
||||
ctx.CreateBazelTargetAliasInDir(currentModuleLibApiDir, m.Name(), actualLabelInMainWorkspace)
|
||||
|
||||
// Add alias for headers exported by the stub library
|
||||
headerLabelInMainWorkspace := bazel.Label{
|
||||
// This label is generated from cc_stub_suite macro
|
||||
Label: fmt.Sprintf("@//%s:%s_stub_libs_%s_headers", ctx.ModuleDir(), m.Name(), android.ModuleLibApi.String()),
|
||||
}
|
||||
headerAlias := m.Name() + "_headers"
|
||||
ctx.CreateBazelTargetAliasInDir(currentModuleLibApiDir, headerAlias, headerLabelInMainWorkspace)
|
||||
}
|
||||
}
|
||||
|
||||
// wrapper struct to flatten the arch and os specific export_include_dirs
|
||||
// flattening is necessary since we want to export apis of all arches even when we build for x86 (e.g.)
|
||||
type bazelCcApiLibraryHeadersAttributes struct {
|
||||
bazelCcLibraryHeadersAttributes
|
||||
|
||||
Arch *string
|
||||
}
|
||||
|
||||
func (a *bazelCcApiLibraryHeadersAttributes) isEmpty() bool {
|
||||
return a.Export_includes.IsEmpty() &&
|
||||
a.Export_system_includes.IsEmpty() &&
|
||||
a.Deps.IsEmpty()
|
||||
}
|
||||
|
||||
type apiIncludes struct {
|
||||
name string // name of the Bazel target in the generated bp2build workspace
|
||||
attrs bazelCcApiLibraryHeadersAttributes
|
||||
}
|
||||
|
||||
func (includes *apiIncludes) isEmpty() bool {
|
||||
return includes.attrs.isEmpty()
|
||||
}
|
||||
|
||||
func (includes *apiIncludes) addDep(name string) {
|
||||
l := bazel.Label{Label: ":" + name}
|
||||
ll := bazel.MakeLabelList([]bazel.Label{l})
|
||||
lla := bazel.MakeLabelListAttribute(ll)
|
||||
includes.attrs.Deps.Append(lla)
|
||||
}
|
||||
|
||||
// cc_library creates both static and/or shared libraries for a device and/or
|
||||
// host. By default, a cc_library has a single variant that targets the device.
|
||||
// Specifying `host_supported: true` also creates a library that targets the
|
||||
@@ -577,8 +230,6 @@ func LibraryFactory() android.Module {
|
||||
staticLibrarySdkMemberType,
|
||||
staticAndSharedLibrarySdkMemberType,
|
||||
}
|
||||
module.bazelable = true
|
||||
module.bazelHandler = &ccLibraryBazelHandler{module: module}
|
||||
return module.Init()
|
||||
}
|
||||
|
||||
@@ -587,8 +238,6 @@ func LibraryStaticFactory() android.Module {
|
||||
module, library := NewLibrary(android.HostAndDeviceSupported)
|
||||
library.BuildOnlyStatic()
|
||||
module.sdkMemberTypes = []android.SdkMemberType{staticLibrarySdkMemberType}
|
||||
module.bazelable = true
|
||||
module.bazelHandler = &ccLibraryBazelHandler{module: module}
|
||||
return module.Init()
|
||||
}
|
||||
|
||||
@@ -597,8 +246,6 @@ func LibrarySharedFactory() android.Module {
|
||||
module, library := NewLibrary(android.HostAndDeviceSupported)
|
||||
library.BuildOnlyShared()
|
||||
module.sdkMemberTypes = []android.SdkMemberType{sharedLibrarySdkMemberType}
|
||||
module.bazelable = true
|
||||
module.bazelHandler = &ccLibraryBazelHandler{module: module}
|
||||
return module.Init()
|
||||
}
|
||||
|
||||
@@ -608,8 +255,6 @@ func LibraryHostStaticFactory() android.Module {
|
||||
module, library := NewLibrary(android.HostSupported)
|
||||
library.BuildOnlyStatic()
|
||||
module.sdkMemberTypes = []android.SdkMemberType{staticLibrarySdkMemberType}
|
||||
module.bazelable = true
|
||||
module.bazelHandler = &ccLibraryBazelHandler{module: module}
|
||||
return module.Init()
|
||||
}
|
||||
|
||||
@@ -618,8 +263,6 @@ func LibraryHostSharedFactory() android.Module {
|
||||
module, library := NewLibrary(android.HostSupported)
|
||||
library.BuildOnlyShared()
|
||||
module.sdkMemberTypes = []android.SdkMemberType{sharedLibrarySdkMemberType}
|
||||
module.bazelable = true
|
||||
module.bazelHandler = &ccLibraryBazelHandler{module: module}
|
||||
return module.Init()
|
||||
}
|
||||
|
||||
@@ -782,145 +425,6 @@ type libraryDecorator struct {
|
||||
apiListCoverageXmlPath android.ModuleOutPath
|
||||
}
|
||||
|
||||
type ccLibraryBazelHandler struct {
|
||||
module *Module
|
||||
}
|
||||
|
||||
var _ BazelHandler = (*ccLibraryBazelHandler)(nil)
|
||||
|
||||
// generateStaticBazelBuildActions constructs the StaticLibraryInfo Soong
|
||||
// provider from a Bazel shared library's CcInfo provider.
|
||||
func (handler *ccLibraryBazelHandler) generateStaticBazelBuildActions(ctx android.ModuleContext, label string, ccInfo cquery.CcInfo) {
|
||||
rootStaticArchives := ccInfo.RootStaticArchives
|
||||
if len(rootStaticArchives) != 1 {
|
||||
ctx.ModuleErrorf("expected exactly one root archive file for '%s', but got %s", label, rootStaticArchives)
|
||||
return
|
||||
}
|
||||
var outputFilePath android.Path = android.PathForBazelOut(ctx, rootStaticArchives[0])
|
||||
if len(ccInfo.TidyFiles) > 0 {
|
||||
handler.module.tidyFiles = android.PathsForBazelOut(ctx, ccInfo.TidyFiles)
|
||||
outputFilePath = android.AttachValidationActions(ctx, outputFilePath, handler.module.tidyFiles)
|
||||
}
|
||||
handler.module.outputFile = android.OptionalPathForPath(outputFilePath)
|
||||
|
||||
objPaths := ccInfo.CcObjectFiles
|
||||
objFiles := make(android.Paths, len(objPaths))
|
||||
for i, objPath := range objPaths {
|
||||
objFiles[i] = android.PathForBazelOut(ctx, objPath)
|
||||
}
|
||||
objects := Objects{
|
||||
objFiles: objFiles,
|
||||
}
|
||||
|
||||
ctx.SetProvider(StaticLibraryInfoProvider, StaticLibraryInfo{
|
||||
StaticLibrary: outputFilePath,
|
||||
ReuseObjects: objects,
|
||||
Objects: objects,
|
||||
|
||||
// TODO(b/190524881): Include transitive static libraries in this provider to support
|
||||
// static libraries with deps.
|
||||
TransitiveStaticLibrariesForOrdering: android.NewDepSetBuilder[android.Path](android.TOPOLOGICAL).
|
||||
Direct(outputFilePath).
|
||||
Build(),
|
||||
})
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// generateSharedBazelBuildActions constructs the SharedLibraryInfo Soong
|
||||
// provider from a Bazel shared library's CcInfo provider.
|
||||
func (handler *ccLibraryBazelHandler) generateSharedBazelBuildActions(ctx android.ModuleContext, label string, ccInfo cquery.CcInfo) {
|
||||
rootDynamicLibraries := ccInfo.RootDynamicLibraries
|
||||
|
||||
if len(rootDynamicLibraries) != 1 {
|
||||
ctx.ModuleErrorf("expected exactly one root dynamic library file for '%s', but got %s", label, rootDynamicLibraries)
|
||||
return
|
||||
}
|
||||
var outputFilePath android.Path = android.PathForBazelOut(ctx, rootDynamicLibraries[0])
|
||||
if len(ccInfo.TidyFiles) > 0 {
|
||||
handler.module.tidyFiles = android.PathsForBazelOut(ctx, ccInfo.TidyFiles)
|
||||
outputFilePath = android.AttachValidationActions(ctx, outputFilePath, handler.module.tidyFiles)
|
||||
}
|
||||
|
||||
handler.module.outputFile = android.OptionalPathForPath(outputFilePath)
|
||||
handler.module.linker.(*libraryDecorator).unstrippedOutputFile = android.PathForBazelOut(ctx, ccInfo.UnstrippedOutput)
|
||||
|
||||
var tocFile android.OptionalPath
|
||||
if len(ccInfo.TocFile) > 0 {
|
||||
tocFile = android.OptionalPathForPath(android.PathForBazelOut(ctx, ccInfo.TocFile))
|
||||
}
|
||||
handler.module.linker.(*libraryDecorator).tocFile = tocFile
|
||||
|
||||
if len(ccInfo.AbiDiffFiles) > 0 {
|
||||
handler.module.linker.(*libraryDecorator).sAbiDiff = android.PathsForBazelOut(ctx, ccInfo.AbiDiffFiles)
|
||||
}
|
||||
|
||||
ctx.SetProvider(SharedLibraryInfoProvider, SharedLibraryInfo{
|
||||
TableOfContents: tocFile,
|
||||
SharedLibrary: outputFilePath,
|
||||
Target: ctx.Target(),
|
||||
// TODO(b/190524881): Include transitive static libraries in this provider to support
|
||||
// static libraries with deps. The provider key for this is TransitiveStaticLibrariesForOrdering.
|
||||
})
|
||||
}
|
||||
|
||||
func (handler *ccLibraryBazelHandler) QueueBazelCall(ctx android.BaseModuleContext, label string) {
|
||||
bazelCtx := ctx.Config().BazelContext
|
||||
bazelCtx.QueueBazelRequest(label, cquery.GetCcInfo, android.GetConfigKeyApexVariant(ctx, GetApexConfigKey(ctx)))
|
||||
if v := handler.module.library.stubsVersion(); v != "" {
|
||||
stubsLabel := label + "_stub_libs-" + v
|
||||
bazelCtx.QueueBazelRequest(stubsLabel, cquery.GetCcInfo, android.GetConfigKeyApexVariant(ctx, GetApexConfigKey(ctx)))
|
||||
}
|
||||
}
|
||||
|
||||
func (handler *ccLibraryBazelHandler) ProcessBazelQueryResponse(ctx android.ModuleContext, label string) {
|
||||
if v := handler.module.library.stubsVersion(); v != "" {
|
||||
// if we are a stubs variant, just use the Bazel stubs target
|
||||
label = label + "_stub_libs-" + v
|
||||
}
|
||||
bazelCtx := ctx.Config().BazelContext
|
||||
ccInfo, err := bazelCtx.GetCcInfo(label, android.GetConfigKeyApexVariant(ctx, GetApexConfigKey(ctx)))
|
||||
if err != nil {
|
||||
ctx.ModuleErrorf("Error getting Bazel CcInfo: %s", err)
|
||||
return
|
||||
}
|
||||
|
||||
if handler.module.static() {
|
||||
handler.generateStaticBazelBuildActions(ctx, label, ccInfo)
|
||||
} else if handler.module.Shared() {
|
||||
handler.generateSharedBazelBuildActions(ctx, label, ccInfo)
|
||||
} else {
|
||||
ctx.ModuleErrorf("Unhandled bazel case for %s (neither shared nor static!)", ctx.ModuleName())
|
||||
}
|
||||
|
||||
handler.module.linker.(*libraryDecorator).setFlagExporterInfoFromCcInfo(ctx, ccInfo)
|
||||
handler.module.maybeUnhideFromMake()
|
||||
|
||||
if i, ok := handler.module.linker.(snapshotLibraryInterface); ok {
|
||||
// Dependencies on this library will expect collectedSnapshotHeaders to
|
||||
// be set, otherwise validation will fail. For now, set this to an empty
|
||||
// list.
|
||||
// TODO(b/190533363): More closely mirror the collectHeadersForSnapshot
|
||||
// implementation.
|
||||
i.(*libraryDecorator).collectedSnapshotHeaders = android.Paths{}
|
||||
}
|
||||
|
||||
handler.module.setAndroidMkVariablesFromCquery(ccInfo.CcAndroidMkInfo)
|
||||
|
||||
cctx := moduleContextFromAndroidModuleContext(ctx, handler.module)
|
||||
addStubDependencyProviders(cctx)
|
||||
}
|
||||
|
||||
func (library *libraryDecorator) setFlagExporterInfoFromCcInfo(ctx android.ModuleContext, ccInfo cquery.CcInfo) {
|
||||
flagExporterInfo := flagExporterInfoFromCcInfo(ctx, ccInfo)
|
||||
// flag exporters consolidates properties like includes, flags, dependencies that should be
|
||||
// exported from this module to other modules
|
||||
ctx.SetProvider(FlagExporterInfoProvider, flagExporterInfo)
|
||||
// Store flag info to be passed along to androidmk
|
||||
// TODO(b/184387147): Androidmk should be done in Bazel, not Soong.
|
||||
library.flagExporterInfo = &flagExporterInfo
|
||||
}
|
||||
|
||||
func GlobHeadersForSnapshot(ctx android.ModuleContext, paths android.Paths) android.Paths {
|
||||
ret := android.Paths{}
|
||||
|
||||
@@ -935,11 +439,6 @@ func GlobHeadersForSnapshot(ctx android.ModuleContext, paths android.Paths) andr
|
||||
continue
|
||||
}
|
||||
|
||||
// Filter out the generated headers from bazel.
|
||||
if strings.HasPrefix(dir, android.PathForBazelOut(ctx, "bazel-out").String()) {
|
||||
continue
|
||||
}
|
||||
|
||||
// libeigen wrongly exports the root directory "external/eigen". But only two
|
||||
// subdirectories "Eigen" and "unsupported" contain exported header files. Even worse
|
||||
// some of them have no extension. So we need special treatment for libeigen in order
|
||||
@@ -2621,7 +2120,7 @@ func LinkageMutator(mctx android.BottomUpMutatorContext) {
|
||||
// normalizeVersions modifies `versions` in place, so that each raw version
|
||||
// string becomes its normalized canonical form.
|
||||
// Validates that the versions in `versions` are specified in least to greatest order.
|
||||
func normalizeVersions(ctx android.BazelConversionPathContext, versions []string) {
|
||||
func normalizeVersions(ctx android.BaseModuleContext, versions []string) {
|
||||
var previous android.ApiLevel
|
||||
for i, v := range versions {
|
||||
ver, err := android.ApiLevelFromUser(ctx, v)
|
||||
@@ -2792,263 +2291,3 @@ func maybeInjectBoringSSLHash(ctx android.ModuleContext, outputFile android.Modu
|
||||
|
||||
return outputFile
|
||||
}
|
||||
|
||||
func bp2buildParseAbiCheckerProps(ctx android.Bp2buildMutatorContext, module *Module) bazelCcHeaderAbiCheckerAttributes {
|
||||
lib, ok := module.linker.(*libraryDecorator)
|
||||
if !ok {
|
||||
return bazelCcHeaderAbiCheckerAttributes{}
|
||||
}
|
||||
|
||||
abiChecker := lib.getHeaderAbiCheckerProperties(ctx)
|
||||
|
||||
abiCheckerAttrs := bazelCcHeaderAbiCheckerAttributes{
|
||||
Abi_checker_enabled: abiChecker.Enabled,
|
||||
Abi_checker_exclude_symbol_versions: abiChecker.Exclude_symbol_versions,
|
||||
Abi_checker_exclude_symbol_tags: abiChecker.Exclude_symbol_tags,
|
||||
Abi_checker_check_all_apis: abiChecker.Check_all_apis,
|
||||
Abi_checker_diff_flags: abiChecker.Diff_flags,
|
||||
}
|
||||
if abiChecker.Symbol_file != nil {
|
||||
symbolFile := android.BazelLabelForModuleSrcSingle(ctx, *abiChecker.Symbol_file)
|
||||
abiCheckerAttrs.Abi_checker_symbol_file = &symbolFile
|
||||
}
|
||||
|
||||
return abiCheckerAttrs
|
||||
}
|
||||
|
||||
func sharedOrStaticLibraryBp2Build(ctx android.Bp2buildMutatorContext, module *Module, isStatic bool) {
|
||||
baseAttributes := bp2BuildParseBaseProps(ctx, module)
|
||||
compilerAttrs := baseAttributes.compilerAttributes
|
||||
linkerAttrs := baseAttributes.linkerAttributes
|
||||
|
||||
exportedIncludes := bp2BuildParseExportedIncludes(ctx, module, &compilerAttrs.includes)
|
||||
includeAttrs := includesAttributes{
|
||||
Export_includes: exportedIncludes.Includes,
|
||||
Export_absolute_includes: exportedIncludes.AbsoluteIncludes,
|
||||
Export_system_includes: exportedIncludes.SystemIncludes,
|
||||
Local_includes: compilerAttrs.localIncludes,
|
||||
Absolute_includes: compilerAttrs.absoluteIncludes,
|
||||
}
|
||||
|
||||
// Append shared/static{} stanza properties. These won't be specified on
|
||||
// cc_library_* itself, but may be specified in cc_defaults that this module
|
||||
// depends on.
|
||||
libSharedOrStaticAttrs := bp2BuildParseLibProps(ctx, module, isStatic)
|
||||
|
||||
compilerAttrs.srcs.Append(libSharedOrStaticAttrs.Srcs)
|
||||
compilerAttrs.cSrcs.Append(libSharedOrStaticAttrs.Srcs_c)
|
||||
compilerAttrs.asSrcs.Append(libSharedOrStaticAttrs.Srcs_as)
|
||||
compilerAttrs.copts.Append(libSharedOrStaticAttrs.Copts)
|
||||
|
||||
linkerAttrs.deps.Append(libSharedOrStaticAttrs.Deps)
|
||||
linkerAttrs.implementationDeps.Append(libSharedOrStaticAttrs.Implementation_deps)
|
||||
linkerAttrs.dynamicDeps.Append(libSharedOrStaticAttrs.Dynamic_deps)
|
||||
linkerAttrs.implementationDynamicDeps.Append(libSharedOrStaticAttrs.Implementation_dynamic_deps)
|
||||
linkerAttrs.systemDynamicDeps.Append(libSharedOrStaticAttrs.System_dynamic_deps)
|
||||
|
||||
asFlags := compilerAttrs.asFlags
|
||||
if compilerAttrs.asSrcs.IsEmpty() {
|
||||
// Skip asflags for BUILD file simplicity if there are no assembly sources.
|
||||
asFlags = bazel.MakeStringListAttribute(nil)
|
||||
}
|
||||
|
||||
features := baseAttributes.features.Clone().Append(libSharedOrStaticAttrs.Features)
|
||||
features.DeduplicateAxesFromBase()
|
||||
|
||||
commonAttrs := staticOrSharedAttributes{
|
||||
Srcs: compilerAttrs.srcs,
|
||||
Srcs_c: compilerAttrs.cSrcs,
|
||||
Srcs_as: compilerAttrs.asSrcs,
|
||||
Copts: compilerAttrs.copts,
|
||||
Hdrs: compilerAttrs.hdrs,
|
||||
|
||||
Deps: linkerAttrs.deps,
|
||||
Implementation_deps: linkerAttrs.implementationDeps,
|
||||
Dynamic_deps: linkerAttrs.dynamicDeps,
|
||||
Implementation_dynamic_deps: linkerAttrs.implementationDynamicDeps,
|
||||
Whole_archive_deps: linkerAttrs.wholeArchiveDeps,
|
||||
Implementation_whole_archive_deps: linkerAttrs.implementationWholeArchiveDeps,
|
||||
System_dynamic_deps: linkerAttrs.systemDynamicDeps,
|
||||
SdkAttributes: Bp2BuildParseSdkAttributes(module),
|
||||
Runtime_deps: linkerAttrs.runtimeDeps,
|
||||
Native_coverage: baseAttributes.Native_coverage,
|
||||
Additional_compiler_inputs: compilerAttrs.additionalCompilerInputs,
|
||||
}
|
||||
|
||||
module.convertTidyAttributes(ctx, &commonAttrs.tidyAttributes)
|
||||
|
||||
var attrs interface{}
|
||||
if isStatic {
|
||||
commonAttrs.Deps.Add(baseAttributes.protoDependency)
|
||||
var alwayslink *bool
|
||||
if _, ok := alwaysLinkLibraries[module.Name()]; ok && isStatic {
|
||||
alwayslink = proptools.BoolPtr(true)
|
||||
}
|
||||
attrs = &bazelCcLibraryStaticAttributes{
|
||||
staticOrSharedAttributes: commonAttrs,
|
||||
Rtti: compilerAttrs.rtti,
|
||||
Stl: compilerAttrs.stl,
|
||||
Cpp_std: compilerAttrs.cppStd,
|
||||
C_std: compilerAttrs.cStd,
|
||||
|
||||
includesAttributes: includeAttrs,
|
||||
|
||||
Cppflags: compilerAttrs.cppFlags,
|
||||
Conlyflags: compilerAttrs.conlyFlags,
|
||||
Asflags: asFlags,
|
||||
|
||||
Alwayslink: alwayslink,
|
||||
Features: *features,
|
||||
}
|
||||
|
||||
} else {
|
||||
commonAttrs.Dynamic_deps.Add(baseAttributes.protoDependency)
|
||||
|
||||
sharedLibAttrs := &bazelCcLibrarySharedAttributes{
|
||||
staticOrSharedAttributes: commonAttrs,
|
||||
|
||||
Cppflags: compilerAttrs.cppFlags,
|
||||
Conlyflags: compilerAttrs.conlyFlags,
|
||||
Asflags: asFlags,
|
||||
|
||||
Linkopts: linkerAttrs.linkopts,
|
||||
Use_version_lib: linkerAttrs.useVersionLib,
|
||||
|
||||
Rtti: compilerAttrs.rtti,
|
||||
Stl: compilerAttrs.stl,
|
||||
Cpp_std: compilerAttrs.cppStd,
|
||||
C_std: compilerAttrs.cStd,
|
||||
|
||||
includesAttributes: includeAttrs,
|
||||
|
||||
Additional_linker_inputs: linkerAttrs.additionalLinkerInputs,
|
||||
|
||||
Strip: stripAttrsFromLinkerAttrs(&linkerAttrs),
|
||||
|
||||
Features: *features,
|
||||
|
||||
Stem: compilerAttrs.stem,
|
||||
Suffix: compilerAttrs.suffix,
|
||||
|
||||
bazelCcHeaderAbiCheckerAttributes: bp2buildParseAbiCheckerProps(ctx, module),
|
||||
|
||||
Fdo_profile: compilerAttrs.fdoProfile,
|
||||
}
|
||||
if compilerAttrs.stubsSymbolFile != nil && len(compilerAttrs.stubsVersions.Value) > 0 {
|
||||
sharedLibAttrs.Stubs_symbol_file = compilerAttrs.stubsSymbolFile
|
||||
}
|
||||
attrs = sharedLibAttrs
|
||||
}
|
||||
|
||||
var modType string
|
||||
if isStatic {
|
||||
modType = "cc_library_static"
|
||||
} else {
|
||||
modType = "cc_library_shared"
|
||||
createStubsBazelTargetIfNeeded(ctx, module, compilerAttrs, exportedIncludes, baseAttributes)
|
||||
}
|
||||
props := bazel.BazelTargetModuleProperties{
|
||||
Rule_class: modType,
|
||||
Bzl_load_location: fmt.Sprintf("//build/bazel/rules/cc:%s.bzl", modType),
|
||||
}
|
||||
|
||||
tags := android.ApexAvailableTagsWithoutTestApexes(ctx, module)
|
||||
|
||||
ctx.CreateBazelTargetModule(props, android.CommonAttributes{
|
||||
Name: module.Name(),
|
||||
Tags: tags,
|
||||
// TODO: b/303307456 - Remove this when data is properly supported in cc rules.
|
||||
SkipData: proptools.BoolPtr(true),
|
||||
}, attrs)
|
||||
}
|
||||
|
||||
type includesAttributes struct {
|
||||
Export_includes bazel.StringListAttribute
|
||||
Export_absolute_includes bazel.StringListAttribute
|
||||
Export_system_includes bazel.StringListAttribute
|
||||
Local_includes bazel.StringListAttribute
|
||||
Absolute_includes bazel.StringListAttribute
|
||||
}
|
||||
|
||||
// TODO(b/199902614): Can this be factored to share with the other Attributes?
|
||||
type bazelCcLibraryStaticAttributes struct {
|
||||
staticOrSharedAttributes
|
||||
includesAttributes
|
||||
|
||||
Use_version_lib bazel.BoolAttribute
|
||||
Rtti bazel.BoolAttribute
|
||||
Stl *string
|
||||
Cpp_std *string
|
||||
C_std *string
|
||||
|
||||
Hdrs bazel.LabelListAttribute
|
||||
|
||||
Cppflags bazel.StringListAttribute
|
||||
Conlyflags bazel.StringListAttribute
|
||||
Asflags bazel.StringListAttribute
|
||||
|
||||
Alwayslink *bool
|
||||
Features bazel.StringListAttribute
|
||||
}
|
||||
|
||||
// TODO(b/199902614): Can this be factored to share with the other Attributes?
|
||||
type bazelCcLibrarySharedAttributes struct {
|
||||
staticOrSharedAttributes
|
||||
includesAttributes
|
||||
|
||||
Linkopts bazel.StringListAttribute
|
||||
Use_version_lib bazel.BoolAttribute
|
||||
|
||||
Rtti bazel.BoolAttribute
|
||||
Stl *string
|
||||
Cpp_std *string
|
||||
C_std *string
|
||||
|
||||
Hdrs bazel.LabelListAttribute
|
||||
|
||||
Strip stripAttributes
|
||||
Additional_linker_inputs bazel.LabelListAttribute
|
||||
|
||||
Cppflags bazel.StringListAttribute
|
||||
Conlyflags bazel.StringListAttribute
|
||||
Asflags bazel.StringListAttribute
|
||||
|
||||
Features bazel.StringListAttribute
|
||||
|
||||
Stubs_symbol_file *string
|
||||
|
||||
Inject_bssl_hash bazel.BoolAttribute
|
||||
|
||||
Stem bazel.StringAttribute
|
||||
Suffix bazel.StringAttribute
|
||||
|
||||
bazelCcHeaderAbiCheckerAttributes
|
||||
|
||||
Fdo_profile bazel.LabelAttribute
|
||||
}
|
||||
|
||||
type bazelCcStubSuiteAttributes struct {
|
||||
Symbol_file *string
|
||||
Versions bazel.StringListAttribute
|
||||
Export_includes bazel.StringListAttribute
|
||||
Source_library_label *string
|
||||
Soname *string
|
||||
Deps bazel.LabelListAttribute
|
||||
Api_surface *string
|
||||
|
||||
// Unless the library is in the NDK, module-libapi stubs should *not* include the public symbols
|
||||
// Soong uses a global variable to determine if the library is in the NDK
|
||||
// Since Bazel does not have global analysis, create an explicit property
|
||||
// This property is only relevant if `api_surface = module-libapi`
|
||||
// https://cs.android.com/android/_/android/platform/build/soong/+/main:cc/library.go;l=1214-1219;drc=7123cc5370a38983ee6325b5f5f6df19f4e4f10b;bpv=1;bpt=0
|
||||
Included_in_ndk *bool
|
||||
}
|
||||
|
||||
type bazelCcHeaderAbiCheckerAttributes struct {
|
||||
Abi_checker_enabled *bool
|
||||
Abi_checker_symbol_file *bazel.Label
|
||||
Abi_checker_exclude_symbol_versions []string
|
||||
Abi_checker_exclude_symbol_tags []string
|
||||
Abi_checker_check_all_apis *bool
|
||||
Abi_checker_diff_flags []string
|
||||
}
|
||||
|
Reference in New Issue
Block a user