bp2build: split as, c, and cpp srcs for cc_library
This CL adds support for cc_library to correctly split c, as and cpp
srcs in shared/static nested props, as well as splitting
the *filegroup* deps in those props, where each filegroup is expanded
into its own c, cpp and as srcs filegroups. This ensures that the
correct sources go into cc_library_static's underlying cc_libraries for
c, cpp and as sources respectively.
See the bp2build conversion test for a better visualization.
Bug: 183064430
Test: TH
Change-Id: I29add5140672d042adff65527d8b65f4a5f0a05b
diff --git a/bp2build/cc_library_conversion_test.go b/bp2build/cc_library_conversion_test.go
index b87d713..c8ae031 100644
--- a/bp2build/cc_library_conversion_test.go
+++ b/bp2build/cc_library_conversion_test.go
@@ -47,6 +47,7 @@
func registerCcLibraryModuleTypes(ctx android.RegistrationContext) {
cc.RegisterCCBuildComponents(ctx)
+ ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
ctx.RegisterModuleType("cc_library_static", cc.LibraryStaticFactory)
ctx.RegisterModuleType("toolchain_library", cc.ToolchainLibraryFactory)
ctx.RegisterModuleType("cc_library_headers", cc.LibraryHeaderFactory)
@@ -535,6 +536,139 @@
})
}
+func TestCcLibrarySharedStaticPropsWithMixedSources(t *testing.T) {
+ runCcLibraryTestCase(t, bp2buildTestCase{
+ description: "cc_library shared/static props with c/cpp/s mixed sources",
+ moduleTypeUnderTest: "cc_library",
+ moduleTypeUnderTestFactory: cc.LibraryFactory,
+ moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
+ depsMutators: []android.RegisterMutatorFunc{cc.RegisterDepsBp2Build},
+ dir: "foo/bar",
+ filesystem: map[string]string{
+ "foo/bar/both_source.cpp": "",
+ "foo/bar/both_source.cc": "",
+ "foo/bar/both_source.c": "",
+ "foo/bar/both_source.s": "",
+ "foo/bar/both_source.S": "",
+ "foo/bar/shared_source.cpp": "",
+ "foo/bar/shared_source.cc": "",
+ "foo/bar/shared_source.c": "",
+ "foo/bar/shared_source.s": "",
+ "foo/bar/shared_source.S": "",
+ "foo/bar/static_source.cpp": "",
+ "foo/bar/static_source.cc": "",
+ "foo/bar/static_source.c": "",
+ "foo/bar/static_source.s": "",
+ "foo/bar/static_source.S": "",
+ "foo/bar/Android.bp": `
+cc_library {
+ name: "a",
+ srcs: [
+ "both_source.cpp",
+ "both_source.cc",
+ "both_source.c",
+ "both_source.s",
+ "both_source.S",
+ ":both_filegroup",
+ ],
+ static: {
+ srcs: [
+ "static_source.cpp",
+ "static_source.cc",
+ "static_source.c",
+ "static_source.s",
+ "static_source.S",
+ ":static_filegroup",
+ ],
+ },
+ shared: {
+ srcs: [
+ "shared_source.cpp",
+ "shared_source.cc",
+ "shared_source.c",
+ "shared_source.s",
+ "shared_source.S",
+ ":shared_filegroup",
+ ],
+ },
+ bazel_module: { bp2build_available: true },
+}
+
+filegroup {
+ name: "both_filegroup",
+ srcs: [
+ // Not relevant, handled by filegroup macro
+ ],
+}
+
+filegroup {
+ name: "shared_filegroup",
+ srcs: [
+ // Not relevant, handled by filegroup macro
+ ],
+}
+
+filegroup {
+ name: "static_filegroup",
+ srcs: [
+ // Not relevant, handled by filegroup macro
+ ],
+}
+`,
+ },
+ blueprint: soongCcLibraryPreamble,
+ expectedBazelTargets: []string{`cc_library(
+ name = "a",
+ copts = [
+ "-Ifoo/bar",
+ "-I$(BINDIR)/foo/bar",
+ ],
+ shared_srcs = [
+ ":shared_filegroup_cpp_srcs",
+ "shared_source.cc",
+ "shared_source.cpp",
+ ],
+ shared_srcs_as = [
+ "shared_source.s",
+ "shared_source.S",
+ ":shared_filegroup_as_srcs",
+ ],
+ shared_srcs_c = [
+ "shared_source.c",
+ ":shared_filegroup_c_srcs",
+ ],
+ srcs = [
+ ":both_filegroup_cpp_srcs",
+ "both_source.cc",
+ "both_source.cpp",
+ ],
+ srcs_as = [
+ "both_source.s",
+ "both_source.S",
+ ":both_filegroup_as_srcs",
+ ],
+ srcs_c = [
+ "both_source.c",
+ ":both_filegroup_c_srcs",
+ ],
+ static_srcs = [
+ ":static_filegroup_cpp_srcs",
+ "static_source.cc",
+ "static_source.cpp",
+ ],
+ static_srcs_as = [
+ "static_source.s",
+ "static_source.S",
+ ":static_filegroup_as_srcs",
+ ],
+ static_srcs_c = [
+ "static_source.c",
+ ":static_filegroup_c_srcs",
+ ],
+)`},
+ })
+}
+
func TestCcLibraryNonConfiguredVersionScript(t *testing.T) {
runCcLibraryTestCase(t, bp2buildTestCase{
description: "cc_library non-configured version script",