blob: d23ea01ed456129fe22d83d2d40c7745cca6b994 [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}
31
32toolchain_library {
Liz Kammer8337ea42021-09-10 10:06:32 -040033 name: "libclang_rt.builtins-x86_64-android",
34 defaults: ["linux_bionic_supported"],
35 vendor_available: true,
36 vendor_ramdisk_available: true,
37 product_available: true,
38 recovery_available: true,
39 native_bridge_supported: true,
40 src: "",
Jingwen Chen63930982021-03-24 10:04:33 -040041}`
42)
43
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020044func runCcLibraryTestCase(t *testing.T, tc bp2buildTestCase) {
Liz Kammere4982e82021-05-25 10:39:35 -040045 t.Helper()
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020046 runBp2BuildTestCase(t, registerCcLibraryModuleTypes, tc)
47}
48
49func registerCcLibraryModuleTypes(ctx android.RegistrationContext) {
50 cc.RegisterCCBuildComponents(ctx)
Jingwen Chen14a8bda2021-06-02 11:10:02 +000051 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020052 ctx.RegisterModuleType("cc_library_static", cc.LibraryStaticFactory)
Liz Kammer2d7bbe32021-06-10 18:20:06 -040053 ctx.RegisterModuleType("cc_prebuilt_library_static", cc.PrebuiltStaticLibraryFactory)
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020054 ctx.RegisterModuleType("toolchain_library", cc.ToolchainLibraryFactory)
55 ctx.RegisterModuleType("cc_library_headers", cc.LibraryHeaderFactory)
56}
57
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020058func TestCcLibrarySimple(t *testing.T) {
59 runCcLibraryTestCase(t, bp2buildTestCase{
60 description: "cc_library - simple example",
61 moduleTypeUnderTest: "cc_library",
62 moduleTypeUnderTestFactory: cc.LibraryFactory,
63 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
64 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`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500120 expectedBazelTargets: []string{
121 makeBazelTarget("cc_library", "foo-lib", attrNameToString{
122 "copts": `["-Wall"]`,
123 "export_includes": `["foo-dir"]`,
124 "implementation_deps": `[":some-headers"]`,
125 "linkopts": `["-Wl,--exclude-libs=bar.a"] + select({
Jingwen Chened9c17d2021-04-13 07:14:55 +0000126 "//build/bazel/platforms/arch:x86": ["-Wl,--exclude-libs=baz.a"],
127 "//build/bazel/platforms/arch:x86_64": ["-Wl,--exclude-libs=qux.a"],
128 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500129 })`,
130 "srcs": `["impl.cpp"] + select({
Jingwen Chenb4628eb2021-04-08 14:40:57 +0000131 "//build/bazel/platforms/arch:x86": ["x86.cpp"],
132 "//build/bazel/platforms/arch:x86_64": ["x86_64.cpp"],
Jingwen Chen63930982021-03-24 10:04:33 -0400133 "//conditions:default": [],
134 }) + select({
Chris Parsons2dde0cb2021-10-01 14:45:30 -0400135 "//build/bazel/platforms/os:android": [
Chris Parsons2dde0cb2021-10-01 14:45:30 -0400136 "bionic.cpp",
Liz Kammerfdd72e62021-10-11 15:41:03 -0400137 "android.cpp",
Chris Parsons2dde0cb2021-10-01 14:45:30 -0400138 ],
Jingwen Chenb4628eb2021-04-08 14:40:57 +0000139 "//build/bazel/platforms/os:darwin": ["darwin.cpp"],
140 "//build/bazel/platforms/os:linux": ["linux.cpp"],
Chris Parsons2dde0cb2021-10-01 14:45:30 -0400141 "//build/bazel/platforms/os:linux_bionic": ["bionic.cpp"],
Liz Kammer01a16e82021-07-16 16:33:47 -0400142 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500143 })`,
144 }),
145 },
146 })
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200147}
148
149func TestCcLibraryTrimmedLdAndroid(t *testing.T) {
150 runCcLibraryTestCase(t, bp2buildTestCase{
151 description: "cc_library - trimmed example of //bionic/linker:ld-android",
152 moduleTypeUnderTest: "cc_library",
153 moduleTypeUnderTestFactory: cc.LibraryFactory,
154 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
155 filesystem: map[string]string{
156 "ld-android.cpp": "",
157 "linked_list.h": "",
158 "linker.h": "",
159 "linker_block_allocator.h": "",
160 "linker_cfi.h": "",
Jingwen Chen63930982021-03-24 10:04:33 -0400161 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200162 blueprint: soongCcLibraryPreamble + `
Jingwen Chen63930982021-03-24 10:04:33 -0400163cc_library_headers { name: "libc_headers" }
164cc_library {
165 name: "fake-ld-android",
166 srcs: ["ld_android.cpp"],
167 cflags: [
168 "-Wall",
169 "-Wextra",
170 "-Wunused",
171 "-Werror",
172 ],
173 header_libs: ["libc_headers"],
174 ldflags: [
175 "-Wl,--exclude-libs=libgcc.a",
176 "-Wl,--exclude-libs=libgcc_stripped.a",
177 "-Wl,--exclude-libs=libclang_rt.builtins-arm-android.a",
178 "-Wl,--exclude-libs=libclang_rt.builtins-aarch64-android.a",
179 "-Wl,--exclude-libs=libclang_rt.builtins-i686-android.a",
180 "-Wl,--exclude-libs=libclang_rt.builtins-x86_64-android.a",
181 ],
182 arch: {
183 x86: {
184 ldflags: ["-Wl,--exclude-libs=libgcc_eh.a"],
185 },
186 x86_64: {
187 ldflags: ["-Wl,--exclude-libs=libgcc_eh.a"],
188 },
189 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400190 include_build_directory: false,
Jingwen Chen63930982021-03-24 10:04:33 -0400191}
192`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500193 expectedBazelTargets: []string{
194 makeBazelTarget("cc_library", "fake-ld-android", attrNameToString{
195 "srcs": `["ld_android.cpp"]`,
196 "copts": `[
Jingwen Chen63930982021-03-24 10:04:33 -0400197 "-Wall",
198 "-Wextra",
199 "-Wunused",
200 "-Werror",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500201 ]`,
202 "implementation_deps": `[":libc_headers"]`,
203 "linkopts": `[
Jingwen Chen63930982021-03-24 10:04:33 -0400204 "-Wl,--exclude-libs=libgcc.a",
205 "-Wl,--exclude-libs=libgcc_stripped.a",
206 "-Wl,--exclude-libs=libclang_rt.builtins-arm-android.a",
207 "-Wl,--exclude-libs=libclang_rt.builtins-aarch64-android.a",
208 "-Wl,--exclude-libs=libclang_rt.builtins-i686-android.a",
209 "-Wl,--exclude-libs=libclang_rt.builtins-x86_64-android.a",
210 ] + select({
Jingwen Chenb4628eb2021-04-08 14:40:57 +0000211 "//build/bazel/platforms/arch:x86": ["-Wl,--exclude-libs=libgcc_eh.a"],
212 "//build/bazel/platforms/arch:x86_64": ["-Wl,--exclude-libs=libgcc_eh.a"],
Jingwen Chen63930982021-03-24 10:04:33 -0400213 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500214 })`,
215 }),
216 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200217 })
218}
219
220func TestCcLibraryExcludeSrcs(t *testing.T) {
221 runCcLibraryTestCase(t, bp2buildTestCase{
222 description: "cc_library exclude_srcs - trimmed example of //external/arm-optimized-routines:libarm-optimized-routines-math",
223 moduleTypeUnderTest: "cc_library",
224 moduleTypeUnderTestFactory: cc.LibraryFactory,
225 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
226 dir: "external",
227 filesystem: map[string]string{
228 "external/math/cosf.c": "",
229 "external/math/erf.c": "",
230 "external/math/erf_data.c": "",
231 "external/math/erff.c": "",
232 "external/math/erff_data.c": "",
233 "external/Android.bp": `
Jingwen Chen4ecc67d2021-04-27 09:47:02 +0000234cc_library {
235 name: "fake-libarm-optimized-routines-math",
236 exclude_srcs: [
237 // Provided by:
238 // bionic/libm/upstream-freebsd/lib/msun/src/s_erf.c
239 // bionic/libm/upstream-freebsd/lib/msun/src/s_erff.c
240 "math/erf.c",
241 "math/erf_data.c",
242 "math/erff.c",
243 "math/erff_data.c",
244 ],
245 srcs: [
246 "math/*.c",
247 ],
248 // arch-specific settings
249 arch: {
250 arm64: {
251 cflags: [
252 "-DHAVE_FAST_FMA=1",
253 ],
254 },
255 },
256 bazel_module: { bp2build_available: true },
257}
258`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200259 },
260 blueprint: soongCcLibraryPreamble,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500261 expectedBazelTargets: []string{
262 makeBazelTarget("cc_library", "fake-libarm-optimized-routines-math", attrNameToString{
263 "copts": `select({
Jingwen Chen4ecc67d2021-04-27 09:47:02 +0000264 "//build/bazel/platforms/arch:arm64": ["-DHAVE_FAST_FMA=1"],
265 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500266 })`,
267 "local_includes": `["."]`,
268 "srcs_c": `["math/cosf.c"]`,
269 }),
270 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200271 })
272}
273
274func TestCcLibrarySharedStaticProps(t *testing.T) {
275 runCcLibraryTestCase(t, bp2buildTestCase{
276 description: "cc_library shared/static props",
277 moduleTypeUnderTest: "cc_library",
278 moduleTypeUnderTestFactory: cc.LibraryFactory,
279 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200280 filesystem: map[string]string{
Liz Kammer8337ea42021-09-10 10:06:32 -0400281 "both.cpp": "",
282 "sharedonly.cpp": "",
283 "staticonly.cpp": "",
284 },
285 blueprint: soongCcLibraryPreamble + `
Jingwen Chen53681ef2021-04-29 08:15:13 +0000286cc_library {
287 name: "a",
Chris Parsons08648312021-05-06 16:23:19 -0400288 srcs: ["both.cpp"],
289 cflags: ["bothflag"],
290 shared_libs: ["shared_dep_for_both"],
291 static_libs: ["static_dep_for_both"],
292 whole_static_libs: ["whole_static_lib_for_both"],
293 static: {
294 srcs: ["staticonly.cpp"],
295 cflags: ["staticflag"],
296 shared_libs: ["shared_dep_for_static"],
297 static_libs: ["static_dep_for_static"],
298 whole_static_libs: ["whole_static_lib_for_static"],
299 },
300 shared: {
301 srcs: ["sharedonly.cpp"],
302 cflags: ["sharedflag"],
303 shared_libs: ["shared_dep_for_shared"],
304 static_libs: ["static_dep_for_shared"],
305 whole_static_libs: ["whole_static_lib_for_shared"],
306 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400307 include_build_directory: false,
Jingwen Chen53681ef2021-04-29 08:15:13 +0000308}
309
Liz Kammer8337ea42021-09-10 10:06:32 -0400310cc_library_static {
311 name: "static_dep_for_shared",
312 bazel_module: { bp2build_available: false },
313}
Chris Parsons08648312021-05-06 16:23:19 -0400314
Liz Kammer8337ea42021-09-10 10:06:32 -0400315cc_library_static {
316 name: "static_dep_for_static",
317 bazel_module: { bp2build_available: false },
318}
Chris Parsons08648312021-05-06 16:23:19 -0400319
Liz Kammer8337ea42021-09-10 10:06:32 -0400320cc_library_static {
321 name: "static_dep_for_both",
322 bazel_module: { bp2build_available: false },
323}
Chris Parsons08648312021-05-06 16:23:19 -0400324
Liz Kammer8337ea42021-09-10 10:06:32 -0400325cc_library_static {
326 name: "whole_static_lib_for_shared",
327 bazel_module: { bp2build_available: false },
328}
Chris Parsons08648312021-05-06 16:23:19 -0400329
Liz Kammer8337ea42021-09-10 10:06:32 -0400330cc_library_static {
331 name: "whole_static_lib_for_static",
332 bazel_module: { bp2build_available: false },
333}
Chris Parsons08648312021-05-06 16:23:19 -0400334
Liz Kammer8337ea42021-09-10 10:06:32 -0400335cc_library_static {
336 name: "whole_static_lib_for_both",
337 bazel_module: { bp2build_available: false },
338}
Chris Parsons08648312021-05-06 16:23:19 -0400339
Liz Kammer8337ea42021-09-10 10:06:32 -0400340cc_library {
341 name: "shared_dep_for_shared",
342 bazel_module: { bp2build_available: false },
343}
Chris Parsons08648312021-05-06 16:23:19 -0400344
Liz Kammer8337ea42021-09-10 10:06:32 -0400345cc_library {
346 name: "shared_dep_for_static",
347 bazel_module: { bp2build_available: false },
348}
Chris Parsons08648312021-05-06 16:23:19 -0400349
Liz Kammer8337ea42021-09-10 10:06:32 -0400350cc_library {
351 name: "shared_dep_for_both",
352 bazel_module: { bp2build_available: false },
353}
Jingwen Chen53681ef2021-04-29 08:15:13 +0000354`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500355 expectedBazelTargets: []string{
356 makeBazelTarget("cc_library", "a", attrNameToString{
357 "copts": `["bothflag"]`,
358 "implementation_deps": `[":static_dep_for_both"]`,
359 "implementation_dynamic_deps": `[":shared_dep_for_both"]`,
360 "shared": `{
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000361 "copts": ["sharedflag"],
Liz Kammer7a210ac2021-09-22 15:52:58 -0400362 "implementation_deps": [":static_dep_for_shared"],
363 "implementation_dynamic_deps": [":shared_dep_for_shared"],
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000364 "srcs": ["sharedonly.cpp"],
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000365 "whole_archive_deps": [":whole_static_lib_for_shared"],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500366 }`,
367 "srcs": `["both.cpp"]`,
368 "static": `{
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000369 "copts": ["staticflag"],
Liz Kammer7a210ac2021-09-22 15:52:58 -0400370 "implementation_deps": [":static_dep_for_static"],
371 "implementation_dynamic_deps": [":shared_dep_for_static"],
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000372 "srcs": ["staticonly.cpp"],
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000373 "whole_archive_deps": [":whole_static_lib_for_static"],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500374 }`,
375 "whole_archive_deps": `[":whole_static_lib_for_both"]`,
376 }),
377 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200378 })
379}
380
Liz Kammer7a210ac2021-09-22 15:52:58 -0400381func TestCcLibraryDeps(t *testing.T) {
382 runCcLibraryTestCase(t, bp2buildTestCase{
383 description: "cc_library shared/static props",
384 moduleTypeUnderTest: "cc_library",
385 moduleTypeUnderTestFactory: cc.LibraryFactory,
386 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
387 filesystem: map[string]string{
388 "both.cpp": "",
389 "sharedonly.cpp": "",
390 "staticonly.cpp": "",
391 },
392 blueprint: soongCcLibraryPreamble + `
393cc_library {
394 name: "a",
395 srcs: ["both.cpp"],
396 cflags: ["bothflag"],
397 shared_libs: ["implementation_shared_dep_for_both", "shared_dep_for_both"],
398 export_shared_lib_headers: ["shared_dep_for_both"],
399 static_libs: ["implementation_static_dep_for_both", "static_dep_for_both"],
400 export_static_lib_headers: ["static_dep_for_both", "whole_static_dep_for_both"],
401 whole_static_libs: ["not_explicitly_exported_whole_static_dep_for_both", "whole_static_dep_for_both"],
402 static: {
403 srcs: ["staticonly.cpp"],
404 cflags: ["staticflag"],
405 shared_libs: ["implementation_shared_dep_for_static", "shared_dep_for_static"],
406 export_shared_lib_headers: ["shared_dep_for_static"],
407 static_libs: ["implementation_static_dep_for_static", "static_dep_for_static"],
408 export_static_lib_headers: ["static_dep_for_static", "whole_static_dep_for_static"],
409 whole_static_libs: ["not_explicitly_exported_whole_static_dep_for_static", "whole_static_dep_for_static"],
410 },
411 shared: {
412 srcs: ["sharedonly.cpp"],
413 cflags: ["sharedflag"],
414 shared_libs: ["implementation_shared_dep_for_shared", "shared_dep_for_shared"],
415 export_shared_lib_headers: ["shared_dep_for_shared"],
416 static_libs: ["implementation_static_dep_for_shared", "static_dep_for_shared"],
417 export_static_lib_headers: ["static_dep_for_shared", "whole_static_dep_for_shared"],
418 whole_static_libs: ["not_explicitly_exported_whole_static_dep_for_shared", "whole_static_dep_for_shared"],
419 },
420 include_build_directory: false,
421}
422` + simpleModuleDoNotConvertBp2build("cc_library_static", "static_dep_for_shared") +
423 simpleModuleDoNotConvertBp2build("cc_library_static", "implementation_static_dep_for_shared") +
424 simpleModuleDoNotConvertBp2build("cc_library_static", "static_dep_for_static") +
425 simpleModuleDoNotConvertBp2build("cc_library_static", "implementation_static_dep_for_static") +
426 simpleModuleDoNotConvertBp2build("cc_library_static", "static_dep_for_both") +
427 simpleModuleDoNotConvertBp2build("cc_library_static", "implementation_static_dep_for_both") +
428 simpleModuleDoNotConvertBp2build("cc_library_static", "whole_static_dep_for_shared") +
429 simpleModuleDoNotConvertBp2build("cc_library_static", "not_explicitly_exported_whole_static_dep_for_shared") +
430 simpleModuleDoNotConvertBp2build("cc_library_static", "whole_static_dep_for_static") +
431 simpleModuleDoNotConvertBp2build("cc_library_static", "not_explicitly_exported_whole_static_dep_for_static") +
432 simpleModuleDoNotConvertBp2build("cc_library_static", "whole_static_dep_for_both") +
433 simpleModuleDoNotConvertBp2build("cc_library_static", "not_explicitly_exported_whole_static_dep_for_both") +
434 simpleModuleDoNotConvertBp2build("cc_library", "shared_dep_for_shared") +
435 simpleModuleDoNotConvertBp2build("cc_library", "implementation_shared_dep_for_shared") +
436 simpleModuleDoNotConvertBp2build("cc_library", "shared_dep_for_static") +
437 simpleModuleDoNotConvertBp2build("cc_library", "implementation_shared_dep_for_static") +
438 simpleModuleDoNotConvertBp2build("cc_library", "shared_dep_for_both") +
439 simpleModuleDoNotConvertBp2build("cc_library", "implementation_shared_dep_for_both"),
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500440 expectedBazelTargets: []string{
441 makeBazelTarget("cc_library", "a", attrNameToString{
442 "copts": `["bothflag"]`,
443 "deps": `[":static_dep_for_both"]`,
444 "dynamic_deps": `[":shared_dep_for_both"]`,
445 "implementation_deps": `[":implementation_static_dep_for_both"]`,
446 "implementation_dynamic_deps": `[":implementation_shared_dep_for_both"]`,
447 "shared": `{
Liz Kammer7a210ac2021-09-22 15:52:58 -0400448 "copts": ["sharedflag"],
449 "deps": [":static_dep_for_shared"],
450 "dynamic_deps": [":shared_dep_for_shared"],
451 "implementation_deps": [":implementation_static_dep_for_shared"],
452 "implementation_dynamic_deps": [":implementation_shared_dep_for_shared"],
453 "srcs": ["sharedonly.cpp"],
454 "whole_archive_deps": [
455 ":not_explicitly_exported_whole_static_dep_for_shared",
456 ":whole_static_dep_for_shared",
457 ],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500458 }`,
459 "srcs": `["both.cpp"]`,
460 "static": `{
Liz Kammer7a210ac2021-09-22 15:52:58 -0400461 "copts": ["staticflag"],
462 "deps": [":static_dep_for_static"],
463 "dynamic_deps": [":shared_dep_for_static"],
464 "implementation_deps": [":implementation_static_dep_for_static"],
465 "implementation_dynamic_deps": [":implementation_shared_dep_for_static"],
466 "srcs": ["staticonly.cpp"],
467 "whole_archive_deps": [
468 ":not_explicitly_exported_whole_static_dep_for_static",
469 ":whole_static_dep_for_static",
470 ],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500471 }`,
472 "whole_archive_deps": `[
Liz Kammer7a210ac2021-09-22 15:52:58 -0400473 ":not_explicitly_exported_whole_static_dep_for_both",
474 ":whole_static_dep_for_both",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500475 ]`,
476 }),
477 },
Liz Kammer7a210ac2021-09-22 15:52:58 -0400478 })
479}
480
Liz Kammer2d7bbe32021-06-10 18:20:06 -0400481func TestCcLibraryWholeStaticLibsAlwaysLink(t *testing.T) {
482 runCcLibraryTestCase(t, bp2buildTestCase{
483 moduleTypeUnderTest: "cc_library",
484 moduleTypeUnderTestFactory: cc.LibraryFactory,
485 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Liz Kammer2d7bbe32021-06-10 18:20:06 -0400486 dir: "foo/bar",
487 filesystem: map[string]string{
488 "foo/bar/Android.bp": `
489cc_library {
490 name: "a",
491 whole_static_libs: ["whole_static_lib_for_both"],
492 static: {
493 whole_static_libs: ["whole_static_lib_for_static"],
494 },
495 shared: {
496 whole_static_libs: ["whole_static_lib_for_shared"],
497 },
498 bazel_module: { bp2build_available: true },
Liz Kammer8337ea42021-09-10 10:06:32 -0400499 include_build_directory: false,
Liz Kammer2d7bbe32021-06-10 18:20:06 -0400500}
501
502cc_prebuilt_library_static { name: "whole_static_lib_for_shared" }
503
504cc_prebuilt_library_static { name: "whole_static_lib_for_static" }
505
506cc_prebuilt_library_static { name: "whole_static_lib_for_both" }
507`,
508 },
509 blueprint: soongCcLibraryPreamble,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500510 expectedBazelTargets: []string{
511 makeBazelTarget("cc_library", "a", attrNameToString{
512 "shared": `{
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000513 "whole_archive_deps": [":whole_static_lib_for_shared_alwayslink"],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500514 }`,
515 "static": `{
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000516 "whole_archive_deps": [":whole_static_lib_for_static_alwayslink"],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500517 }`,
518 "whole_archive_deps": `[":whole_static_lib_for_both_alwayslink"]`,
519 }),
520 },
Liz Kammer2d7bbe32021-06-10 18:20:06 -0400521 })
522}
523
Jingwen Chenbcf53042021-05-26 04:42:42 +0000524func TestCcLibrarySharedStaticPropsInArch(t *testing.T) {
525 runCcLibraryTestCase(t, bp2buildTestCase{
526 description: "cc_library shared/static props in arch",
527 moduleTypeUnderTest: "cc_library",
528 moduleTypeUnderTestFactory: cc.LibraryFactory,
529 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Jingwen Chenbcf53042021-05-26 04:42:42 +0000530 dir: "foo/bar",
531 filesystem: map[string]string{
532 "foo/bar/arm.cpp": "",
533 "foo/bar/x86.cpp": "",
534 "foo/bar/sharedonly.cpp": "",
535 "foo/bar/staticonly.cpp": "",
536 "foo/bar/Android.bp": `
537cc_library {
538 name: "a",
539 arch: {
540 arm: {
541 shared: {
542 srcs: ["arm_shared.cpp"],
543 cflags: ["-DARM_SHARED"],
544 static_libs: ["arm_static_dep_for_shared"],
545 whole_static_libs: ["arm_whole_static_dep_for_shared"],
546 shared_libs: ["arm_shared_dep_for_shared"],
547 },
548 },
549 x86: {
550 static: {
551 srcs: ["x86_static.cpp"],
552 cflags: ["-DX86_STATIC"],
553 static_libs: ["x86_dep_for_static"],
554 },
555 },
556 },
557 target: {
558 android: {
559 shared: {
560 srcs: ["android_shared.cpp"],
561 cflags: ["-DANDROID_SHARED"],
562 static_libs: ["android_dep_for_shared"],
563 },
564 },
565 android_arm: {
566 shared: {
567 cflags: ["-DANDROID_ARM_SHARED"],
568 },
569 },
570 },
571 srcs: ["both.cpp"],
572 cflags: ["bothflag"],
573 static_libs: ["static_dep_for_both"],
574 static: {
575 srcs: ["staticonly.cpp"],
576 cflags: ["staticflag"],
577 static_libs: ["static_dep_for_static"],
578 },
579 shared: {
580 srcs: ["sharedonly.cpp"],
581 cflags: ["sharedflag"],
582 static_libs: ["static_dep_for_shared"],
583 },
584 bazel_module: { bp2build_available: true },
585}
586
587cc_library_static { name: "static_dep_for_shared" }
588cc_library_static { name: "static_dep_for_static" }
589cc_library_static { name: "static_dep_for_both" }
590
591cc_library_static { name: "arm_static_dep_for_shared" }
592cc_library_static { name: "arm_whole_static_dep_for_shared" }
593cc_library_static { name: "arm_shared_dep_for_shared" }
594
595cc_library_static { name: "x86_dep_for_static" }
596
597cc_library_static { name: "android_dep_for_shared" }
598`,
599 },
600 blueprint: soongCcLibraryPreamble,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500601 expectedBazelTargets: []string{
602 makeBazelTarget("cc_library", "a", attrNameToString{
603 "copts": `["bothflag"]`,
604 "implementation_deps": `[":static_dep_for_both"]`,
605 "local_includes": `["."]`,
606 "shared": `{
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000607 "copts": ["sharedflag"] + select({
608 "//build/bazel/platforms/arch:arm": ["-DARM_SHARED"],
609 "//conditions:default": [],
610 }) + select({
611 "//build/bazel/platforms/os:android": ["-DANDROID_SHARED"],
612 "//conditions:default": [],
613 }) + select({
614 "//build/bazel/platforms/os_arch:android_arm": ["-DANDROID_ARM_SHARED"],
615 "//conditions:default": [],
616 }),
Liz Kammer7a210ac2021-09-22 15:52:58 -0400617 "implementation_deps": [":static_dep_for_shared"] + select({
618 "//build/bazel/platforms/arch:arm": [":arm_static_dep_for_shared"],
619 "//conditions:default": [],
620 }) + select({
621 "//build/bazel/platforms/os:android": [":android_dep_for_shared"],
622 "//conditions:default": [],
623 }),
624 "implementation_dynamic_deps": select({
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000625 "//build/bazel/platforms/arch:arm": [":arm_shared_dep_for_shared"],
626 "//conditions:default": [],
627 }),
628 "srcs": ["sharedonly.cpp"] + select({
629 "//build/bazel/platforms/arch:arm": ["arm_shared.cpp"],
630 "//conditions:default": [],
631 }) + select({
632 "//build/bazel/platforms/os:android": ["android_shared.cpp"],
633 "//conditions:default": [],
634 }),
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000635 "whole_archive_deps": select({
636 "//build/bazel/platforms/arch:arm": [":arm_whole_static_dep_for_shared"],
637 "//conditions:default": [],
638 }),
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500639 }`,
640 "srcs": `["both.cpp"]`,
641 "static": `{
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000642 "copts": ["staticflag"] + select({
643 "//build/bazel/platforms/arch:x86": ["-DX86_STATIC"],
644 "//conditions:default": [],
645 }),
Liz Kammer7a210ac2021-09-22 15:52:58 -0400646 "implementation_deps": [":static_dep_for_static"] + select({
647 "//build/bazel/platforms/arch:x86": [":x86_dep_for_static"],
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000648 "//conditions:default": [],
649 }),
Liz Kammer7a210ac2021-09-22 15:52:58 -0400650 "srcs": ["staticonly.cpp"] + select({
651 "//build/bazel/platforms/arch:x86": ["x86_static.cpp"],
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000652 "//conditions:default": [],
653 }),
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500654 }`,
655 }),
656 },
Jingwen Chenbcf53042021-05-26 04:42:42 +0000657 })
658}
659
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000660func TestCcLibrarySharedStaticPropsWithMixedSources(t *testing.T) {
661 runCcLibraryTestCase(t, bp2buildTestCase{
662 description: "cc_library shared/static props with c/cpp/s mixed sources",
663 moduleTypeUnderTest: "cc_library",
664 moduleTypeUnderTestFactory: cc.LibraryFactory,
665 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000666 dir: "foo/bar",
667 filesystem: map[string]string{
668 "foo/bar/both_source.cpp": "",
669 "foo/bar/both_source.cc": "",
670 "foo/bar/both_source.c": "",
671 "foo/bar/both_source.s": "",
672 "foo/bar/both_source.S": "",
673 "foo/bar/shared_source.cpp": "",
674 "foo/bar/shared_source.cc": "",
675 "foo/bar/shared_source.c": "",
676 "foo/bar/shared_source.s": "",
677 "foo/bar/shared_source.S": "",
678 "foo/bar/static_source.cpp": "",
679 "foo/bar/static_source.cc": "",
680 "foo/bar/static_source.c": "",
681 "foo/bar/static_source.s": "",
682 "foo/bar/static_source.S": "",
683 "foo/bar/Android.bp": `
684cc_library {
685 name: "a",
686 srcs: [
Liz Kammerd366c902021-06-03 13:43:01 -0400687 "both_source.cpp",
688 "both_source.cc",
689 "both_source.c",
690 "both_source.s",
691 "both_source.S",
Liz Kammer57e2e7a2021-09-20 12:55:02 -0400692 ":both_filegroup",
Liz Kammerd366c902021-06-03 13:43:01 -0400693 ],
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000694 static: {
Liz Kammer8337ea42021-09-10 10:06:32 -0400695 srcs: [
696 "static_source.cpp",
697 "static_source.cc",
698 "static_source.c",
699 "static_source.s",
700 "static_source.S",
701 ":static_filegroup",
702 ],
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000703 },
704 shared: {
Liz Kammer8337ea42021-09-10 10:06:32 -0400705 srcs: [
706 "shared_source.cpp",
707 "shared_source.cc",
708 "shared_source.c",
709 "shared_source.s",
710 "shared_source.S",
711 ":shared_filegroup",
712 ],
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000713 },
714 bazel_module: { bp2build_available: true },
715}
716
717filegroup {
718 name: "both_filegroup",
719 srcs: [
720 // Not relevant, handled by filegroup macro
Liz Kammerd366c902021-06-03 13:43:01 -0400721 ],
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000722}
723
724filegroup {
725 name: "shared_filegroup",
726 srcs: [
727 // Not relevant, handled by filegroup macro
Liz Kammerd366c902021-06-03 13:43:01 -0400728 ],
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000729}
730
731filegroup {
732 name: "static_filegroup",
733 srcs: [
734 // Not relevant, handled by filegroup macro
Liz Kammerd366c902021-06-03 13:43:01 -0400735 ],
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000736}
737`,
738 },
739 blueprint: soongCcLibraryPreamble,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500740 expectedBazelTargets: []string{
741 makeBazelTarget("cc_library", "a", attrNameToString{
742 "local_includes": `["."]`,
743 "shared": `{
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000744 "srcs": [
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000745 "shared_source.cpp",
Liz Kammer57e2e7a2021-09-20 12:55:02 -0400746 "shared_source.cc",
747 ":shared_filegroup_cpp_srcs",
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000748 ],
749 "srcs_as": [
750 "shared_source.s",
751 "shared_source.S",
752 ":shared_filegroup_as_srcs",
753 ],
754 "srcs_c": [
755 "shared_source.c",
756 ":shared_filegroup_c_srcs",
757 ],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500758 }`,
759 "srcs": `[
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000760 "both_source.cpp",
Liz Kammer57e2e7a2021-09-20 12:55:02 -0400761 "both_source.cc",
762 ":both_filegroup_cpp_srcs",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500763 ]`,
764 "srcs_as": `[
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000765 "both_source.s",
766 "both_source.S",
767 ":both_filegroup_as_srcs",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500768 ]`,
769 "srcs_c": `[
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000770 "both_source.c",
771 ":both_filegroup_c_srcs",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500772 ]`,
773 "static": `{
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000774 "srcs": [
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000775 "static_source.cpp",
Liz Kammer57e2e7a2021-09-20 12:55:02 -0400776 "static_source.cc",
777 ":static_filegroup_cpp_srcs",
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000778 ],
779 "srcs_as": [
780 "static_source.s",
781 "static_source.S",
782 ":static_filegroup_as_srcs",
783 ],
784 "srcs_c": [
785 "static_source.c",
786 ":static_filegroup_c_srcs",
787 ],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500788 }`,
789 }),
790 },
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000791 })
792}
793
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200794func TestCcLibraryNonConfiguredVersionScript(t *testing.T) {
795 runCcLibraryTestCase(t, bp2buildTestCase{
796 description: "cc_library non-configured version script",
797 moduleTypeUnderTest: "cc_library",
798 moduleTypeUnderTestFactory: cc.LibraryFactory,
799 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200800 dir: "foo/bar",
801 filesystem: map[string]string{
802 "foo/bar/Android.bp": `
Lukacs T. Berki1353e592021-04-30 15:35:09 +0200803cc_library {
804 name: "a",
805 srcs: ["a.cpp"],
806 version_script: "v.map",
807 bazel_module: { bp2build_available: true },
Liz Kammer8337ea42021-09-10 10:06:32 -0400808 include_build_directory: false,
Lukacs T. Berki1353e592021-04-30 15:35:09 +0200809}
810`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200811 },
812 blueprint: soongCcLibraryPreamble,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500813 expectedBazelTargets: []string{
814 makeBazelTarget("cc_library", "a", attrNameToString{
815 "additional_linker_inputs": `["v.map"]`,
816 "linkopts": `["-Wl,--version-script,$(location v.map)"]`,
817 "srcs": `["a.cpp"]`,
818 }),
819 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200820 })
821}
822
823func TestCcLibraryConfiguredVersionScript(t *testing.T) {
824 runCcLibraryTestCase(t, bp2buildTestCase{
825 description: "cc_library configured version script",
826 moduleTypeUnderTest: "cc_library",
827 moduleTypeUnderTestFactory: cc.LibraryFactory,
828 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200829 dir: "foo/bar",
830 filesystem: map[string]string{
831 "foo/bar/Android.bp": `
Liz Kammer8337ea42021-09-10 10:06:32 -0400832cc_library {
833 name: "a",
834 srcs: ["a.cpp"],
835 arch: {
836 arm: {
837 version_script: "arm.map",
838 },
839 arm64: {
840 version_script: "arm64.map",
841 },
842 },
Lukacs T. Berki56bb0832021-05-12 12:36:45 +0200843
Liz Kammer8337ea42021-09-10 10:06:32 -0400844 bazel_module: { bp2build_available: true },
845 include_build_directory: false,
846}
Liz Kammerd366c902021-06-03 13:43:01 -0400847 `,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200848 },
849 blueprint: soongCcLibraryPreamble,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500850 expectedBazelTargets: []string{
851 makeBazelTarget("cc_library", "a", attrNameToString{
852 "additional_linker_inputs": `select({
Liz Kammerd2871182021-10-04 13:54:37 -0400853 "//build/bazel/platforms/arch:arm": ["arm.map"],
854 "//build/bazel/platforms/arch:arm64": ["arm64.map"],
855 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500856 })`,
857 "linkopts": `select({
Liz Kammerd2871182021-10-04 13:54:37 -0400858 "//build/bazel/platforms/arch:arm": ["-Wl,--version-script,$(location arm.map)"],
859 "//build/bazel/platforms/arch:arm64": ["-Wl,--version-script,$(location arm64.map)"],
860 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500861 })`,
862 "srcs": `["a.cpp"]`,
863 }),
864 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200865 })
866}
867
868func TestCcLibrarySharedLibs(t *testing.T) {
869 runCcLibraryTestCase(t, bp2buildTestCase{
870 description: "cc_library shared_libs",
871 moduleTypeUnderTest: "cc_library",
872 moduleTypeUnderTestFactory: cc.LibraryFactory,
873 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Liz Kammer8337ea42021-09-10 10:06:32 -0400874 blueprint: soongCcLibraryPreamble + `
Rupert Shuttleworthc50fa8d2021-05-06 02:40:33 -0400875cc_library {
876 name: "mylib",
Liz Kammer8337ea42021-09-10 10:06:32 -0400877 bazel_module: { bp2build_available: false },
Rupert Shuttleworthc50fa8d2021-05-06 02:40:33 -0400878}
879
880cc_library {
881 name: "a",
882 shared_libs: ["mylib",],
Liz Kammer8337ea42021-09-10 10:06:32 -0400883 include_build_directory: false,
Rupert Shuttleworthc50fa8d2021-05-06 02:40:33 -0400884}
885`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500886 expectedBazelTargets: []string{
887 makeBazelTarget("cc_library", "a", attrNameToString{
888 "implementation_dynamic_deps": `[":mylib"]`,
889 }),
890 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200891 })
892}
893
Liz Kammer0eae52e2021-10-06 10:32:26 -0400894func TestCcLibraryFeatures(t *testing.T) {
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200895 runCcLibraryTestCase(t, bp2buildTestCase{
896 description: "cc_library pack_relocations test",
897 moduleTypeUnderTest: "cc_library",
898 moduleTypeUnderTestFactory: cc.LibraryFactory,
899 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Liz Kammer8337ea42021-09-10 10:06:32 -0400900 blueprint: soongCcLibraryPreamble + `
Rupert Shuttleworth143be942021-05-09 23:55:51 -0400901cc_library {
902 name: "a",
903 srcs: ["a.cpp"],
904 pack_relocations: false,
Liz Kammer0eae52e2021-10-06 10:32:26 -0400905 allow_undefined_symbols: true,
Liz Kammer8337ea42021-09-10 10:06:32 -0400906 include_build_directory: false,
Rupert Shuttleworth143be942021-05-09 23:55:51 -0400907}
908
909cc_library {
910 name: "b",
911 srcs: ["b.cpp"],
912 arch: {
913 x86_64: {
Liz Kammer8337ea42021-09-10 10:06:32 -0400914 pack_relocations: false,
Liz Kammer0eae52e2021-10-06 10:32:26 -0400915 allow_undefined_symbols: true,
Liz Kammer8337ea42021-09-10 10:06:32 -0400916 },
Rupert Shuttleworth143be942021-05-09 23:55:51 -0400917 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400918 include_build_directory: false,
Rupert Shuttleworth143be942021-05-09 23:55:51 -0400919}
920
921cc_library {
922 name: "c",
923 srcs: ["c.cpp"],
924 target: {
925 darwin: {
Liz Kammer8337ea42021-09-10 10:06:32 -0400926 pack_relocations: false,
Liz Kammer0eae52e2021-10-06 10:32:26 -0400927 allow_undefined_symbols: true,
Liz Kammer8337ea42021-09-10 10:06:32 -0400928 },
Rupert Shuttleworth143be942021-05-09 23:55:51 -0400929 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400930 include_build_directory: false,
Rupert Shuttleworth143be942021-05-09 23:55:51 -0400931}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500932 expectedBazelTargets: []string{
933 makeBazelTarget("cc_library", "a", attrNameToString{
934 "features": `[
Liz Kammer0eae52e2021-10-06 10:32:26 -0400935 "disable_pack_relocations",
936 "-no_undefined_symbols",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500937 ]`,
938 "srcs": `["a.cpp"]`,
939 }), makeBazelTarget("cc_library", "b", attrNameToString{
940 "features": `select({
Liz Kammer0eae52e2021-10-06 10:32:26 -0400941 "//build/bazel/platforms/arch:x86_64": [
942 "disable_pack_relocations",
943 "-no_undefined_symbols",
944 ],
Rupert Shuttleworth143be942021-05-09 23:55:51 -0400945 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500946 })`,
947 "srcs": `["b.cpp"]`,
948 }), makeBazelTarget("cc_library", "c", attrNameToString{
949 "features": `select({
Liz Kammer0eae52e2021-10-06 10:32:26 -0400950 "//build/bazel/platforms/os:darwin": [
951 "disable_pack_relocations",
952 "-no_undefined_symbols",
953 ],
Rupert Shuttleworth143be942021-05-09 23:55:51 -0400954 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500955 })`,
956 "srcs": `["c.cpp"]`,
957 }),
958 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200959 })
960}
961
962func TestCcLibrarySpacesInCopts(t *testing.T) {
963 runCcLibraryTestCase(t, bp2buildTestCase{
964 description: "cc_library spaces in copts",
965 moduleTypeUnderTest: "cc_library",
966 moduleTypeUnderTestFactory: cc.LibraryFactory,
967 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Liz Kammer8337ea42021-09-10 10:06:32 -0400968 blueprint: soongCcLibraryPreamble + `
Jingwen Chen3950cd62021-05-12 04:33:00 +0000969cc_library {
970 name: "a",
971 cflags: ["-include header.h",],
Liz Kammer8337ea42021-09-10 10:06:32 -0400972 include_build_directory: false,
Jingwen Chen3950cd62021-05-12 04:33:00 +0000973}
974`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500975 expectedBazelTargets: []string{
976 makeBazelTarget("cc_library", "a", attrNameToString{
977 "copts": `[
Jingwen Chen3950cd62021-05-12 04:33:00 +0000978 "-include",
979 "header.h",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500980 ]`,
981 }),
982 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200983 })
984}
985
986func TestCcLibraryCppFlagsGoesIntoCopts(t *testing.T) {
987 runCcLibraryTestCase(t, bp2buildTestCase{
Chris Parsons990c4f42021-05-25 12:10:58 -0400988 description: "cc_library cppflags usage",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200989 moduleTypeUnderTest: "cc_library",
990 moduleTypeUnderTestFactory: cc.LibraryFactory,
991 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Liz Kammer8337ea42021-09-10 10:06:32 -0400992 blueprint: soongCcLibraryPreamble + `cc_library {
Jingwen Chen75be1ca2021-05-12 05:04:58 +0000993 name: "a",
994 srcs: ["a.cpp"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400995 cflags: ["-Wall"],
Jingwen Chen75be1ca2021-05-12 05:04:58 +0000996 cppflags: [
997 "-fsigned-char",
998 "-pedantic",
Liz Kammer8337ea42021-09-10 10:06:32 -0400999 ],
Jingwen Chen75be1ca2021-05-12 05:04:58 +00001000 arch: {
1001 arm64: {
1002 cppflags: ["-DARM64=1"],
Liz Kammer8337ea42021-09-10 10:06:32 -04001003 },
Liz Kammerd366c902021-06-03 13:43:01 -04001004 },
Jingwen Chen75be1ca2021-05-12 05:04:58 +00001005 target: {
1006 android: {
1007 cppflags: ["-DANDROID=1"],
Liz Kammer8337ea42021-09-10 10:06:32 -04001008 },
Liz Kammerd366c902021-06-03 13:43:01 -04001009 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001010 include_build_directory: false,
Jingwen Chen75be1ca2021-05-12 05:04:58 +00001011}
1012`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001013 expectedBazelTargets: []string{
1014 makeBazelTarget("cc_library", "a", attrNameToString{
1015 "copts": `["-Wall"]`,
1016 "cppflags": `[
Chris Parsons990c4f42021-05-25 12:10:58 -04001017 "-fsigned-char",
1018 "-pedantic",
Jingwen Chen75be1ca2021-05-12 05:04:58 +00001019 ] + select({
1020 "//build/bazel/platforms/arch:arm64": ["-DARM64=1"],
1021 "//conditions:default": [],
1022 }) + select({
1023 "//build/bazel/platforms/os:android": ["-DANDROID=1"],
1024 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001025 })`,
1026 "srcs": `["a.cpp"]`,
1027 }),
1028 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +02001029 })
Jingwen Chen63930982021-03-24 10:04:33 -04001030}
Rupert Shuttleworth22cd2eb2021-05-27 02:15:54 -04001031
Liz Kammer47535c52021-06-02 16:02:22 -04001032func TestCcLibraryExcludeLibs(t *testing.T) {
1033 runCcLibraryTestCase(t, bp2buildTestCase{
1034 moduleTypeUnderTest: "cc_library",
1035 moduleTypeUnderTestFactory: cc.LibraryFactory,
1036 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Liz Kammer47535c52021-06-02 16:02:22 -04001037 filesystem: map[string]string{},
1038 blueprint: soongCcLibraryStaticPreamble + `
1039cc_library {
1040 name: "foo_static",
1041 srcs: ["common.c"],
1042 whole_static_libs: [
1043 "arm_whole_static_lib_excludes",
1044 "malloc_not_svelte_whole_static_lib_excludes"
1045 ],
1046 static_libs: [
1047 "arm_static_lib_excludes",
1048 "malloc_not_svelte_static_lib_excludes"
1049 ],
1050 shared_libs: [
1051 "arm_shared_lib_excludes",
1052 ],
1053 arch: {
1054 arm: {
1055 exclude_shared_libs: [
1056 "arm_shared_lib_excludes",
1057 ],
1058 exclude_static_libs: [
1059 "arm_static_lib_excludes",
1060 "arm_whole_static_lib_excludes",
1061 ],
1062 },
1063 },
1064 product_variables: {
1065 malloc_not_svelte: {
1066 shared_libs: ["malloc_not_svelte_shared_lib"],
1067 whole_static_libs: ["malloc_not_svelte_whole_static_lib"],
1068 exclude_static_libs: [
1069 "malloc_not_svelte_static_lib_excludes",
1070 "malloc_not_svelte_whole_static_lib_excludes",
1071 ],
1072 },
1073 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001074 include_build_directory: false,
Liz Kammer47535c52021-06-02 16:02:22 -04001075}
1076
1077cc_library {
1078 name: "arm_whole_static_lib_excludes",
1079 bazel_module: { bp2build_available: false },
1080}
1081
1082cc_library {
1083 name: "malloc_not_svelte_whole_static_lib",
1084 bazel_module: { bp2build_available: false },
1085}
1086
1087cc_library {
1088 name: "malloc_not_svelte_whole_static_lib_excludes",
1089 bazel_module: { bp2build_available: false },
1090}
1091
1092cc_library {
1093 name: "arm_static_lib_excludes",
1094 bazel_module: { bp2build_available: false },
1095}
1096
1097cc_library {
1098 name: "malloc_not_svelte_static_lib_excludes",
1099 bazel_module: { bp2build_available: false },
1100}
1101
1102cc_library {
1103 name: "arm_shared_lib_excludes",
1104 bazel_module: { bp2build_available: false },
1105}
1106
1107cc_library {
1108 name: "malloc_not_svelte_shared_lib",
1109 bazel_module: { bp2build_available: false },
1110}
1111`,
1112 expectedBazelTargets: []string{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001113 makeBazelTarget("cc_library", "foo_static", attrNameToString{
1114 "implementation_deps": `select({
Liz Kammer47535c52021-06-02 16:02:22 -04001115 "//build/bazel/platforms/arch:arm": [],
Chris Parsons953b3562021-09-20 15:14:39 -04001116 "//conditions:default": [":arm_static_lib_excludes_bp2build_cc_library_static"],
Liz Kammer47535c52021-06-02 16:02:22 -04001117 }) + select({
1118 "//build/bazel/product_variables:malloc_not_svelte": [],
Chris Parsons953b3562021-09-20 15:14:39 -04001119 "//conditions:default": [":malloc_not_svelte_static_lib_excludes_bp2build_cc_library_static"],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001120 })`,
1121 "implementation_dynamic_deps": `select({
Liz Kammer7a210ac2021-09-22 15:52:58 -04001122 "//build/bazel/platforms/arch:arm": [],
1123 "//conditions:default": [":arm_shared_lib_excludes"],
1124 }) + select({
1125 "//build/bazel/product_variables:malloc_not_svelte": [":malloc_not_svelte_shared_lib"],
1126 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001127 })`,
1128 "srcs_c": `["common.c"]`,
1129 "whole_archive_deps": `select({
Liz Kammer47535c52021-06-02 16:02:22 -04001130 "//build/bazel/platforms/arch:arm": [],
Chris Parsons953b3562021-09-20 15:14:39 -04001131 "//conditions:default": [":arm_whole_static_lib_excludes_bp2build_cc_library_static"],
Liz Kammer47535c52021-06-02 16:02:22 -04001132 }) + select({
Chris Parsons953b3562021-09-20 15:14:39 -04001133 "//build/bazel/product_variables:malloc_not_svelte": [":malloc_not_svelte_whole_static_lib_bp2build_cc_library_static"],
1134 "//conditions:default": [":malloc_not_svelte_whole_static_lib_excludes_bp2build_cc_library_static"],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001135 })`,
1136 }),
Liz Kammer47535c52021-06-02 16:02:22 -04001137 },
1138 })
1139}
Liz Kammerd366c902021-06-03 13:43:01 -04001140
1141func TestCCLibraryNoCrtTrue(t *testing.T) {
1142 runCcLibraryTestCase(t, bp2buildTestCase{
Jingwen Chen6ada5892021-09-17 11:38:09 +00001143 description: "cc_library - nocrt: true emits attribute",
1144 moduleTypeUnderTest: "cc_library",
1145 moduleTypeUnderTestFactory: cc.LibraryFactory,
1146 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1147 filesystem: map[string]string{
1148 "impl.cpp": "",
1149 },
1150 blueprint: soongCcLibraryPreamble + `
1151cc_library {
1152 name: "foo-lib",
1153 srcs: ["impl.cpp"],
1154 nocrt: true,
1155 include_build_directory: false,
1156}
1157`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001158 expectedBazelTargets: []string{
1159 makeBazelTarget("cc_library", "foo-lib", attrNameToString{
1160 "link_crt": `False`,
1161 "srcs": `["impl.cpp"]`,
1162 }),
1163 },
1164 })
Jingwen Chen6ada5892021-09-17 11:38:09 +00001165}
1166
1167func TestCCLibraryNoCrtFalse(t *testing.T) {
1168 runCcLibraryTestCase(t, bp2buildTestCase{
1169 description: "cc_library - nocrt: false - does not emit attribute",
1170 moduleTypeUnderTest: "cc_library",
1171 moduleTypeUnderTestFactory: cc.LibraryFactory,
1172 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1173 filesystem: map[string]string{
1174 "impl.cpp": "",
1175 },
1176 blueprint: soongCcLibraryPreamble + `
1177cc_library {
1178 name: "foo-lib",
1179 srcs: ["impl.cpp"],
1180 nocrt: false,
1181 include_build_directory: false,
1182}
1183`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001184 expectedBazelTargets: []string{
1185 makeBazelTarget("cc_library", "foo-lib", attrNameToString{
1186 "srcs": `["impl.cpp"]`,
1187 }),
1188 },
1189 })
Jingwen Chen6ada5892021-09-17 11:38:09 +00001190}
1191
1192func TestCCLibraryNoCrtArchVariant(t *testing.T) {
1193 runCcLibraryTestCase(t, bp2buildTestCase{
1194 description: "cc_library - nocrt in select",
1195 moduleTypeUnderTest: "cc_library",
1196 moduleTypeUnderTestFactory: cc.LibraryFactory,
1197 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1198 filesystem: map[string]string{
1199 "impl.cpp": "",
1200 },
1201 blueprint: soongCcLibraryPreamble + `
1202cc_library {
1203 name: "foo-lib",
1204 srcs: ["impl.cpp"],
1205 arch: {
1206 arm: {
1207 nocrt: true,
1208 },
1209 x86: {
1210 nocrt: false,
1211 },
1212 },
1213 include_build_directory: false,
1214}
1215`,
1216 expectedErr: fmt.Errorf("Android.bp:16:1: module \"foo-lib\": nocrt is not supported for arch variants"),
1217 })
1218}
1219
1220func TestCCLibraryNoLibCrtTrue(t *testing.T) {
1221 runCcLibraryTestCase(t, bp2buildTestCase{
Liz Kammerd366c902021-06-03 13:43:01 -04001222 description: "cc_library - simple example",
1223 moduleTypeUnderTest: "cc_library",
1224 moduleTypeUnderTestFactory: cc.LibraryFactory,
1225 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1226 filesystem: map[string]string{
1227 "impl.cpp": "",
1228 },
1229 blueprint: soongCcLibraryPreamble + `
1230cc_library_headers { name: "some-headers" }
1231cc_library {
1232 name: "foo-lib",
1233 srcs: ["impl.cpp"],
1234 no_libcrt: true,
Liz Kammer8337ea42021-09-10 10:06:32 -04001235 include_build_directory: false,
Liz Kammerd366c902021-06-03 13:43:01 -04001236}
1237`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001238 expectedBazelTargets: []string{
1239 makeBazelTarget("cc_library", "foo-lib", attrNameToString{
1240 "srcs": `["impl.cpp"]`,
1241 "use_libcrt": `False`,
1242 }),
1243 }})
Liz Kammerd366c902021-06-03 13:43:01 -04001244}
1245
Jingwen Chen6ada5892021-09-17 11:38:09 +00001246func TestCCLibraryNoLibCrtFalse(t *testing.T) {
Liz Kammerd366c902021-06-03 13:43:01 -04001247 runCcLibraryTestCase(t, bp2buildTestCase{
1248 moduleTypeUnderTest: "cc_library",
1249 moduleTypeUnderTestFactory: cc.LibraryFactory,
1250 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1251 filesystem: map[string]string{
1252 "impl.cpp": "",
1253 },
1254 blueprint: soongCcLibraryPreamble + `
1255cc_library_headers { name: "some-headers" }
1256cc_library {
1257 name: "foo-lib",
1258 srcs: ["impl.cpp"],
1259 no_libcrt: false,
Liz Kammer8337ea42021-09-10 10:06:32 -04001260 include_build_directory: false,
Liz Kammerd366c902021-06-03 13:43:01 -04001261}
1262`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001263 expectedBazelTargets: []string{
1264 makeBazelTarget("cc_library", "foo-lib", attrNameToString{
1265 "srcs": `["impl.cpp"]`,
1266 "use_libcrt": `True`,
1267 }),
1268 }})
Liz Kammerd366c902021-06-03 13:43:01 -04001269}
1270
Jingwen Chen6ada5892021-09-17 11:38:09 +00001271func TestCCLibraryNoLibCrtArchVariant(t *testing.T) {
Liz Kammerd366c902021-06-03 13:43:01 -04001272 runCcLibraryTestCase(t, bp2buildTestCase{
1273 moduleTypeUnderTest: "cc_library",
1274 moduleTypeUnderTestFactory: cc.LibraryFactory,
1275 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1276 filesystem: map[string]string{
1277 "impl.cpp": "",
1278 },
1279 blueprint: soongCcLibraryPreamble + `
Liz Kammerd366c902021-06-03 13:43:01 -04001280cc_library {
1281 name: "foo-lib",
1282 srcs: ["impl.cpp"],
1283 arch: {
1284 arm: {
1285 no_libcrt: true,
1286 },
1287 x86: {
1288 no_libcrt: true,
1289 },
1290 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001291 include_build_directory: false,
Liz Kammerd366c902021-06-03 13:43:01 -04001292}
1293`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001294 expectedBazelTargets: []string{
1295 makeBazelTarget("cc_library", "foo-lib", attrNameToString{
1296 "srcs": `["impl.cpp"]`,
1297 "use_libcrt": `select({
Liz Kammerd366c902021-06-03 13:43:01 -04001298 "//build/bazel/platforms/arch:arm": False,
1299 "//build/bazel/platforms/arch:x86": False,
1300 "//conditions:default": None,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001301 })`,
1302 }),
1303 }})
Liz Kammerd366c902021-06-03 13:43:01 -04001304}
1305
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001306func TestCcLibraryStrip(t *testing.T) {
1307 runCcLibraryTestCase(t, bp2buildTestCase{
1308 description: "cc_library strip args",
1309 moduleTypeUnderTest: "cc_library",
1310 moduleTypeUnderTestFactory: cc.LibraryFactory,
1311 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Liz Kammer8337ea42021-09-10 10:06:32 -04001312 blueprint: soongCcLibraryPreamble + `
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001313cc_library {
1314 name: "nothing",
Liz Kammer8337ea42021-09-10 10:06:32 -04001315 include_build_directory: false,
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001316}
1317cc_library {
1318 name: "keep_symbols",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001319 strip: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001320 keep_symbols: true,
1321 },
1322 include_build_directory: false,
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001323}
1324cc_library {
1325 name: "keep_symbols_and_debug_frame",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001326 strip: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001327 keep_symbols_and_debug_frame: true,
1328 },
1329 include_build_directory: false,
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001330}
1331cc_library {
1332 name: "none",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001333 strip: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001334 none: true,
1335 },
1336 include_build_directory: false,
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001337}
1338cc_library {
1339 name: "keep_symbols_list",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001340 strip: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001341 keep_symbols_list: ["symbol"],
1342 },
1343 include_build_directory: false,
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001344}
1345cc_library {
1346 name: "all",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001347 strip: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001348 all: true,
1349 },
1350 include_build_directory: false,
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001351}
1352`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001353 expectedBazelTargets: []string{
1354 makeBazelTarget("cc_library", "all", attrNameToString{
1355 "strip": `{
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001356 "all": True,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001357 }`,
1358 }), makeBazelTarget("cc_library", "keep_symbols", attrNameToString{
1359 "strip": `{
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001360 "keep_symbols": True,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001361 }`,
1362 }), makeBazelTarget("cc_library", "keep_symbols_and_debug_frame", attrNameToString{
1363 "strip": `{
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001364 "keep_symbols_and_debug_frame": True,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001365 }`,
1366 }), makeBazelTarget("cc_library", "keep_symbols_list", attrNameToString{
1367 "strip": `{
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001368 "keep_symbols_list": ["symbol"],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001369 }`,
1370 }), makeBazelTarget("cc_library", "none", attrNameToString{
1371 "strip": `{
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001372 "none": True,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001373 }`,
1374 }), makeBazelTarget("cc_library", "nothing", attrNameToString{}),
1375 },
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001376 })
1377}
1378
1379func TestCcLibraryStripWithArch(t *testing.T) {
1380 runCcLibraryTestCase(t, bp2buildTestCase{
1381 description: "cc_library strip args",
1382 moduleTypeUnderTest: "cc_library",
1383 moduleTypeUnderTestFactory: cc.LibraryFactory,
1384 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Liz Kammer8337ea42021-09-10 10:06:32 -04001385 blueprint: soongCcLibraryPreamble + `
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001386cc_library {
1387 name: "multi-arch",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001388 target: {
1389 darwin: {
1390 strip: {
1391 keep_symbols_list: ["foo", "bar"]
1392 }
1393 },
1394 },
1395 arch: {
1396 arm: {
1397 strip: {
1398 keep_symbols_and_debug_frame: true,
1399 },
1400 },
1401 arm64: {
1402 strip: {
1403 keep_symbols: true,
1404 },
1405 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001406 },
1407 include_build_directory: false,
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001408}
1409`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001410 expectedBazelTargets: []string{
1411 makeBazelTarget("cc_library", "multi-arch", attrNameToString{
1412 "strip": `{
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001413 "keep_symbols": select({
1414 "//build/bazel/platforms/arch:arm64": True,
1415 "//conditions:default": None,
1416 }),
1417 "keep_symbols_and_debug_frame": select({
1418 "//build/bazel/platforms/arch:arm": True,
1419 "//conditions:default": None,
1420 }),
1421 "keep_symbols_list": select({
1422 "//build/bazel/platforms/os:darwin": [
1423 "foo",
1424 "bar",
1425 ],
1426 "//conditions:default": [],
1427 }),
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001428 }`,
1429 }),
1430 },
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001431 })
1432}
Chris Parsons51f8c392021-08-03 21:01:05 -04001433
1434func TestCcLibrary_SystemSharedLibsRootEmpty(t *testing.T) {
1435 runCcLibraryTestCase(t, bp2buildTestCase{
1436 description: "cc_library system_shared_libs empty at root",
1437 moduleTypeUnderTest: "cc_library",
1438 moduleTypeUnderTestFactory: cc.LibraryFactory,
1439 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1440 blueprint: soongCcLibraryPreamble + `
1441cc_library {
1442 name: "root_empty",
Liz Kammer8337ea42021-09-10 10:06:32 -04001443 system_shared_libs: [],
1444 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001445}
1446`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001447 expectedBazelTargets: []string{
1448 makeBazelTarget("cc_library", "root_empty", attrNameToString{
1449 "system_dynamic_deps": `[]`,
1450 }),
1451 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001452 })
1453}
1454
1455func TestCcLibrary_SystemSharedLibsStaticEmpty(t *testing.T) {
1456 runCcLibraryTestCase(t, bp2buildTestCase{
1457 description: "cc_library system_shared_libs empty for static variant",
1458 moduleTypeUnderTest: "cc_library",
1459 moduleTypeUnderTestFactory: cc.LibraryFactory,
1460 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1461 blueprint: soongCcLibraryPreamble + `
1462cc_library {
1463 name: "static_empty",
1464 static: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001465 system_shared_libs: [],
1466 },
1467 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001468}
1469`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001470 expectedBazelTargets: []string{
1471 makeBazelTarget("cc_library", "static_empty", attrNameToString{
1472 "static": `{
Chris Parsons51f8c392021-08-03 21:01:05 -04001473 "system_dynamic_deps": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001474 }`,
1475 }),
1476 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001477 })
1478}
1479
1480func TestCcLibrary_SystemSharedLibsSharedEmpty(t *testing.T) {
1481 runCcLibraryTestCase(t, bp2buildTestCase{
1482 description: "cc_library system_shared_libs empty for shared variant",
1483 moduleTypeUnderTest: "cc_library",
1484 moduleTypeUnderTestFactory: cc.LibraryFactory,
1485 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1486 blueprint: soongCcLibraryPreamble + `
1487cc_library {
1488 name: "shared_empty",
1489 shared: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001490 system_shared_libs: [],
1491 },
1492 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001493}
1494`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001495 expectedBazelTargets: []string{
1496 makeBazelTarget("cc_library", "shared_empty", attrNameToString{
1497 "shared": `{
Chris Parsons51f8c392021-08-03 21:01:05 -04001498 "system_dynamic_deps": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001499 }`,
1500 }),
1501 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001502 })
1503}
1504
1505func TestCcLibrary_SystemSharedLibsSharedBionicEmpty(t *testing.T) {
1506 runCcLibraryTestCase(t, bp2buildTestCase{
1507 description: "cc_library system_shared_libs empty for shared, bionic variant",
1508 moduleTypeUnderTest: "cc_library",
1509 moduleTypeUnderTestFactory: cc.LibraryFactory,
1510 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1511 blueprint: soongCcLibraryPreamble + `
1512cc_library {
1513 name: "shared_empty",
1514 target: {
1515 bionic: {
1516 shared: {
1517 system_shared_libs: [],
1518 }
1519 }
Liz Kammer8337ea42021-09-10 10:06:32 -04001520 },
1521 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001522}
1523`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001524 expectedBazelTargets: []string{
1525 makeBazelTarget("cc_library", "shared_empty", attrNameToString{
1526 "shared": `{
Chris Parsons51f8c392021-08-03 21:01:05 -04001527 "system_dynamic_deps": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001528 }`,
1529 }),
1530 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001531 })
1532}
1533
1534func TestCcLibrary_SystemSharedLibsLinuxBionicEmpty(t *testing.T) {
1535 // Note that this behavior is technically incorrect (it's a simplification).
1536 // The correct behavior would be if bp2build wrote `system_dynamic_deps = []`
1537 // only for linux_bionic, but `android` had `["libc", "libdl", "libm"].
1538 // b/195791252 tracks the fix.
1539 runCcLibraryTestCase(t, bp2buildTestCase{
1540 description: "cc_library system_shared_libs empty for linux_bionic variant",
1541 moduleTypeUnderTest: "cc_library",
1542 moduleTypeUnderTestFactory: cc.LibraryFactory,
1543 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1544 blueprint: soongCcLibraryPreamble + `
1545cc_library {
1546 name: "target_linux_bionic_empty",
1547 target: {
1548 linux_bionic: {
1549 system_shared_libs: [],
1550 },
1551 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001552 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001553}
1554`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001555 expectedBazelTargets: []string{
1556 makeBazelTarget("cc_library", "target_linux_bionic_empty", attrNameToString{
1557 "system_dynamic_deps": `[]`,
1558 }),
1559 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001560 })
1561}
1562
1563func TestCcLibrary_SystemSharedLibsBionicEmpty(t *testing.T) {
1564 runCcLibraryTestCase(t, bp2buildTestCase{
1565 description: "cc_library system_shared_libs empty for bionic variant",
1566 moduleTypeUnderTest: "cc_library",
1567 moduleTypeUnderTestFactory: cc.LibraryFactory,
1568 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1569 blueprint: soongCcLibraryPreamble + `
1570cc_library {
1571 name: "target_bionic_empty",
1572 target: {
1573 bionic: {
1574 system_shared_libs: [],
1575 },
1576 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001577 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001578}
1579`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001580 expectedBazelTargets: []string{
1581 makeBazelTarget("cc_library", "target_bionic_empty", attrNameToString{
1582 "system_dynamic_deps": `[]`,
1583 }),
1584 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001585 })
1586}
1587
1588func TestCcLibrary_SystemSharedLibsSharedAndRoot(t *testing.T) {
1589 runCcLibraryTestCase(t, bp2buildTestCase{
1590 description: "cc_library system_shared_libs set for shared and root",
1591 moduleTypeUnderTest: "cc_library",
1592 moduleTypeUnderTestFactory: cc.LibraryFactory,
1593 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1594 blueprint: soongCcLibraryPreamble + `
Liz Kammer8337ea42021-09-10 10:06:32 -04001595cc_library {
1596 name: "libc",
1597 bazel_module: { bp2build_available: false },
1598}
1599cc_library {
1600 name: "libm",
1601 bazel_module: { bp2build_available: false },
1602}
Chris Parsons51f8c392021-08-03 21:01:05 -04001603
1604cc_library {
1605 name: "foo",
1606 system_shared_libs: ["libc"],
1607 shared: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001608 system_shared_libs: ["libm"],
Chris Parsons51f8c392021-08-03 21:01:05 -04001609 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001610 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001611}
1612`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001613 expectedBazelTargets: []string{
1614 makeBazelTarget("cc_library", "foo", attrNameToString{
1615 "shared": `{
Chris Parsons51f8c392021-08-03 21:01:05 -04001616 "system_dynamic_deps": [":libm"],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001617 }`,
1618 "system_dynamic_deps": `[":libc"]`,
1619 }),
1620 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001621 })
1622}
Chris Parsons2dde0cb2021-10-01 14:45:30 -04001623
1624func TestCcLibraryOsSelects(t *testing.T) {
1625 runCcLibraryTestCase(t, bp2buildTestCase{
1626 description: "cc_library - selects for all os targets",
1627 moduleTypeUnderTest: "cc_library",
1628 moduleTypeUnderTestFactory: cc.LibraryFactory,
1629 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1630 filesystem: map[string]string{},
1631 blueprint: soongCcLibraryPreamble + `
1632cc_library_headers { name: "some-headers" }
1633cc_library {
1634 name: "foo-lib",
1635 srcs: ["base.cpp"],
1636 target: {
1637 android: {
1638 srcs: ["android.cpp"],
1639 },
1640 linux: {
1641 srcs: ["linux.cpp"],
1642 },
1643 linux_glibc: {
1644 srcs: ["linux_glibc.cpp"],
1645 },
1646 darwin: {
1647 srcs: ["darwin.cpp"],
1648 },
1649 bionic: {
1650 srcs: ["bionic.cpp"],
1651 },
1652 linux_musl: {
1653 srcs: ["linux_musl.cpp"],
1654 },
1655 windows: {
1656 srcs: ["windows.cpp"],
1657 },
1658 },
1659 include_build_directory: false,
1660}
1661`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001662 expectedBazelTargets: []string{
1663 makeBazelTarget("cc_library", "foo-lib", attrNameToString{
1664 "srcs": `["base.cpp"] + select({
Chris Parsons2dde0cb2021-10-01 14:45:30 -04001665 "//build/bazel/platforms/os:android": [
Chris Parsons2dde0cb2021-10-01 14:45:30 -04001666 "linux.cpp",
Liz Kammer9bad9d62021-10-11 15:40:35 -04001667 "bionic.cpp",
Liz Kammerfdd72e62021-10-11 15:41:03 -04001668 "android.cpp",
Chris Parsons2dde0cb2021-10-01 14:45:30 -04001669 ],
1670 "//build/bazel/platforms/os:darwin": ["darwin.cpp"],
1671 "//build/bazel/platforms/os:linux": [
Liz Kammer9bad9d62021-10-11 15:40:35 -04001672 "linux.cpp",
Liz Kammerfdd72e62021-10-11 15:41:03 -04001673 "linux_glibc.cpp",
Chris Parsons2dde0cb2021-10-01 14:45:30 -04001674 ],
1675 "//build/bazel/platforms/os:linux_bionic": [
Chris Parsons2dde0cb2021-10-01 14:45:30 -04001676 "linux.cpp",
Liz Kammer9bad9d62021-10-11 15:40:35 -04001677 "bionic.cpp",
Chris Parsons2dde0cb2021-10-01 14:45:30 -04001678 ],
1679 "//build/bazel/platforms/os:linux_musl": [
Liz Kammer9bad9d62021-10-11 15:40:35 -04001680 "linux.cpp",
Liz Kammerfdd72e62021-10-11 15:41:03 -04001681 "linux_musl.cpp",
Chris Parsons2dde0cb2021-10-01 14:45:30 -04001682 ],
1683 "//build/bazel/platforms/os:windows": ["windows.cpp"],
1684 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001685 })`,
1686 }),
1687 },
1688 })
Jingwen Chen97b85312021-10-08 10:41:31 +00001689}
1690
Jingwen Chen5b11ab12021-10-11 17:44:33 +00001691func TestCcLibraryCppStdWithGnuExtensions_ConvertsToFeatureAttr(t *testing.T) {
Jingwen Chen97b85312021-10-08 10:41:31 +00001692 type testCase struct {
1693 cpp_std string
Chris Parsons79bd2b72021-11-29 17:52:41 -05001694 c_std string
Jingwen Chen97b85312021-10-08 10:41:31 +00001695 gnu_extensions string
1696 bazel_cpp_std string
Chris Parsons79bd2b72021-11-29 17:52:41 -05001697 bazel_c_std string
Jingwen Chen97b85312021-10-08 10:41:31 +00001698 }
1699
1700 testCases := []testCase{
1701 // Existing usages of cpp_std in AOSP are:
1702 // experimental, c++11, c++17, c++2a, c++98, gnu++11, gnu++17
1703 //
1704 // not set, only emit if gnu_extensions is disabled. the default (gnu+17
1705 // is set in the toolchain.)
1706 {cpp_std: "", gnu_extensions: "", bazel_cpp_std: ""},
Chris Parsons79bd2b72021-11-29 17:52:41 -05001707 {cpp_std: "", gnu_extensions: "false", bazel_cpp_std: "c++17", bazel_c_std: "c99"},
Jingwen Chen97b85312021-10-08 10:41:31 +00001708 {cpp_std: "", gnu_extensions: "true", bazel_cpp_std: ""},
1709 // experimental defaults to gnu++2a
1710 {cpp_std: "experimental", gnu_extensions: "", bazel_cpp_std: "gnu++2a"},
Chris Parsons79bd2b72021-11-29 17:52:41 -05001711 {cpp_std: "experimental", gnu_extensions: "false", bazel_cpp_std: "c++2a", bazel_c_std: "c99"},
Jingwen Chen97b85312021-10-08 10:41:31 +00001712 {cpp_std: "experimental", gnu_extensions: "true", bazel_cpp_std: "gnu++2a"},
1713 // Explicitly setting a c++ std does not use replace gnu++ std even if
1714 // gnu_extensions is true.
1715 // "c++11",
1716 {cpp_std: "c++11", gnu_extensions: "", bazel_cpp_std: "c++11"},
Chris Parsons79bd2b72021-11-29 17:52:41 -05001717 {cpp_std: "c++11", gnu_extensions: "false", bazel_cpp_std: "c++11", bazel_c_std: "c99"},
Jingwen Chen97b85312021-10-08 10:41:31 +00001718 {cpp_std: "c++11", gnu_extensions: "true", bazel_cpp_std: "c++11"},
1719 // "c++17",
1720 {cpp_std: "c++17", gnu_extensions: "", bazel_cpp_std: "c++17"},
Chris Parsons79bd2b72021-11-29 17:52:41 -05001721 {cpp_std: "c++17", gnu_extensions: "false", bazel_cpp_std: "c++17", bazel_c_std: "c99"},
Jingwen Chen97b85312021-10-08 10:41:31 +00001722 {cpp_std: "c++17", gnu_extensions: "true", bazel_cpp_std: "c++17"},
1723 // "c++2a",
1724 {cpp_std: "c++2a", gnu_extensions: "", bazel_cpp_std: "c++2a"},
Chris Parsons79bd2b72021-11-29 17:52:41 -05001725 {cpp_std: "c++2a", gnu_extensions: "false", bazel_cpp_std: "c++2a", bazel_c_std: "c99"},
Jingwen Chen97b85312021-10-08 10:41:31 +00001726 {cpp_std: "c++2a", gnu_extensions: "true", bazel_cpp_std: "c++2a"},
1727 // "c++98",
1728 {cpp_std: "c++98", gnu_extensions: "", bazel_cpp_std: "c++98"},
Chris Parsons79bd2b72021-11-29 17:52:41 -05001729 {cpp_std: "c++98", gnu_extensions: "false", bazel_cpp_std: "c++98", bazel_c_std: "c99"},
Jingwen Chen97b85312021-10-08 10:41:31 +00001730 {cpp_std: "c++98", gnu_extensions: "true", bazel_cpp_std: "c++98"},
1731 // gnu++ is replaced with c++ if gnu_extensions is explicitly false.
1732 // "gnu++11",
1733 {cpp_std: "gnu++11", gnu_extensions: "", bazel_cpp_std: "gnu++11"},
Chris Parsons79bd2b72021-11-29 17:52:41 -05001734 {cpp_std: "gnu++11", gnu_extensions: "false", bazel_cpp_std: "c++11", bazel_c_std: "c99"},
Jingwen Chen97b85312021-10-08 10:41:31 +00001735 {cpp_std: "gnu++11", gnu_extensions: "true", bazel_cpp_std: "gnu++11"},
1736 // "gnu++17",
1737 {cpp_std: "gnu++17", gnu_extensions: "", bazel_cpp_std: "gnu++17"},
Chris Parsons79bd2b72021-11-29 17:52:41 -05001738 {cpp_std: "gnu++17", gnu_extensions: "false", bazel_cpp_std: "c++17", bazel_c_std: "c99"},
Jingwen Chen97b85312021-10-08 10:41:31 +00001739 {cpp_std: "gnu++17", gnu_extensions: "true", bazel_cpp_std: "gnu++17"},
Chris Parsons79bd2b72021-11-29 17:52:41 -05001740
1741 // some c_std test cases
1742 {c_std: "experimental", gnu_extensions: "", bazel_c_std: "gnu11"},
1743 {c_std: "experimental", gnu_extensions: "false", bazel_cpp_std: "c++17", bazel_c_std: "c11"},
1744 {c_std: "experimental", gnu_extensions: "true", bazel_c_std: "gnu11"},
1745 {c_std: "gnu11", cpp_std: "gnu++17", gnu_extensions: "", bazel_cpp_std: "gnu++17", bazel_c_std: "gnu11"},
1746 {c_std: "gnu11", cpp_std: "gnu++17", gnu_extensions: "false", bazel_cpp_std: "c++17", bazel_c_std: "c11"},
1747 {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 +00001748 }
Chris Parsons79bd2b72021-11-29 17:52:41 -05001749 for i, tc := range testCases {
1750 name_prefix := fmt.Sprintf("a_%v", i)
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001751 cppStdProp := ""
Jingwen Chen97b85312021-10-08 10:41:31 +00001752 if tc.cpp_std != "" {
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001753 cppStdProp = fmt.Sprintf(" cpp_std: \"%s\",", tc.cpp_std)
Jingwen Chen97b85312021-10-08 10:41:31 +00001754 }
Chris Parsons79bd2b72021-11-29 17:52:41 -05001755 cStdProp := ""
1756 if tc.c_std != "" {
1757 cStdProp = fmt.Sprintf(" c_std: \"%s\",", tc.c_std)
1758 }
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001759 gnuExtensionsProp := ""
Jingwen Chen97b85312021-10-08 10:41:31 +00001760 if tc.gnu_extensions != "" {
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001761 gnuExtensionsProp = fmt.Sprintf(" gnu_extensions: %s,", tc.gnu_extensions)
Jingwen Chen97b85312021-10-08 10:41:31 +00001762 }
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001763 attrs := attrNameToString{}
Jingwen Chen97b85312021-10-08 10:41:31 +00001764 if tc.bazel_cpp_std != "" {
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001765 attrs["cpp_std"] = fmt.Sprintf(`"%s"`, tc.bazel_cpp_std)
Jingwen Chen97b85312021-10-08 10:41:31 +00001766 }
Chris Parsons79bd2b72021-11-29 17:52:41 -05001767 if tc.bazel_c_std != "" {
1768 attrs["c_std"] = fmt.Sprintf(`"%s"`, tc.bazel_c_std)
1769 }
Jingwen Chen97b85312021-10-08 10:41:31 +00001770
1771 runCcLibraryTestCase(t, bp2buildTestCase{
1772 description: fmt.Sprintf(
Chris Parsons79bd2b72021-11-29 17:52:41 -05001773 "cc_library with c_std: %s, cpp_std: %s and gnu_extensions: %s", tc.c_std, tc.cpp_std, tc.gnu_extensions),
Jingwen Chen97b85312021-10-08 10:41:31 +00001774 moduleTypeUnderTest: "cc_library",
1775 moduleTypeUnderTestFactory: cc.LibraryFactory,
1776 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1777 blueprint: soongCcLibraryPreamble + fmt.Sprintf(`
1778cc_library {
Chris Parsons79bd2b72021-11-29 17:52:41 -05001779 name: "%s_full",
Jingwen Chen97b85312021-10-08 10:41:31 +00001780%s // cpp_std: *string
Chris Parsons79bd2b72021-11-29 17:52:41 -05001781%s // c_std: *string
Jingwen Chen97b85312021-10-08 10:41:31 +00001782%s // gnu_extensions: *bool
1783 include_build_directory: false,
1784}
Chris Parsons79bd2b72021-11-29 17:52:41 -05001785`, name_prefix, cppStdProp, cStdProp, gnuExtensionsProp),
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001786 expectedBazelTargets: []string{
Chris Parsons79bd2b72021-11-29 17:52:41 -05001787 makeBazelTarget("cc_library", name_prefix+"_full", attrs),
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001788 },
Jingwen Chen97b85312021-10-08 10:41:31 +00001789 })
Jingwen Chen5b11ab12021-10-11 17:44:33 +00001790
1791 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1792 description: fmt.Sprintf(
Chris Parsons79bd2b72021-11-29 17:52:41 -05001793 "cc_library_static with c_std: %s, cpp_std: %s and gnu_extensions: %s", tc.c_std, tc.cpp_std, tc.gnu_extensions),
Jingwen Chen5b11ab12021-10-11 17:44:33 +00001794 moduleTypeUnderTest: "cc_library_static",
1795 moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
1796 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
1797 blueprint: soongCcLibraryPreamble + fmt.Sprintf(`
1798cc_library_static {
Chris Parsons79bd2b72021-11-29 17:52:41 -05001799 name: "%s_static",
Jingwen Chen5b11ab12021-10-11 17:44:33 +00001800%s // cpp_std: *string
Chris Parsons79bd2b72021-11-29 17:52:41 -05001801%s // c_std: *string
Jingwen Chen5b11ab12021-10-11 17:44:33 +00001802%s // gnu_extensions: *bool
1803 include_build_directory: false,
1804}
Chris Parsons79bd2b72021-11-29 17:52:41 -05001805`, name_prefix, cppStdProp, cStdProp, gnuExtensionsProp),
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001806 expectedBazelTargets: []string{
Chris Parsons79bd2b72021-11-29 17:52:41 -05001807 makeBazelTarget("cc_library_static", name_prefix+"_static", attrs),
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001808 },
Jingwen Chen5b11ab12021-10-11 17:44:33 +00001809 })
1810
1811 runCcLibrarySharedTestCase(t, bp2buildTestCase{
1812 description: fmt.Sprintf(
Chris Parsons79bd2b72021-11-29 17:52:41 -05001813 "cc_library_shared with c_std: %s, cpp_std: %s and gnu_extensions: %s", tc.c_std, tc.cpp_std, tc.gnu_extensions),
Jingwen Chen5b11ab12021-10-11 17:44:33 +00001814 moduleTypeUnderTest: "cc_library_shared",
1815 moduleTypeUnderTestFactory: cc.LibrarySharedFactory,
1816 moduleTypeUnderTestBp2BuildMutator: cc.CcLibrarySharedBp2Build,
1817 blueprint: soongCcLibraryPreamble + fmt.Sprintf(`
1818cc_library_shared {
Chris Parsons79bd2b72021-11-29 17:52:41 -05001819 name: "%s_shared",
Jingwen Chen5b11ab12021-10-11 17:44:33 +00001820%s // cpp_std: *string
Chris Parsons79bd2b72021-11-29 17:52:41 -05001821%s // c_std: *string
Jingwen Chen5b11ab12021-10-11 17:44:33 +00001822%s // gnu_extensions: *bool
1823 include_build_directory: false,
1824}
Chris Parsons79bd2b72021-11-29 17:52:41 -05001825`, name_prefix, cppStdProp, cStdProp, gnuExtensionsProp),
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001826 expectedBazelTargets: []string{
Chris Parsons79bd2b72021-11-29 17:52:41 -05001827 makeBazelTarget("cc_library_shared", name_prefix+"_shared", attrs),
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001828 },
Jingwen Chen5b11ab12021-10-11 17:44:33 +00001829 })
Jingwen Chen97b85312021-10-08 10:41:31 +00001830 }
Chris Parsons2dde0cb2021-10-01 14:45:30 -04001831}