bp2build: make libdl build.
This CL adds support for the static and shared props, forwarding
whole_static_libs and srcs to the underlying shared library's
static_deps and static library's srcs respectively.
Test: TH
Fixes: 186609667
Change-Id: I84f838361c7758b256b2a163af894c502de03109
diff --git a/android/bazel.go b/android/bazel.go
index 11fc2b6..e330681 100644
--- a/android/bazel.go
+++ b/android/bazel.go
@@ -205,7 +205,6 @@
// Linker error
"libc_malloc_hooks", // jingwen@, cc_library, undefined symbol: __malloc_hook, etc.
- "libdl", // jingwen@, cc_library, clang failed
"libstdc++", // jingwen@, cc_library, undefined symbol: free
// Includes not found
diff --git a/bp2build/cc_library_conversion_test.go b/bp2build/cc_library_conversion_test.go
index d9cd22d..aa8200b 100644
--- a/bp2build/cc_library_conversion_test.go
+++ b/bp2build/cc_library_conversion_test.go
@@ -50,6 +50,7 @@
expectedBazelTargets []string
filesystem map[string]string
dir string
+ depsMutators []android.RegisterMutatorFunc
}{
{
description: "cc_library - simple example",
@@ -248,6 +249,34 @@
srcs = ["math/cosf.c"],
)`},
},
+ {
+ description: "cc_library shared/static props",
+ moduleTypeUnderTest: "cc_library",
+ moduleTypeUnderTestFactory: cc.LibraryFactory,
+ moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
+ depsMutators: []android.RegisterMutatorFunc{cc.RegisterDepsBp2Build},
+ dir: "foo/bar",
+ filesystem: map[string]string{
+ "foo/bar/a.cpp": "",
+ "foo/bar/Android.bp": `
+cc_library {
+ name: "a",
+ shared: { whole_static_libs: ["b"] },
+ static: { srcs: ["a.cpp"] },
+ bazel_module: { bp2build_available: true },
+}
+
+cc_library_static { name: "b" }
+`,
+ },
+ bp: soongCcLibraryPreamble,
+ expectedBazelTargets: []string{`cc_library(
+ name = "a",
+ copts = ["-Ifoo/bar"],
+ srcs = ["a.cpp"],
+ static_deps_for_shared = [":b"],
+)`},
+ },
}
dir := "."
@@ -266,11 +295,15 @@
ctx := android.NewTestContext(config)
cc.RegisterCCBuildComponents(ctx)
+ ctx.RegisterModuleType("cc_library_static", cc.LibraryStaticFactory)
ctx.RegisterModuleType("toolchain_library", cc.ToolchainLibraryFactory)
ctx.RegisterModuleType("cc_library_headers", cc.LibraryHeaderFactory)
ctx.RegisterModuleType(testCase.moduleTypeUnderTest, testCase.moduleTypeUnderTestFactory)
ctx.RegisterBp2BuildMutator(testCase.moduleTypeUnderTest, testCase.moduleTypeUnderTestBp2BuildMutator)
ctx.RegisterBp2BuildConfig(bp2buildConfig) // TODO(jingwen): make this the default for all tests
+ for _, m := range testCase.depsMutators {
+ ctx.DepsBp2BuildMutators(m)
+ }
ctx.RegisterForBazelConversion()
_, errs := ctx.ParseFileList(dir, toParse)
diff --git a/cc/bp2build.go b/cc/bp2build.go
index 9c4bf6e5..a4db79f 100644
--- a/cc/bp2build.go
+++ b/cc/bp2build.go
@@ -68,9 +68,61 @@
}
}
+ // Deps in the static: { .. } and shared: { .. } props of a cc_library.
+ if lib, ok := module.compiler.(*libraryDecorator); ok {
+ allDeps = append(allDeps, lib.SharedProperties.Shared.Static_libs...)
+ allDeps = append(allDeps, lib.SharedProperties.Shared.Whole_static_libs...)
+ allDeps = append(allDeps, lib.SharedProperties.Shared.Shared_libs...)
+ allDeps = append(allDeps, lib.SharedProperties.Shared.System_shared_libs...)
+
+ allDeps = append(allDeps, lib.StaticProperties.Static.Static_libs...)
+ allDeps = append(allDeps, lib.StaticProperties.Static.Whole_static_libs...)
+ allDeps = append(allDeps, lib.StaticProperties.Static.Shared_libs...)
+ allDeps = append(allDeps, lib.StaticProperties.Static.System_shared_libs...)
+ }
+
ctx.AddDependency(module, nil, android.SortedUniqueStrings(allDeps)...)
}
+type sharedAttributes struct {
+ staticDeps bazel.LabelListAttribute
+}
+
+// bp2buildParseSharedProps returns the attributes for the shared variant of a cc_library.
+func bp2BuildParseSharedProps(ctx android.TopDownMutatorContext, module *Module) sharedAttributes {
+ lib, ok := module.compiler.(*libraryDecorator)
+ if !ok {
+ return sharedAttributes{}
+ }
+
+ var staticDeps bazel.LabelListAttribute
+
+ staticDeps.Value = android.BazelLabelForModuleDeps(ctx, lib.SharedProperties.Shared.Whole_static_libs)
+
+ return sharedAttributes{
+ staticDeps: staticDeps,
+ }
+}
+
+type staticAttributes struct {
+ srcs bazel.LabelListAttribute
+}
+
+// bp2buildParseStaticProps returns the attributes for the static variant of a cc_library.
+func bp2BuildParseStaticProps(ctx android.TopDownMutatorContext, module *Module) staticAttributes {
+ lib, ok := module.compiler.(*libraryDecorator)
+ if !ok {
+ return staticAttributes{}
+ }
+
+ var srcs bazel.LabelListAttribute
+ srcs.Value = android.BazelLabelForModuleSrc(ctx, lib.StaticProperties.Static.Srcs)
+
+ return staticAttributes{
+ srcs: srcs,
+ }
+}
+
// Convenience struct to hold all attributes parsed from compiler properties.
type compilerAttributes struct {
copts bazel.StringListAttribute
diff --git a/cc/library.go b/cc/library.go
index 3a70765..4cd1b09 100644
--- a/cc/library.go
+++ b/cc/library.go
@@ -217,13 +217,14 @@
// For bp2build conversion.
type bazelCcLibraryAttributes struct {
- Srcs bazel.LabelListAttribute
- Hdrs bazel.LabelListAttribute
- Copts bazel.StringListAttribute
- Linkopts bazel.StringListAttribute
- Deps bazel.LabelListAttribute
- User_link_flags bazel.StringListAttribute
- Includes bazel.StringListAttribute
+ Srcs bazel.LabelListAttribute
+ Hdrs bazel.LabelListAttribute
+ Copts bazel.StringListAttribute
+ Linkopts bazel.StringListAttribute
+ Deps bazel.LabelListAttribute
+ User_link_flags bazel.StringListAttribute
+ Includes bazel.StringListAttribute
+ Static_deps_for_shared bazel.LabelListAttribute
}
type bazelCcLibrary struct {
@@ -254,16 +255,23 @@
return
}
+ sharedAttrs := bp2BuildParseSharedProps(ctx, m)
+ staticAttrs := bp2BuildParseStaticProps(ctx, m)
compilerAttrs := bp2BuildParseCompilerProps(ctx, m)
linkerAttrs := bp2BuildParseLinkerProps(ctx, m)
exportedIncludes := bp2BuildParseExportedIncludes(ctx, m)
+ var srcs bazel.LabelListAttribute
+ srcs.Append(compilerAttrs.srcs)
+ srcs.Append(staticAttrs.srcs)
+
attrs := &bazelCcLibraryAttributes{
- Srcs: compilerAttrs.srcs,
- Copts: compilerAttrs.copts,
- Linkopts: linkerAttrs.linkopts,
- Deps: linkerAttrs.deps,
- Includes: exportedIncludes,
+ Srcs: srcs,
+ Copts: compilerAttrs.copts,
+ Linkopts: linkerAttrs.linkopts,
+ Deps: linkerAttrs.deps,
+ Static_deps_for_shared: sharedAttrs.staticDeps,
+ Includes: exportedIncludes,
}
props := bazel.BazelTargetModuleProperties{