blob: 9decea4f4f012d6e787459ac40630c50e4001632 [file] [log] [blame]
Jingwen Chen63930982021-03-24 10:04:33 -04001// Copyright 2021 Google Inc. All rights reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package bp2build
16
17import (
Jingwen Chen6ada5892021-09-17 11:38:09 +000018 "fmt"
Alex Márquez Pérez Muñíz Díaz Púras Thaureaux1c92aef2021-08-23 16:10:00 +000019 "testing"
20
Jingwen Chen63930982021-03-24 10:04:33 -040021 "android/soong/android"
22 "android/soong/cc"
Jingwen Chen63930982021-03-24 10:04:33 -040023)
24
25const (
26 // See cc/testing.go for more context
27 soongCcLibraryPreamble = `
28cc_defaults {
Liz Kammer8337ea42021-09-10 10:06:32 -040029 name: "linux_bionic_supported",
Jingwen Chen63930982021-03-24 10:04:33 -040030}`
Liz Kammer12615db2021-09-28 09:19:17 -040031
32 soongCcProtoLibraries = `
33cc_library {
34 name: "libprotobuf-cpp-lite",
35 bazel_module: { bp2build_available: false },
36}
37
38cc_library {
39 name: "libprotobuf-cpp-full",
40 bazel_module: { bp2build_available: false },
41}`
42
43 soongCcProtoPreamble = soongCcLibraryPreamble + soongCcProtoLibraries
Jingwen Chen63930982021-03-24 10:04:33 -040044)
45
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020046func runCcLibraryTestCase(t *testing.T, tc bp2buildTestCase) {
Liz Kammere4982e82021-05-25 10:39:35 -040047 t.Helper()
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020048 runBp2BuildTestCase(t, registerCcLibraryModuleTypes, tc)
49}
50
51func registerCcLibraryModuleTypes(ctx android.RegistrationContext) {
52 cc.RegisterCCBuildComponents(ctx)
Jingwen Chen14a8bda2021-06-02 11:10:02 +000053 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020054 ctx.RegisterModuleType("cc_library_static", cc.LibraryStaticFactory)
Liz Kammer2d7bbe32021-06-10 18:20:06 -040055 ctx.RegisterModuleType("cc_prebuilt_library_static", cc.PrebuiltStaticLibraryFactory)
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020056 ctx.RegisterModuleType("cc_library_headers", cc.LibraryHeaderFactory)
57}
58
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020059func TestCcLibrarySimple(t *testing.T) {
60 runCcLibraryTestCase(t, bp2buildTestCase{
Liz Kammerbe46fcc2021-11-01 15:32:43 -040061 description: "cc_library - simple example",
62 moduleTypeUnderTest: "cc_library",
63 moduleTypeUnderTestFactory: cc.LibraryFactory,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020064 filesystem: map[string]string{
65 "android.cpp": "",
Liz Kammer01a16e82021-07-16 16:33:47 -040066 "bionic.cpp": "",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020067 "darwin.cpp": "",
68 // Refer to cc.headerExts for the supported header extensions in Soong.
69 "header.h": "",
70 "header.hh": "",
71 "header.hpp": "",
72 "header.hxx": "",
73 "header.h++": "",
74 "header.inl": "",
75 "header.inc": "",
76 "header.ipp": "",
77 "header.h.generic": "",
78 "impl.cpp": "",
79 "linux.cpp": "",
80 "x86.cpp": "",
81 "x86_64.cpp": "",
82 "foo-dir/a.h": "",
83 },
Liz Kammer78cfdaa2021-11-08 12:56:31 -050084 blueprint: soongCcLibraryPreamble +
85 simpleModuleDoNotConvertBp2build("cc_library_headers", "some-headers") + `
Jingwen Chen63930982021-03-24 10:04:33 -040086cc_library {
87 name: "foo-lib",
88 srcs: ["impl.cpp"],
89 cflags: ["-Wall"],
90 header_libs: ["some-headers"],
91 export_include_dirs: ["foo-dir"],
92 ldflags: ["-Wl,--exclude-libs=bar.a"],
93 arch: {
94 x86: {
95 ldflags: ["-Wl,--exclude-libs=baz.a"],
96 srcs: ["x86.cpp"],
97 },
98 x86_64: {
99 ldflags: ["-Wl,--exclude-libs=qux.a"],
100 srcs: ["x86_64.cpp"],
101 },
102 },
103 target: {
104 android: {
105 srcs: ["android.cpp"],
106 },
107 linux_glibc: {
108 srcs: ["linux.cpp"],
109 },
110 darwin: {
111 srcs: ["darwin.cpp"],
112 },
Liz Kammer01a16e82021-07-16 16:33:47 -0400113 bionic: {
114 srcs: ["bionic.cpp"]
115 },
Jingwen Chen63930982021-03-24 10:04:33 -0400116 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400117 include_build_directory: false,
Jingwen Chen63930982021-03-24 10:04:33 -0400118}
119`,
Chris Parsons77acf2e2021-12-03 17:27:16 -0500120 expectedBazelTargets: makeCcLibraryTargets("foo-lib", attrNameToString{
121 "copts": `["-Wall"]`,
122 "export_includes": `["foo-dir"]`,
123 "implementation_deps": `[":some-headers"]`,
124 "linkopts": `["-Wl,--exclude-libs=bar.a"] + select({
Jingwen Chened9c17d2021-04-13 07:14:55 +0000125 "//build/bazel/platforms/arch:x86": ["-Wl,--exclude-libs=baz.a"],
126 "//build/bazel/platforms/arch:x86_64": ["-Wl,--exclude-libs=qux.a"],
127 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500128 })`,
Chris Parsons77acf2e2021-12-03 17:27:16 -0500129 "srcs": `["impl.cpp"] + select({
Jingwen Chenb4628eb2021-04-08 14:40:57 +0000130 "//build/bazel/platforms/arch:x86": ["x86.cpp"],
131 "//build/bazel/platforms/arch:x86_64": ["x86_64.cpp"],
Jingwen Chen63930982021-03-24 10:04:33 -0400132 "//conditions:default": [],
133 }) + select({
Chris Parsons2dde0cb2021-10-01 14:45:30 -0400134 "//build/bazel/platforms/os:android": [
Chris Parsons2dde0cb2021-10-01 14:45:30 -0400135 "bionic.cpp",
Liz Kammerfdd72e62021-10-11 15:41:03 -0400136 "android.cpp",
Chris Parsons2dde0cb2021-10-01 14:45:30 -0400137 ],
Jingwen Chenb4628eb2021-04-08 14:40:57 +0000138 "//build/bazel/platforms/os:darwin": ["darwin.cpp"],
139 "//build/bazel/platforms/os:linux": ["linux.cpp"],
Chris Parsons2dde0cb2021-10-01 14:45:30 -0400140 "//build/bazel/platforms/os:linux_bionic": ["bionic.cpp"],
Liz Kammer01a16e82021-07-16 16:33:47 -0400141 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500142 })`,
Chris Parsons77acf2e2021-12-03 17:27:16 -0500143 }),
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500144 })
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200145}
146
147func TestCcLibraryTrimmedLdAndroid(t *testing.T) {
148 runCcLibraryTestCase(t, bp2buildTestCase{
Liz Kammerbe46fcc2021-11-01 15:32:43 -0400149 description: "cc_library - trimmed example of //bionic/linker:ld-android",
150 moduleTypeUnderTest: "cc_library",
151 moduleTypeUnderTestFactory: cc.LibraryFactory,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200152 filesystem: map[string]string{
153 "ld-android.cpp": "",
154 "linked_list.h": "",
155 "linker.h": "",
156 "linker_block_allocator.h": "",
157 "linker_cfi.h": "",
Jingwen Chen63930982021-03-24 10:04:33 -0400158 },
Liz Kammerbe46fcc2021-11-01 15:32:43 -0400159 blueprint: soongCcLibraryPreamble +
160 simpleModuleDoNotConvertBp2build("cc_library_headers", "libc_headers") + `
Jingwen Chen63930982021-03-24 10:04:33 -0400161cc_library {
162 name: "fake-ld-android",
163 srcs: ["ld_android.cpp"],
164 cflags: [
165 "-Wall",
166 "-Wextra",
167 "-Wunused",
168 "-Werror",
169 ],
170 header_libs: ["libc_headers"],
171 ldflags: [
172 "-Wl,--exclude-libs=libgcc.a",
173 "-Wl,--exclude-libs=libgcc_stripped.a",
174 "-Wl,--exclude-libs=libclang_rt.builtins-arm-android.a",
175 "-Wl,--exclude-libs=libclang_rt.builtins-aarch64-android.a",
176 "-Wl,--exclude-libs=libclang_rt.builtins-i686-android.a",
177 "-Wl,--exclude-libs=libclang_rt.builtins-x86_64-android.a",
178 ],
179 arch: {
180 x86: {
181 ldflags: ["-Wl,--exclude-libs=libgcc_eh.a"],
182 },
183 x86_64: {
184 ldflags: ["-Wl,--exclude-libs=libgcc_eh.a"],
185 },
186 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400187 include_build_directory: false,
Jingwen Chen63930982021-03-24 10:04:33 -0400188}
189`,
Chris Parsons77acf2e2021-12-03 17:27:16 -0500190 expectedBazelTargets: makeCcLibraryTargets("fake-ld-android", attrNameToString{
191 "srcs": `["ld_android.cpp"]`,
192 "copts": `[
Jingwen Chen63930982021-03-24 10:04:33 -0400193 "-Wall",
194 "-Wextra",
195 "-Wunused",
196 "-Werror",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500197 ]`,
Chris Parsons77acf2e2021-12-03 17:27:16 -0500198 "implementation_deps": `[":libc_headers"]`,
199 "linkopts": `[
Jingwen Chen63930982021-03-24 10:04:33 -0400200 "-Wl,--exclude-libs=libgcc.a",
201 "-Wl,--exclude-libs=libgcc_stripped.a",
202 "-Wl,--exclude-libs=libclang_rt.builtins-arm-android.a",
203 "-Wl,--exclude-libs=libclang_rt.builtins-aarch64-android.a",
204 "-Wl,--exclude-libs=libclang_rt.builtins-i686-android.a",
205 "-Wl,--exclude-libs=libclang_rt.builtins-x86_64-android.a",
206 ] + select({
Jingwen Chenb4628eb2021-04-08 14:40:57 +0000207 "//build/bazel/platforms/arch:x86": ["-Wl,--exclude-libs=libgcc_eh.a"],
208 "//build/bazel/platforms/arch:x86_64": ["-Wl,--exclude-libs=libgcc_eh.a"],
Jingwen Chen63930982021-03-24 10:04:33 -0400209 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500210 })`,
Chris Parsons77acf2e2021-12-03 17:27:16 -0500211 }),
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200212 })
213}
214
215func TestCcLibraryExcludeSrcs(t *testing.T) {
216 runCcLibraryTestCase(t, bp2buildTestCase{
Liz Kammerbe46fcc2021-11-01 15:32:43 -0400217 description: "cc_library exclude_srcs - trimmed example of //external/arm-optimized-routines:libarm-optimized-routines-math",
218 moduleTypeUnderTest: "cc_library",
219 moduleTypeUnderTestFactory: cc.LibraryFactory,
220 dir: "external",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200221 filesystem: map[string]string{
222 "external/math/cosf.c": "",
223 "external/math/erf.c": "",
224 "external/math/erf_data.c": "",
225 "external/math/erff.c": "",
226 "external/math/erff_data.c": "",
227 "external/Android.bp": `
Jingwen Chen4ecc67d2021-04-27 09:47:02 +0000228cc_library {
229 name: "fake-libarm-optimized-routines-math",
230 exclude_srcs: [
231 // Provided by:
232 // bionic/libm/upstream-freebsd/lib/msun/src/s_erf.c
233 // bionic/libm/upstream-freebsd/lib/msun/src/s_erff.c
234 "math/erf.c",
235 "math/erf_data.c",
236 "math/erff.c",
237 "math/erff_data.c",
238 ],
239 srcs: [
240 "math/*.c",
241 ],
242 // arch-specific settings
243 arch: {
244 arm64: {
245 cflags: [
246 "-DHAVE_FAST_FMA=1",
247 ],
248 },
249 },
250 bazel_module: { bp2build_available: true },
251}
252`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200253 },
254 blueprint: soongCcLibraryPreamble,
Chris Parsons77acf2e2021-12-03 17:27:16 -0500255 expectedBazelTargets: makeCcLibraryTargets("fake-libarm-optimized-routines-math", attrNameToString{
256 "copts": `select({
Jingwen Chen4ecc67d2021-04-27 09:47:02 +0000257 "//build/bazel/platforms/arch:arm64": ["-DHAVE_FAST_FMA=1"],
258 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500259 })`,
Chris Parsons77acf2e2021-12-03 17:27:16 -0500260 "local_includes": `["."]`,
261 "srcs_c": `["math/cosf.c"]`,
262 }),
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200263 })
264}
265
266func TestCcLibrarySharedStaticProps(t *testing.T) {
267 runCcLibraryTestCase(t, bp2buildTestCase{
Liz Kammerbe46fcc2021-11-01 15:32:43 -0400268 description: "cc_library shared/static props",
269 moduleTypeUnderTest: "cc_library",
270 moduleTypeUnderTestFactory: cc.LibraryFactory,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200271 filesystem: map[string]string{
Liz Kammer8337ea42021-09-10 10:06:32 -0400272 "both.cpp": "",
273 "sharedonly.cpp": "",
274 "staticonly.cpp": "",
275 },
276 blueprint: soongCcLibraryPreamble + `
Jingwen Chen53681ef2021-04-29 08:15:13 +0000277cc_library {
278 name: "a",
Chris Parsons08648312021-05-06 16:23:19 -0400279 srcs: ["both.cpp"],
280 cflags: ["bothflag"],
281 shared_libs: ["shared_dep_for_both"],
282 static_libs: ["static_dep_for_both"],
283 whole_static_libs: ["whole_static_lib_for_both"],
284 static: {
285 srcs: ["staticonly.cpp"],
286 cflags: ["staticflag"],
287 shared_libs: ["shared_dep_for_static"],
288 static_libs: ["static_dep_for_static"],
289 whole_static_libs: ["whole_static_lib_for_static"],
290 },
291 shared: {
292 srcs: ["sharedonly.cpp"],
293 cflags: ["sharedflag"],
294 shared_libs: ["shared_dep_for_shared"],
295 static_libs: ["static_dep_for_shared"],
296 whole_static_libs: ["whole_static_lib_for_shared"],
297 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400298 include_build_directory: false,
Jingwen Chen53681ef2021-04-29 08:15:13 +0000299}
300
Liz Kammer8337ea42021-09-10 10:06:32 -0400301cc_library_static {
302 name: "static_dep_for_shared",
303 bazel_module: { bp2build_available: false },
304}
Chris Parsons08648312021-05-06 16:23:19 -0400305
Liz Kammer8337ea42021-09-10 10:06:32 -0400306cc_library_static {
307 name: "static_dep_for_static",
308 bazel_module: { bp2build_available: false },
309}
Chris Parsons08648312021-05-06 16:23:19 -0400310
Liz Kammer8337ea42021-09-10 10:06:32 -0400311cc_library_static {
312 name: "static_dep_for_both",
313 bazel_module: { bp2build_available: false },
314}
Chris Parsons08648312021-05-06 16:23:19 -0400315
Liz Kammer8337ea42021-09-10 10:06:32 -0400316cc_library_static {
317 name: "whole_static_lib_for_shared",
318 bazel_module: { bp2build_available: false },
319}
Chris Parsons08648312021-05-06 16:23:19 -0400320
Liz Kammer8337ea42021-09-10 10:06:32 -0400321cc_library_static {
322 name: "whole_static_lib_for_static",
323 bazel_module: { bp2build_available: false },
324}
Chris Parsons08648312021-05-06 16:23:19 -0400325
Liz Kammer8337ea42021-09-10 10:06:32 -0400326cc_library_static {
327 name: "whole_static_lib_for_both",
328 bazel_module: { bp2build_available: false },
329}
Chris Parsons08648312021-05-06 16:23:19 -0400330
Liz Kammer8337ea42021-09-10 10:06:32 -0400331cc_library {
332 name: "shared_dep_for_shared",
333 bazel_module: { bp2build_available: false },
334}
Chris Parsons08648312021-05-06 16:23:19 -0400335
Liz Kammer8337ea42021-09-10 10:06:32 -0400336cc_library {
337 name: "shared_dep_for_static",
338 bazel_module: { bp2build_available: false },
339}
Chris Parsons08648312021-05-06 16:23:19 -0400340
Liz Kammer8337ea42021-09-10 10:06:32 -0400341cc_library {
342 name: "shared_dep_for_both",
343 bazel_module: { bp2build_available: false },
344}
Jingwen Chen53681ef2021-04-29 08:15:13 +0000345`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500346 expectedBazelTargets: []string{
Chris Parsons77acf2e2021-12-03 17:27:16 -0500347 makeBazelTarget("cc_library_static", "a_bp2build_cc_library_static", attrNameToString{
348 "copts": `[
349 "bothflag",
350 "staticflag",
351 ]`,
352 "implementation_deps": `[
353 ":static_dep_for_both",
354 ":static_dep_for_static",
355 ]`,
356 "implementation_dynamic_deps": `[
357 ":shared_dep_for_both",
358 ":shared_dep_for_static",
359 ]`,
360 "srcs": `[
361 "both.cpp",
362 "staticonly.cpp",
363 ]`,
364 "whole_archive_deps": `[
365 ":whole_static_lib_for_both",
366 ":whole_static_lib_for_static",
367 ]`}),
368 makeBazelTarget("cc_library_shared", "a", attrNameToString{
369 "copts": `[
370 "bothflag",
371 "sharedflag",
372 ]`,
373 "implementation_deps": `[
374 ":static_dep_for_both",
375 ":static_dep_for_shared",
376 ]`,
377 "implementation_dynamic_deps": `[
378 ":shared_dep_for_both",
379 ":shared_dep_for_shared",
380 ]`,
381 "srcs": `[
382 "both.cpp",
383 "sharedonly.cpp",
384 ]`,
385 "whole_archive_deps": `[
386 ":whole_static_lib_for_both",
387 ":whole_static_lib_for_shared",
388 ]`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500389 }),
390 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200391 })
392}
393
Liz Kammer7a210ac2021-09-22 15:52:58 -0400394func TestCcLibraryDeps(t *testing.T) {
395 runCcLibraryTestCase(t, bp2buildTestCase{
Liz Kammerbe46fcc2021-11-01 15:32:43 -0400396 description: "cc_library shared/static props",
397 moduleTypeUnderTest: "cc_library",
398 moduleTypeUnderTestFactory: cc.LibraryFactory,
Liz Kammer7a210ac2021-09-22 15:52:58 -0400399 filesystem: map[string]string{
400 "both.cpp": "",
401 "sharedonly.cpp": "",
402 "staticonly.cpp": "",
403 },
404 blueprint: soongCcLibraryPreamble + `
405cc_library {
406 name: "a",
407 srcs: ["both.cpp"],
408 cflags: ["bothflag"],
409 shared_libs: ["implementation_shared_dep_for_both", "shared_dep_for_both"],
410 export_shared_lib_headers: ["shared_dep_for_both"],
411 static_libs: ["implementation_static_dep_for_both", "static_dep_for_both"],
412 export_static_lib_headers: ["static_dep_for_both", "whole_static_dep_for_both"],
413 whole_static_libs: ["not_explicitly_exported_whole_static_dep_for_both", "whole_static_dep_for_both"],
414 static: {
415 srcs: ["staticonly.cpp"],
416 cflags: ["staticflag"],
417 shared_libs: ["implementation_shared_dep_for_static", "shared_dep_for_static"],
418 export_shared_lib_headers: ["shared_dep_for_static"],
419 static_libs: ["implementation_static_dep_for_static", "static_dep_for_static"],
420 export_static_lib_headers: ["static_dep_for_static", "whole_static_dep_for_static"],
421 whole_static_libs: ["not_explicitly_exported_whole_static_dep_for_static", "whole_static_dep_for_static"],
422 },
423 shared: {
424 srcs: ["sharedonly.cpp"],
425 cflags: ["sharedflag"],
426 shared_libs: ["implementation_shared_dep_for_shared", "shared_dep_for_shared"],
427 export_shared_lib_headers: ["shared_dep_for_shared"],
428 static_libs: ["implementation_static_dep_for_shared", "static_dep_for_shared"],
429 export_static_lib_headers: ["static_dep_for_shared", "whole_static_dep_for_shared"],
430 whole_static_libs: ["not_explicitly_exported_whole_static_dep_for_shared", "whole_static_dep_for_shared"],
431 },
432 include_build_directory: false,
433}
434` + simpleModuleDoNotConvertBp2build("cc_library_static", "static_dep_for_shared") +
435 simpleModuleDoNotConvertBp2build("cc_library_static", "implementation_static_dep_for_shared") +
436 simpleModuleDoNotConvertBp2build("cc_library_static", "static_dep_for_static") +
437 simpleModuleDoNotConvertBp2build("cc_library_static", "implementation_static_dep_for_static") +
438 simpleModuleDoNotConvertBp2build("cc_library_static", "static_dep_for_both") +
439 simpleModuleDoNotConvertBp2build("cc_library_static", "implementation_static_dep_for_both") +
440 simpleModuleDoNotConvertBp2build("cc_library_static", "whole_static_dep_for_shared") +
441 simpleModuleDoNotConvertBp2build("cc_library_static", "not_explicitly_exported_whole_static_dep_for_shared") +
442 simpleModuleDoNotConvertBp2build("cc_library_static", "whole_static_dep_for_static") +
443 simpleModuleDoNotConvertBp2build("cc_library_static", "not_explicitly_exported_whole_static_dep_for_static") +
444 simpleModuleDoNotConvertBp2build("cc_library_static", "whole_static_dep_for_both") +
445 simpleModuleDoNotConvertBp2build("cc_library_static", "not_explicitly_exported_whole_static_dep_for_both") +
446 simpleModuleDoNotConvertBp2build("cc_library", "shared_dep_for_shared") +
447 simpleModuleDoNotConvertBp2build("cc_library", "implementation_shared_dep_for_shared") +
448 simpleModuleDoNotConvertBp2build("cc_library", "shared_dep_for_static") +
449 simpleModuleDoNotConvertBp2build("cc_library", "implementation_shared_dep_for_static") +
450 simpleModuleDoNotConvertBp2build("cc_library", "shared_dep_for_both") +
451 simpleModuleDoNotConvertBp2build("cc_library", "implementation_shared_dep_for_both"),
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500452 expectedBazelTargets: []string{
Chris Parsons77acf2e2021-12-03 17:27:16 -0500453 makeBazelTarget("cc_library_static", "a_bp2build_cc_library_static", attrNameToString{
454 "copts": `[
455 "bothflag",
456 "staticflag",
457 ]`,
458 "deps": `[
459 ":static_dep_for_both",
460 ":static_dep_for_static",
461 ]`,
462 "dynamic_deps": `[
463 ":shared_dep_for_both",
464 ":shared_dep_for_static",
465 ]`,
466 "implementation_deps": `[
467 ":implementation_static_dep_for_both",
468 ":implementation_static_dep_for_static",
469 ]`,
470 "implementation_dynamic_deps": `[
471 ":implementation_shared_dep_for_both",
472 ":implementation_shared_dep_for_static",
473 ]`,
474 "srcs": `[
475 "both.cpp",
476 "staticonly.cpp",
477 ]`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500478 "whole_archive_deps": `[
Liz Kammer7a210ac2021-09-22 15:52:58 -0400479 ":not_explicitly_exported_whole_static_dep_for_both",
480 ":whole_static_dep_for_both",
Chris Parsons77acf2e2021-12-03 17:27:16 -0500481 ":not_explicitly_exported_whole_static_dep_for_static",
482 ":whole_static_dep_for_static",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500483 ]`,
484 }),
Chris Parsons77acf2e2021-12-03 17:27:16 -0500485 makeBazelTarget("cc_library_shared", "a", attrNameToString{
486 "copts": `[
487 "bothflag",
488 "sharedflag",
489 ]`,
490 "deps": `[
491 ":static_dep_for_both",
492 ":static_dep_for_shared",
493 ]`,
494 "dynamic_deps": `[
495 ":shared_dep_for_both",
496 ":shared_dep_for_shared",
497 ]`,
498 "implementation_deps": `[
499 ":implementation_static_dep_for_both",
500 ":implementation_static_dep_for_shared",
501 ]`,
502 "implementation_dynamic_deps": `[
503 ":implementation_shared_dep_for_both",
504 ":implementation_shared_dep_for_shared",
505 ]`,
506 "srcs": `[
507 "both.cpp",
508 "sharedonly.cpp",
509 ]`,
510 "whole_archive_deps": `[
511 ":not_explicitly_exported_whole_static_dep_for_both",
512 ":whole_static_dep_for_both",
513 ":not_explicitly_exported_whole_static_dep_for_shared",
514 ":whole_static_dep_for_shared",
515 ]`,
516 })},
517 },
518 )
Liz Kammer7a210ac2021-09-22 15:52:58 -0400519}
520
Liz Kammer2d7bbe32021-06-10 18:20:06 -0400521func TestCcLibraryWholeStaticLibsAlwaysLink(t *testing.T) {
522 runCcLibraryTestCase(t, bp2buildTestCase{
Liz Kammerbe46fcc2021-11-01 15:32:43 -0400523 moduleTypeUnderTest: "cc_library",
524 moduleTypeUnderTestFactory: cc.LibraryFactory,
525 dir: "foo/bar",
Liz Kammer2d7bbe32021-06-10 18:20:06 -0400526 filesystem: map[string]string{
527 "foo/bar/Android.bp": `
528cc_library {
529 name: "a",
530 whole_static_libs: ["whole_static_lib_for_both"],
531 static: {
532 whole_static_libs: ["whole_static_lib_for_static"],
533 },
534 shared: {
535 whole_static_libs: ["whole_static_lib_for_shared"],
536 },
537 bazel_module: { bp2build_available: true },
Liz Kammer8337ea42021-09-10 10:06:32 -0400538 include_build_directory: false,
Liz Kammer2d7bbe32021-06-10 18:20:06 -0400539}
540
541cc_prebuilt_library_static { name: "whole_static_lib_for_shared" }
542
543cc_prebuilt_library_static { name: "whole_static_lib_for_static" }
544
545cc_prebuilt_library_static { name: "whole_static_lib_for_both" }
546`,
547 },
548 blueprint: soongCcLibraryPreamble,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500549 expectedBazelTargets: []string{
Chris Parsons77acf2e2021-12-03 17:27:16 -0500550 makeBazelTarget("cc_library_static", "a_bp2build_cc_library_static", attrNameToString{
551 "whole_archive_deps": `[
552 ":whole_static_lib_for_both_alwayslink",
553 ":whole_static_lib_for_static_alwayslink",
554 ]`,
555 }),
556 makeBazelTarget("cc_library_shared", "a", attrNameToString{
557 "whole_archive_deps": `[
558 ":whole_static_lib_for_both_alwayslink",
559 ":whole_static_lib_for_shared_alwayslink",
560 ]`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500561 }),
562 },
Chris Parsons77acf2e2021-12-03 17:27:16 -0500563 },
564 )
Liz Kammer2d7bbe32021-06-10 18:20:06 -0400565}
566
Jingwen Chenbcf53042021-05-26 04:42:42 +0000567func TestCcLibrarySharedStaticPropsInArch(t *testing.T) {
568 runCcLibraryTestCase(t, bp2buildTestCase{
Liz Kammerbe46fcc2021-11-01 15:32:43 -0400569 description: "cc_library shared/static props in arch",
570 moduleTypeUnderTest: "cc_library",
571 moduleTypeUnderTestFactory: cc.LibraryFactory,
572 dir: "foo/bar",
Jingwen Chenbcf53042021-05-26 04:42:42 +0000573 filesystem: map[string]string{
574 "foo/bar/arm.cpp": "",
575 "foo/bar/x86.cpp": "",
576 "foo/bar/sharedonly.cpp": "",
577 "foo/bar/staticonly.cpp": "",
578 "foo/bar/Android.bp": `
579cc_library {
580 name: "a",
581 arch: {
582 arm: {
583 shared: {
584 srcs: ["arm_shared.cpp"],
585 cflags: ["-DARM_SHARED"],
586 static_libs: ["arm_static_dep_for_shared"],
587 whole_static_libs: ["arm_whole_static_dep_for_shared"],
588 shared_libs: ["arm_shared_dep_for_shared"],
589 },
590 },
591 x86: {
592 static: {
593 srcs: ["x86_static.cpp"],
594 cflags: ["-DX86_STATIC"],
595 static_libs: ["x86_dep_for_static"],
596 },
597 },
598 },
599 target: {
600 android: {
601 shared: {
602 srcs: ["android_shared.cpp"],
603 cflags: ["-DANDROID_SHARED"],
604 static_libs: ["android_dep_for_shared"],
605 },
606 },
607 android_arm: {
608 shared: {
609 cflags: ["-DANDROID_ARM_SHARED"],
610 },
611 },
612 },
613 srcs: ["both.cpp"],
614 cflags: ["bothflag"],
615 static_libs: ["static_dep_for_both"],
616 static: {
617 srcs: ["staticonly.cpp"],
618 cflags: ["staticflag"],
619 static_libs: ["static_dep_for_static"],
620 },
621 shared: {
622 srcs: ["sharedonly.cpp"],
623 cflags: ["sharedflag"],
624 static_libs: ["static_dep_for_shared"],
625 },
626 bazel_module: { bp2build_available: true },
627}
628
629cc_library_static { name: "static_dep_for_shared" }
630cc_library_static { name: "static_dep_for_static" }
631cc_library_static { name: "static_dep_for_both" }
632
633cc_library_static { name: "arm_static_dep_for_shared" }
634cc_library_static { name: "arm_whole_static_dep_for_shared" }
635cc_library_static { name: "arm_shared_dep_for_shared" }
636
637cc_library_static { name: "x86_dep_for_static" }
638
639cc_library_static { name: "android_dep_for_shared" }
640`,
641 },
642 blueprint: soongCcLibraryPreamble,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500643 expectedBazelTargets: []string{
Chris Parsons77acf2e2021-12-03 17:27:16 -0500644 makeBazelTarget("cc_library_static", "a_bp2build_cc_library_static", attrNameToString{
645 "copts": `[
646 "bothflag",
647 "staticflag",
648 ] + select({
649 "//build/bazel/platforms/arch:x86": ["-DX86_STATIC"],
650 "//conditions:default": [],
651 })`,
652 "implementation_deps": `[
653 ":static_dep_for_both",
654 ":static_dep_for_static",
655 ] + select({
656 "//build/bazel/platforms/arch:x86": [":x86_dep_for_static"],
657 "//conditions:default": [],
658 })`,
659 "local_includes": `["."]`,
660 "srcs": `[
661 "both.cpp",
662 "staticonly.cpp",
663 ] + select({
664 "//build/bazel/platforms/arch:x86": ["x86_static.cpp"],
665 "//conditions:default": [],
666 })`,
667 }),
668 makeBazelTarget("cc_library_shared", "a", attrNameToString{
669 "copts": `[
670 "bothflag",
671 "sharedflag",
672 ] + select({
673 "//build/bazel/platforms/arch:arm": ["-DARM_SHARED"],
674 "//conditions:default": [],
675 }) + select({
676 "//build/bazel/platforms/os:android": ["-DANDROID_SHARED"],
677 "//conditions:default": [],
678 }) + select({
679 "//build/bazel/platforms/os_arch:android_arm": ["-DANDROID_ARM_SHARED"],
680 "//conditions:default": [],
681 })`,
682 "implementation_deps": `[
683 ":static_dep_for_both",
684 ":static_dep_for_shared",
685 ] + select({
686 "//build/bazel/platforms/arch:arm": [":arm_static_dep_for_shared"],
687 "//conditions:default": [],
688 }) + select({
689 "//build/bazel/platforms/os:android": [":android_dep_for_shared"],
690 "//conditions:default": [],
691 })`,
692 "implementation_dynamic_deps": `select({
693 "//build/bazel/platforms/arch:arm": [":arm_shared_dep_for_shared"],
694 "//conditions:default": [],
695 })`,
696 "local_includes": `["."]`,
697 "srcs": `[
698 "both.cpp",
699 "sharedonly.cpp",
700 ] + select({
701 "//build/bazel/platforms/arch:arm": ["arm_shared.cpp"],
702 "//conditions:default": [],
703 }) + select({
704 "//build/bazel/platforms/os:android": ["android_shared.cpp"],
705 "//conditions:default": [],
706 })`,
707 "whole_archive_deps": `select({
708 "//build/bazel/platforms/arch:arm": [":arm_whole_static_dep_for_shared"],
709 "//conditions:default": [],
710 })`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500711 }),
712 },
Chris Parsons77acf2e2021-12-03 17:27:16 -0500713 },
714 )
Jingwen Chenbcf53042021-05-26 04:42:42 +0000715}
716
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000717func TestCcLibrarySharedStaticPropsWithMixedSources(t *testing.T) {
718 runCcLibraryTestCase(t, bp2buildTestCase{
Liz Kammerbe46fcc2021-11-01 15:32:43 -0400719 description: "cc_library shared/static props with c/cpp/s mixed sources",
720 moduleTypeUnderTest: "cc_library",
721 moduleTypeUnderTestFactory: cc.LibraryFactory,
722 dir: "foo/bar",
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000723 filesystem: map[string]string{
724 "foo/bar/both_source.cpp": "",
725 "foo/bar/both_source.cc": "",
726 "foo/bar/both_source.c": "",
727 "foo/bar/both_source.s": "",
728 "foo/bar/both_source.S": "",
729 "foo/bar/shared_source.cpp": "",
730 "foo/bar/shared_source.cc": "",
731 "foo/bar/shared_source.c": "",
732 "foo/bar/shared_source.s": "",
733 "foo/bar/shared_source.S": "",
734 "foo/bar/static_source.cpp": "",
735 "foo/bar/static_source.cc": "",
736 "foo/bar/static_source.c": "",
737 "foo/bar/static_source.s": "",
738 "foo/bar/static_source.S": "",
739 "foo/bar/Android.bp": `
740cc_library {
741 name: "a",
742 srcs: [
Liz Kammerd366c902021-06-03 13:43:01 -0400743 "both_source.cpp",
744 "both_source.cc",
745 "both_source.c",
746 "both_source.s",
747 "both_source.S",
Liz Kammer57e2e7a2021-09-20 12:55:02 -0400748 ":both_filegroup",
Liz Kammerd366c902021-06-03 13:43:01 -0400749 ],
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000750 static: {
Liz Kammer8337ea42021-09-10 10:06:32 -0400751 srcs: [
752 "static_source.cpp",
753 "static_source.cc",
754 "static_source.c",
755 "static_source.s",
756 "static_source.S",
757 ":static_filegroup",
758 ],
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000759 },
760 shared: {
Liz Kammer8337ea42021-09-10 10:06:32 -0400761 srcs: [
762 "shared_source.cpp",
763 "shared_source.cc",
764 "shared_source.c",
765 "shared_source.s",
766 "shared_source.S",
767 ":shared_filegroup",
768 ],
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000769 },
770 bazel_module: { bp2build_available: true },
771}
772
773filegroup {
774 name: "both_filegroup",
775 srcs: [
776 // Not relevant, handled by filegroup macro
Liz Kammerd366c902021-06-03 13:43:01 -0400777 ],
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000778}
779
780filegroup {
781 name: "shared_filegroup",
782 srcs: [
783 // Not relevant, handled by filegroup macro
Liz Kammerd366c902021-06-03 13:43:01 -0400784 ],
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000785}
786
787filegroup {
788 name: "static_filegroup",
789 srcs: [
790 // Not relevant, handled by filegroup macro
Liz Kammerd366c902021-06-03 13:43:01 -0400791 ],
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000792}
793`,
794 },
795 blueprint: soongCcLibraryPreamble,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500796 expectedBazelTargets: []string{
Chris Parsons77acf2e2021-12-03 17:27:16 -0500797 makeBazelTarget("cc_library_static", "a_bp2build_cc_library_static", attrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500798 "local_includes": `["."]`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500799 "srcs": `[
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000800 "both_source.cpp",
Liz Kammer57e2e7a2021-09-20 12:55:02 -0400801 "both_source.cc",
802 ":both_filegroup_cpp_srcs",
Chris Parsons77acf2e2021-12-03 17:27:16 -0500803 "static_source.cpp",
804 "static_source.cc",
805 ":static_filegroup_cpp_srcs",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500806 ]`,
807 "srcs_as": `[
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000808 "both_source.s",
809 "both_source.S",
810 ":both_filegroup_as_srcs",
Chris Parsons77acf2e2021-12-03 17:27:16 -0500811 "static_source.s",
812 "static_source.S",
813 ":static_filegroup_as_srcs",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500814 ]`,
815 "srcs_c": `[
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000816 "both_source.c",
817 ":both_filegroup_c_srcs",
Chris Parsons77acf2e2021-12-03 17:27:16 -0500818 "static_source.c",
819 ":static_filegroup_c_srcs",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500820 ]`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500821 }),
Chris Parsons77acf2e2021-12-03 17:27:16 -0500822 makeBazelTarget("cc_library_shared", "a", attrNameToString{
823 "local_includes": `["."]`,
824 "srcs": `[
825 "both_source.cpp",
826 "both_source.cc",
827 ":both_filegroup_cpp_srcs",
828 "shared_source.cpp",
829 "shared_source.cc",
830 ":shared_filegroup_cpp_srcs",
831 ]`,
832 "srcs_as": `[
833 "both_source.s",
834 "both_source.S",
835 ":both_filegroup_as_srcs",
836 "shared_source.s",
837 "shared_source.S",
838 ":shared_filegroup_as_srcs",
839 ]`,
840 "srcs_c": `[
841 "both_source.c",
842 ":both_filegroup_c_srcs",
843 "shared_source.c",
844 ":shared_filegroup_c_srcs",
845 ]`,
846 })}})
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000847}
848
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200849func TestCcLibraryNonConfiguredVersionScript(t *testing.T) {
850 runCcLibraryTestCase(t, bp2buildTestCase{
Liz Kammerbe46fcc2021-11-01 15:32:43 -0400851 description: "cc_library non-configured version script",
852 moduleTypeUnderTest: "cc_library",
853 moduleTypeUnderTestFactory: cc.LibraryFactory,
854 dir: "foo/bar",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200855 filesystem: map[string]string{
856 "foo/bar/Android.bp": `
Lukacs T. Berki1353e592021-04-30 15:35:09 +0200857cc_library {
858 name: "a",
859 srcs: ["a.cpp"],
860 version_script: "v.map",
861 bazel_module: { bp2build_available: true },
Liz Kammer8337ea42021-09-10 10:06:32 -0400862 include_build_directory: false,
Lukacs T. Berki1353e592021-04-30 15:35:09 +0200863}
864`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200865 },
866 blueprint: soongCcLibraryPreamble,
Chris Parsons77acf2e2021-12-03 17:27:16 -0500867 expectedBazelTargets: makeCcLibraryTargets("a", attrNameToString{
868 "additional_linker_inputs": `["v.map"]`,
869 "linkopts": `["-Wl,--version-script,$(location v.map)"]`,
870 "srcs": `["a.cpp"]`,
871 }),
872 },
873 )
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200874}
875
876func TestCcLibraryConfiguredVersionScript(t *testing.T) {
877 runCcLibraryTestCase(t, bp2buildTestCase{
Liz Kammerbe46fcc2021-11-01 15:32:43 -0400878 description: "cc_library configured version script",
879 moduleTypeUnderTest: "cc_library",
880 moduleTypeUnderTestFactory: cc.LibraryFactory,
881 dir: "foo/bar",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200882 filesystem: map[string]string{
883 "foo/bar/Android.bp": `
Liz Kammer8337ea42021-09-10 10:06:32 -0400884cc_library {
885 name: "a",
886 srcs: ["a.cpp"],
887 arch: {
888 arm: {
889 version_script: "arm.map",
890 },
891 arm64: {
892 version_script: "arm64.map",
893 },
894 },
Lukacs T. Berki56bb0832021-05-12 12:36:45 +0200895
Liz Kammer8337ea42021-09-10 10:06:32 -0400896 bazel_module: { bp2build_available: true },
897 include_build_directory: false,
898}
Liz Kammerd366c902021-06-03 13:43:01 -0400899 `,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200900 },
901 blueprint: soongCcLibraryPreamble,
Chris Parsons77acf2e2021-12-03 17:27:16 -0500902 expectedBazelTargets: makeCcLibraryTargets("a", attrNameToString{
903 "additional_linker_inputs": `select({
Liz Kammerd2871182021-10-04 13:54:37 -0400904 "//build/bazel/platforms/arch:arm": ["arm.map"],
905 "//build/bazel/platforms/arch:arm64": ["arm64.map"],
906 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500907 })`,
Chris Parsons77acf2e2021-12-03 17:27:16 -0500908 "linkopts": `select({
Liz Kammerd2871182021-10-04 13:54:37 -0400909 "//build/bazel/platforms/arch:arm": ["-Wl,--version-script,$(location arm.map)"],
910 "//build/bazel/platforms/arch:arm64": ["-Wl,--version-script,$(location arm64.map)"],
911 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500912 })`,
Chris Parsons77acf2e2021-12-03 17:27:16 -0500913 "srcs": `["a.cpp"]`,
914 }),
915 },
916 )
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200917}
918
919func TestCcLibrarySharedLibs(t *testing.T) {
920 runCcLibraryTestCase(t, bp2buildTestCase{
Liz Kammerbe46fcc2021-11-01 15:32:43 -0400921 description: "cc_library shared_libs",
922 moduleTypeUnderTest: "cc_library",
923 moduleTypeUnderTestFactory: cc.LibraryFactory,
Liz Kammer8337ea42021-09-10 10:06:32 -0400924 blueprint: soongCcLibraryPreamble + `
Rupert Shuttleworthc50fa8d2021-05-06 02:40:33 -0400925cc_library {
926 name: "mylib",
Liz Kammer8337ea42021-09-10 10:06:32 -0400927 bazel_module: { bp2build_available: false },
Rupert Shuttleworthc50fa8d2021-05-06 02:40:33 -0400928}
929
930cc_library {
931 name: "a",
932 shared_libs: ["mylib",],
Liz Kammer8337ea42021-09-10 10:06:32 -0400933 include_build_directory: false,
Rupert Shuttleworthc50fa8d2021-05-06 02:40:33 -0400934}
935`,
Chris Parsons77acf2e2021-12-03 17:27:16 -0500936 expectedBazelTargets: makeCcLibraryTargets("a", attrNameToString{
937 "implementation_dynamic_deps": `[":mylib"]`,
938 }),
939 },
940 )
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200941}
942
Liz Kammer0eae52e2021-10-06 10:32:26 -0400943func TestCcLibraryFeatures(t *testing.T) {
Chris Parsons77acf2e2021-12-03 17:27:16 -0500944 expected_targets := []string{}
945 expected_targets = append(expected_targets, makeCcLibraryTargets("a", attrNameToString{
946 "features": `[
947 "disable_pack_relocations",
948 "-no_undefined_symbols",
949 ]`,
950 "srcs": `["a.cpp"]`,
951 })...)
952 expected_targets = append(expected_targets, makeCcLibraryTargets("b", attrNameToString{
953 "features": `select({
954 "//build/bazel/platforms/arch:x86_64": [
955 "disable_pack_relocations",
956 "-no_undefined_symbols",
957 ],
958 "//conditions:default": [],
959 })`,
960 "srcs": `["b.cpp"]`,
961 })...)
962 expected_targets = append(expected_targets, makeCcLibraryTargets("c", attrNameToString{
963 "features": `select({
964 "//build/bazel/platforms/os:darwin": [
965 "disable_pack_relocations",
966 "-no_undefined_symbols",
967 ],
968 "//conditions:default": [],
969 })`,
970 "srcs": `["c.cpp"]`,
971 })...)
972
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200973 runCcLibraryTestCase(t, bp2buildTestCase{
Liz Kammerbe46fcc2021-11-01 15:32:43 -0400974 description: "cc_library pack_relocations test",
975 moduleTypeUnderTest: "cc_library",
976 moduleTypeUnderTestFactory: cc.LibraryFactory,
Liz Kammer8337ea42021-09-10 10:06:32 -0400977 blueprint: soongCcLibraryPreamble + `
Rupert Shuttleworth143be942021-05-09 23:55:51 -0400978cc_library {
979 name: "a",
980 srcs: ["a.cpp"],
981 pack_relocations: false,
Liz Kammer0eae52e2021-10-06 10:32:26 -0400982 allow_undefined_symbols: true,
Liz Kammer8337ea42021-09-10 10:06:32 -0400983 include_build_directory: false,
Rupert Shuttleworth143be942021-05-09 23:55:51 -0400984}
985
986cc_library {
987 name: "b",
988 srcs: ["b.cpp"],
989 arch: {
990 x86_64: {
Liz Kammer8337ea42021-09-10 10:06:32 -0400991 pack_relocations: false,
Liz Kammer0eae52e2021-10-06 10:32:26 -0400992 allow_undefined_symbols: true,
Liz Kammer8337ea42021-09-10 10:06:32 -0400993 },
Rupert Shuttleworth143be942021-05-09 23:55:51 -0400994 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400995 include_build_directory: false,
Rupert Shuttleworth143be942021-05-09 23:55:51 -0400996}
997
998cc_library {
999 name: "c",
1000 srcs: ["c.cpp"],
1001 target: {
1002 darwin: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001003 pack_relocations: false,
Liz Kammer0eae52e2021-10-06 10:32:26 -04001004 allow_undefined_symbols: true,
Liz Kammer8337ea42021-09-10 10:06:32 -04001005 },
Rupert Shuttleworth143be942021-05-09 23:55:51 -04001006 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001007 include_build_directory: false,
Rupert Shuttleworth143be942021-05-09 23:55:51 -04001008}`,
Chris Parsons77acf2e2021-12-03 17:27:16 -05001009 expectedBazelTargets: expected_targets,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +02001010 })
1011}
1012
1013func TestCcLibrarySpacesInCopts(t *testing.T) {
1014 runCcLibraryTestCase(t, bp2buildTestCase{
Liz Kammerbe46fcc2021-11-01 15:32:43 -04001015 description: "cc_library spaces in copts",
1016 moduleTypeUnderTest: "cc_library",
1017 moduleTypeUnderTestFactory: cc.LibraryFactory,
Liz Kammer8337ea42021-09-10 10:06:32 -04001018 blueprint: soongCcLibraryPreamble + `
Jingwen Chen3950cd62021-05-12 04:33:00 +00001019cc_library {
1020 name: "a",
1021 cflags: ["-include header.h",],
Liz Kammer8337ea42021-09-10 10:06:32 -04001022 include_build_directory: false,
Jingwen Chen3950cd62021-05-12 04:33:00 +00001023}
1024`,
Chris Parsons77acf2e2021-12-03 17:27:16 -05001025 expectedBazelTargets: makeCcLibraryTargets("a", attrNameToString{
1026 "copts": `[
Jingwen Chen3950cd62021-05-12 04:33:00 +00001027 "-include",
1028 "header.h",
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001029 ]`,
Chris Parsons77acf2e2021-12-03 17:27:16 -05001030 }),
1031 },
1032 )
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +02001033}
1034
1035func TestCcLibraryCppFlagsGoesIntoCopts(t *testing.T) {
1036 runCcLibraryTestCase(t, bp2buildTestCase{
Liz Kammerbe46fcc2021-11-01 15:32:43 -04001037 description: "cc_library cppflags usage",
1038 moduleTypeUnderTest: "cc_library",
1039 moduleTypeUnderTestFactory: cc.LibraryFactory,
Liz Kammer8337ea42021-09-10 10:06:32 -04001040 blueprint: soongCcLibraryPreamble + `cc_library {
Jingwen Chen75be1ca2021-05-12 05:04:58 +00001041 name: "a",
1042 srcs: ["a.cpp"],
Liz Kammer8337ea42021-09-10 10:06:32 -04001043 cflags: ["-Wall"],
Jingwen Chen75be1ca2021-05-12 05:04:58 +00001044 cppflags: [
1045 "-fsigned-char",
1046 "-pedantic",
Liz Kammer8337ea42021-09-10 10:06:32 -04001047 ],
Jingwen Chen75be1ca2021-05-12 05:04:58 +00001048 arch: {
1049 arm64: {
1050 cppflags: ["-DARM64=1"],
Liz Kammer8337ea42021-09-10 10:06:32 -04001051 },
Liz Kammerd366c902021-06-03 13:43:01 -04001052 },
Jingwen Chen75be1ca2021-05-12 05:04:58 +00001053 target: {
1054 android: {
1055 cppflags: ["-DANDROID=1"],
Liz Kammer8337ea42021-09-10 10:06:32 -04001056 },
Liz Kammerd366c902021-06-03 13:43:01 -04001057 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001058 include_build_directory: false,
Jingwen Chen75be1ca2021-05-12 05:04:58 +00001059}
1060`,
Chris Parsons77acf2e2021-12-03 17:27:16 -05001061 expectedBazelTargets: makeCcLibraryTargets("a", attrNameToString{
1062 "copts": `["-Wall"]`,
1063 "cppflags": `[
Chris Parsons990c4f42021-05-25 12:10:58 -04001064 "-fsigned-char",
1065 "-pedantic",
Jingwen Chen75be1ca2021-05-12 05:04:58 +00001066 ] + select({
1067 "//build/bazel/platforms/arch:arm64": ["-DARM64=1"],
1068 "//conditions:default": [],
1069 }) + select({
1070 "//build/bazel/platforms/os:android": ["-DANDROID=1"],
1071 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001072 })`,
Chris Parsons77acf2e2021-12-03 17:27:16 -05001073 "srcs": `["a.cpp"]`,
1074 }),
1075 },
1076 )
Jingwen Chen63930982021-03-24 10:04:33 -04001077}
Rupert Shuttleworth22cd2eb2021-05-27 02:15:54 -04001078
Liz Kammer47535c52021-06-02 16:02:22 -04001079func TestCcLibraryExcludeLibs(t *testing.T) {
1080 runCcLibraryTestCase(t, bp2buildTestCase{
Liz Kammerbe46fcc2021-11-01 15:32:43 -04001081 moduleTypeUnderTest: "cc_library",
1082 moduleTypeUnderTestFactory: cc.LibraryFactory,
1083 filesystem: map[string]string{},
Liz Kammer47535c52021-06-02 16:02:22 -04001084 blueprint: soongCcLibraryStaticPreamble + `
1085cc_library {
1086 name: "foo_static",
1087 srcs: ["common.c"],
1088 whole_static_libs: [
1089 "arm_whole_static_lib_excludes",
1090 "malloc_not_svelte_whole_static_lib_excludes"
1091 ],
1092 static_libs: [
1093 "arm_static_lib_excludes",
1094 "malloc_not_svelte_static_lib_excludes"
1095 ],
1096 shared_libs: [
1097 "arm_shared_lib_excludes",
1098 ],
1099 arch: {
1100 arm: {
1101 exclude_shared_libs: [
1102 "arm_shared_lib_excludes",
1103 ],
1104 exclude_static_libs: [
1105 "arm_static_lib_excludes",
1106 "arm_whole_static_lib_excludes",
1107 ],
1108 },
1109 },
1110 product_variables: {
1111 malloc_not_svelte: {
1112 shared_libs: ["malloc_not_svelte_shared_lib"],
1113 whole_static_libs: ["malloc_not_svelte_whole_static_lib"],
1114 exclude_static_libs: [
1115 "malloc_not_svelte_static_lib_excludes",
1116 "malloc_not_svelte_whole_static_lib_excludes",
1117 ],
1118 },
1119 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001120 include_build_directory: false,
Liz Kammer47535c52021-06-02 16:02:22 -04001121}
1122
1123cc_library {
1124 name: "arm_whole_static_lib_excludes",
1125 bazel_module: { bp2build_available: false },
1126}
1127
1128cc_library {
1129 name: "malloc_not_svelte_whole_static_lib",
1130 bazel_module: { bp2build_available: false },
1131}
1132
1133cc_library {
1134 name: "malloc_not_svelte_whole_static_lib_excludes",
1135 bazel_module: { bp2build_available: false },
1136}
1137
1138cc_library {
1139 name: "arm_static_lib_excludes",
1140 bazel_module: { bp2build_available: false },
1141}
1142
1143cc_library {
1144 name: "malloc_not_svelte_static_lib_excludes",
1145 bazel_module: { bp2build_available: false },
1146}
1147
1148cc_library {
1149 name: "arm_shared_lib_excludes",
1150 bazel_module: { bp2build_available: false },
1151}
1152
1153cc_library {
1154 name: "malloc_not_svelte_shared_lib",
1155 bazel_module: { bp2build_available: false },
1156}
1157`,
Chris Parsons77acf2e2021-12-03 17:27:16 -05001158 expectedBazelTargets: makeCcLibraryTargets("foo_static", attrNameToString{
1159 "implementation_deps": `select({
Liz Kammer47535c52021-06-02 16:02:22 -04001160 "//build/bazel/platforms/arch:arm": [],
Chris Parsons953b3562021-09-20 15:14:39 -04001161 "//conditions:default": [":arm_static_lib_excludes_bp2build_cc_library_static"],
Liz Kammer47535c52021-06-02 16:02:22 -04001162 }) + select({
1163 "//build/bazel/product_variables:malloc_not_svelte": [],
Chris Parsons953b3562021-09-20 15:14:39 -04001164 "//conditions:default": [":malloc_not_svelte_static_lib_excludes_bp2build_cc_library_static"],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001165 })`,
Chris Parsons77acf2e2021-12-03 17:27:16 -05001166 "implementation_dynamic_deps": `select({
Liz Kammer7a210ac2021-09-22 15:52:58 -04001167 "//build/bazel/platforms/arch:arm": [],
1168 "//conditions:default": [":arm_shared_lib_excludes"],
1169 }) + select({
1170 "//build/bazel/product_variables:malloc_not_svelte": [":malloc_not_svelte_shared_lib"],
1171 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001172 })`,
Chris Parsons77acf2e2021-12-03 17:27:16 -05001173 "srcs_c": `["common.c"]`,
1174 "whole_archive_deps": `select({
Liz Kammer47535c52021-06-02 16:02:22 -04001175 "//build/bazel/platforms/arch:arm": [],
Chris Parsons953b3562021-09-20 15:14:39 -04001176 "//conditions:default": [":arm_whole_static_lib_excludes_bp2build_cc_library_static"],
Liz Kammer47535c52021-06-02 16:02:22 -04001177 }) + select({
Chris Parsons953b3562021-09-20 15:14:39 -04001178 "//build/bazel/product_variables:malloc_not_svelte": [":malloc_not_svelte_whole_static_lib_bp2build_cc_library_static"],
1179 "//conditions:default": [":malloc_not_svelte_whole_static_lib_excludes_bp2build_cc_library_static"],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001180 })`,
Chris Parsons77acf2e2021-12-03 17:27:16 -05001181 }),
1182 },
1183 )
Liz Kammer47535c52021-06-02 16:02:22 -04001184}
Liz Kammerd366c902021-06-03 13:43:01 -04001185
1186func TestCCLibraryNoCrtTrue(t *testing.T) {
1187 runCcLibraryTestCase(t, bp2buildTestCase{
Liz Kammerbe46fcc2021-11-01 15:32:43 -04001188 description: "cc_library - nocrt: true emits attribute",
1189 moduleTypeUnderTest: "cc_library",
1190 moduleTypeUnderTestFactory: cc.LibraryFactory,
Jingwen Chen6ada5892021-09-17 11:38:09 +00001191 filesystem: map[string]string{
1192 "impl.cpp": "",
1193 },
1194 blueprint: soongCcLibraryPreamble + `
1195cc_library {
1196 name: "foo-lib",
1197 srcs: ["impl.cpp"],
1198 nocrt: true,
1199 include_build_directory: false,
1200}
1201`,
Chris Parsons77acf2e2021-12-03 17:27:16 -05001202 expectedBazelTargets: makeCcLibraryTargets("foo-lib", attrNameToString{
1203 "link_crt": `False`,
1204 "srcs": `["impl.cpp"]`,
1205 }),
1206 },
1207 )
Jingwen Chen6ada5892021-09-17 11:38:09 +00001208}
1209
1210func TestCCLibraryNoCrtFalse(t *testing.T) {
1211 runCcLibraryTestCase(t, bp2buildTestCase{
Liz Kammerbe46fcc2021-11-01 15:32:43 -04001212 description: "cc_library - nocrt: false - does not emit attribute",
1213 moduleTypeUnderTest: "cc_library",
1214 moduleTypeUnderTestFactory: cc.LibraryFactory,
Jingwen Chen6ada5892021-09-17 11:38:09 +00001215 filesystem: map[string]string{
1216 "impl.cpp": "",
1217 },
1218 blueprint: soongCcLibraryPreamble + `
1219cc_library {
1220 name: "foo-lib",
1221 srcs: ["impl.cpp"],
1222 nocrt: false,
1223 include_build_directory: false,
1224}
1225`,
Chris Parsons77acf2e2021-12-03 17:27:16 -05001226 expectedBazelTargets: makeCcLibraryTargets("foo-lib", attrNameToString{
1227 "srcs": `["impl.cpp"]`,
1228 }),
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001229 })
Jingwen Chen6ada5892021-09-17 11:38:09 +00001230}
1231
1232func TestCCLibraryNoCrtArchVariant(t *testing.T) {
1233 runCcLibraryTestCase(t, bp2buildTestCase{
Liz Kammerbe46fcc2021-11-01 15:32:43 -04001234 description: "cc_library - nocrt in select",
1235 moduleTypeUnderTest: "cc_library",
1236 moduleTypeUnderTestFactory: cc.LibraryFactory,
Jingwen Chen6ada5892021-09-17 11:38:09 +00001237 filesystem: map[string]string{
1238 "impl.cpp": "",
1239 },
1240 blueprint: soongCcLibraryPreamble + `
1241cc_library {
1242 name: "foo-lib",
1243 srcs: ["impl.cpp"],
1244 arch: {
1245 arm: {
1246 nocrt: true,
1247 },
1248 x86: {
1249 nocrt: false,
1250 },
1251 },
1252 include_build_directory: false,
1253}
1254`,
Liz Kammer718eb272022-01-07 10:53:37 -05001255 expectedErr: fmt.Errorf("module \"foo-lib\": nocrt is not supported for arch variants"),
Jingwen Chen6ada5892021-09-17 11:38:09 +00001256 })
1257}
1258
1259func TestCCLibraryNoLibCrtTrue(t *testing.T) {
1260 runCcLibraryTestCase(t, bp2buildTestCase{
Liz Kammerbe46fcc2021-11-01 15:32:43 -04001261 moduleTypeUnderTest: "cc_library",
1262 moduleTypeUnderTestFactory: cc.LibraryFactory,
Liz Kammerd366c902021-06-03 13:43:01 -04001263 filesystem: map[string]string{
1264 "impl.cpp": "",
1265 },
1266 blueprint: soongCcLibraryPreamble + `
Liz Kammerd366c902021-06-03 13:43:01 -04001267cc_library {
1268 name: "foo-lib",
1269 srcs: ["impl.cpp"],
1270 no_libcrt: true,
Liz Kammer8337ea42021-09-10 10:06:32 -04001271 include_build_directory: false,
Liz Kammerd366c902021-06-03 13:43:01 -04001272}
1273`,
Chris Parsons77acf2e2021-12-03 17:27:16 -05001274 expectedBazelTargets: makeCcLibraryTargets("foo-lib", attrNameToString{
1275 "srcs": `["impl.cpp"]`,
1276 "use_libcrt": `False`,
1277 }),
1278 })
1279}
1280
1281func makeCcLibraryTargets(name string, attrs attrNameToString) []string {
1282 STATIC_ONLY_ATTRS := map[string]bool{}
1283 SHARED_ONLY_ATTRS := map[string]bool{
1284 "link_crt": true,
1285 "additional_linker_inputs": true,
1286 "linkopts": true,
1287 "strip": true,
1288 }
1289 sharedAttrs := attrNameToString{}
1290 staticAttrs := attrNameToString{}
1291 for key, val := range attrs {
1292 if _, staticOnly := STATIC_ONLY_ATTRS[key]; !staticOnly {
1293 sharedAttrs[key] = val
1294 }
1295 if _, sharedOnly := SHARED_ONLY_ATTRS[key]; !sharedOnly {
1296 staticAttrs[key] = val
1297 }
1298 }
1299 sharedTarget := makeBazelTarget("cc_library_shared", name, sharedAttrs)
1300 staticTarget := makeBazelTarget("cc_library_static", name+"_bp2build_cc_library_static", staticAttrs)
1301
1302 return []string{staticTarget, sharedTarget}
Liz Kammerd366c902021-06-03 13:43:01 -04001303}
1304
Jingwen Chen6ada5892021-09-17 11:38:09 +00001305func TestCCLibraryNoLibCrtFalse(t *testing.T) {
Liz Kammerd366c902021-06-03 13:43:01 -04001306 runCcLibraryTestCase(t, bp2buildTestCase{
Liz Kammerbe46fcc2021-11-01 15:32:43 -04001307 moduleTypeUnderTest: "cc_library",
1308 moduleTypeUnderTestFactory: cc.LibraryFactory,
Liz Kammerd366c902021-06-03 13:43:01 -04001309 filesystem: map[string]string{
1310 "impl.cpp": "",
1311 },
1312 blueprint: soongCcLibraryPreamble + `
Liz Kammerd366c902021-06-03 13:43:01 -04001313cc_library {
1314 name: "foo-lib",
1315 srcs: ["impl.cpp"],
1316 no_libcrt: false,
Liz Kammer8337ea42021-09-10 10:06:32 -04001317 include_build_directory: false,
Liz Kammerd366c902021-06-03 13:43:01 -04001318}
1319`,
Chris Parsons77acf2e2021-12-03 17:27:16 -05001320 expectedBazelTargets: makeCcLibraryTargets("foo-lib", attrNameToString{
1321 "srcs": `["impl.cpp"]`,
1322 "use_libcrt": `True`,
1323 }),
1324 })
Liz Kammerd366c902021-06-03 13:43:01 -04001325}
1326
Jingwen Chen6ada5892021-09-17 11:38:09 +00001327func TestCCLibraryNoLibCrtArchVariant(t *testing.T) {
Liz Kammerd366c902021-06-03 13:43:01 -04001328 runCcLibraryTestCase(t, bp2buildTestCase{
Liz Kammerbe46fcc2021-11-01 15:32:43 -04001329 moduleTypeUnderTest: "cc_library",
1330 moduleTypeUnderTestFactory: cc.LibraryFactory,
Liz Kammerd366c902021-06-03 13:43:01 -04001331 filesystem: map[string]string{
1332 "impl.cpp": "",
1333 },
1334 blueprint: soongCcLibraryPreamble + `
Liz Kammerd366c902021-06-03 13:43:01 -04001335cc_library {
1336 name: "foo-lib",
1337 srcs: ["impl.cpp"],
1338 arch: {
1339 arm: {
1340 no_libcrt: true,
1341 },
1342 x86: {
1343 no_libcrt: true,
1344 },
1345 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001346 include_build_directory: false,
Liz Kammerd366c902021-06-03 13:43:01 -04001347}
1348`,
Chris Parsons77acf2e2021-12-03 17:27:16 -05001349 expectedBazelTargets: makeCcLibraryTargets("foo-lib", attrNameToString{
1350 "srcs": `["impl.cpp"]`,
1351 "use_libcrt": `select({
Liz Kammerd366c902021-06-03 13:43:01 -04001352 "//build/bazel/platforms/arch:arm": False,
1353 "//build/bazel/platforms/arch:x86": False,
1354 "//conditions:default": None,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001355 })`,
Chris Parsons77acf2e2021-12-03 17:27:16 -05001356 }),
1357 })
Liz Kammerd366c902021-06-03 13:43:01 -04001358}
1359
Chris Parsons58852a02021-12-09 18:10:18 -05001360func TestCCLibraryNoLibCrtArchAndTargetVariant(t *testing.T) {
1361 runCcLibraryTestCase(t, bp2buildTestCase{
1362 moduleTypeUnderTest: "cc_library",
1363 moduleTypeUnderTestFactory: cc.LibraryFactory,
1364 filesystem: map[string]string{
1365 "impl.cpp": "",
1366 },
1367 blueprint: soongCcLibraryPreamble + `
1368cc_library {
1369 name: "foo-lib",
1370 srcs: ["impl.cpp"],
1371 arch: {
1372 arm: {
1373 no_libcrt: true,
1374 },
1375 x86: {
1376 no_libcrt: true,
1377 },
1378 },
1379 target: {
1380 darwin: {
1381 no_libcrt: true,
1382 }
1383 },
1384 include_build_directory: false,
1385}
1386`,
1387 expectedBazelTargets: makeCcLibraryTargets("foo-lib", attrNameToString{
1388 "srcs": `["impl.cpp"]`,
1389 "use_libcrt": `select({
1390 "//build/bazel/platforms/os_arch:android_arm": False,
1391 "//build/bazel/platforms/os_arch:android_x86": False,
1392 "//build/bazel/platforms/os_arch:darwin_arm64": False,
1393 "//build/bazel/platforms/os_arch:darwin_x86_64": False,
1394 "//build/bazel/platforms/os_arch:linux_glibc_x86": False,
1395 "//build/bazel/platforms/os_arch:linux_musl_x86": False,
1396 "//build/bazel/platforms/os_arch:windows_x86": False,
1397 "//conditions:default": None,
1398 })`,
1399 }),
1400 })
1401}
1402
1403func TestCCLibraryNoLibCrtArchAndTargetVariantConflict(t *testing.T) {
1404 runCcLibraryTestCase(t, bp2buildTestCase{
1405 moduleTypeUnderTest: "cc_library",
1406 moduleTypeUnderTestFactory: cc.LibraryFactory,
1407 filesystem: map[string]string{
1408 "impl.cpp": "",
1409 },
1410 blueprint: soongCcLibraryPreamble + `
1411cc_library {
1412 name: "foo-lib",
1413 srcs: ["impl.cpp"],
1414 arch: {
1415 arm: {
1416 no_libcrt: true,
1417 },
1418 // This is expected to override the value for darwin_x86_64.
1419 x86_64: {
1420 no_libcrt: true,
1421 },
1422 },
1423 target: {
1424 darwin: {
1425 no_libcrt: false,
1426 }
1427 },
1428 include_build_directory: false,
1429}
1430`,
1431 expectedBazelTargets: makeCcLibraryTargets("foo-lib", attrNameToString{
1432 "srcs": `["impl.cpp"]`,
1433 "use_libcrt": `select({
1434 "//build/bazel/platforms/os_arch:android_arm": False,
1435 "//build/bazel/platforms/os_arch:android_x86_64": False,
1436 "//build/bazel/platforms/os_arch:darwin_arm64": True,
1437 "//build/bazel/platforms/os_arch:darwin_x86_64": False,
1438 "//build/bazel/platforms/os_arch:linux_bionic_x86_64": False,
1439 "//build/bazel/platforms/os_arch:linux_glibc_x86_64": False,
1440 "//build/bazel/platforms/os_arch:linux_musl_x86_64": False,
1441 "//build/bazel/platforms/os_arch:windows_x86_64": False,
1442 "//conditions:default": None,
1443 })`,
1444 }),
1445 })
1446}
1447
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001448func TestCcLibraryStrip(t *testing.T) {
Chris Parsons77acf2e2021-12-03 17:27:16 -05001449 expectedTargets := []string{}
1450 expectedTargets = append(expectedTargets, makeCcLibraryTargets("all", attrNameToString{
1451 "strip": `{
1452 "all": True,
1453 }`,
1454 })...)
1455 expectedTargets = append(expectedTargets, makeCcLibraryTargets("keep_symbols", attrNameToString{
1456 "strip": `{
1457 "keep_symbols": True,
1458 }`,
1459 })...)
1460 expectedTargets = append(expectedTargets, makeCcLibraryTargets("keep_symbols_and_debug_frame", attrNameToString{
1461 "strip": `{
1462 "keep_symbols_and_debug_frame": True,
1463 }`,
1464 })...)
1465 expectedTargets = append(expectedTargets, makeCcLibraryTargets("keep_symbols_list", attrNameToString{
1466 "strip": `{
1467 "keep_symbols_list": ["symbol"],
1468 }`,
1469 })...)
1470 expectedTargets = append(expectedTargets, makeCcLibraryTargets("none", attrNameToString{
1471 "strip": `{
1472 "none": True,
1473 }`,
1474 })...)
1475 expectedTargets = append(expectedTargets, makeCcLibraryTargets("nothing", attrNameToString{})...)
1476
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001477 runCcLibraryTestCase(t, bp2buildTestCase{
Liz Kammerbe46fcc2021-11-01 15:32:43 -04001478 description: "cc_library strip args",
1479 moduleTypeUnderTest: "cc_library",
1480 moduleTypeUnderTestFactory: cc.LibraryFactory,
Liz Kammer8337ea42021-09-10 10:06:32 -04001481 blueprint: soongCcLibraryPreamble + `
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001482cc_library {
1483 name: "nothing",
Liz Kammer8337ea42021-09-10 10:06:32 -04001484 include_build_directory: false,
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001485}
1486cc_library {
1487 name: "keep_symbols",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001488 strip: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001489 keep_symbols: true,
1490 },
1491 include_build_directory: false,
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001492}
1493cc_library {
1494 name: "keep_symbols_and_debug_frame",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001495 strip: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001496 keep_symbols_and_debug_frame: true,
1497 },
1498 include_build_directory: false,
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001499}
1500cc_library {
1501 name: "none",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001502 strip: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001503 none: true,
1504 },
1505 include_build_directory: false,
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001506}
1507cc_library {
1508 name: "keep_symbols_list",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001509 strip: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001510 keep_symbols_list: ["symbol"],
1511 },
1512 include_build_directory: false,
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001513}
1514cc_library {
1515 name: "all",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001516 strip: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001517 all: true,
1518 },
1519 include_build_directory: false,
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001520}
1521`,
Chris Parsons77acf2e2021-12-03 17:27:16 -05001522 expectedBazelTargets: expectedTargets,
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001523 })
1524}
1525
1526func TestCcLibraryStripWithArch(t *testing.T) {
1527 runCcLibraryTestCase(t, bp2buildTestCase{
Liz Kammerbe46fcc2021-11-01 15:32:43 -04001528 description: "cc_library strip args",
1529 moduleTypeUnderTest: "cc_library",
1530 moduleTypeUnderTestFactory: cc.LibraryFactory,
Liz Kammer8337ea42021-09-10 10:06:32 -04001531 blueprint: soongCcLibraryPreamble + `
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001532cc_library {
1533 name: "multi-arch",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001534 target: {
1535 darwin: {
1536 strip: {
1537 keep_symbols_list: ["foo", "bar"]
1538 }
1539 },
1540 },
1541 arch: {
1542 arm: {
1543 strip: {
1544 keep_symbols_and_debug_frame: true,
1545 },
1546 },
1547 arm64: {
1548 strip: {
1549 keep_symbols: true,
1550 },
1551 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001552 },
1553 include_build_directory: false,
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001554}
1555`,
Chris Parsons77acf2e2021-12-03 17:27:16 -05001556 expectedBazelTargets: makeCcLibraryTargets("multi-arch", attrNameToString{
1557 "strip": `{
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001558 "keep_symbols": select({
1559 "//build/bazel/platforms/arch:arm64": True,
1560 "//conditions:default": None,
1561 }),
1562 "keep_symbols_and_debug_frame": select({
1563 "//build/bazel/platforms/arch:arm": True,
1564 "//conditions:default": None,
1565 }),
1566 "keep_symbols_list": select({
1567 "//build/bazel/platforms/os:darwin": [
1568 "foo",
1569 "bar",
1570 ],
1571 "//conditions:default": [],
1572 }),
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001573 }`,
Chris Parsons77acf2e2021-12-03 17:27:16 -05001574 }),
1575 },
1576 )
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001577}
Chris Parsons51f8c392021-08-03 21:01:05 -04001578
1579func TestCcLibrary_SystemSharedLibsRootEmpty(t *testing.T) {
1580 runCcLibraryTestCase(t, bp2buildTestCase{
Liz Kammerbe46fcc2021-11-01 15:32:43 -04001581 description: "cc_library system_shared_libs empty at root",
1582 moduleTypeUnderTest: "cc_library",
1583 moduleTypeUnderTestFactory: cc.LibraryFactory,
Chris Parsons51f8c392021-08-03 21:01:05 -04001584 blueprint: soongCcLibraryPreamble + `
1585cc_library {
1586 name: "root_empty",
Liz Kammer8337ea42021-09-10 10:06:32 -04001587 system_shared_libs: [],
1588 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001589}
1590`,
Chris Parsons77acf2e2021-12-03 17:27:16 -05001591 expectedBazelTargets: makeCcLibraryTargets("root_empty", attrNameToString{
1592 "system_dynamic_deps": `[]`,
1593 }),
1594 },
1595 )
Chris Parsons51f8c392021-08-03 21:01:05 -04001596}
1597
1598func TestCcLibrary_SystemSharedLibsStaticEmpty(t *testing.T) {
1599 runCcLibraryTestCase(t, bp2buildTestCase{
Liz Kammerbe46fcc2021-11-01 15:32:43 -04001600 description: "cc_library system_shared_libs empty for static variant",
1601 moduleTypeUnderTest: "cc_library",
1602 moduleTypeUnderTestFactory: cc.LibraryFactory,
Chris Parsons51f8c392021-08-03 21:01:05 -04001603 blueprint: soongCcLibraryPreamble + `
1604cc_library {
1605 name: "static_empty",
1606 static: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001607 system_shared_libs: [],
1608 },
1609 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001610}
1611`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001612 expectedBazelTargets: []string{
Chris Parsons77acf2e2021-12-03 17:27:16 -05001613 makeBazelTarget("cc_library_static", "static_empty_bp2build_cc_library_static", attrNameToString{
1614 "system_dynamic_deps": "[]",
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001615 }),
Chris Parsons77acf2e2021-12-03 17:27:16 -05001616 makeBazelTarget("cc_library_shared", "static_empty", attrNameToString{}),
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001617 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001618 })
1619}
1620
1621func TestCcLibrary_SystemSharedLibsSharedEmpty(t *testing.T) {
1622 runCcLibraryTestCase(t, bp2buildTestCase{
Liz Kammerbe46fcc2021-11-01 15:32:43 -04001623 description: "cc_library system_shared_libs empty for shared variant",
1624 moduleTypeUnderTest: "cc_library",
1625 moduleTypeUnderTestFactory: cc.LibraryFactory,
Chris Parsons51f8c392021-08-03 21:01:05 -04001626 blueprint: soongCcLibraryPreamble + `
1627cc_library {
1628 name: "shared_empty",
1629 shared: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001630 system_shared_libs: [],
1631 },
1632 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001633}
1634`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001635 expectedBazelTargets: []string{
Chris Parsons77acf2e2021-12-03 17:27:16 -05001636 makeBazelTarget("cc_library_static", "shared_empty_bp2build_cc_library_static", attrNameToString{}),
1637 makeBazelTarget("cc_library_shared", "shared_empty", attrNameToString{
1638 "system_dynamic_deps": "[]",
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001639 }),
1640 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001641 })
1642}
1643
1644func TestCcLibrary_SystemSharedLibsSharedBionicEmpty(t *testing.T) {
1645 runCcLibraryTestCase(t, bp2buildTestCase{
Liz Kammerbe46fcc2021-11-01 15:32:43 -04001646 description: "cc_library system_shared_libs empty for shared, bionic variant",
1647 moduleTypeUnderTest: "cc_library",
1648 moduleTypeUnderTestFactory: cc.LibraryFactory,
Chris Parsons51f8c392021-08-03 21:01:05 -04001649 blueprint: soongCcLibraryPreamble + `
1650cc_library {
1651 name: "shared_empty",
1652 target: {
1653 bionic: {
1654 shared: {
1655 system_shared_libs: [],
1656 }
1657 }
Liz Kammer8337ea42021-09-10 10:06:32 -04001658 },
1659 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001660}
1661`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001662 expectedBazelTargets: []string{
Chris Parsons77acf2e2021-12-03 17:27:16 -05001663 makeBazelTarget("cc_library_static", "shared_empty_bp2build_cc_library_static", attrNameToString{}),
1664 makeBazelTarget("cc_library_shared", "shared_empty", attrNameToString{
1665 "system_dynamic_deps": "[]",
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001666 }),
1667 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001668 })
1669}
1670
1671func TestCcLibrary_SystemSharedLibsLinuxBionicEmpty(t *testing.T) {
1672 // Note that this behavior is technically incorrect (it's a simplification).
1673 // The correct behavior would be if bp2build wrote `system_dynamic_deps = []`
1674 // only for linux_bionic, but `android` had `["libc", "libdl", "libm"].
1675 // b/195791252 tracks the fix.
1676 runCcLibraryTestCase(t, bp2buildTestCase{
Liz Kammerbe46fcc2021-11-01 15:32:43 -04001677 description: "cc_library system_shared_libs empty for linux_bionic variant",
1678 moduleTypeUnderTest: "cc_library",
1679 moduleTypeUnderTestFactory: cc.LibraryFactory,
Chris Parsons51f8c392021-08-03 21:01:05 -04001680 blueprint: soongCcLibraryPreamble + `
1681cc_library {
1682 name: "target_linux_bionic_empty",
1683 target: {
1684 linux_bionic: {
1685 system_shared_libs: [],
1686 },
1687 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001688 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001689}
1690`,
Chris Parsons77acf2e2021-12-03 17:27:16 -05001691 expectedBazelTargets: makeCcLibraryTargets("target_linux_bionic_empty", attrNameToString{
1692 "system_dynamic_deps": `[]`,
1693 }),
1694 },
1695 )
Chris Parsons51f8c392021-08-03 21:01:05 -04001696}
1697
1698func TestCcLibrary_SystemSharedLibsBionicEmpty(t *testing.T) {
1699 runCcLibraryTestCase(t, bp2buildTestCase{
Liz Kammerbe46fcc2021-11-01 15:32:43 -04001700 description: "cc_library system_shared_libs empty for bionic variant",
1701 moduleTypeUnderTest: "cc_library",
1702 moduleTypeUnderTestFactory: cc.LibraryFactory,
Chris Parsons51f8c392021-08-03 21:01:05 -04001703 blueprint: soongCcLibraryPreamble + `
1704cc_library {
1705 name: "target_bionic_empty",
1706 target: {
1707 bionic: {
1708 system_shared_libs: [],
1709 },
1710 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001711 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001712}
1713`,
Chris Parsons77acf2e2021-12-03 17:27:16 -05001714 expectedBazelTargets: makeCcLibraryTargets("target_bionic_empty", attrNameToString{
1715 "system_dynamic_deps": `[]`,
1716 }),
1717 },
1718 )
Chris Parsons51f8c392021-08-03 21:01:05 -04001719}
1720
1721func TestCcLibrary_SystemSharedLibsSharedAndRoot(t *testing.T) {
1722 runCcLibraryTestCase(t, bp2buildTestCase{
Liz Kammerbe46fcc2021-11-01 15:32:43 -04001723 description: "cc_library system_shared_libs set for shared and root",
1724 moduleTypeUnderTest: "cc_library",
1725 moduleTypeUnderTestFactory: cc.LibraryFactory,
Chris Parsons51f8c392021-08-03 21:01:05 -04001726 blueprint: soongCcLibraryPreamble + `
Liz Kammer8337ea42021-09-10 10:06:32 -04001727cc_library {
1728 name: "libc",
1729 bazel_module: { bp2build_available: false },
1730}
1731cc_library {
1732 name: "libm",
1733 bazel_module: { bp2build_available: false },
1734}
Chris Parsons51f8c392021-08-03 21:01:05 -04001735
1736cc_library {
1737 name: "foo",
1738 system_shared_libs: ["libc"],
1739 shared: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001740 system_shared_libs: ["libm"],
Chris Parsons51f8c392021-08-03 21:01:05 -04001741 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001742 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001743}
1744`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001745 expectedBazelTargets: []string{
Chris Parsons77acf2e2021-12-03 17:27:16 -05001746 makeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", attrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001747 "system_dynamic_deps": `[":libc"]`,
1748 }),
Chris Parsons77acf2e2021-12-03 17:27:16 -05001749 makeBazelTarget("cc_library_shared", "foo", attrNameToString{
1750 "system_dynamic_deps": `[
1751 ":libc",
1752 ":libm",
1753 ]`,
1754 }),
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001755 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001756 })
1757}
Chris Parsons2dde0cb2021-10-01 14:45:30 -04001758
1759func TestCcLibraryOsSelects(t *testing.T) {
1760 runCcLibraryTestCase(t, bp2buildTestCase{
Liz Kammerbe46fcc2021-11-01 15:32:43 -04001761 description: "cc_library - selects for all os targets",
1762 moduleTypeUnderTest: "cc_library",
1763 moduleTypeUnderTestFactory: cc.LibraryFactory,
1764 filesystem: map[string]string{},
Chris Parsons2dde0cb2021-10-01 14:45:30 -04001765 blueprint: soongCcLibraryPreamble + `
Chris Parsons2dde0cb2021-10-01 14:45:30 -04001766cc_library {
1767 name: "foo-lib",
1768 srcs: ["base.cpp"],
1769 target: {
1770 android: {
1771 srcs: ["android.cpp"],
1772 },
1773 linux: {
1774 srcs: ["linux.cpp"],
1775 },
1776 linux_glibc: {
1777 srcs: ["linux_glibc.cpp"],
1778 },
1779 darwin: {
1780 srcs: ["darwin.cpp"],
1781 },
1782 bionic: {
1783 srcs: ["bionic.cpp"],
1784 },
1785 linux_musl: {
1786 srcs: ["linux_musl.cpp"],
1787 },
1788 windows: {
1789 srcs: ["windows.cpp"],
1790 },
1791 },
1792 include_build_directory: false,
1793}
1794`,
Chris Parsons77acf2e2021-12-03 17:27:16 -05001795 expectedBazelTargets: makeCcLibraryTargets("foo-lib", attrNameToString{
1796 "srcs": `["base.cpp"] + select({
Chris Parsons2dde0cb2021-10-01 14:45:30 -04001797 "//build/bazel/platforms/os:android": [
Chris Parsons2dde0cb2021-10-01 14:45:30 -04001798 "linux.cpp",
Liz Kammer9bad9d62021-10-11 15:40:35 -04001799 "bionic.cpp",
Liz Kammerfdd72e62021-10-11 15:41:03 -04001800 "android.cpp",
Chris Parsons2dde0cb2021-10-01 14:45:30 -04001801 ],
1802 "//build/bazel/platforms/os:darwin": ["darwin.cpp"],
1803 "//build/bazel/platforms/os:linux": [
Liz Kammer9bad9d62021-10-11 15:40:35 -04001804 "linux.cpp",
Liz Kammerfdd72e62021-10-11 15:41:03 -04001805 "linux_glibc.cpp",
Chris Parsons2dde0cb2021-10-01 14:45:30 -04001806 ],
1807 "//build/bazel/platforms/os:linux_bionic": [
Chris Parsons2dde0cb2021-10-01 14:45:30 -04001808 "linux.cpp",
Liz Kammer9bad9d62021-10-11 15:40:35 -04001809 "bionic.cpp",
Chris Parsons2dde0cb2021-10-01 14:45:30 -04001810 ],
1811 "//build/bazel/platforms/os:linux_musl": [
Liz Kammer9bad9d62021-10-11 15:40:35 -04001812 "linux.cpp",
Liz Kammerfdd72e62021-10-11 15:41:03 -04001813 "linux_musl.cpp",
Chris Parsons2dde0cb2021-10-01 14:45:30 -04001814 ],
1815 "//build/bazel/platforms/os:windows": ["windows.cpp"],
1816 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001817 })`,
Chris Parsons77acf2e2021-12-03 17:27:16 -05001818 }),
1819 },
1820 )
Jingwen Chen97b85312021-10-08 10:41:31 +00001821}
1822
Jingwen Chen5b11ab12021-10-11 17:44:33 +00001823func TestCcLibraryCppStdWithGnuExtensions_ConvertsToFeatureAttr(t *testing.T) {
Jingwen Chen97b85312021-10-08 10:41:31 +00001824 type testCase struct {
1825 cpp_std string
Chris Parsons79bd2b72021-11-29 17:52:41 -05001826 c_std string
Jingwen Chen97b85312021-10-08 10:41:31 +00001827 gnu_extensions string
1828 bazel_cpp_std string
Chris Parsons79bd2b72021-11-29 17:52:41 -05001829 bazel_c_std string
Jingwen Chen97b85312021-10-08 10:41:31 +00001830 }
1831
1832 testCases := []testCase{
1833 // Existing usages of cpp_std in AOSP are:
1834 // experimental, c++11, c++17, c++2a, c++98, gnu++11, gnu++17
1835 //
1836 // not set, only emit if gnu_extensions is disabled. the default (gnu+17
1837 // is set in the toolchain.)
1838 {cpp_std: "", gnu_extensions: "", bazel_cpp_std: ""},
Chris Parsons79bd2b72021-11-29 17:52:41 -05001839 {cpp_std: "", gnu_extensions: "false", bazel_cpp_std: "c++17", bazel_c_std: "c99"},
Jingwen Chen97b85312021-10-08 10:41:31 +00001840 {cpp_std: "", gnu_extensions: "true", bazel_cpp_std: ""},
1841 // experimental defaults to gnu++2a
1842 {cpp_std: "experimental", gnu_extensions: "", bazel_cpp_std: "gnu++2a"},
Chris Parsons79bd2b72021-11-29 17:52:41 -05001843 {cpp_std: "experimental", gnu_extensions: "false", bazel_cpp_std: "c++2a", bazel_c_std: "c99"},
Jingwen Chen97b85312021-10-08 10:41:31 +00001844 {cpp_std: "experimental", gnu_extensions: "true", bazel_cpp_std: "gnu++2a"},
1845 // Explicitly setting a c++ std does not use replace gnu++ std even if
1846 // gnu_extensions is true.
1847 // "c++11",
1848 {cpp_std: "c++11", gnu_extensions: "", bazel_cpp_std: "c++11"},
Chris Parsons79bd2b72021-11-29 17:52:41 -05001849 {cpp_std: "c++11", gnu_extensions: "false", bazel_cpp_std: "c++11", bazel_c_std: "c99"},
Jingwen Chen97b85312021-10-08 10:41:31 +00001850 {cpp_std: "c++11", gnu_extensions: "true", bazel_cpp_std: "c++11"},
1851 // "c++17",
1852 {cpp_std: "c++17", gnu_extensions: "", bazel_cpp_std: "c++17"},
Chris Parsons79bd2b72021-11-29 17:52:41 -05001853 {cpp_std: "c++17", gnu_extensions: "false", bazel_cpp_std: "c++17", bazel_c_std: "c99"},
Jingwen Chen97b85312021-10-08 10:41:31 +00001854 {cpp_std: "c++17", gnu_extensions: "true", bazel_cpp_std: "c++17"},
1855 // "c++2a",
1856 {cpp_std: "c++2a", gnu_extensions: "", bazel_cpp_std: "c++2a"},
Chris Parsons79bd2b72021-11-29 17:52:41 -05001857 {cpp_std: "c++2a", gnu_extensions: "false", bazel_cpp_std: "c++2a", bazel_c_std: "c99"},
Jingwen Chen97b85312021-10-08 10:41:31 +00001858 {cpp_std: "c++2a", gnu_extensions: "true", bazel_cpp_std: "c++2a"},
1859 // "c++98",
1860 {cpp_std: "c++98", gnu_extensions: "", bazel_cpp_std: "c++98"},
Chris Parsons79bd2b72021-11-29 17:52:41 -05001861 {cpp_std: "c++98", gnu_extensions: "false", bazel_cpp_std: "c++98", bazel_c_std: "c99"},
Jingwen Chen97b85312021-10-08 10:41:31 +00001862 {cpp_std: "c++98", gnu_extensions: "true", bazel_cpp_std: "c++98"},
1863 // gnu++ is replaced with c++ if gnu_extensions is explicitly false.
1864 // "gnu++11",
1865 {cpp_std: "gnu++11", gnu_extensions: "", bazel_cpp_std: "gnu++11"},
Chris Parsons79bd2b72021-11-29 17:52:41 -05001866 {cpp_std: "gnu++11", gnu_extensions: "false", bazel_cpp_std: "c++11", bazel_c_std: "c99"},
Jingwen Chen97b85312021-10-08 10:41:31 +00001867 {cpp_std: "gnu++11", gnu_extensions: "true", bazel_cpp_std: "gnu++11"},
1868 // "gnu++17",
1869 {cpp_std: "gnu++17", gnu_extensions: "", bazel_cpp_std: "gnu++17"},
Chris Parsons79bd2b72021-11-29 17:52:41 -05001870 {cpp_std: "gnu++17", gnu_extensions: "false", bazel_cpp_std: "c++17", bazel_c_std: "c99"},
Jingwen Chen97b85312021-10-08 10:41:31 +00001871 {cpp_std: "gnu++17", gnu_extensions: "true", bazel_cpp_std: "gnu++17"},
Chris Parsons79bd2b72021-11-29 17:52:41 -05001872
1873 // some c_std test cases
1874 {c_std: "experimental", gnu_extensions: "", bazel_c_std: "gnu11"},
1875 {c_std: "experimental", gnu_extensions: "false", bazel_cpp_std: "c++17", bazel_c_std: "c11"},
1876 {c_std: "experimental", gnu_extensions: "true", bazel_c_std: "gnu11"},
1877 {c_std: "gnu11", cpp_std: "gnu++17", gnu_extensions: "", bazel_cpp_std: "gnu++17", bazel_c_std: "gnu11"},
1878 {c_std: "gnu11", cpp_std: "gnu++17", gnu_extensions: "false", bazel_cpp_std: "c++17", bazel_c_std: "c11"},
1879 {c_std: "gnu11", cpp_std: "gnu++17", gnu_extensions: "true", bazel_cpp_std: "gnu++17", bazel_c_std: "gnu11"},
Jingwen Chen97b85312021-10-08 10:41:31 +00001880 }
Chris Parsons79bd2b72021-11-29 17:52:41 -05001881 for i, tc := range testCases {
1882 name_prefix := fmt.Sprintf("a_%v", i)
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001883 cppStdProp := ""
Jingwen Chen97b85312021-10-08 10:41:31 +00001884 if tc.cpp_std != "" {
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001885 cppStdProp = fmt.Sprintf(" cpp_std: \"%s\",", tc.cpp_std)
Jingwen Chen97b85312021-10-08 10:41:31 +00001886 }
Chris Parsons79bd2b72021-11-29 17:52:41 -05001887 cStdProp := ""
1888 if tc.c_std != "" {
1889 cStdProp = fmt.Sprintf(" c_std: \"%s\",", tc.c_std)
1890 }
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001891 gnuExtensionsProp := ""
Jingwen Chen97b85312021-10-08 10:41:31 +00001892 if tc.gnu_extensions != "" {
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001893 gnuExtensionsProp = fmt.Sprintf(" gnu_extensions: %s,", tc.gnu_extensions)
Jingwen Chen97b85312021-10-08 10:41:31 +00001894 }
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001895 attrs := attrNameToString{}
Jingwen Chen97b85312021-10-08 10:41:31 +00001896 if tc.bazel_cpp_std != "" {
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001897 attrs["cpp_std"] = fmt.Sprintf(`"%s"`, tc.bazel_cpp_std)
Jingwen Chen97b85312021-10-08 10:41:31 +00001898 }
Chris Parsons79bd2b72021-11-29 17:52:41 -05001899 if tc.bazel_c_std != "" {
1900 attrs["c_std"] = fmt.Sprintf(`"%s"`, tc.bazel_c_std)
1901 }
Jingwen Chen97b85312021-10-08 10:41:31 +00001902
1903 runCcLibraryTestCase(t, bp2buildTestCase{
1904 description: fmt.Sprintf(
Liz Kammerbe46fcc2021-11-01 15:32:43 -04001905 "cc_library with cpp_std: %s and gnu_extensions: %s", tc.cpp_std, tc.gnu_extensions),
1906 moduleTypeUnderTest: "cc_library",
1907 moduleTypeUnderTestFactory: cc.LibraryFactory,
Jingwen Chen97b85312021-10-08 10:41:31 +00001908 blueprint: soongCcLibraryPreamble + fmt.Sprintf(`
1909cc_library {
Chris Parsons79bd2b72021-11-29 17:52:41 -05001910 name: "%s_full",
Jingwen Chen97b85312021-10-08 10:41:31 +00001911%s // cpp_std: *string
Chris Parsons79bd2b72021-11-29 17:52:41 -05001912%s // c_std: *string
Jingwen Chen97b85312021-10-08 10:41:31 +00001913%s // gnu_extensions: *bool
1914 include_build_directory: false,
1915}
Chris Parsons79bd2b72021-11-29 17:52:41 -05001916`, name_prefix, cppStdProp, cStdProp, gnuExtensionsProp),
Chris Parsons77acf2e2021-12-03 17:27:16 -05001917 expectedBazelTargets: makeCcLibraryTargets(name_prefix+"_full", attrs),
Jingwen Chen97b85312021-10-08 10:41:31 +00001918 })
Jingwen Chen5b11ab12021-10-11 17:44:33 +00001919
1920 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1921 description: fmt.Sprintf(
Liz Kammerbe46fcc2021-11-01 15:32:43 -04001922 "cc_library_static with cpp_std: %s and gnu_extensions: %s", tc.cpp_std, tc.gnu_extensions),
1923 moduleTypeUnderTest: "cc_library_static",
1924 moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
Jingwen Chen5b11ab12021-10-11 17:44:33 +00001925 blueprint: soongCcLibraryPreamble + fmt.Sprintf(`
1926cc_library_static {
Chris Parsons79bd2b72021-11-29 17:52:41 -05001927 name: "%s_static",
Jingwen Chen5b11ab12021-10-11 17:44:33 +00001928%s // cpp_std: *string
Chris Parsons79bd2b72021-11-29 17:52:41 -05001929%s // c_std: *string
Jingwen Chen5b11ab12021-10-11 17:44:33 +00001930%s // gnu_extensions: *bool
1931 include_build_directory: false,
1932}
Chris Parsons79bd2b72021-11-29 17:52:41 -05001933`, name_prefix, cppStdProp, cStdProp, gnuExtensionsProp),
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001934 expectedBazelTargets: []string{
Chris Parsons79bd2b72021-11-29 17:52:41 -05001935 makeBazelTarget("cc_library_static", name_prefix+"_static", attrs),
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001936 },
Jingwen Chen5b11ab12021-10-11 17:44:33 +00001937 })
1938
1939 runCcLibrarySharedTestCase(t, bp2buildTestCase{
1940 description: fmt.Sprintf(
Liz Kammerbe46fcc2021-11-01 15:32:43 -04001941 "cc_library_shared with cpp_std: %s and gnu_extensions: %s", tc.cpp_std, tc.gnu_extensions),
1942 moduleTypeUnderTest: "cc_library_shared",
1943 moduleTypeUnderTestFactory: cc.LibrarySharedFactory,
Jingwen Chen5b11ab12021-10-11 17:44:33 +00001944 blueprint: soongCcLibraryPreamble + fmt.Sprintf(`
1945cc_library_shared {
Chris Parsons79bd2b72021-11-29 17:52:41 -05001946 name: "%s_shared",
Jingwen Chen5b11ab12021-10-11 17:44:33 +00001947%s // cpp_std: *string
Chris Parsons79bd2b72021-11-29 17:52:41 -05001948%s // c_std: *string
Jingwen Chen5b11ab12021-10-11 17:44:33 +00001949%s // gnu_extensions: *bool
1950 include_build_directory: false,
1951}
Chris Parsons79bd2b72021-11-29 17:52:41 -05001952`, name_prefix, cppStdProp, cStdProp, gnuExtensionsProp),
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001953 expectedBazelTargets: []string{
Chris Parsons79bd2b72021-11-29 17:52:41 -05001954 makeBazelTarget("cc_library_shared", name_prefix+"_shared", attrs),
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001955 },
Jingwen Chen5b11ab12021-10-11 17:44:33 +00001956 })
Jingwen Chen97b85312021-10-08 10:41:31 +00001957 }
Chris Parsons2dde0cb2021-10-01 14:45:30 -04001958}
Liz Kammer12615db2021-09-28 09:19:17 -04001959
1960func TestCcLibraryProtoSimple(t *testing.T) {
1961 runCcLibraryTestCase(t, bp2buildTestCase{
Liz Kammerbe46fcc2021-11-01 15:32:43 -04001962 moduleTypeUnderTest: "cc_library",
1963 moduleTypeUnderTestFactory: cc.LibraryFactory,
Liz Kammer12615db2021-09-28 09:19:17 -04001964 blueprint: soongCcProtoPreamble + `cc_library {
1965 name: "foo",
1966 srcs: ["foo.proto"],
1967 include_build_directory: false,
1968}`,
1969 expectedBazelTargets: []string{
1970 makeBazelTarget("proto_library", "foo_proto", attrNameToString{
1971 "srcs": `["foo.proto"]`,
1972 "strip_import_prefix": `""`,
1973 }), makeBazelTarget("cc_lite_proto_library", "foo_cc_proto_lite", attrNameToString{
1974 "deps": `[":foo_proto"]`,
Chris Parsons77acf2e2021-12-03 17:27:16 -05001975 }), makeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", attrNameToString{
Liz Kammer12615db2021-09-28 09:19:17 -04001976 "implementation_whole_archive_deps": `[":foo_cc_proto_lite"]`,
Chris Parsons77acf2e2021-12-03 17:27:16 -05001977 "deps": `[":libprotobuf-cpp-lite"]`,
1978 }), makeBazelTarget("cc_library_shared", "foo", attrNameToString{
1979 "dynamic_deps": `[":libprotobuf-cpp-lite"]`,
Liz Kammer12615db2021-09-28 09:19:17 -04001980 }),
1981 },
1982 })
1983}
1984
1985func TestCcLibraryProtoNoCanonicalPathFromRoot(t *testing.T) {
1986 runCcLibraryTestCase(t, bp2buildTestCase{
Liz Kammerbe46fcc2021-11-01 15:32:43 -04001987 moduleTypeUnderTest: "cc_library",
1988 moduleTypeUnderTestFactory: cc.LibraryFactory,
Liz Kammer12615db2021-09-28 09:19:17 -04001989 blueprint: soongCcProtoPreamble + `cc_library {
1990 name: "foo",
1991 srcs: ["foo.proto"],
1992 proto: { canonical_path_from_root: false},
1993 include_build_directory: false,
1994}`,
1995 expectedBazelTargets: []string{
1996 makeBazelTarget("proto_library", "foo_proto", attrNameToString{
1997 "srcs": `["foo.proto"]`,
1998 }), makeBazelTarget("cc_lite_proto_library", "foo_cc_proto_lite", attrNameToString{
1999 "deps": `[":foo_proto"]`,
Chris Parsons77acf2e2021-12-03 17:27:16 -05002000 }), makeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", attrNameToString{
Liz Kammer12615db2021-09-28 09:19:17 -04002001 "implementation_whole_archive_deps": `[":foo_cc_proto_lite"]`,
Chris Parsons77acf2e2021-12-03 17:27:16 -05002002 "deps": `[":libprotobuf-cpp-lite"]`,
2003 }), makeBazelTarget("cc_library_shared", "foo", attrNameToString{
2004 "dynamic_deps": `[":libprotobuf-cpp-lite"]`,
Liz Kammer12615db2021-09-28 09:19:17 -04002005 }),
2006 },
2007 })
2008}
2009
2010func TestCcLibraryProtoExplicitCanonicalPathFromRoot(t *testing.T) {
2011 runCcLibraryTestCase(t, bp2buildTestCase{
Liz Kammerbe46fcc2021-11-01 15:32:43 -04002012 moduleTypeUnderTest: "cc_library",
2013 moduleTypeUnderTestFactory: cc.LibraryFactory,
Liz Kammer12615db2021-09-28 09:19:17 -04002014 blueprint: soongCcProtoPreamble + `cc_library {
2015 name: "foo",
2016 srcs: ["foo.proto"],
2017 proto: { canonical_path_from_root: true},
2018 include_build_directory: false,
2019}`,
2020 expectedBazelTargets: []string{
2021 makeBazelTarget("proto_library", "foo_proto", attrNameToString{
2022 "srcs": `["foo.proto"]`,
2023 "strip_import_prefix": `""`,
2024 }), makeBazelTarget("cc_lite_proto_library", "foo_cc_proto_lite", attrNameToString{
2025 "deps": `[":foo_proto"]`,
Chris Parsons77acf2e2021-12-03 17:27:16 -05002026 }), makeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", attrNameToString{
Liz Kammer12615db2021-09-28 09:19:17 -04002027 "implementation_whole_archive_deps": `[":foo_cc_proto_lite"]`,
Chris Parsons77acf2e2021-12-03 17:27:16 -05002028 "deps": `[":libprotobuf-cpp-lite"]`,
2029 }), makeBazelTarget("cc_library_shared", "foo", attrNameToString{
2030 "dynamic_deps": `[":libprotobuf-cpp-lite"]`,
Liz Kammer12615db2021-09-28 09:19:17 -04002031 }),
2032 },
2033 })
2034}
2035
2036func TestCcLibraryProtoFull(t *testing.T) {
2037 runCcLibraryTestCase(t, bp2buildTestCase{
Liz Kammerbe46fcc2021-11-01 15:32:43 -04002038 moduleTypeUnderTest: "cc_library",
2039 moduleTypeUnderTestFactory: cc.LibraryFactory,
Liz Kammer12615db2021-09-28 09:19:17 -04002040 blueprint: soongCcProtoPreamble + `cc_library {
2041 name: "foo",
2042 srcs: ["foo.proto"],
2043 proto: {
2044 canonical_path_from_root: false,
2045 type: "full",
2046 },
2047 include_build_directory: false,
2048}`,
2049 expectedBazelTargets: []string{
2050 makeBazelTarget("proto_library", "foo_proto", attrNameToString{
2051 "srcs": `["foo.proto"]`,
2052 }), makeBazelTarget("cc_proto_library", "foo_cc_proto", attrNameToString{
2053 "deps": `[":foo_proto"]`,
Chris Parsons77acf2e2021-12-03 17:27:16 -05002054 }), makeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", attrNameToString{
Liz Kammer12615db2021-09-28 09:19:17 -04002055 "implementation_whole_archive_deps": `[":foo_cc_proto"]`,
Chris Parsons77acf2e2021-12-03 17:27:16 -05002056 "deps": `[":libprotobuf-cpp-full"]`,
2057 }), makeBazelTarget("cc_library_shared", "foo", attrNameToString{
2058 "dynamic_deps": `[":libprotobuf-cpp-full"]`,
Liz Kammer12615db2021-09-28 09:19:17 -04002059 }),
2060 },
2061 })
2062}
2063
2064func TestCcLibraryProtoLite(t *testing.T) {
2065 runCcLibraryTestCase(t, bp2buildTestCase{
Liz Kammerbe46fcc2021-11-01 15:32:43 -04002066 moduleTypeUnderTest: "cc_library",
2067 moduleTypeUnderTestFactory: cc.LibraryFactory,
Liz Kammer12615db2021-09-28 09:19:17 -04002068 blueprint: soongCcProtoPreamble + `cc_library {
2069 name: "foo",
2070 srcs: ["foo.proto"],
2071 proto: {
2072 canonical_path_from_root: false,
2073 type: "lite",
2074 },
2075 include_build_directory: false,
2076}`,
2077 expectedBazelTargets: []string{
2078 makeBazelTarget("proto_library", "foo_proto", attrNameToString{
2079 "srcs": `["foo.proto"]`,
2080 }), makeBazelTarget("cc_lite_proto_library", "foo_cc_proto_lite", attrNameToString{
2081 "deps": `[":foo_proto"]`,
Chris Parsons77acf2e2021-12-03 17:27:16 -05002082 }), makeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", attrNameToString{
Liz Kammer12615db2021-09-28 09:19:17 -04002083 "implementation_whole_archive_deps": `[":foo_cc_proto_lite"]`,
Chris Parsons77acf2e2021-12-03 17:27:16 -05002084 "deps": `[":libprotobuf-cpp-lite"]`,
2085 }), makeBazelTarget("cc_library_shared", "foo", attrNameToString{
2086 "dynamic_deps": `[":libprotobuf-cpp-lite"]`,
Liz Kammer12615db2021-09-28 09:19:17 -04002087 }),
2088 },
2089 })
2090}
2091
2092func TestCcLibraryProtoExportHeaders(t *testing.T) {
2093 runCcLibraryTestCase(t, bp2buildTestCase{
Liz Kammerbe46fcc2021-11-01 15:32:43 -04002094 moduleTypeUnderTest: "cc_library",
2095 moduleTypeUnderTestFactory: cc.LibraryFactory,
Liz Kammer12615db2021-09-28 09:19:17 -04002096 blueprint: soongCcProtoPreamble + `cc_library {
2097 name: "foo",
2098 srcs: ["foo.proto"],
2099 proto: {
2100 canonical_path_from_root: false,
2101 export_proto_headers: true,
2102 },
2103 include_build_directory: false,
2104}`,
2105 expectedBazelTargets: []string{
2106 makeBazelTarget("proto_library", "foo_proto", attrNameToString{
2107 "srcs": `["foo.proto"]`,
2108 }), makeBazelTarget("cc_lite_proto_library", "foo_cc_proto_lite", attrNameToString{
2109 "deps": `[":foo_proto"]`,
Chris Parsons77acf2e2021-12-03 17:27:16 -05002110 }), makeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", attrNameToString{
2111 "deps": `[":libprotobuf-cpp-lite"]`,
Liz Kammer12615db2021-09-28 09:19:17 -04002112 "whole_archive_deps": `[":foo_cc_proto_lite"]`,
Chris Parsons77acf2e2021-12-03 17:27:16 -05002113 }), makeBazelTarget("cc_library_shared", "foo", attrNameToString{
2114 "dynamic_deps": `[":libprotobuf-cpp-lite"]`,
2115 "whole_archive_deps": `[":foo_cc_proto_lite"]`,
Liz Kammer12615db2021-09-28 09:19:17 -04002116 }),
2117 },
2118 })
2119}
Liz Kammeraabfb5d2021-12-08 15:25:06 -05002120
2121func TestCcLibraryProtoFilegroups(t *testing.T) {
2122 runCcLibraryTestCase(t, bp2buildTestCase{
2123 moduleTypeUnderTest: "cc_library",
2124 moduleTypeUnderTestFactory: cc.LibraryFactory,
2125 blueprint: soongCcProtoPreamble +
2126 simpleModuleDoNotConvertBp2build("filegroup", "a_fg_proto") +
2127 simpleModuleDoNotConvertBp2build("filegroup", "b_protos") +
2128 simpleModuleDoNotConvertBp2build("filegroup", "c-proto-srcs") +
2129 simpleModuleDoNotConvertBp2build("filegroup", "proto-srcs-d") + `
2130cc_library {
2131 name: "a",
2132 srcs: [":a_fg_proto"],
2133 proto: {
2134 canonical_path_from_root: false,
2135 export_proto_headers: true,
2136 },
2137 include_build_directory: false,
2138}
2139
2140cc_library {
2141 name: "b",
2142 srcs: [":b_protos"],
2143 proto: {
2144 canonical_path_from_root: false,
2145 export_proto_headers: true,
2146 },
2147 include_build_directory: false,
2148}
2149
2150cc_library {
2151 name: "c",
2152 srcs: [":c-proto-srcs"],
2153 proto: {
2154 canonical_path_from_root: false,
2155 export_proto_headers: true,
2156 },
2157 include_build_directory: false,
2158}
2159
2160cc_library {
2161 name: "d",
2162 srcs: [":proto-srcs-d"],
2163 proto: {
2164 canonical_path_from_root: false,
2165 export_proto_headers: true,
2166 },
2167 include_build_directory: false,
2168}`,
2169 expectedBazelTargets: []string{
2170 makeBazelTarget("proto_library", "a_proto", attrNameToString{
2171 "srcs": `[":a_fg_proto"]`,
2172 }), makeBazelTarget("cc_lite_proto_library", "a_cc_proto_lite", attrNameToString{
2173 "deps": `[":a_proto"]`,
2174 }), makeBazelTarget("cc_library_static", "a_bp2build_cc_library_static", attrNameToString{
2175 "deps": `[":libprotobuf-cpp-lite"]`,
2176 "whole_archive_deps": `[":a_cc_proto_lite"]`,
2177 "srcs": `[":a_fg_proto_cpp_srcs"]`,
2178 "srcs_as": `[":a_fg_proto_as_srcs"]`,
2179 "srcs_c": `[":a_fg_proto_c_srcs"]`,
2180 }), makeBazelTarget("cc_library_shared", "a", attrNameToString{
2181 "dynamic_deps": `[":libprotobuf-cpp-lite"]`,
2182 "whole_archive_deps": `[":a_cc_proto_lite"]`,
2183 "srcs": `[":a_fg_proto_cpp_srcs"]`,
2184 "srcs_as": `[":a_fg_proto_as_srcs"]`,
2185 "srcs_c": `[":a_fg_proto_c_srcs"]`,
2186 }), makeBazelTarget("proto_library", "b_proto", attrNameToString{
2187 "srcs": `[":b_protos"]`,
2188 }), makeBazelTarget("cc_lite_proto_library", "b_cc_proto_lite", attrNameToString{
2189 "deps": `[":b_proto"]`,
2190 }), makeBazelTarget("cc_library_static", "b_bp2build_cc_library_static", attrNameToString{
2191 "deps": `[":libprotobuf-cpp-lite"]`,
2192 "whole_archive_deps": `[":b_cc_proto_lite"]`,
2193 "srcs": `[":b_protos_cpp_srcs"]`,
2194 "srcs_as": `[":b_protos_as_srcs"]`,
2195 "srcs_c": `[":b_protos_c_srcs"]`,
2196 }), makeBazelTarget("cc_library_shared", "b", attrNameToString{
2197 "dynamic_deps": `[":libprotobuf-cpp-lite"]`,
2198 "whole_archive_deps": `[":b_cc_proto_lite"]`,
2199 "srcs": `[":b_protos_cpp_srcs"]`,
2200 "srcs_as": `[":b_protos_as_srcs"]`,
2201 "srcs_c": `[":b_protos_c_srcs"]`,
2202 }), makeBazelTarget("proto_library", "c_proto", attrNameToString{
2203 "srcs": `[":c-proto-srcs"]`,
2204 }), makeBazelTarget("cc_lite_proto_library", "c_cc_proto_lite", attrNameToString{
2205 "deps": `[":c_proto"]`,
2206 }), makeBazelTarget("cc_library_static", "c_bp2build_cc_library_static", attrNameToString{
2207 "deps": `[":libprotobuf-cpp-lite"]`,
2208 "whole_archive_deps": `[":c_cc_proto_lite"]`,
2209 "srcs": `[":c-proto-srcs_cpp_srcs"]`,
2210 "srcs_as": `[":c-proto-srcs_as_srcs"]`,
2211 "srcs_c": `[":c-proto-srcs_c_srcs"]`,
2212 }), makeBazelTarget("cc_library_shared", "c", attrNameToString{
2213 "dynamic_deps": `[":libprotobuf-cpp-lite"]`,
2214 "whole_archive_deps": `[":c_cc_proto_lite"]`,
2215 "srcs": `[":c-proto-srcs_cpp_srcs"]`,
2216 "srcs_as": `[":c-proto-srcs_as_srcs"]`,
2217 "srcs_c": `[":c-proto-srcs_c_srcs"]`,
2218 }), makeBazelTarget("proto_library", "d_proto", attrNameToString{
2219 "srcs": `[":proto-srcs-d"]`,
2220 }), makeBazelTarget("cc_lite_proto_library", "d_cc_proto_lite", attrNameToString{
2221 "deps": `[":d_proto"]`,
2222 }), makeBazelTarget("cc_library_static", "d_bp2build_cc_library_static", attrNameToString{
2223 "deps": `[":libprotobuf-cpp-lite"]`,
2224 "whole_archive_deps": `[":d_cc_proto_lite"]`,
2225 "srcs": `[":proto-srcs-d_cpp_srcs"]`,
2226 "srcs_as": `[":proto-srcs-d_as_srcs"]`,
2227 "srcs_c": `[":proto-srcs-d_c_srcs"]`,
2228 }), makeBazelTarget("cc_library_shared", "d", attrNameToString{
2229 "dynamic_deps": `[":libprotobuf-cpp-lite"]`,
2230 "whole_archive_deps": `[":d_cc_proto_lite"]`,
2231 "srcs": `[":proto-srcs-d_cpp_srcs"]`,
2232 "srcs_as": `[":proto-srcs-d_as_srcs"]`,
2233 "srcs_c": `[":proto-srcs-d_c_srcs"]`,
2234 }),
2235 },
2236 })
2237}
Chris Parsons58852a02021-12-09 18:10:18 -05002238
2239func TestCcLibraryDisabledArchAndTarget(t *testing.T) {
2240 runCcLibraryTestCase(t, bp2buildTestCase{
2241 moduleTypeUnderTest: "cc_library",
2242 moduleTypeUnderTestFactory: cc.LibraryFactory,
2243 blueprint: soongCcProtoPreamble + `cc_library {
2244 name: "foo",
2245 srcs: ["foo.cpp"],
2246 target: {
2247 darwin: {
2248 enabled: false,
2249 },
2250 windows: {
2251 enabled: false,
2252 },
2253 linux_glibc_x86: {
2254 enabled: false,
2255 },
2256 },
2257 include_build_directory: false,
2258}`,
2259 expectedBazelTargets: makeCcLibraryTargets("foo", attrNameToString{
2260 "srcs": `["foo.cpp"]`,
2261 "target_compatible_with": `select({
2262 "//build/bazel/platforms/os_arch:darwin_arm64": ["@platforms//:incompatible"],
2263 "//build/bazel/platforms/os_arch:darwin_x86_64": ["@platforms//:incompatible"],
2264 "//build/bazel/platforms/os_arch:linux_glibc_x86": ["@platforms//:incompatible"],
2265 "//build/bazel/platforms/os_arch:windows_x86": ["@platforms//:incompatible"],
2266 "//build/bazel/platforms/os_arch:windows_x86_64": ["@platforms//:incompatible"],
2267 "//conditions:default": [],
2268 })`,
2269 }),
2270 })
2271}
2272
2273func TestCcLibraryDisabledArchAndTargetWithDefault(t *testing.T) {
2274 runCcLibraryTestCase(t, bp2buildTestCase{
2275 moduleTypeUnderTest: "cc_library",
2276 moduleTypeUnderTestFactory: cc.LibraryFactory,
2277 blueprint: soongCcProtoPreamble + `cc_library {
2278 name: "foo",
2279 srcs: ["foo.cpp"],
2280 enabled: false,
2281 target: {
2282 darwin: {
2283 enabled: true,
2284 },
2285 windows: {
2286 enabled: false,
2287 },
2288 linux_glibc_x86: {
2289 enabled: false,
2290 },
2291 },
2292 include_build_directory: false,
2293}`,
2294 expectedBazelTargets: makeCcLibraryTargets("foo", attrNameToString{
2295 "srcs": `["foo.cpp"]`,
2296 "target_compatible_with": `select({
2297 "//build/bazel/platforms/os_arch:darwin_arm64": [],
2298 "//build/bazel/platforms/os_arch:darwin_x86_64": [],
2299 "//conditions:default": ["@platforms//:incompatible"],
2300 })`,
2301 }),
2302 })
2303}
2304
2305func TestCcLibrarySharedDisabled(t *testing.T) {
2306 runCcLibraryTestCase(t, bp2buildTestCase{
2307 moduleTypeUnderTest: "cc_library",
2308 moduleTypeUnderTestFactory: cc.LibraryFactory,
2309 blueprint: soongCcProtoPreamble + `cc_library {
2310 name: "foo",
2311 srcs: ["foo.cpp"],
2312 enabled: false,
2313 shared: {
2314 enabled: true,
2315 },
2316 target: {
2317 android: {
2318 shared: {
2319 enabled: false,
2320 },
2321 }
2322 },
2323 include_build_directory: false,
2324}`,
2325 expectedBazelTargets: []string{makeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", attrNameToString{
2326 "srcs": `["foo.cpp"]`,
2327 "target_compatible_with": `["@platforms//:incompatible"]`,
2328 }), makeBazelTarget("cc_library_shared", "foo", attrNameToString{
2329 "srcs": `["foo.cpp"]`,
2330 "target_compatible_with": `select({
2331 "//build/bazel/platforms/os:android": ["@platforms//:incompatible"],
2332 "//conditions:default": [],
2333 })`,
2334 }),
2335 },
2336 })
2337}
2338
2339func TestCcLibraryStaticDisabledForSomeArch(t *testing.T) {
2340 runCcLibraryTestCase(t, bp2buildTestCase{
2341 moduleTypeUnderTest: "cc_library",
2342 moduleTypeUnderTestFactory: cc.LibraryFactory,
2343 blueprint: soongCcProtoPreamble + `cc_library {
2344 name: "foo",
2345 srcs: ["foo.cpp"],
2346 shared: {
2347 enabled: false
2348 },
2349 target: {
2350 darwin: {
2351 enabled: true,
2352 },
2353 windows: {
2354 enabled: false,
2355 },
2356 linux_glibc_x86: {
2357 shared: {
2358 enabled: true,
2359 },
2360 },
2361 },
2362 include_build_directory: false,
2363}`,
2364 expectedBazelTargets: []string{makeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", attrNameToString{
2365 "srcs": `["foo.cpp"]`,
2366 "target_compatible_with": `select({
2367 "//build/bazel/platforms/os:windows": ["@platforms//:incompatible"],
2368 "//conditions:default": [],
2369 })`,
2370 }), makeBazelTarget("cc_library_shared", "foo", attrNameToString{
2371 "srcs": `["foo.cpp"]`,
2372 "target_compatible_with": `select({
2373 "//build/bazel/platforms/os_arch:darwin_arm64": [],
2374 "//build/bazel/platforms/os_arch:darwin_x86_64": [],
2375 "//build/bazel/platforms/os_arch:linux_glibc_x86": [],
2376 "//conditions:default": ["@platforms//:incompatible"],
2377 })`,
2378 }),
2379 }})
2380}