blob: bfe88f567c280eff2506c4394e1a2aa5bc097c3e [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 },
84 blueprint: soongCcLibraryPreamble + `
Jingwen Chen63930982021-03-24 10:04:33 -040085cc_library_headers { name: "some-headers" }
86cc_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`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200120 expectedBazelTargets: []string{`cc_library(
Jingwen Chen63930982021-03-24 10:04:33 -0400121 name = "foo-lib",
Liz Kammer8337ea42021-09-10 10:06:32 -0400122 copts = ["-Wall"],
Liz Kammer5fad5012021-09-09 14:08:21 -0400123 export_includes = ["foo-dir"],
Chris Parsonsd6358772021-05-18 18:35:24 -0400124 implementation_deps = [":some-headers"],
Jingwen Chened9c17d2021-04-13 07:14:55 +0000125 linkopts = ["-Wl,--exclude-libs=bar.a"] + select({
126 "//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": [],
129 }),
Jingwen Chen882bcc12021-04-27 05:54:20 +0000130 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": [
136 "android.cpp",
137 "bionic.cpp",
138 ],
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": [],
Jingwen Chen63930982021-03-24 10:04:33 -0400143 }),
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200144)`}})
145}
146
147func TestCcLibraryTrimmedLdAndroid(t *testing.T) {
148 runCcLibraryTestCase(t, bp2buildTestCase{
149 description: "cc_library - trimmed example of //bionic/linker:ld-android",
150 moduleTypeUnderTest: "cc_library",
151 moduleTypeUnderTestFactory: cc.LibraryFactory,
152 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
153 filesystem: map[string]string{
154 "ld-android.cpp": "",
155 "linked_list.h": "",
156 "linker.h": "",
157 "linker_block_allocator.h": "",
158 "linker_cfi.h": "",
Jingwen Chen63930982021-03-24 10:04:33 -0400159 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200160 blueprint: soongCcLibraryPreamble + `
Jingwen Chen63930982021-03-24 10:04:33 -0400161cc_library_headers { name: "libc_headers" }
162cc_library {
163 name: "fake-ld-android",
164 srcs: ["ld_android.cpp"],
165 cflags: [
166 "-Wall",
167 "-Wextra",
168 "-Wunused",
169 "-Werror",
170 ],
171 header_libs: ["libc_headers"],
172 ldflags: [
173 "-Wl,--exclude-libs=libgcc.a",
174 "-Wl,--exclude-libs=libgcc_stripped.a",
175 "-Wl,--exclude-libs=libclang_rt.builtins-arm-android.a",
176 "-Wl,--exclude-libs=libclang_rt.builtins-aarch64-android.a",
177 "-Wl,--exclude-libs=libclang_rt.builtins-i686-android.a",
178 "-Wl,--exclude-libs=libclang_rt.builtins-x86_64-android.a",
179 ],
180 arch: {
181 x86: {
182 ldflags: ["-Wl,--exclude-libs=libgcc_eh.a"],
183 },
184 x86_64: {
185 ldflags: ["-Wl,--exclude-libs=libgcc_eh.a"],
186 },
187 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400188 include_build_directory: false,
Jingwen Chen63930982021-03-24 10:04:33 -0400189}
190`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200191 expectedBazelTargets: []string{`cc_library(
Jingwen Chen63930982021-03-24 10:04:33 -0400192 name = "fake-ld-android",
193 copts = [
194 "-Wall",
195 "-Wextra",
196 "-Wunused",
197 "-Werror",
198 ],
Chris Parsonsd6358772021-05-18 18:35:24 -0400199 implementation_deps = [":libc_headers"],
Jingwen Chen63930982021-03-24 10:04:33 -0400200 linkopts = [
201 "-Wl,--exclude-libs=libgcc.a",
202 "-Wl,--exclude-libs=libgcc_stripped.a",
203 "-Wl,--exclude-libs=libclang_rt.builtins-arm-android.a",
204 "-Wl,--exclude-libs=libclang_rt.builtins-aarch64-android.a",
205 "-Wl,--exclude-libs=libclang_rt.builtins-i686-android.a",
206 "-Wl,--exclude-libs=libclang_rt.builtins-x86_64-android.a",
207 ] + select({
Jingwen Chenb4628eb2021-04-08 14:40:57 +0000208 "//build/bazel/platforms/arch:x86": ["-Wl,--exclude-libs=libgcc_eh.a"],
209 "//build/bazel/platforms/arch:x86_64": ["-Wl,--exclude-libs=libgcc_eh.a"],
Jingwen Chen63930982021-03-24 10:04:33 -0400210 "//conditions:default": [],
211 }),
Jingwen Chen882bcc12021-04-27 05:54:20 +0000212 srcs = ["ld_android.cpp"],
Jingwen Chen63930982021-03-24 10:04:33 -0400213)`},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200214 })
215}
216
217func TestCcLibraryExcludeSrcs(t *testing.T) {
218 runCcLibraryTestCase(t, bp2buildTestCase{
219 description: "cc_library exclude_srcs - trimmed example of //external/arm-optimized-routines:libarm-optimized-routines-math",
220 moduleTypeUnderTest: "cc_library",
221 moduleTypeUnderTestFactory: cc.LibraryFactory,
222 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
223 dir: "external",
224 filesystem: map[string]string{
225 "external/math/cosf.c": "",
226 "external/math/erf.c": "",
227 "external/math/erf_data.c": "",
228 "external/math/erff.c": "",
229 "external/math/erff_data.c": "",
230 "external/Android.bp": `
Jingwen Chen4ecc67d2021-04-27 09:47:02 +0000231cc_library {
232 name: "fake-libarm-optimized-routines-math",
233 exclude_srcs: [
234 // Provided by:
235 // bionic/libm/upstream-freebsd/lib/msun/src/s_erf.c
236 // bionic/libm/upstream-freebsd/lib/msun/src/s_erff.c
237 "math/erf.c",
238 "math/erf_data.c",
239 "math/erff.c",
240 "math/erff_data.c",
241 ],
242 srcs: [
243 "math/*.c",
244 ],
245 // arch-specific settings
246 arch: {
247 arm64: {
248 cflags: [
249 "-DHAVE_FAST_FMA=1",
250 ],
251 },
252 },
253 bazel_module: { bp2build_available: true },
254}
255`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200256 },
257 blueprint: soongCcLibraryPreamble,
258 expectedBazelTargets: []string{`cc_library(
Jingwen Chen4ecc67d2021-04-27 09:47:02 +0000259 name = "fake-libarm-optimized-routines-math",
Liz Kammer35687bc2021-09-10 10:07:07 -0400260 copts = select({
Jingwen Chen4ecc67d2021-04-27 09:47:02 +0000261 "//build/bazel/platforms/arch:arm64": ["-DHAVE_FAST_FMA=1"],
262 "//conditions:default": [],
263 }),
Liz Kammer35687bc2021-09-10 10:07:07 -0400264 local_includes = ["."],
Chris Parsons990c4f42021-05-25 12:10:58 -0400265 srcs_c = ["math/cosf.c"],
Jingwen Chen4ecc67d2021-04-27 09:47:02 +0000266)`},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200267 })
268}
269
270func TestCcLibrarySharedStaticProps(t *testing.T) {
271 runCcLibraryTestCase(t, bp2buildTestCase{
272 description: "cc_library shared/static props",
273 moduleTypeUnderTest: "cc_library",
274 moduleTypeUnderTestFactory: cc.LibraryFactory,
275 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200276 filesystem: map[string]string{
Liz Kammer8337ea42021-09-10 10:06:32 -0400277 "both.cpp": "",
278 "sharedonly.cpp": "",
279 "staticonly.cpp": "",
280 },
281 blueprint: soongCcLibraryPreamble + `
Jingwen Chen53681ef2021-04-29 08:15:13 +0000282cc_library {
283 name: "a",
Chris Parsons08648312021-05-06 16:23:19 -0400284 srcs: ["both.cpp"],
285 cflags: ["bothflag"],
286 shared_libs: ["shared_dep_for_both"],
287 static_libs: ["static_dep_for_both"],
288 whole_static_libs: ["whole_static_lib_for_both"],
289 static: {
290 srcs: ["staticonly.cpp"],
291 cflags: ["staticflag"],
292 shared_libs: ["shared_dep_for_static"],
293 static_libs: ["static_dep_for_static"],
294 whole_static_libs: ["whole_static_lib_for_static"],
295 },
296 shared: {
297 srcs: ["sharedonly.cpp"],
298 cflags: ["sharedflag"],
299 shared_libs: ["shared_dep_for_shared"],
300 static_libs: ["static_dep_for_shared"],
301 whole_static_libs: ["whole_static_lib_for_shared"],
302 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400303 include_build_directory: false,
Jingwen Chen53681ef2021-04-29 08:15:13 +0000304}
305
Liz Kammer8337ea42021-09-10 10:06:32 -0400306cc_library_static {
307 name: "static_dep_for_shared",
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_static",
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: "static_dep_for_both",
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_shared",
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_static",
328 bazel_module: { bp2build_available: false },
329}
Chris Parsons08648312021-05-06 16:23:19 -0400330
Liz Kammer8337ea42021-09-10 10:06:32 -0400331cc_library_static {
332 name: "whole_static_lib_for_both",
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_shared",
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_static",
343 bazel_module: { bp2build_available: false },
344}
Chris Parsons08648312021-05-06 16:23:19 -0400345
Liz Kammer8337ea42021-09-10 10:06:32 -0400346cc_library {
347 name: "shared_dep_for_both",
348 bazel_module: { bp2build_available: false },
349}
Jingwen Chen53681ef2021-04-29 08:15:13 +0000350`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200351 expectedBazelTargets: []string{`cc_library(
Jingwen Chen53681ef2021-04-29 08:15:13 +0000352 name = "a",
Liz Kammer8337ea42021-09-10 10:06:32 -0400353 copts = ["bothflag"],
Chris Parsonsd6358772021-05-18 18:35:24 -0400354 implementation_deps = [":static_dep_for_both"],
Liz Kammer7a210ac2021-09-22 15:52:58 -0400355 implementation_dynamic_deps = [":shared_dep_for_both"],
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000356 shared = {
357 "copts": ["sharedflag"],
Liz Kammer7a210ac2021-09-22 15:52:58 -0400358 "implementation_deps": [":static_dep_for_shared"],
359 "implementation_dynamic_deps": [":shared_dep_for_shared"],
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000360 "srcs": ["sharedonly.cpp"],
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000361 "whole_archive_deps": [":whole_static_lib_for_shared"],
362 },
Chris Parsons08648312021-05-06 16:23:19 -0400363 srcs = ["both.cpp"],
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000364 static = {
365 "copts": ["staticflag"],
Liz Kammer7a210ac2021-09-22 15:52:58 -0400366 "implementation_deps": [":static_dep_for_static"],
367 "implementation_dynamic_deps": [":shared_dep_for_static"],
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000368 "srcs": ["staticonly.cpp"],
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000369 "whole_archive_deps": [":whole_static_lib_for_static"],
370 },
Chris Parsons08648312021-05-06 16:23:19 -0400371 whole_archive_deps = [":whole_static_lib_for_both"],
Jingwen Chen53681ef2021-04-29 08:15:13 +0000372)`},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200373 })
374}
375
Liz Kammer7a210ac2021-09-22 15:52:58 -0400376func TestCcLibraryDeps(t *testing.T) {
377 runCcLibraryTestCase(t, bp2buildTestCase{
378 description: "cc_library shared/static props",
379 moduleTypeUnderTest: "cc_library",
380 moduleTypeUnderTestFactory: cc.LibraryFactory,
381 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
382 filesystem: map[string]string{
383 "both.cpp": "",
384 "sharedonly.cpp": "",
385 "staticonly.cpp": "",
386 },
387 blueprint: soongCcLibraryPreamble + `
388cc_library {
389 name: "a",
390 srcs: ["both.cpp"],
391 cflags: ["bothflag"],
392 shared_libs: ["implementation_shared_dep_for_both", "shared_dep_for_both"],
393 export_shared_lib_headers: ["shared_dep_for_both"],
394 static_libs: ["implementation_static_dep_for_both", "static_dep_for_both"],
395 export_static_lib_headers: ["static_dep_for_both", "whole_static_dep_for_both"],
396 whole_static_libs: ["not_explicitly_exported_whole_static_dep_for_both", "whole_static_dep_for_both"],
397 static: {
398 srcs: ["staticonly.cpp"],
399 cflags: ["staticflag"],
400 shared_libs: ["implementation_shared_dep_for_static", "shared_dep_for_static"],
401 export_shared_lib_headers: ["shared_dep_for_static"],
402 static_libs: ["implementation_static_dep_for_static", "static_dep_for_static"],
403 export_static_lib_headers: ["static_dep_for_static", "whole_static_dep_for_static"],
404 whole_static_libs: ["not_explicitly_exported_whole_static_dep_for_static", "whole_static_dep_for_static"],
405 },
406 shared: {
407 srcs: ["sharedonly.cpp"],
408 cflags: ["sharedflag"],
409 shared_libs: ["implementation_shared_dep_for_shared", "shared_dep_for_shared"],
410 export_shared_lib_headers: ["shared_dep_for_shared"],
411 static_libs: ["implementation_static_dep_for_shared", "static_dep_for_shared"],
412 export_static_lib_headers: ["static_dep_for_shared", "whole_static_dep_for_shared"],
413 whole_static_libs: ["not_explicitly_exported_whole_static_dep_for_shared", "whole_static_dep_for_shared"],
414 },
415 include_build_directory: false,
416}
417` + simpleModuleDoNotConvertBp2build("cc_library_static", "static_dep_for_shared") +
418 simpleModuleDoNotConvertBp2build("cc_library_static", "implementation_static_dep_for_shared") +
419 simpleModuleDoNotConvertBp2build("cc_library_static", "static_dep_for_static") +
420 simpleModuleDoNotConvertBp2build("cc_library_static", "implementation_static_dep_for_static") +
421 simpleModuleDoNotConvertBp2build("cc_library_static", "static_dep_for_both") +
422 simpleModuleDoNotConvertBp2build("cc_library_static", "implementation_static_dep_for_both") +
423 simpleModuleDoNotConvertBp2build("cc_library_static", "whole_static_dep_for_shared") +
424 simpleModuleDoNotConvertBp2build("cc_library_static", "not_explicitly_exported_whole_static_dep_for_shared") +
425 simpleModuleDoNotConvertBp2build("cc_library_static", "whole_static_dep_for_static") +
426 simpleModuleDoNotConvertBp2build("cc_library_static", "not_explicitly_exported_whole_static_dep_for_static") +
427 simpleModuleDoNotConvertBp2build("cc_library_static", "whole_static_dep_for_both") +
428 simpleModuleDoNotConvertBp2build("cc_library_static", "not_explicitly_exported_whole_static_dep_for_both") +
429 simpleModuleDoNotConvertBp2build("cc_library", "shared_dep_for_shared") +
430 simpleModuleDoNotConvertBp2build("cc_library", "implementation_shared_dep_for_shared") +
431 simpleModuleDoNotConvertBp2build("cc_library", "shared_dep_for_static") +
432 simpleModuleDoNotConvertBp2build("cc_library", "implementation_shared_dep_for_static") +
433 simpleModuleDoNotConvertBp2build("cc_library", "shared_dep_for_both") +
434 simpleModuleDoNotConvertBp2build("cc_library", "implementation_shared_dep_for_both"),
435 expectedBazelTargets: []string{`cc_library(
436 name = "a",
437 copts = ["bothflag"],
438 deps = [":static_dep_for_both"],
439 dynamic_deps = [":shared_dep_for_both"],
440 implementation_deps = [":implementation_static_dep_for_both"],
441 implementation_dynamic_deps = [":implementation_shared_dep_for_both"],
442 shared = {
443 "copts": ["sharedflag"],
444 "deps": [":static_dep_for_shared"],
445 "dynamic_deps": [":shared_dep_for_shared"],
446 "implementation_deps": [":implementation_static_dep_for_shared"],
447 "implementation_dynamic_deps": [":implementation_shared_dep_for_shared"],
448 "srcs": ["sharedonly.cpp"],
449 "whole_archive_deps": [
450 ":not_explicitly_exported_whole_static_dep_for_shared",
451 ":whole_static_dep_for_shared",
452 ],
453 },
454 srcs = ["both.cpp"],
455 static = {
456 "copts": ["staticflag"],
457 "deps": [":static_dep_for_static"],
458 "dynamic_deps": [":shared_dep_for_static"],
459 "implementation_deps": [":implementation_static_dep_for_static"],
460 "implementation_dynamic_deps": [":implementation_shared_dep_for_static"],
461 "srcs": ["staticonly.cpp"],
462 "whole_archive_deps": [
463 ":not_explicitly_exported_whole_static_dep_for_static",
464 ":whole_static_dep_for_static",
465 ],
466 },
467 whole_archive_deps = [
468 ":not_explicitly_exported_whole_static_dep_for_both",
469 ":whole_static_dep_for_both",
470 ],
471)`},
472 })
473}
474
Liz Kammer2d7bbe32021-06-10 18:20:06 -0400475func TestCcLibraryWholeStaticLibsAlwaysLink(t *testing.T) {
476 runCcLibraryTestCase(t, bp2buildTestCase{
477 moduleTypeUnderTest: "cc_library",
478 moduleTypeUnderTestFactory: cc.LibraryFactory,
479 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Liz Kammer2d7bbe32021-06-10 18:20:06 -0400480 dir: "foo/bar",
481 filesystem: map[string]string{
482 "foo/bar/Android.bp": `
483cc_library {
484 name: "a",
485 whole_static_libs: ["whole_static_lib_for_both"],
486 static: {
487 whole_static_libs: ["whole_static_lib_for_static"],
488 },
489 shared: {
490 whole_static_libs: ["whole_static_lib_for_shared"],
491 },
492 bazel_module: { bp2build_available: true },
Liz Kammer8337ea42021-09-10 10:06:32 -0400493 include_build_directory: false,
Liz Kammer2d7bbe32021-06-10 18:20:06 -0400494}
495
496cc_prebuilt_library_static { name: "whole_static_lib_for_shared" }
497
498cc_prebuilt_library_static { name: "whole_static_lib_for_static" }
499
500cc_prebuilt_library_static { name: "whole_static_lib_for_both" }
501`,
502 },
503 blueprint: soongCcLibraryPreamble,
504 expectedBazelTargets: []string{`cc_library(
505 name = "a",
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000506 shared = {
507 "whole_archive_deps": [":whole_static_lib_for_shared_alwayslink"],
508 },
509 static = {
510 "whole_archive_deps": [":whole_static_lib_for_static_alwayslink"],
511 },
Liz Kammer2d7bbe32021-06-10 18:20:06 -0400512 whole_archive_deps = [":whole_static_lib_for_both_alwayslink"],
Liz Kammer2d7bbe32021-06-10 18:20:06 -0400513)`},
514 })
515}
516
Jingwen Chenbcf53042021-05-26 04:42:42 +0000517func TestCcLibrarySharedStaticPropsInArch(t *testing.T) {
518 runCcLibraryTestCase(t, bp2buildTestCase{
519 description: "cc_library shared/static props in arch",
520 moduleTypeUnderTest: "cc_library",
521 moduleTypeUnderTestFactory: cc.LibraryFactory,
522 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Jingwen Chenbcf53042021-05-26 04:42:42 +0000523 dir: "foo/bar",
524 filesystem: map[string]string{
525 "foo/bar/arm.cpp": "",
526 "foo/bar/x86.cpp": "",
527 "foo/bar/sharedonly.cpp": "",
528 "foo/bar/staticonly.cpp": "",
529 "foo/bar/Android.bp": `
530cc_library {
531 name: "a",
532 arch: {
533 arm: {
534 shared: {
535 srcs: ["arm_shared.cpp"],
536 cflags: ["-DARM_SHARED"],
537 static_libs: ["arm_static_dep_for_shared"],
538 whole_static_libs: ["arm_whole_static_dep_for_shared"],
539 shared_libs: ["arm_shared_dep_for_shared"],
540 },
541 },
542 x86: {
543 static: {
544 srcs: ["x86_static.cpp"],
545 cflags: ["-DX86_STATIC"],
546 static_libs: ["x86_dep_for_static"],
547 },
548 },
549 },
550 target: {
551 android: {
552 shared: {
553 srcs: ["android_shared.cpp"],
554 cflags: ["-DANDROID_SHARED"],
555 static_libs: ["android_dep_for_shared"],
556 },
557 },
558 android_arm: {
559 shared: {
560 cflags: ["-DANDROID_ARM_SHARED"],
561 },
562 },
563 },
564 srcs: ["both.cpp"],
565 cflags: ["bothflag"],
566 static_libs: ["static_dep_for_both"],
567 static: {
568 srcs: ["staticonly.cpp"],
569 cflags: ["staticflag"],
570 static_libs: ["static_dep_for_static"],
571 },
572 shared: {
573 srcs: ["sharedonly.cpp"],
574 cflags: ["sharedflag"],
575 static_libs: ["static_dep_for_shared"],
576 },
577 bazel_module: { bp2build_available: true },
578}
579
580cc_library_static { name: "static_dep_for_shared" }
581cc_library_static { name: "static_dep_for_static" }
582cc_library_static { name: "static_dep_for_both" }
583
584cc_library_static { name: "arm_static_dep_for_shared" }
585cc_library_static { name: "arm_whole_static_dep_for_shared" }
586cc_library_static { name: "arm_shared_dep_for_shared" }
587
588cc_library_static { name: "x86_dep_for_static" }
589
590cc_library_static { name: "android_dep_for_shared" }
591`,
592 },
593 blueprint: soongCcLibraryPreamble,
594 expectedBazelTargets: []string{`cc_library(
595 name = "a",
Liz Kammer35687bc2021-09-10 10:07:07 -0400596 copts = ["bothflag"],
Jingwen Chenbcf53042021-05-26 04:42:42 +0000597 implementation_deps = [":static_dep_for_both"],
Liz Kammer35687bc2021-09-10 10:07:07 -0400598 local_includes = ["."],
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000599 shared = {
600 "copts": ["sharedflag"] + select({
601 "//build/bazel/platforms/arch:arm": ["-DARM_SHARED"],
602 "//conditions:default": [],
603 }) + select({
604 "//build/bazel/platforms/os:android": ["-DANDROID_SHARED"],
605 "//conditions:default": [],
606 }) + select({
607 "//build/bazel/platforms/os_arch:android_arm": ["-DANDROID_ARM_SHARED"],
608 "//conditions:default": [],
609 }),
Liz Kammer7a210ac2021-09-22 15:52:58 -0400610 "implementation_deps": [":static_dep_for_shared"] + select({
611 "//build/bazel/platforms/arch:arm": [":arm_static_dep_for_shared"],
612 "//conditions:default": [],
613 }) + select({
614 "//build/bazel/platforms/os:android": [":android_dep_for_shared"],
615 "//conditions:default": [],
616 }),
617 "implementation_dynamic_deps": select({
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000618 "//build/bazel/platforms/arch:arm": [":arm_shared_dep_for_shared"],
619 "//conditions:default": [],
620 }),
621 "srcs": ["sharedonly.cpp"] + select({
622 "//build/bazel/platforms/arch:arm": ["arm_shared.cpp"],
623 "//conditions:default": [],
624 }) + select({
625 "//build/bazel/platforms/os:android": ["android_shared.cpp"],
626 "//conditions:default": [],
627 }),
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000628 "whole_archive_deps": select({
629 "//build/bazel/platforms/arch:arm": [":arm_whole_static_dep_for_shared"],
630 "//conditions:default": [],
631 }),
632 },
Jingwen Chenbcf53042021-05-26 04:42:42 +0000633 srcs = ["both.cpp"],
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000634 static = {
635 "copts": ["staticflag"] + select({
636 "//build/bazel/platforms/arch:x86": ["-DX86_STATIC"],
637 "//conditions:default": [],
638 }),
Liz Kammer7a210ac2021-09-22 15:52:58 -0400639 "implementation_deps": [":static_dep_for_static"] + select({
640 "//build/bazel/platforms/arch:x86": [":x86_dep_for_static"],
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000641 "//conditions:default": [],
642 }),
Liz Kammer7a210ac2021-09-22 15:52:58 -0400643 "srcs": ["staticonly.cpp"] + select({
644 "//build/bazel/platforms/arch:x86": ["x86_static.cpp"],
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000645 "//conditions:default": [],
646 }),
647 },
Jingwen Chenbcf53042021-05-26 04:42:42 +0000648)`},
649 })
650}
651
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000652func TestCcLibrarySharedStaticPropsWithMixedSources(t *testing.T) {
653 runCcLibraryTestCase(t, bp2buildTestCase{
654 description: "cc_library shared/static props with c/cpp/s mixed sources",
655 moduleTypeUnderTest: "cc_library",
656 moduleTypeUnderTestFactory: cc.LibraryFactory,
657 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000658 dir: "foo/bar",
659 filesystem: map[string]string{
660 "foo/bar/both_source.cpp": "",
661 "foo/bar/both_source.cc": "",
662 "foo/bar/both_source.c": "",
663 "foo/bar/both_source.s": "",
664 "foo/bar/both_source.S": "",
665 "foo/bar/shared_source.cpp": "",
666 "foo/bar/shared_source.cc": "",
667 "foo/bar/shared_source.c": "",
668 "foo/bar/shared_source.s": "",
669 "foo/bar/shared_source.S": "",
670 "foo/bar/static_source.cpp": "",
671 "foo/bar/static_source.cc": "",
672 "foo/bar/static_source.c": "",
673 "foo/bar/static_source.s": "",
674 "foo/bar/static_source.S": "",
675 "foo/bar/Android.bp": `
676cc_library {
677 name: "a",
678 srcs: [
Liz Kammerd366c902021-06-03 13:43:01 -0400679 "both_source.cpp",
680 "both_source.cc",
681 "both_source.c",
682 "both_source.s",
683 "both_source.S",
Liz Kammer57e2e7a2021-09-20 12:55:02 -0400684 ":both_filegroup",
Liz Kammerd366c902021-06-03 13:43:01 -0400685 ],
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000686 static: {
Liz Kammer8337ea42021-09-10 10:06:32 -0400687 srcs: [
688 "static_source.cpp",
689 "static_source.cc",
690 "static_source.c",
691 "static_source.s",
692 "static_source.S",
693 ":static_filegroup",
694 ],
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000695 },
696 shared: {
Liz Kammer8337ea42021-09-10 10:06:32 -0400697 srcs: [
698 "shared_source.cpp",
699 "shared_source.cc",
700 "shared_source.c",
701 "shared_source.s",
702 "shared_source.S",
703 ":shared_filegroup",
704 ],
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000705 },
706 bazel_module: { bp2build_available: true },
707}
708
709filegroup {
710 name: "both_filegroup",
711 srcs: [
712 // Not relevant, handled by filegroup macro
Liz Kammerd366c902021-06-03 13:43:01 -0400713 ],
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000714}
715
716filegroup {
717 name: "shared_filegroup",
718 srcs: [
719 // Not relevant, handled by filegroup macro
Liz Kammerd366c902021-06-03 13:43:01 -0400720 ],
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000721}
722
723filegroup {
724 name: "static_filegroup",
725 srcs: [
726 // Not relevant, handled by filegroup macro
Liz Kammerd366c902021-06-03 13:43:01 -0400727 ],
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000728}
729`,
730 },
731 blueprint: soongCcLibraryPreamble,
732 expectedBazelTargets: []string{`cc_library(
733 name = "a",
Liz Kammer35687bc2021-09-10 10:07:07 -0400734 local_includes = ["."],
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000735 shared = {
736 "srcs": [
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000737 "shared_source.cpp",
Liz Kammer57e2e7a2021-09-20 12:55:02 -0400738 "shared_source.cc",
739 ":shared_filegroup_cpp_srcs",
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000740 ],
741 "srcs_as": [
742 "shared_source.s",
743 "shared_source.S",
744 ":shared_filegroup_as_srcs",
745 ],
746 "srcs_c": [
747 "shared_source.c",
748 ":shared_filegroup_c_srcs",
749 ],
750 },
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000751 srcs = [
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000752 "both_source.cpp",
Liz Kammer57e2e7a2021-09-20 12:55:02 -0400753 "both_source.cc",
754 ":both_filegroup_cpp_srcs",
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000755 ],
756 srcs_as = [
757 "both_source.s",
758 "both_source.S",
759 ":both_filegroup_as_srcs",
760 ],
761 srcs_c = [
762 "both_source.c",
763 ":both_filegroup_c_srcs",
764 ],
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000765 static = {
766 "srcs": [
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000767 "static_source.cpp",
Liz Kammer57e2e7a2021-09-20 12:55:02 -0400768 "static_source.cc",
769 ":static_filegroup_cpp_srcs",
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000770 ],
771 "srcs_as": [
772 "static_source.s",
773 "static_source.S",
774 ":static_filegroup_as_srcs",
775 ],
776 "srcs_c": [
777 "static_source.c",
778 ":static_filegroup_c_srcs",
779 ],
780 },
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000781)`},
782 })
783}
784
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200785func TestCcLibraryNonConfiguredVersionScript(t *testing.T) {
786 runCcLibraryTestCase(t, bp2buildTestCase{
787 description: "cc_library non-configured version script",
788 moduleTypeUnderTest: "cc_library",
789 moduleTypeUnderTestFactory: cc.LibraryFactory,
790 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200791 dir: "foo/bar",
792 filesystem: map[string]string{
793 "foo/bar/Android.bp": `
Lukacs T. Berki1353e592021-04-30 15:35:09 +0200794cc_library {
795 name: "a",
796 srcs: ["a.cpp"],
797 version_script: "v.map",
798 bazel_module: { bp2build_available: true },
Liz Kammer8337ea42021-09-10 10:06:32 -0400799 include_build_directory: false,
Lukacs T. Berki1353e592021-04-30 15:35:09 +0200800}
801`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200802 },
803 blueprint: soongCcLibraryPreamble,
804 expectedBazelTargets: []string{`cc_library(
Lukacs T. Berki1353e592021-04-30 15:35:09 +0200805 name = "a",
Lukacs T. Berki1353e592021-04-30 15:35:09 +0200806 srcs = ["a.cpp"],
807 version_script = "v.map",
808)`},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200809 })
810}
811
812func TestCcLibraryConfiguredVersionScript(t *testing.T) {
813 runCcLibraryTestCase(t, bp2buildTestCase{
814 description: "cc_library configured version script",
815 moduleTypeUnderTest: "cc_library",
816 moduleTypeUnderTestFactory: cc.LibraryFactory,
817 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200818 dir: "foo/bar",
819 filesystem: map[string]string{
820 "foo/bar/Android.bp": `
Liz Kammer8337ea42021-09-10 10:06:32 -0400821cc_library {
822 name: "a",
823 srcs: ["a.cpp"],
824 arch: {
825 arm: {
826 version_script: "arm.map",
827 },
828 arm64: {
829 version_script: "arm64.map",
830 },
831 },
Lukacs T. Berki56bb0832021-05-12 12:36:45 +0200832
Liz Kammer8337ea42021-09-10 10:06:32 -0400833 bazel_module: { bp2build_available: true },
834 include_build_directory: false,
835}
Liz Kammerd366c902021-06-03 13:43:01 -0400836 `,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200837 },
838 blueprint: soongCcLibraryPreamble,
839 expectedBazelTargets: []string{`cc_library(
Lukacs T. Berki56bb0832021-05-12 12:36:45 +0200840 name = "a",
Lukacs T. Berki56bb0832021-05-12 12:36:45 +0200841 srcs = ["a.cpp"],
842 version_script = select({
843 "//build/bazel/platforms/arch:arm": "arm.map",
844 "//build/bazel/platforms/arch:arm64": "arm64.map",
845 "//conditions:default": None,
846 }),
847)`},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200848 })
849}
850
851func TestCcLibrarySharedLibs(t *testing.T) {
852 runCcLibraryTestCase(t, bp2buildTestCase{
853 description: "cc_library shared_libs",
854 moduleTypeUnderTest: "cc_library",
855 moduleTypeUnderTestFactory: cc.LibraryFactory,
856 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Liz Kammer8337ea42021-09-10 10:06:32 -0400857 blueprint: soongCcLibraryPreamble + `
Rupert Shuttleworthc50fa8d2021-05-06 02:40:33 -0400858cc_library {
859 name: "mylib",
Liz Kammer8337ea42021-09-10 10:06:32 -0400860 bazel_module: { bp2build_available: false },
Rupert Shuttleworthc50fa8d2021-05-06 02:40:33 -0400861}
862
863cc_library {
864 name: "a",
865 shared_libs: ["mylib",],
Liz Kammer8337ea42021-09-10 10:06:32 -0400866 include_build_directory: false,
Rupert Shuttleworthc50fa8d2021-05-06 02:40:33 -0400867}
868`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200869 expectedBazelTargets: []string{`cc_library(
Rupert Shuttleworthc50fa8d2021-05-06 02:40:33 -0400870 name = "a",
Liz Kammer7a210ac2021-09-22 15:52:58 -0400871 implementation_dynamic_deps = [":mylib"],
Rupert Shuttleworthc50fa8d2021-05-06 02:40:33 -0400872)`},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200873 })
874}
875
876func TestCcLibraryPackRelocations(t *testing.T) {
877 runCcLibraryTestCase(t, bp2buildTestCase{
878 description: "cc_library pack_relocations test",
879 moduleTypeUnderTest: "cc_library",
880 moduleTypeUnderTestFactory: cc.LibraryFactory,
881 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Liz Kammer8337ea42021-09-10 10:06:32 -0400882 blueprint: soongCcLibraryPreamble + `
Rupert Shuttleworth143be942021-05-09 23:55:51 -0400883cc_library {
884 name: "a",
885 srcs: ["a.cpp"],
886 pack_relocations: false,
Liz Kammer8337ea42021-09-10 10:06:32 -0400887 include_build_directory: false,
Rupert Shuttleworth143be942021-05-09 23:55:51 -0400888}
889
890cc_library {
891 name: "b",
892 srcs: ["b.cpp"],
893 arch: {
894 x86_64: {
Liz Kammer8337ea42021-09-10 10:06:32 -0400895 pack_relocations: false,
896 },
Rupert Shuttleworth143be942021-05-09 23:55:51 -0400897 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400898 include_build_directory: false,
Rupert Shuttleworth143be942021-05-09 23:55:51 -0400899}
900
901cc_library {
902 name: "c",
903 srcs: ["c.cpp"],
904 target: {
905 darwin: {
Liz Kammer8337ea42021-09-10 10:06:32 -0400906 pack_relocations: false,
907 },
Rupert Shuttleworth143be942021-05-09 23:55:51 -0400908 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400909 include_build_directory: false,
Rupert Shuttleworth143be942021-05-09 23:55:51 -0400910}`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200911 expectedBazelTargets: []string{`cc_library(
Rupert Shuttleworth143be942021-05-09 23:55:51 -0400912 name = "a",
Rupert Shuttleworth143be942021-05-09 23:55:51 -0400913 linkopts = ["-Wl,--pack-dyn-relocs=none"],
914 srcs = ["a.cpp"],
915)`, `cc_library(
916 name = "b",
Rupert Shuttleworth143be942021-05-09 23:55:51 -0400917 linkopts = select({
918 "//build/bazel/platforms/arch:x86_64": ["-Wl,--pack-dyn-relocs=none"],
919 "//conditions:default": [],
920 }),
921 srcs = ["b.cpp"],
922)`, `cc_library(
923 name = "c",
Rupert Shuttleworth143be942021-05-09 23:55:51 -0400924 linkopts = select({
925 "//build/bazel/platforms/os:darwin": ["-Wl,--pack-dyn-relocs=none"],
926 "//conditions:default": [],
927 }),
928 srcs = ["c.cpp"],
929)`},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200930 })
931}
932
933func TestCcLibrarySpacesInCopts(t *testing.T) {
934 runCcLibraryTestCase(t, bp2buildTestCase{
935 description: "cc_library spaces in copts",
936 moduleTypeUnderTest: "cc_library",
937 moduleTypeUnderTestFactory: cc.LibraryFactory,
938 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Liz Kammer8337ea42021-09-10 10:06:32 -0400939 blueprint: soongCcLibraryPreamble + `
Jingwen Chen3950cd62021-05-12 04:33:00 +0000940cc_library {
941 name: "a",
942 cflags: ["-include header.h",],
Liz Kammer8337ea42021-09-10 10:06:32 -0400943 include_build_directory: false,
Jingwen Chen3950cd62021-05-12 04:33:00 +0000944}
945`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200946 expectedBazelTargets: []string{`cc_library(
Jingwen Chen3950cd62021-05-12 04:33:00 +0000947 name = "a",
948 copts = [
949 "-include",
950 "header.h",
Jingwen Chen3950cd62021-05-12 04:33:00 +0000951 ],
952)`},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200953 })
954}
955
956func TestCcLibraryCppFlagsGoesIntoCopts(t *testing.T) {
957 runCcLibraryTestCase(t, bp2buildTestCase{
Chris Parsons990c4f42021-05-25 12:10:58 -0400958 description: "cc_library cppflags usage",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200959 moduleTypeUnderTest: "cc_library",
960 moduleTypeUnderTestFactory: cc.LibraryFactory,
961 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Liz Kammer8337ea42021-09-10 10:06:32 -0400962 blueprint: soongCcLibraryPreamble + `cc_library {
Jingwen Chen75be1ca2021-05-12 05:04:58 +0000963 name: "a",
964 srcs: ["a.cpp"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400965 cflags: ["-Wall"],
Jingwen Chen75be1ca2021-05-12 05:04:58 +0000966 cppflags: [
967 "-fsigned-char",
968 "-pedantic",
Liz Kammer8337ea42021-09-10 10:06:32 -0400969 ],
Jingwen Chen75be1ca2021-05-12 05:04:58 +0000970 arch: {
971 arm64: {
972 cppflags: ["-DARM64=1"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400973 },
Liz Kammerd366c902021-06-03 13:43:01 -0400974 },
Jingwen Chen75be1ca2021-05-12 05:04:58 +0000975 target: {
976 android: {
977 cppflags: ["-DANDROID=1"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400978 },
Liz Kammerd366c902021-06-03 13:43:01 -0400979 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400980 include_build_directory: false,
Jingwen Chen75be1ca2021-05-12 05:04:58 +0000981}
982`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200983 expectedBazelTargets: []string{`cc_library(
Jingwen Chen75be1ca2021-05-12 05:04:58 +0000984 name = "a",
Liz Kammer8337ea42021-09-10 10:06:32 -0400985 copts = ["-Wall"],
Chris Parsons990c4f42021-05-25 12:10:58 -0400986 cppflags = [
987 "-fsigned-char",
988 "-pedantic",
Jingwen Chen75be1ca2021-05-12 05:04:58 +0000989 ] + select({
990 "//build/bazel/platforms/arch:arm64": ["-DARM64=1"],
991 "//conditions:default": [],
992 }) + select({
993 "//build/bazel/platforms/os:android": ["-DANDROID=1"],
994 "//conditions:default": [],
995 }),
996 srcs = ["a.cpp"],
997)`},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200998 })
Jingwen Chen63930982021-03-24 10:04:33 -0400999}
Rupert Shuttleworth22cd2eb2021-05-27 02:15:54 -04001000
1001func TestCcLibraryLabelAttributeGetTargetProperties(t *testing.T) {
1002 runCcLibraryTestCase(t, bp2buildTestCase{
1003 description: "cc_library GetTargetProperties on a LabelAttribute",
1004 moduleTypeUnderTest: "cc_library",
1005 moduleTypeUnderTestFactory: cc.LibraryFactory,
1006 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Liz Kammer8337ea42021-09-10 10:06:32 -04001007 blueprint: soongCcLibraryPreamble + `
1008cc_library {
1009 name: "a",
1010 srcs: ["a.cpp"],
1011 target: {
1012 android_arm: {
1013 version_script: "android_arm.map",
1014 },
1015 linux_bionic_arm64: {
1016 version_script: "linux_bionic_arm64.map",
1017 },
1018 },
1019 include_build_directory: false,
1020}
Liz Kammerd366c902021-06-03 13:43:01 -04001021 `,
Rupert Shuttleworth22cd2eb2021-05-27 02:15:54 -04001022 expectedBazelTargets: []string{`cc_library(
1023 name = "a",
Rupert Shuttleworth22cd2eb2021-05-27 02:15:54 -04001024 srcs = ["a.cpp"],
1025 version_script = select({
Rupert Shuttleworthffd45822021-05-14 03:02:34 -04001026 "//build/bazel/platforms/os_arch:android_arm": "android_arm.map",
1027 "//build/bazel/platforms/os_arch:linux_bionic_arm64": "linux_bionic_arm64.map",
Rupert Shuttleworth22cd2eb2021-05-27 02:15:54 -04001028 "//conditions:default": None,
1029 }),
1030)`},
1031 })
1032}
Liz Kammer47535c52021-06-02 16:02:22 -04001033
1034func TestCcLibraryExcludeLibs(t *testing.T) {
1035 runCcLibraryTestCase(t, bp2buildTestCase{
1036 moduleTypeUnderTest: "cc_library",
1037 moduleTypeUnderTestFactory: cc.LibraryFactory,
1038 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Liz Kammer47535c52021-06-02 16:02:22 -04001039 filesystem: map[string]string{},
1040 blueprint: soongCcLibraryStaticPreamble + `
1041cc_library {
1042 name: "foo_static",
1043 srcs: ["common.c"],
1044 whole_static_libs: [
1045 "arm_whole_static_lib_excludes",
1046 "malloc_not_svelte_whole_static_lib_excludes"
1047 ],
1048 static_libs: [
1049 "arm_static_lib_excludes",
1050 "malloc_not_svelte_static_lib_excludes"
1051 ],
1052 shared_libs: [
1053 "arm_shared_lib_excludes",
1054 ],
1055 arch: {
1056 arm: {
1057 exclude_shared_libs: [
1058 "arm_shared_lib_excludes",
1059 ],
1060 exclude_static_libs: [
1061 "arm_static_lib_excludes",
1062 "arm_whole_static_lib_excludes",
1063 ],
1064 },
1065 },
1066 product_variables: {
1067 malloc_not_svelte: {
1068 shared_libs: ["malloc_not_svelte_shared_lib"],
1069 whole_static_libs: ["malloc_not_svelte_whole_static_lib"],
1070 exclude_static_libs: [
1071 "malloc_not_svelte_static_lib_excludes",
1072 "malloc_not_svelte_whole_static_lib_excludes",
1073 ],
1074 },
1075 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001076 include_build_directory: false,
Liz Kammer47535c52021-06-02 16:02:22 -04001077}
1078
1079cc_library {
1080 name: "arm_whole_static_lib_excludes",
1081 bazel_module: { bp2build_available: false },
1082}
1083
1084cc_library {
1085 name: "malloc_not_svelte_whole_static_lib",
1086 bazel_module: { bp2build_available: false },
1087}
1088
1089cc_library {
1090 name: "malloc_not_svelte_whole_static_lib_excludes",
1091 bazel_module: { bp2build_available: false },
1092}
1093
1094cc_library {
1095 name: "arm_static_lib_excludes",
1096 bazel_module: { bp2build_available: false },
1097}
1098
1099cc_library {
1100 name: "malloc_not_svelte_static_lib_excludes",
1101 bazel_module: { bp2build_available: false },
1102}
1103
1104cc_library {
1105 name: "arm_shared_lib_excludes",
1106 bazel_module: { bp2build_available: false },
1107}
1108
1109cc_library {
1110 name: "malloc_not_svelte_shared_lib",
1111 bazel_module: { bp2build_available: false },
1112}
1113`,
1114 expectedBazelTargets: []string{
1115 `cc_library(
1116 name = "foo_static",
Liz Kammer47535c52021-06-02 16:02:22 -04001117 implementation_deps = select({
1118 "//build/bazel/platforms/arch:arm": [],
Chris Parsons953b3562021-09-20 15:14:39 -04001119 "//conditions:default": [":arm_static_lib_excludes_bp2build_cc_library_static"],
Liz Kammer47535c52021-06-02 16:02:22 -04001120 }) + select({
1121 "//build/bazel/product_variables:malloc_not_svelte": [],
Chris Parsons953b3562021-09-20 15:14:39 -04001122 "//conditions:default": [":malloc_not_svelte_static_lib_excludes_bp2build_cc_library_static"],
Liz Kammer47535c52021-06-02 16:02:22 -04001123 }),
Liz Kammer7a210ac2021-09-22 15:52:58 -04001124 implementation_dynamic_deps = select({
1125 "//build/bazel/platforms/arch:arm": [],
1126 "//conditions:default": [":arm_shared_lib_excludes"],
1127 }) + select({
1128 "//build/bazel/product_variables:malloc_not_svelte": [":malloc_not_svelte_shared_lib"],
1129 "//conditions:default": [],
1130 }),
Liz Kammer47535c52021-06-02 16:02:22 -04001131 srcs_c = ["common.c"],
1132 whole_archive_deps = select({
1133 "//build/bazel/platforms/arch:arm": [],
Chris Parsons953b3562021-09-20 15:14:39 -04001134 "//conditions:default": [":arm_whole_static_lib_excludes_bp2build_cc_library_static"],
Liz Kammer47535c52021-06-02 16:02:22 -04001135 }) + select({
Chris Parsons953b3562021-09-20 15:14:39 -04001136 "//build/bazel/product_variables:malloc_not_svelte": [":malloc_not_svelte_whole_static_lib_bp2build_cc_library_static"],
1137 "//conditions:default": [":malloc_not_svelte_whole_static_lib_excludes_bp2build_cc_library_static"],
Liz Kammer47535c52021-06-02 16:02:22 -04001138 }),
1139)`,
1140 },
1141 })
1142}
Liz Kammerd366c902021-06-03 13:43:01 -04001143
1144func TestCCLibraryNoCrtTrue(t *testing.T) {
1145 runCcLibraryTestCase(t, bp2buildTestCase{
Jingwen Chen6ada5892021-09-17 11:38:09 +00001146 description: "cc_library - nocrt: true emits attribute",
1147 moduleTypeUnderTest: "cc_library",
1148 moduleTypeUnderTestFactory: cc.LibraryFactory,
1149 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1150 filesystem: map[string]string{
1151 "impl.cpp": "",
1152 },
1153 blueprint: soongCcLibraryPreamble + `
1154cc_library {
1155 name: "foo-lib",
1156 srcs: ["impl.cpp"],
1157 nocrt: true,
1158 include_build_directory: false,
1159}
1160`,
1161 expectedBazelTargets: []string{`cc_library(
1162 name = "foo-lib",
1163 link_crt = False,
1164 srcs = ["impl.cpp"],
1165)`}})
1166}
1167
1168func TestCCLibraryNoCrtFalse(t *testing.T) {
1169 runCcLibraryTestCase(t, bp2buildTestCase{
1170 description: "cc_library - nocrt: false - does not emit attribute",
1171 moduleTypeUnderTest: "cc_library",
1172 moduleTypeUnderTestFactory: cc.LibraryFactory,
1173 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1174 filesystem: map[string]string{
1175 "impl.cpp": "",
1176 },
1177 blueprint: soongCcLibraryPreamble + `
1178cc_library {
1179 name: "foo-lib",
1180 srcs: ["impl.cpp"],
1181 nocrt: false,
1182 include_build_directory: false,
1183}
1184`,
1185 expectedBazelTargets: []string{`cc_library(
1186 name = "foo-lib",
1187 srcs = ["impl.cpp"],
1188)`}})
1189}
1190
1191func TestCCLibraryNoCrtArchVariant(t *testing.T) {
1192 runCcLibraryTestCase(t, bp2buildTestCase{
1193 description: "cc_library - nocrt in select",
1194 moduleTypeUnderTest: "cc_library",
1195 moduleTypeUnderTestFactory: cc.LibraryFactory,
1196 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1197 filesystem: map[string]string{
1198 "impl.cpp": "",
1199 },
1200 blueprint: soongCcLibraryPreamble + `
1201cc_library {
1202 name: "foo-lib",
1203 srcs: ["impl.cpp"],
1204 arch: {
1205 arm: {
1206 nocrt: true,
1207 },
1208 x86: {
1209 nocrt: false,
1210 },
1211 },
1212 include_build_directory: false,
1213}
1214`,
1215 expectedErr: fmt.Errorf("Android.bp:16:1: module \"foo-lib\": nocrt is not supported for arch variants"),
1216 })
1217}
1218
1219func TestCCLibraryNoLibCrtTrue(t *testing.T) {
1220 runCcLibraryTestCase(t, bp2buildTestCase{
Liz Kammerd366c902021-06-03 13:43:01 -04001221 description: "cc_library - simple example",
1222 moduleTypeUnderTest: "cc_library",
1223 moduleTypeUnderTestFactory: cc.LibraryFactory,
1224 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1225 filesystem: map[string]string{
1226 "impl.cpp": "",
1227 },
1228 blueprint: soongCcLibraryPreamble + `
1229cc_library_headers { name: "some-headers" }
1230cc_library {
1231 name: "foo-lib",
1232 srcs: ["impl.cpp"],
1233 no_libcrt: true,
Liz Kammer8337ea42021-09-10 10:06:32 -04001234 include_build_directory: false,
Liz Kammerd366c902021-06-03 13:43:01 -04001235}
1236`,
1237 expectedBazelTargets: []string{`cc_library(
1238 name = "foo-lib",
Liz Kammerd366c902021-06-03 13:43:01 -04001239 srcs = ["impl.cpp"],
1240 use_libcrt = False,
1241)`}})
1242}
1243
Jingwen Chen6ada5892021-09-17 11:38:09 +00001244func TestCCLibraryNoLibCrtFalse(t *testing.T) {
Liz Kammerd366c902021-06-03 13:43:01 -04001245 runCcLibraryTestCase(t, bp2buildTestCase{
1246 moduleTypeUnderTest: "cc_library",
1247 moduleTypeUnderTestFactory: cc.LibraryFactory,
1248 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1249 filesystem: map[string]string{
1250 "impl.cpp": "",
1251 },
1252 blueprint: soongCcLibraryPreamble + `
1253cc_library_headers { name: "some-headers" }
1254cc_library {
1255 name: "foo-lib",
1256 srcs: ["impl.cpp"],
1257 no_libcrt: false,
Liz Kammer8337ea42021-09-10 10:06:32 -04001258 include_build_directory: false,
Liz Kammerd366c902021-06-03 13:43:01 -04001259}
1260`,
1261 expectedBazelTargets: []string{`cc_library(
1262 name = "foo-lib",
Liz Kammerd366c902021-06-03 13:43:01 -04001263 srcs = ["impl.cpp"],
1264 use_libcrt = True,
1265)`}})
1266}
1267
Jingwen Chen6ada5892021-09-17 11:38:09 +00001268func TestCCLibraryNoLibCrtArchVariant(t *testing.T) {
Liz Kammerd366c902021-06-03 13:43:01 -04001269 runCcLibraryTestCase(t, bp2buildTestCase{
1270 moduleTypeUnderTest: "cc_library",
1271 moduleTypeUnderTestFactory: cc.LibraryFactory,
1272 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1273 filesystem: map[string]string{
1274 "impl.cpp": "",
1275 },
1276 blueprint: soongCcLibraryPreamble + `
Liz Kammerd366c902021-06-03 13:43:01 -04001277cc_library {
1278 name: "foo-lib",
1279 srcs: ["impl.cpp"],
1280 arch: {
1281 arm: {
1282 no_libcrt: true,
1283 },
1284 x86: {
1285 no_libcrt: true,
1286 },
1287 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001288 include_build_directory: false,
Liz Kammerd366c902021-06-03 13:43:01 -04001289}
1290`,
1291 expectedBazelTargets: []string{`cc_library(
1292 name = "foo-lib",
Liz Kammerd366c902021-06-03 13:43:01 -04001293 srcs = ["impl.cpp"],
1294 use_libcrt = select({
1295 "//build/bazel/platforms/arch:arm": False,
1296 "//build/bazel/platforms/arch:x86": False,
1297 "//conditions:default": None,
1298 }),
1299)`}})
1300}
1301
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001302func TestCcLibraryStrip(t *testing.T) {
1303 runCcLibraryTestCase(t, bp2buildTestCase{
1304 description: "cc_library strip args",
1305 moduleTypeUnderTest: "cc_library",
1306 moduleTypeUnderTestFactory: cc.LibraryFactory,
1307 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Liz Kammer8337ea42021-09-10 10:06:32 -04001308 blueprint: soongCcLibraryPreamble + `
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001309cc_library {
1310 name: "nothing",
Liz Kammer8337ea42021-09-10 10:06:32 -04001311 include_build_directory: false,
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001312}
1313cc_library {
1314 name: "keep_symbols",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001315 strip: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001316 keep_symbols: true,
1317 },
1318 include_build_directory: false,
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001319}
1320cc_library {
1321 name: "keep_symbols_and_debug_frame",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001322 strip: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001323 keep_symbols_and_debug_frame: true,
1324 },
1325 include_build_directory: false,
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001326}
1327cc_library {
1328 name: "none",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001329 strip: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001330 none: true,
1331 },
1332 include_build_directory: false,
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001333}
1334cc_library {
1335 name: "keep_symbols_list",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001336 strip: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001337 keep_symbols_list: ["symbol"],
1338 },
1339 include_build_directory: false,
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001340}
1341cc_library {
1342 name: "all",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001343 strip: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001344 all: true,
1345 },
1346 include_build_directory: false,
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001347}
1348`,
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001349 expectedBazelTargets: []string{`cc_library(
1350 name = "all",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001351 strip = {
1352 "all": True,
1353 },
1354)`, `cc_library(
1355 name = "keep_symbols",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001356 strip = {
1357 "keep_symbols": True,
1358 },
1359)`, `cc_library(
1360 name = "keep_symbols_and_debug_frame",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001361 strip = {
1362 "keep_symbols_and_debug_frame": True,
1363 },
1364)`, `cc_library(
1365 name = "keep_symbols_list",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001366 strip = {
1367 "keep_symbols_list": ["symbol"],
1368 },
1369)`, `cc_library(
1370 name = "none",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001371 strip = {
1372 "none": True,
1373 },
1374)`, `cc_library(
1375 name = "nothing",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001376)`},
1377 })
1378}
1379
1380func TestCcLibraryStripWithArch(t *testing.T) {
1381 runCcLibraryTestCase(t, bp2buildTestCase{
1382 description: "cc_library strip args",
1383 moduleTypeUnderTest: "cc_library",
1384 moduleTypeUnderTestFactory: cc.LibraryFactory,
1385 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Liz Kammer8337ea42021-09-10 10:06:32 -04001386 blueprint: soongCcLibraryPreamble + `
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001387cc_library {
1388 name: "multi-arch",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001389 target: {
1390 darwin: {
1391 strip: {
1392 keep_symbols_list: ["foo", "bar"]
1393 }
1394 },
1395 },
1396 arch: {
1397 arm: {
1398 strip: {
1399 keep_symbols_and_debug_frame: true,
1400 },
1401 },
1402 arm64: {
1403 strip: {
1404 keep_symbols: true,
1405 },
1406 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001407 },
1408 include_build_directory: false,
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001409}
1410`,
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001411 expectedBazelTargets: []string{`cc_library(
1412 name = "multi-arch",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001413 strip = {
1414 "keep_symbols": select({
1415 "//build/bazel/platforms/arch:arm64": True,
1416 "//conditions:default": None,
1417 }),
1418 "keep_symbols_and_debug_frame": select({
1419 "//build/bazel/platforms/arch:arm": True,
1420 "//conditions:default": None,
1421 }),
1422 "keep_symbols_list": select({
1423 "//build/bazel/platforms/os:darwin": [
1424 "foo",
1425 "bar",
1426 ],
1427 "//conditions:default": [],
1428 }),
1429 },
1430)`},
1431 })
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`,
1447 expectedBazelTargets: []string{`cc_library(
1448 name = "root_empty",
Chris Parsons51f8c392021-08-03 21:01:05 -04001449 system_dynamic_deps = [],
1450)`},
1451 })
1452}
1453
1454func TestCcLibrary_SystemSharedLibsStaticEmpty(t *testing.T) {
1455 runCcLibraryTestCase(t, bp2buildTestCase{
1456 description: "cc_library system_shared_libs empty for static variant",
1457 moduleTypeUnderTest: "cc_library",
1458 moduleTypeUnderTestFactory: cc.LibraryFactory,
1459 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1460 blueprint: soongCcLibraryPreamble + `
1461cc_library {
1462 name: "static_empty",
1463 static: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001464 system_shared_libs: [],
1465 },
1466 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001467}
1468`,
1469 expectedBazelTargets: []string{`cc_library(
1470 name = "static_empty",
Chris Parsons51f8c392021-08-03 21:01:05 -04001471 static = {
1472 "system_dynamic_deps": [],
1473 },
1474)`},
1475 })
1476}
1477
1478func TestCcLibrary_SystemSharedLibsSharedEmpty(t *testing.T) {
1479 runCcLibraryTestCase(t, bp2buildTestCase{
1480 description: "cc_library system_shared_libs empty for shared variant",
1481 moduleTypeUnderTest: "cc_library",
1482 moduleTypeUnderTestFactory: cc.LibraryFactory,
1483 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1484 blueprint: soongCcLibraryPreamble + `
1485cc_library {
1486 name: "shared_empty",
1487 shared: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001488 system_shared_libs: [],
1489 },
1490 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001491}
1492`,
1493 expectedBazelTargets: []string{`cc_library(
1494 name = "shared_empty",
Chris Parsons51f8c392021-08-03 21:01:05 -04001495 shared = {
1496 "system_dynamic_deps": [],
1497 },
1498)`},
1499 })
1500}
1501
1502func TestCcLibrary_SystemSharedLibsSharedBionicEmpty(t *testing.T) {
1503 runCcLibraryTestCase(t, bp2buildTestCase{
1504 description: "cc_library system_shared_libs empty for shared, bionic variant",
1505 moduleTypeUnderTest: "cc_library",
1506 moduleTypeUnderTestFactory: cc.LibraryFactory,
1507 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1508 blueprint: soongCcLibraryPreamble + `
1509cc_library {
1510 name: "shared_empty",
1511 target: {
1512 bionic: {
1513 shared: {
1514 system_shared_libs: [],
1515 }
1516 }
Liz Kammer8337ea42021-09-10 10:06:32 -04001517 },
1518 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001519}
1520`,
1521 expectedBazelTargets: []string{`cc_library(
1522 name = "shared_empty",
Chris Parsons51f8c392021-08-03 21:01:05 -04001523 shared = {
1524 "system_dynamic_deps": [],
1525 },
1526)`},
1527 })
1528}
1529
1530func TestCcLibrary_SystemSharedLibsLinuxBionicEmpty(t *testing.T) {
1531 // Note that this behavior is technically incorrect (it's a simplification).
1532 // The correct behavior would be if bp2build wrote `system_dynamic_deps = []`
1533 // only for linux_bionic, but `android` had `["libc", "libdl", "libm"].
1534 // b/195791252 tracks the fix.
1535 runCcLibraryTestCase(t, bp2buildTestCase{
1536 description: "cc_library system_shared_libs empty for linux_bionic variant",
1537 moduleTypeUnderTest: "cc_library",
1538 moduleTypeUnderTestFactory: cc.LibraryFactory,
1539 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1540 blueprint: soongCcLibraryPreamble + `
1541cc_library {
1542 name: "target_linux_bionic_empty",
1543 target: {
1544 linux_bionic: {
1545 system_shared_libs: [],
1546 },
1547 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001548 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001549}
1550`,
1551 expectedBazelTargets: []string{`cc_library(
1552 name = "target_linux_bionic_empty",
Chris Parsons51f8c392021-08-03 21:01:05 -04001553 system_dynamic_deps = [],
1554)`},
1555 })
1556}
1557
1558func TestCcLibrary_SystemSharedLibsBionicEmpty(t *testing.T) {
1559 runCcLibraryTestCase(t, bp2buildTestCase{
1560 description: "cc_library system_shared_libs empty for bionic variant",
1561 moduleTypeUnderTest: "cc_library",
1562 moduleTypeUnderTestFactory: cc.LibraryFactory,
1563 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1564 blueprint: soongCcLibraryPreamble + `
1565cc_library {
1566 name: "target_bionic_empty",
1567 target: {
1568 bionic: {
1569 system_shared_libs: [],
1570 },
1571 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001572 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001573}
1574`,
1575 expectedBazelTargets: []string{`cc_library(
1576 name = "target_bionic_empty",
Chris Parsons51f8c392021-08-03 21:01:05 -04001577 system_dynamic_deps = [],
1578)`},
1579 })
1580}
1581
1582func TestCcLibrary_SystemSharedLibsSharedAndRoot(t *testing.T) {
1583 runCcLibraryTestCase(t, bp2buildTestCase{
1584 description: "cc_library system_shared_libs set for shared and root",
1585 moduleTypeUnderTest: "cc_library",
1586 moduleTypeUnderTestFactory: cc.LibraryFactory,
1587 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1588 blueprint: soongCcLibraryPreamble + `
Liz Kammer8337ea42021-09-10 10:06:32 -04001589cc_library {
1590 name: "libc",
1591 bazel_module: { bp2build_available: false },
1592}
1593cc_library {
1594 name: "libm",
1595 bazel_module: { bp2build_available: false },
1596}
Chris Parsons51f8c392021-08-03 21:01:05 -04001597
1598cc_library {
1599 name: "foo",
1600 system_shared_libs: ["libc"],
1601 shared: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001602 system_shared_libs: ["libm"],
Chris Parsons51f8c392021-08-03 21:01:05 -04001603 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001604 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001605}
1606`,
1607 expectedBazelTargets: []string{`cc_library(
1608 name = "foo",
Chris Parsons51f8c392021-08-03 21:01:05 -04001609 shared = {
1610 "system_dynamic_deps": [":libm"],
1611 },
1612 system_dynamic_deps = [":libc"],
Chris Parsons51f8c392021-08-03 21:01:05 -04001613)`},
1614 })
1615}
Chris Parsons2dde0cb2021-10-01 14:45:30 -04001616
1617func TestCcLibraryOsSelects(t *testing.T) {
1618 runCcLibraryTestCase(t, bp2buildTestCase{
1619 description: "cc_library - selects for all os targets",
1620 moduleTypeUnderTest: "cc_library",
1621 moduleTypeUnderTestFactory: cc.LibraryFactory,
1622 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1623 filesystem: map[string]string{},
1624 blueprint: soongCcLibraryPreamble + `
1625cc_library_headers { name: "some-headers" }
1626cc_library {
1627 name: "foo-lib",
1628 srcs: ["base.cpp"],
1629 target: {
1630 android: {
1631 srcs: ["android.cpp"],
1632 },
1633 linux: {
1634 srcs: ["linux.cpp"],
1635 },
1636 linux_glibc: {
1637 srcs: ["linux_glibc.cpp"],
1638 },
1639 darwin: {
1640 srcs: ["darwin.cpp"],
1641 },
1642 bionic: {
1643 srcs: ["bionic.cpp"],
1644 },
1645 linux_musl: {
1646 srcs: ["linux_musl.cpp"],
1647 },
1648 windows: {
1649 srcs: ["windows.cpp"],
1650 },
1651 },
1652 include_build_directory: false,
1653}
1654`,
1655 expectedBazelTargets: []string{`cc_library(
1656 name = "foo-lib",
1657 srcs = ["base.cpp"] + select({
1658 "//build/bazel/platforms/os:android": [
1659 "android.cpp",
1660 "bionic.cpp",
1661 "linux.cpp",
1662 ],
1663 "//build/bazel/platforms/os:darwin": ["darwin.cpp"],
1664 "//build/bazel/platforms/os:linux": [
1665 "linux.cpp",
1666 "linux_glibc.cpp",
1667 ],
1668 "//build/bazel/platforms/os:linux_bionic": [
1669 "bionic.cpp",
1670 "linux.cpp",
1671 ],
1672 "//build/bazel/platforms/os:linux_musl": [
1673 "linux.cpp",
1674 "linux_musl.cpp",
1675 ],
1676 "//build/bazel/platforms/os:windows": ["windows.cpp"],
1677 "//conditions:default": [],
1678 }),
1679)`}})
1680}