summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--android/bazel.go22
-rw-r--r--cc/library.go39
2 files changed, 47 insertions, 14 deletions
diff --git a/android/bazel.go b/android/bazel.go
index 71884a7d2..6c476a78e 100644
--- a/android/bazel.go
+++ b/android/bazel.go
@@ -210,7 +210,6 @@ var (
"libc_tzcode", // http://b/186822591, cc_library_static, localtime.c:84:46: error: expected expression
"libc_bionic_ndk", // http://b/186822256, cc_library_static, signal.cpp:186:52: error: ISO C++ requires field designators to be specified in declaration order
"libc_malloc_hooks", // http://b/187016307, cc_library, ld.lld: error: undefined symbol: __malloc_hook
- "libstdc++", // http://b/186822597, cc_library, ld.lld: error: undefined symbol: __errno
"libm", // http://b/183064661, cc_library, math.h:25:16: error: unexpected token in argument list
// http://b/186823769: Needs C++ STL support, includes from unconverted standard libraries in //external/libcxx
@@ -237,6 +236,12 @@ var (
"libjemalloc5_unittest",
}
+ // Per-module denylist of cc_library modules to only generate the static
+ // variant if their shared variant isn't ready or buildable by Bazel.
+ bp2buildCcLibraryStaticOnlyList = []string{
+ "libstdc++", // http://b/186822597, cc_library, ld.lld: error: undefined symbol: __errno
+ }
+
// Per-module denylist to opt modules out of mixed builds. Such modules will
// still be generated via bp2build.
mixedBuildsDisabledList = []string{
@@ -251,6 +256,7 @@ var (
// Used for quicker lookups
bp2buildDoNotWriteBuildFile = map[string]bool{}
bp2buildModuleDoNotConvert = map[string]bool{}
+ bp2buildCcLibraryStaticOnly = map[string]bool{}
mixedBuildsDisabled = map[string]bool{}
)
@@ -263,11 +269,19 @@ func init() {
bp2buildModuleDoNotConvert[moduleName] = true
}
+ for _, moduleName := range bp2buildCcLibraryStaticOnlyList {
+ bp2buildCcLibraryStaticOnly[moduleName] = true
+ }
+
for _, moduleName := range mixedBuildsDisabledList {
mixedBuildsDisabled[moduleName] = true
}
}
+func GenerateCcLibraryStaticOnly(ctx BazelConversionPathContext) bool {
+ return bp2buildCcLibraryStaticOnly[ctx.Module().Name()]
+}
+
func ShouldWriteBuildFileForDir(dir string) bool {
if _, ok := bp2buildDoNotWriteBuildFile[dir]; ok {
return false
@@ -285,6 +299,12 @@ func (b *BazelModuleBase) MixedBuildsEnabled(ctx BazelConversionPathContext) boo
if len(b.GetBazelLabel(ctx, ctx.Module())) == 0 {
return false
}
+ if GenerateCcLibraryStaticOnly(ctx) {
+ // Don't use partially-converted cc_library targets in mixed builds,
+ // since mixed builds would generally rely on both static and shared
+ // variants of a cc_library.
+ return false
+ }
return !mixedBuildsDisabled[ctx.Module().Name()]
}
diff --git a/cc/library.go b/cc/library.go
index 50d3f67fe..7b631fa16 100644
--- a/cc/library.go
+++ b/cc/library.go
@@ -259,6 +259,14 @@ func CcLibraryBp2Build(ctx android.TopDownMutatorContext) {
return
}
+ // For some cc_library modules, their static variants are ready to be
+ // converted, but not their shared variants. For these modules, delegate to
+ // the cc_library_static bp2build converter temporarily instead.
+ if android.GenerateCcLibraryStaticOnly(ctx) {
+ ccLibraryStaticBp2BuildInternal(ctx, m)
+ return
+ }
+
sharedAttrs := bp2BuildParseSharedProps(ctx, m)
staticAttrs := bp2BuildParseStaticProps(ctx, m)
compilerAttrs := bp2BuildParseCompilerProps(ctx, m)
@@ -2205,19 +2213,7 @@ func BazelCcLibraryStaticFactory() android.Module {
return module
}
-func CcLibraryStaticBp2Build(ctx android.TopDownMutatorContext) {
- module, ok := ctx.Module().(*Module)
- if !ok {
- // Not a cc module
- return
- }
- if !module.ConvertWithBp2build(ctx) {
- return
- }
- if ctx.ModuleType() != "cc_library_static" {
- return
- }
-
+func ccLibraryStaticBp2BuildInternal(ctx android.TopDownMutatorContext, module *Module) {
compilerAttrs := bp2BuildParseCompilerProps(ctx, module)
linkerAttrs := bp2BuildParseLinkerProps(ctx, module)
exportedIncludes := bp2BuildParseExportedIncludes(ctx, module)
@@ -2226,6 +2222,7 @@ func CcLibraryStaticBp2Build(ctx android.TopDownMutatorContext) {
Copts: compilerAttrs.copts,
Srcs: compilerAttrs.srcs,
Deps: linkerAttrs.deps,
+ Linkopts: linkerAttrs.linkopts,
Linkstatic: true,
Includes: exportedIncludes,
}
@@ -2238,6 +2235,22 @@ func CcLibraryStaticBp2Build(ctx android.TopDownMutatorContext) {
ctx.CreateBazelTargetModule(BazelCcLibraryStaticFactory, module.Name(), props, attrs)
}
+func CcLibraryStaticBp2Build(ctx android.TopDownMutatorContext) {
+ module, ok := ctx.Module().(*Module)
+ if !ok {
+ // Not a cc module
+ return
+ }
+ if !module.ConvertWithBp2build(ctx) {
+ return
+ }
+ if ctx.ModuleType() != "cc_library_static" {
+ return
+ }
+
+ ccLibraryStaticBp2BuildInternal(ctx, module)
+}
+
func (m *bazelCcLibraryStatic) Name() string {
return m.BaseModuleName()
}