bp2build: refactor/standardize cc_* bp2build converters
This CL refactors the cc* bp2build converters to use the common
attribute extractors in cc/bp2build.go.
This also adds include_build_directory to be handled by the compiler
attr extractor to generate recursive headers as inputs.
This also turns include_dirs and local_include_dirs into the
execroot-relative -I flags.
e.g. if a module in bionic/libc has "private" in local_include_dirs,
the "-Ibionic/libc/private" copt is generated for it.
Fixes: 185139955
Test: TH
Test: Forrest for mixed_clean-droid
Change-Id: Ib67056482227e62068fbbea0455035bdf5d56319
diff --git a/bp2build/cc_library_conversion_test.go b/bp2build/cc_library_conversion_test.go
index 783af2e..4b6e888 100644
--- a/bp2build/cc_library_conversion_test.go
+++ b/bp2build/cc_library_conversion_test.go
@@ -109,10 +109,22 @@
`,
expectedBazelTargets: []string{`cc_library(
name = "foo-lib",
- copts = ["-Wall"],
+ copts = [
+ "-Wall",
+ "-I.",
+ ],
deps = [":some-headers"],
- hdrs = [
+ hdrs = ["foo-dir/a.h"],
+ includes = ["foo-dir"],
+ linkopts = ["-Wl,--exclude-libs=bar.a"] + select({
+ "//build/bazel/platforms/arch:x86": ["-Wl,--exclude-libs=baz.a"],
+ "//build/bazel/platforms/arch:x86_64": ["-Wl,--exclude-libs=qux.a"],
+ "//conditions:default": [],
+ }),
+ srcs = [
+ "impl.cpp",
"header.h",
+ "foo-dir/a.h",
"header.hh",
"header.hpp",
"header.hxx",
@@ -121,15 +133,7 @@
"header.inc",
"header.ipp",
"header.h.generic",
- "foo-dir/a.h",
- ],
- includes = ["foo-dir"],
- linkopts = ["-Wl,--exclude-libs=bar.a"] + select({
- "//build/bazel/platforms/arch:x86": ["-Wl,--exclude-libs=baz.a"],
- "//build/bazel/platforms/arch:x86_64": ["-Wl,--exclude-libs=qux.a"],
- "//conditions:default": [],
- }),
- srcs = ["impl.cpp"] + select({
+ ] + select({
"//build/bazel/platforms/arch:x86": ["x86.cpp"],
"//build/bazel/platforms/arch:x86_64": ["x86_64.cpp"],
"//conditions:default": [],
@@ -190,14 +194,9 @@
"-Wextra",
"-Wunused",
"-Werror",
+ "-I.",
],
deps = [":libc_headers"],
- hdrs = [
- "linked_list.h",
- "linker.h",
- "linker_block_allocator.h",
- "linker_cfi.h",
- ],
linkopts = [
"-Wl,--exclude-libs=libgcc.a",
"-Wl,--exclude-libs=libgcc_stripped.a",
@@ -210,7 +209,13 @@
"//build/bazel/platforms/arch:x86_64": ["-Wl,--exclude-libs=libgcc_eh.a"],
"//conditions:default": [],
}),
- srcs = ["ld_android.cpp"],
+ srcs = [
+ "ld_android.cpp",
+ "linked_list.h",
+ "linker.h",
+ "linker_block_allocator.h",
+ "linker_cfi.h",
+ ],
)`},
},
}
diff --git a/bp2build/cc_library_headers_conversion_test.go b/bp2build/cc_library_headers_conversion_test.go
index c59241f..3180267 100644
--- a/bp2build/cc_library_headers_conversion_test.go
+++ b/bp2build/cc_library_headers_conversion_test.go
@@ -131,6 +131,7 @@
}`,
expectedBazelTargets: []string{`cc_library_headers(
name = "foo_headers",
+ copts = ["-I."],
deps = [
":lib-1",
":lib-2",
@@ -157,6 +158,7 @@
}),
)`, `cc_library_headers(
name = "lib-1",
+ copts = ["-I."],
hdrs = [
"lib-1/lib1a.h",
"lib-1/lib1b.h",
@@ -164,6 +166,7 @@
includes = ["lib-1"],
)`, `cc_library_headers(
name = "lib-2",
+ copts = ["-I."],
hdrs = [
"lib-2/lib2a.h",
"lib-2/lib2b.h",
@@ -201,12 +204,16 @@
}`,
expectedBazelTargets: []string{`cc_library_headers(
name = "android-lib",
+ copts = ["-I."],
)`, `cc_library_headers(
name = "base-lib",
+ copts = ["-I."],
)`, `cc_library_headers(
name = "darwin-lib",
+ copts = ["-I."],
)`, `cc_library_headers(
name = "foo_headers",
+ copts = ["-I."],
deps = [":base-lib"] + select({
"//build/bazel/platforms/os:android": [":android-lib"],
"//build/bazel/platforms/os:darwin": [":darwin-lib"],
@@ -218,12 +225,16 @@
}),
)`, `cc_library_headers(
name = "fuchsia-lib",
+ copts = ["-I."],
)`, `cc_library_headers(
name = "linux-lib",
+ copts = ["-I."],
)`, `cc_library_headers(
name = "linux_bionic-lib",
+ copts = ["-I."],
)`, `cc_library_headers(
name = "windows-lib",
+ copts = ["-I."],
)`},
},
{
@@ -244,10 +255,13 @@
}`,
expectedBazelTargets: []string{`cc_library_headers(
name = "android-lib",
+ copts = ["-I."],
)`, `cc_library_headers(
name = "exported-lib",
+ copts = ["-I."],
)`, `cc_library_headers(
name = "foo_headers",
+ copts = ["-I."],
deps = select({
"//build/bazel/platforms/os:android": [
":android-lib",
diff --git a/bp2build/cc_library_static_conversion_test.go b/bp2build/cc_library_static_conversion_test.go
index 7e72a8b..00325fb 100644
--- a/bp2build/cc_library_static_conversion_test.go
+++ b/bp2build/cc_library_static_conversion_test.go
@@ -119,71 +119,70 @@
cc_library_static {
name: "static_lib_1",
srcs: ["static_lib_1.cc"],
- bazel_module: { bp2build_available: true },
}
cc_library_static {
name: "static_lib_2",
srcs: ["static_lib_2.cc"],
- bazel_module: { bp2build_available: true },
}
cc_library_static {
name: "whole_static_lib_1",
srcs: ["whole_static_lib_1.cc"],
- bazel_module: { bp2build_available: true },
}
cc_library_static {
name: "whole_static_lib_2",
srcs: ["whole_static_lib_2.cc"],
- bazel_module: { bp2build_available: true },
}
cc_library_static {
name: "foo_static",
srcs: [
"foo_static1.cc",
- "foo_static2.cc",
+ "foo_static2.cc",
],
cflags: [
"-Dflag1",
- "-Dflag2"
+ "-Dflag2"
],
static_libs: [
"static_lib_1",
- "static_lib_2"
+ "static_lib_2"
],
whole_static_libs: [
"whole_static_lib_1",
- "whole_static_lib_2"
+ "whole_static_lib_2"
],
include_dirs: [
- "include_dir_1",
- "include_dir_2",
+ "include_dir_1",
+ "include_dir_2",
],
local_include_dirs: [
"local_include_dir_1",
- "local_include_dir_2",
+ "local_include_dir_2",
],
export_include_dirs: [
- "export_include_dir_1",
- "export_include_dir_2"
+ "export_include_dir_1",
+ "export_include_dir_2"
],
header_libs: [
"header_lib_1",
- "header_lib_2"
+ "header_lib_2"
],
// TODO: Also support export_header_lib_headers
-
- bazel_module: { bp2build_available: true },
}`,
expectedBazelTargets: []string{`cc_library_static(
name = "foo_static",
copts = [
"-Dflag1",
"-Dflag2",
+ "-Iinclude_dir_1",
+ "-Iinclude_dir_2",
+ "-Ilocal_include_dir_1",
+ "-Ilocal_include_dir_2",
+ "-I.",
],
deps = [
":header_lib_1",
@@ -194,8 +193,6 @@
":whole_static_lib_2",
],
hdrs = [
- "implicit_include_1.h",
- "implicit_include_2.h",
"export_include_dir_1/export_include_dir_1_a.h",
"export_include_dir_1/export_include_dir_1_b.h",
"export_include_dir_2/export_include_dir_2_a.h",
@@ -204,16 +201,17 @@
includes = [
"export_include_dir_1",
"export_include_dir_2",
- "include_dir_1",
- "include_dir_2",
- "local_include_dir_1",
- "local_include_dir_2",
- ".",
],
linkstatic = True,
srcs = [
"foo_static1.cc",
"foo_static2.cc",
+ "implicit_include_1.h",
+ "implicit_include_2.h",
+ "export_include_dir_1/export_include_dir_1_a.h",
+ "export_include_dir_1/export_include_dir_1_b.h",
+ "export_include_dir_2/export_include_dir_2_a.h",
+ "export_include_dir_2/export_include_dir_2_b.h",
"include_dir_1/include_dir_1_a.h",
"include_dir_1/include_dir_1_b.h",
"include_dir_2/include_dir_2_a.h",
@@ -222,60 +220,90 @@
"local_include_dir_1/local_include_dir_1_b.h",
"local_include_dir_2/local_include_dir_2_a.h",
"local_include_dir_2/local_include_dir_2_b.h",
- "implicit_include_1.h",
- "implicit_include_2.h",
],
)`, `cc_library_static(
name = "static_lib_1",
- hdrs = [
- "implicit_include_1.h",
- "implicit_include_2.h",
- ],
- includes = ["."],
+ copts = ["-I."],
linkstatic = True,
srcs = [
"static_lib_1.cc",
"implicit_include_1.h",
"implicit_include_2.h",
+ "export_include_dir_1/export_include_dir_1_a.h",
+ "export_include_dir_1/export_include_dir_1_b.h",
+ "export_include_dir_2/export_include_dir_2_a.h",
+ "export_include_dir_2/export_include_dir_2_b.h",
+ "include_dir_1/include_dir_1_a.h",
+ "include_dir_1/include_dir_1_b.h",
+ "include_dir_2/include_dir_2_a.h",
+ "include_dir_2/include_dir_2_b.h",
+ "local_include_dir_1/local_include_dir_1_a.h",
+ "local_include_dir_1/local_include_dir_1_b.h",
+ "local_include_dir_2/local_include_dir_2_a.h",
+ "local_include_dir_2/local_include_dir_2_b.h",
],
)`, `cc_library_static(
name = "static_lib_2",
- hdrs = [
- "implicit_include_1.h",
- "implicit_include_2.h",
- ],
- includes = ["."],
+ copts = ["-I."],
linkstatic = True,
srcs = [
"static_lib_2.cc",
"implicit_include_1.h",
"implicit_include_2.h",
+ "export_include_dir_1/export_include_dir_1_a.h",
+ "export_include_dir_1/export_include_dir_1_b.h",
+ "export_include_dir_2/export_include_dir_2_a.h",
+ "export_include_dir_2/export_include_dir_2_b.h",
+ "include_dir_1/include_dir_1_a.h",
+ "include_dir_1/include_dir_1_b.h",
+ "include_dir_2/include_dir_2_a.h",
+ "include_dir_2/include_dir_2_b.h",
+ "local_include_dir_1/local_include_dir_1_a.h",
+ "local_include_dir_1/local_include_dir_1_b.h",
+ "local_include_dir_2/local_include_dir_2_a.h",
+ "local_include_dir_2/local_include_dir_2_b.h",
],
)`, `cc_library_static(
name = "whole_static_lib_1",
- hdrs = [
- "implicit_include_1.h",
- "implicit_include_2.h",
- ],
- includes = ["."],
+ copts = ["-I."],
linkstatic = True,
srcs = [
"whole_static_lib_1.cc",
"implicit_include_1.h",
"implicit_include_2.h",
+ "export_include_dir_1/export_include_dir_1_a.h",
+ "export_include_dir_1/export_include_dir_1_b.h",
+ "export_include_dir_2/export_include_dir_2_a.h",
+ "export_include_dir_2/export_include_dir_2_b.h",
+ "include_dir_1/include_dir_1_a.h",
+ "include_dir_1/include_dir_1_b.h",
+ "include_dir_2/include_dir_2_a.h",
+ "include_dir_2/include_dir_2_b.h",
+ "local_include_dir_1/local_include_dir_1_a.h",
+ "local_include_dir_1/local_include_dir_1_b.h",
+ "local_include_dir_2/local_include_dir_2_a.h",
+ "local_include_dir_2/local_include_dir_2_b.h",
],
)`, `cc_library_static(
name = "whole_static_lib_2",
- hdrs = [
- "implicit_include_1.h",
- "implicit_include_2.h",
- ],
- includes = ["."],
+ copts = ["-I."],
linkstatic = True,
srcs = [
"whole_static_lib_2.cc",
"implicit_include_1.h",
"implicit_include_2.h",
+ "export_include_dir_1/export_include_dir_1_a.h",
+ "export_include_dir_1/export_include_dir_1_b.h",
+ "export_include_dir_2/export_include_dir_2_a.h",
+ "export_include_dir_2/export_include_dir_2_b.h",
+ "include_dir_1/include_dir_1_a.h",
+ "include_dir_1/include_dir_1_b.h",
+ "include_dir_2/include_dir_2_a.h",
+ "include_dir_2/include_dir_2_b.h",
+ "local_include_dir_1/local_include_dir_1_a.h",
+ "local_include_dir_1/local_include_dir_1_b.h",
+ "local_include_dir_2/local_include_dir_2_a.h",
+ "local_include_dir_2/local_include_dir_2_b.h",
],
)`},
},
@@ -306,14 +334,12 @@
include_dirs: [
"subpackage",
],
-
- bazel_module: { bp2build_available: true },
}`,
expectedBazelTargets: []string{`cc_library_static(
name = "foo_static",
- includes = [
- "subpackage",
- ".",
+ copts = [
+ "-Isubpackage",
+ "-I.",
],
linkstatic = True,
srcs = [
@@ -326,6 +352,299 @@
],
)`},
},
+ {
+ description: "cc_library_static export include dir",
+ moduleTypeUnderTest: "cc_library_static",
+ moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
+ moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
+ filesystem: map[string]string{
+ // subpackage with subdirectory
+ "subpackage/Android.bp": "",
+ "subpackage/subpackage_header.h": "",
+ "subpackage/subdirectory/subdirectory_header.h": "",
+ },
+ bp: soongCcLibraryStaticPreamble + `
+cc_library_static {
+ name: "foo_static",
+ export_include_dirs: ["subpackage"],
+}`,
+ expectedBazelTargets: []string{`cc_library_static(
+ name = "foo_static",
+ copts = ["-I."],
+ hdrs = [
+ "//subpackage:subdirectory/subdirectory_header.h",
+ "//subpackage:subpackage_header.h",
+ ],
+ includes = ["subpackage"],
+ linkstatic = True,
+ srcs = [
+ "//subpackage:subpackage_header.h",
+ "//subpackage:subdirectory/subdirectory_header.h",
+ ],
+)`},
+ },
+ {
+ description: "cc_library_static export system include dir",
+ moduleTypeUnderTest: "cc_library_static",
+ moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
+ moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
+ filesystem: map[string]string{
+ // subpackage with subdirectory
+ "subpackage/Android.bp": "",
+ "subpackage/subpackage_header.h": "",
+ "subpackage/subdirectory/subdirectory_header.h": "",
+ },
+ bp: soongCcLibraryStaticPreamble + `
+cc_library_static {
+ name: "foo_static",
+ export_system_include_dirs: ["subpackage"],
+}`,
+ expectedBazelTargets: []string{`cc_library_static(
+ name = "foo_static",
+ copts = ["-I."],
+ hdrs = [
+ "//subpackage:subdirectory/subdirectory_header.h",
+ "//subpackage:subpackage_header.h",
+ ],
+ includes = ["subpackage"],
+ linkstatic = True,
+ srcs = [
+ "//subpackage:subpackage_header.h",
+ "//subpackage:subdirectory/subdirectory_header.h",
+ ],
+)`},
+ },
+ {
+ description: "cc_library_static include_dirs, local_include_dirs, export_include_dirs (b/183742505)",
+ moduleTypeUnderTest: "cc_library_static",
+ moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
+ moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
+ dir: "subpackage",
+ filesystem: map[string]string{
+ // subpackage with subdirectory
+ "subpackage/Android.bp": `
+cc_library_static {
+ name: "foo_static",
+ // include_dirs are workspace/root relative
+ include_dirs: [
+ "subpackage/subsubpackage",
+ "subpackage2",
+ "subpackage3/subsubpackage"
+ ],
+ local_include_dirs: ["subsubpackage2"], // module dir relative
+ export_include_dirs: ["./exported_subsubpackage"], // module dir relative
+ include_build_directory: true,
+ bazel_module: { bp2build_available: true },
+}`,
+ "subpackage/subsubpackage/header.h": "",
+ "subpackage/subsubpackage2/header.h": "",
+ "subpackage/exported_subsubpackage/header.h": "",
+ "subpackage2/header.h": "",
+ "subpackage3/subsubpackage/header.h": "",
+ },
+ bp: soongCcLibraryStaticPreamble,
+ expectedBazelTargets: []string{`cc_library_static(
+ name = "foo_static",
+ copts = [
+ "-Isubpackage/subsubpackage",
+ "-Isubpackage2",
+ "-Isubpackage3/subsubpackage",
+ "-Isubpackage/subsubpackage2",
+ "-Isubpackage",
+ ],
+ hdrs = ["exported_subsubpackage/header.h"],
+ includes = ["./exported_subsubpackage"],
+ linkstatic = True,
+ srcs = [
+ "exported_subsubpackage/header.h",
+ "subsubpackage/header.h",
+ "subsubpackage2/header.h",
+ ],
+)`},
+ },
+ {
+ description: "cc_library_static include_build_directory disabled",
+ moduleTypeUnderTest: "cc_library_static",
+ moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
+ moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
+ filesystem: map[string]string{
+ // subpackage with subdirectory
+ "subpackage/Android.bp": "",
+ "subpackage/subpackage_header.h": "",
+ "subpackage/subdirectory/subdirectory_header.h": "",
+ },
+ bp: soongCcLibraryStaticPreamble + `
+cc_library_static {
+ name: "foo_static",
+ include_dirs: ["subpackage"], // still used, but local_include_dirs is recommended
+ local_include_dirs: ["subpackage2"],
+ include_build_directory: false,
+}`,
+ expectedBazelTargets: []string{`cc_library_static(
+ name = "foo_static",
+ copts = [
+ "-Isubpackage",
+ "-Isubpackage2",
+ ],
+ linkstatic = True,
+)`},
+ },
+ {
+ description: "cc_library_static include_build_directory enabled",
+ moduleTypeUnderTest: "cc_library_static",
+ moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
+ moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
+ filesystem: map[string]string{
+ // subpackage with subdirectory
+ "subpackage/Android.bp": "",
+ "subpackage/subpackage_header.h": "",
+ "subpackage2/Android.bp": "",
+ "subpackage2/subpackage2_header.h": "",
+ "subpackage/subdirectory/subdirectory_header.h": "",
+ },
+ bp: soongCcLibraryStaticPreamble + `
+cc_library_static {
+ name: "foo_static",
+ include_dirs: ["subpackage"], // still used, but local_include_dirs is recommended
+ local_include_dirs: ["subpackage2"],
+ include_build_directory: true,
+}`,
+ expectedBazelTargets: []string{`cc_library_static(
+ name = "foo_static",
+ copts = [
+ "-Isubpackage",
+ "-Isubpackage2",
+ "-I.",
+ ],
+ linkstatic = True,
+ srcs = [
+ "//subpackage:subpackage_header.h",
+ "//subpackage:subdirectory/subdirectory_header.h",
+ "//subpackage2:subpackage2_header.h",
+ ],
+)`},
+ },
+ {
+ description: "cc_library_static arch-specific static_libs",
+ moduleTypeUnderTest: "cc_library_static",
+ moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
+ moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
+ depsMutators: []android.RegisterMutatorFunc{cc.RegisterDepsBp2Build},
+ filesystem: map[string]string{},
+ bp: soongCcLibraryStaticPreamble + `
+cc_library_static { name: "static_dep" }
+cc_library_static { name: "static_dep2" }
+cc_library_static {
+ name: "foo_static",
+ arch: { arm64: { static_libs: ["static_dep"], whole_static_libs: ["static_dep2"] } },
+}`,
+ expectedBazelTargets: []string{`cc_library_static(
+ name = "foo_static",
+ copts = ["-I."],
+ deps = select({
+ "//build/bazel/platforms/arch:arm64": [
+ ":static_dep",
+ ":static_dep2",
+ ],
+ "//conditions:default": [],
+ }),
+ linkstatic = True,
+)`, `cc_library_static(
+ name = "static_dep",
+ copts = ["-I."],
+ linkstatic = True,
+)`, `cc_library_static(
+ name = "static_dep2",
+ copts = ["-I."],
+ linkstatic = True,
+)`},
+ },
+ {
+ description: "cc_library_static os-specific static_libs",
+ moduleTypeUnderTest: "cc_library_static",
+ moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
+ moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
+ depsMutators: []android.RegisterMutatorFunc{cc.RegisterDepsBp2Build},
+ filesystem: map[string]string{},
+ bp: soongCcLibraryStaticPreamble + `
+cc_library_static { name: "static_dep" }
+cc_library_static { name: "static_dep2" }
+cc_library_static {
+ name: "foo_static",
+ target: { android: { static_libs: ["static_dep"], whole_static_libs: ["static_dep2"] } },
+}`,
+ expectedBazelTargets: []string{`cc_library_static(
+ name = "foo_static",
+ copts = ["-I."],
+ deps = select({
+ "//build/bazel/platforms/os:android": [
+ ":static_dep",
+ ":static_dep2",
+ ],
+ "//conditions:default": [],
+ }),
+ linkstatic = True,
+)`, `cc_library_static(
+ name = "static_dep",
+ copts = ["-I."],
+ linkstatic = True,
+)`, `cc_library_static(
+ name = "static_dep2",
+ copts = ["-I."],
+ linkstatic = True,
+)`},
+ },
+ {
+ description: "cc_library_static base, arch and os-specific static_libs",
+ moduleTypeUnderTest: "cc_library_static",
+ moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
+ moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
+ depsMutators: []android.RegisterMutatorFunc{cc.RegisterDepsBp2Build},
+ filesystem: map[string]string{},
+ bp: soongCcLibraryStaticPreamble + `
+cc_library_static { name: "static_dep" }
+cc_library_static { name: "static_dep2" }
+cc_library_static { name: "static_dep3" }
+cc_library_static { name: "static_dep4" }
+cc_library_static {
+ name: "foo_static",
+ static_libs: ["static_dep"],
+ whole_static_libs: ["static_dep2"],
+ target: { android: { static_libs: ["static_dep3"] } },
+ arch: { arm64: { static_libs: ["static_dep4"] } },
+}`,
+ expectedBazelTargets: []string{`cc_library_static(
+ name = "foo_static",
+ copts = ["-I."],
+ deps = [
+ ":static_dep",
+ ":static_dep2",
+ ] + select({
+ "//build/bazel/platforms/arch:arm64": [":static_dep4"],
+ "//conditions:default": [],
+ }) + select({
+ "//build/bazel/platforms/os:android": [":static_dep3"],
+ "//conditions:default": [],
+ }),
+ linkstatic = True,
+)`, `cc_library_static(
+ name = "static_dep",
+ copts = ["-I."],
+ linkstatic = True,
+)`, `cc_library_static(
+ name = "static_dep2",
+ copts = ["-I."],
+ linkstatic = True,
+)`, `cc_library_static(
+ name = "static_dep3",
+ copts = ["-I."],
+ linkstatic = True,
+)`, `cc_library_static(
+ name = "static_dep4",
+ copts = ["-I."],
+ linkstatic = True,
+)`},
+ },
}
dir := "."
@@ -352,6 +671,7 @@
ctx.DepsBp2BuildMutators(m)
}
ctx.RegisterBp2BuildMutator(testCase.moduleTypeUnderTest, testCase.moduleTypeUnderTestBp2BuildMutator)
+ ctx.RegisterBp2BuildConfig(bp2buildConfig)
ctx.RegisterForBazelConversion()
_, errs := ctx.ParseFileList(dir, toParse)
diff --git a/bp2build/cc_object_conversion_test.go b/bp2build/cc_object_conversion_test.go
index a9d24ac..d00a1cb 100644
--- a/bp2build/cc_object_conversion_test.go
+++ b/bp2build/cc_object_conversion_test.go
@@ -55,8 +55,6 @@
"a/b/*.c"
],
exclude_srcs: ["a/b/exclude.c"],
-
- bazel_module: { bp2build_available: true },
}
`,
expectedBazelTargets: []string{`cc_object(
@@ -66,16 +64,14 @@
"-Wno-gcc-compat",
"-Wall",
"-Werror",
+ "-Iinclude",
+ "-I.",
],
- hdrs = [
+ srcs = [
+ "a/b/c.c",
"a/b/bar.h",
"a/b/foo.h",
],
- local_include_dirs = [
- "include",
- ".",
- ],
- srcs = ["a/b/c.c"],
)`,
},
},
@@ -93,7 +89,6 @@
],
defaults: ["foo_defaults"],
- bazel_module: { bp2build_available: true },
}
cc_defaults {
@@ -117,10 +112,8 @@
"-Wall",
"-Werror",
"-fno-addrsig",
- ],
- local_include_dirs = [
- "include",
- ".",
+ "-Iinclude",
+ "-I.",
],
srcs = ["a/b/c.c"],
)`,
@@ -139,27 +132,27 @@
name: "foo",
srcs: ["a/b/c.c"],
objs: ["bar"],
-
- bazel_module: { bp2build_available: true },
}
cc_object {
name: "bar",
srcs: ["x/y/z.c"],
-
- bazel_module: { bp2build_available: true },
}
`,
expectedBazelTargets: []string{`cc_object(
name = "bar",
- copts = ["-fno-addrsig"],
- local_include_dirs = ["."],
+ copts = [
+ "-fno-addrsig",
+ "-I.",
+ ],
srcs = ["x/y/z.c"],
)`, `cc_object(
name = "foo",
- copts = ["-fno-addrsig"],
+ copts = [
+ "-fno-addrsig",
+ "-I.",
+ ],
deps = [":bar"],
- local_include_dirs = ["."],
srcs = ["a/b/c.c"],
)`,
},
@@ -177,8 +170,6 @@
name: "foo",
srcs: ["a/b/c.c"],
include_build_directory: false,
-
- bazel_module: { bp2build_available: true },
}
`,
expectedBazelTargets: []string{`cc_object(
@@ -201,8 +192,6 @@
asflags: ["-DPLATFORM_SDK_VERSION=%d"],
},
},
-
- bazel_module: { bp2build_available: true },
}
`,
expectedBazelTargets: []string{`cc_object(
@@ -233,6 +222,7 @@
ctx.RegisterModuleType(testCase.moduleTypeUnderTest, testCase.moduleTypeUnderTestFactory)
ctx.RegisterBp2BuildMutator(testCase.moduleTypeUnderTest, testCase.moduleTypeUnderTestBp2BuildMutator)
+ ctx.RegisterBp2BuildConfig(bp2buildConfig)
ctx.RegisterForBazelConversion()
_, errs := ctx.ParseFileList(dir, toParse)
@@ -290,17 +280,18 @@
srcs: ["arch/arm/file.S"], // label list
},
},
- bazel_module: { bp2build_available: true },
}
`,
expectedBazelTargets: []string{
`cc_object(
name = "foo",
- copts = ["-fno-addrsig"] + select({
+ copts = [
+ "-fno-addrsig",
+ "-I.",
+ ] + select({
"//build/bazel/platforms/arch:x86": ["-fPIC"],
"//conditions:default": [],
}),
- local_include_dirs = ["."],
srcs = ["a.cpp"] + select({
"//build/bazel/platforms/arch:arm": ["arch/arm/file.S"],
"//conditions:default": [],
@@ -334,20 +325,21 @@
cflags: ["-Wall"],
},
},
- bazel_module: { bp2build_available: true },
}
`,
expectedBazelTargets: []string{
`cc_object(
name = "foo",
- copts = ["-fno-addrsig"] + select({
+ copts = [
+ "-fno-addrsig",
+ "-I.",
+ ] + select({
"//build/bazel/platforms/arch:arm": ["-Wall"],
"//build/bazel/platforms/arch:arm64": ["-Wall"],
"//build/bazel/platforms/arch:x86": ["-fPIC"],
"//build/bazel/platforms/arch:x86_64": ["-fPIC"],
"//conditions:default": [],
}),
- local_include_dirs = ["."],
srcs = ["base.cpp"] + select({
"//build/bazel/platforms/arch:arm": ["arm.cpp"],
"//build/bazel/platforms/arch:arm64": ["arm64.cpp"],
@@ -377,19 +369,20 @@
cflags: ["-Wall"],
},
},
- bazel_module: { bp2build_available: true },
}
`,
expectedBazelTargets: []string{
`cc_object(
name = "foo",
- copts = ["-fno-addrsig"] + select({
+ copts = [
+ "-fno-addrsig",
+ "-I.",
+ ] + select({
"//build/bazel/platforms/os:android": ["-fPIC"],
"//build/bazel/platforms/os:darwin": ["-Wall"],
"//build/bazel/platforms/os:windows": ["-fPIC"],
"//conditions:default": [],
}),
- local_include_dirs = ["."],
srcs = ["base.cpp"],
)`,
},
@@ -409,6 +402,7 @@
ctx.RegisterModuleType(testCase.moduleTypeUnderTest, testCase.moduleTypeUnderTestFactory)
ctx.RegisterBp2BuildMutator(testCase.moduleTypeUnderTest, testCase.moduleTypeUnderTestBp2BuildMutator)
+ ctx.RegisterBp2BuildConfig(bp2buildConfig)
ctx.RegisterForBazelConversion()
_, errs := ctx.ParseFileList(dir, toParse)
diff --git a/bp2build/configurability.go b/bp2build/configurability.go
index 97729df..b9ffc04 100644
--- a/bp2build/configurability.go
+++ b/bp2build/configurability.go
@@ -110,7 +110,11 @@
if err != nil {
return "", err
}
- selects += s + ",\n"
+ // s could still be an empty string, e.g. unset slices of structs with
+ // length of 0.
+ if s != "" {
+ selects += s + ",\n"
+ }
}
if len(selects) == 0 {
@@ -137,6 +141,9 @@
if err != nil {
return "", err
}
+ if v == "" {
+ return "", nil
+ }
s += fmt.Sprintf("\"%s\": %s", key, v)
return s, nil
}