blob: 0d6582294b315a69835097830f7962a74eb403bf [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 (
Alex Márquez Pérez Muñíz Díaz Púras Thaureaux1c92aef2021-08-23 16:10:00 +000018 "testing"
19
Jingwen Chen63930982021-03-24 10:04:33 -040020 "android/soong/android"
21 "android/soong/cc"
Jingwen Chen63930982021-03-24 10:04:33 -040022)
23
24const (
25 // See cc/testing.go for more context
26 soongCcLibraryPreamble = `
27cc_defaults {
Liz Kammer8337ea42021-09-10 10:06:32 -040028 name: "linux_bionic_supported",
Jingwen Chen63930982021-03-24 10:04:33 -040029}
30
31toolchain_library {
Liz Kammer8337ea42021-09-10 10:06:32 -040032 name: "libclang_rt.builtins-x86_64-android",
33 defaults: ["linux_bionic_supported"],
34 vendor_available: true,
35 vendor_ramdisk_available: true,
36 product_available: true,
37 recovery_available: true,
38 native_bridge_supported: true,
39 src: "",
Jingwen Chen63930982021-03-24 10:04:33 -040040}`
41)
42
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020043func runCcLibraryTestCase(t *testing.T, tc bp2buildTestCase) {
Liz Kammere4982e82021-05-25 10:39:35 -040044 t.Helper()
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020045 runBp2BuildTestCase(t, registerCcLibraryModuleTypes, tc)
46}
47
48func registerCcLibraryModuleTypes(ctx android.RegistrationContext) {
49 cc.RegisterCCBuildComponents(ctx)
Jingwen Chen14a8bda2021-06-02 11:10:02 +000050 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020051 ctx.RegisterModuleType("cc_library_static", cc.LibraryStaticFactory)
Liz Kammer2d7bbe32021-06-10 18:20:06 -040052 ctx.RegisterModuleType("cc_prebuilt_library_static", cc.PrebuiltStaticLibraryFactory)
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020053 ctx.RegisterModuleType("toolchain_library", cc.ToolchainLibraryFactory)
54 ctx.RegisterModuleType("cc_library_headers", cc.LibraryHeaderFactory)
55}
56
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020057func TestCcLibrarySimple(t *testing.T) {
58 runCcLibraryTestCase(t, bp2buildTestCase{
59 description: "cc_library - simple example",
60 moduleTypeUnderTest: "cc_library",
61 moduleTypeUnderTestFactory: cc.LibraryFactory,
62 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
63 filesystem: map[string]string{
64 "android.cpp": "",
Liz Kammer01a16e82021-07-16 16:33:47 -040065 "bionic.cpp": "",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020066 "darwin.cpp": "",
67 // Refer to cc.headerExts for the supported header extensions in Soong.
68 "header.h": "",
69 "header.hh": "",
70 "header.hpp": "",
71 "header.hxx": "",
72 "header.h++": "",
73 "header.inl": "",
74 "header.inc": "",
75 "header.ipp": "",
76 "header.h.generic": "",
77 "impl.cpp": "",
78 "linux.cpp": "",
79 "x86.cpp": "",
80 "x86_64.cpp": "",
81 "foo-dir/a.h": "",
82 },
83 blueprint: soongCcLibraryPreamble + `
Jingwen Chen63930982021-03-24 10:04:33 -040084cc_library_headers { name: "some-headers" }
85cc_library {
86 name: "foo-lib",
87 srcs: ["impl.cpp"],
88 cflags: ["-Wall"],
89 header_libs: ["some-headers"],
90 export_include_dirs: ["foo-dir"],
91 ldflags: ["-Wl,--exclude-libs=bar.a"],
92 arch: {
93 x86: {
94 ldflags: ["-Wl,--exclude-libs=baz.a"],
95 srcs: ["x86.cpp"],
96 },
97 x86_64: {
98 ldflags: ["-Wl,--exclude-libs=qux.a"],
99 srcs: ["x86_64.cpp"],
100 },
101 },
102 target: {
103 android: {
104 srcs: ["android.cpp"],
105 },
106 linux_glibc: {
107 srcs: ["linux.cpp"],
108 },
109 darwin: {
110 srcs: ["darwin.cpp"],
111 },
Liz Kammer01a16e82021-07-16 16:33:47 -0400112 bionic: {
113 srcs: ["bionic.cpp"]
114 },
Jingwen Chen63930982021-03-24 10:04:33 -0400115 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400116 include_build_directory: false,
Jingwen Chen63930982021-03-24 10:04:33 -0400117}
118`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200119 expectedBazelTargets: []string{`cc_library(
Jingwen Chen63930982021-03-24 10:04:33 -0400120 name = "foo-lib",
Liz Kammer8337ea42021-09-10 10:06:32 -0400121 copts = ["-Wall"],
Liz Kammer5fad5012021-09-09 14:08:21 -0400122 export_includes = ["foo-dir"],
Chris Parsonsd6358772021-05-18 18:35:24 -0400123 implementation_deps = [":some-headers"],
Jingwen Chened9c17d2021-04-13 07:14:55 +0000124 linkopts = ["-Wl,--exclude-libs=bar.a"] + select({
125 "//build/bazel/platforms/arch:x86": ["-Wl,--exclude-libs=baz.a"],
126 "//build/bazel/platforms/arch:x86_64": ["-Wl,--exclude-libs=qux.a"],
127 "//conditions:default": [],
128 }),
Jingwen Chen882bcc12021-04-27 05:54:20 +0000129 srcs = ["impl.cpp"] + select({
Jingwen Chenb4628eb2021-04-08 14:40:57 +0000130 "//build/bazel/platforms/arch:x86": ["x86.cpp"],
131 "//build/bazel/platforms/arch:x86_64": ["x86_64.cpp"],
Jingwen Chen63930982021-03-24 10:04:33 -0400132 "//conditions:default": [],
133 }) + select({
Chris Parsons2dde0cb2021-10-01 14:45:30 -0400134 "//build/bazel/platforms/os:android": [
135 "android.cpp",
136 "bionic.cpp",
137 ],
Jingwen Chenb4628eb2021-04-08 14:40:57 +0000138 "//build/bazel/platforms/os:darwin": ["darwin.cpp"],
139 "//build/bazel/platforms/os:linux": ["linux.cpp"],
Chris Parsons2dde0cb2021-10-01 14:45:30 -0400140 "//build/bazel/platforms/os:linux_bionic": ["bionic.cpp"],
Liz Kammer01a16e82021-07-16 16:33:47 -0400141 "//conditions:default": [],
Jingwen Chen63930982021-03-24 10:04:33 -0400142 }),
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200143)`}})
144}
145
146func TestCcLibraryTrimmedLdAndroid(t *testing.T) {
147 runCcLibraryTestCase(t, bp2buildTestCase{
148 description: "cc_library - trimmed example of //bionic/linker:ld-android",
149 moduleTypeUnderTest: "cc_library",
150 moduleTypeUnderTestFactory: cc.LibraryFactory,
151 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
152 filesystem: map[string]string{
153 "ld-android.cpp": "",
154 "linked_list.h": "",
155 "linker.h": "",
156 "linker_block_allocator.h": "",
157 "linker_cfi.h": "",
Jingwen Chen63930982021-03-24 10:04:33 -0400158 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200159 blueprint: soongCcLibraryPreamble + `
Jingwen Chen63930982021-03-24 10:04:33 -0400160cc_library_headers { name: "libc_headers" }
161cc_library {
162 name: "fake-ld-android",
163 srcs: ["ld_android.cpp"],
164 cflags: [
165 "-Wall",
166 "-Wextra",
167 "-Wunused",
168 "-Werror",
169 ],
170 header_libs: ["libc_headers"],
171 ldflags: [
172 "-Wl,--exclude-libs=libgcc.a",
173 "-Wl,--exclude-libs=libgcc_stripped.a",
174 "-Wl,--exclude-libs=libclang_rt.builtins-arm-android.a",
175 "-Wl,--exclude-libs=libclang_rt.builtins-aarch64-android.a",
176 "-Wl,--exclude-libs=libclang_rt.builtins-i686-android.a",
177 "-Wl,--exclude-libs=libclang_rt.builtins-x86_64-android.a",
178 ],
179 arch: {
180 x86: {
181 ldflags: ["-Wl,--exclude-libs=libgcc_eh.a"],
182 },
183 x86_64: {
184 ldflags: ["-Wl,--exclude-libs=libgcc_eh.a"],
185 },
186 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400187 include_build_directory: false,
Jingwen Chen63930982021-03-24 10:04:33 -0400188}
189`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200190 expectedBazelTargets: []string{`cc_library(
Jingwen Chen63930982021-03-24 10:04:33 -0400191 name = "fake-ld-android",
192 copts = [
193 "-Wall",
194 "-Wextra",
195 "-Wunused",
196 "-Werror",
197 ],
Chris Parsonsd6358772021-05-18 18:35:24 -0400198 implementation_deps = [":libc_headers"],
Jingwen Chen63930982021-03-24 10:04:33 -0400199 linkopts = [
200 "-Wl,--exclude-libs=libgcc.a",
201 "-Wl,--exclude-libs=libgcc_stripped.a",
202 "-Wl,--exclude-libs=libclang_rt.builtins-arm-android.a",
203 "-Wl,--exclude-libs=libclang_rt.builtins-aarch64-android.a",
204 "-Wl,--exclude-libs=libclang_rt.builtins-i686-android.a",
205 "-Wl,--exclude-libs=libclang_rt.builtins-x86_64-android.a",
206 ] + select({
Jingwen Chenb4628eb2021-04-08 14:40:57 +0000207 "//build/bazel/platforms/arch:x86": ["-Wl,--exclude-libs=libgcc_eh.a"],
208 "//build/bazel/platforms/arch:x86_64": ["-Wl,--exclude-libs=libgcc_eh.a"],
Jingwen Chen63930982021-03-24 10:04:33 -0400209 "//conditions:default": [],
210 }),
Jingwen Chen882bcc12021-04-27 05:54:20 +0000211 srcs = ["ld_android.cpp"],
Jingwen Chen63930982021-03-24 10:04:33 -0400212)`},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200213 })
214}
215
216func TestCcLibraryExcludeSrcs(t *testing.T) {
217 runCcLibraryTestCase(t, bp2buildTestCase{
218 description: "cc_library exclude_srcs - trimmed example of //external/arm-optimized-routines:libarm-optimized-routines-math",
219 moduleTypeUnderTest: "cc_library",
220 moduleTypeUnderTestFactory: cc.LibraryFactory,
221 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
222 dir: "external",
223 filesystem: map[string]string{
224 "external/math/cosf.c": "",
225 "external/math/erf.c": "",
226 "external/math/erf_data.c": "",
227 "external/math/erff.c": "",
228 "external/math/erff_data.c": "",
229 "external/Android.bp": `
Jingwen Chen4ecc67d2021-04-27 09:47:02 +0000230cc_library {
231 name: "fake-libarm-optimized-routines-math",
232 exclude_srcs: [
233 // Provided by:
234 // bionic/libm/upstream-freebsd/lib/msun/src/s_erf.c
235 // bionic/libm/upstream-freebsd/lib/msun/src/s_erff.c
236 "math/erf.c",
237 "math/erf_data.c",
238 "math/erff.c",
239 "math/erff_data.c",
240 ],
241 srcs: [
242 "math/*.c",
243 ],
244 // arch-specific settings
245 arch: {
246 arm64: {
247 cflags: [
248 "-DHAVE_FAST_FMA=1",
249 ],
250 },
251 },
252 bazel_module: { bp2build_available: true },
253}
254`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200255 },
256 blueprint: soongCcLibraryPreamble,
257 expectedBazelTargets: []string{`cc_library(
Jingwen Chen4ecc67d2021-04-27 09:47:02 +0000258 name = "fake-libarm-optimized-routines-math",
Liz Kammer35687bc2021-09-10 10:07:07 -0400259 copts = select({
Jingwen Chen4ecc67d2021-04-27 09:47:02 +0000260 "//build/bazel/platforms/arch:arm64": ["-DHAVE_FAST_FMA=1"],
261 "//conditions:default": [],
262 }),
Liz Kammer35687bc2021-09-10 10:07:07 -0400263 local_includes = ["."],
Chris Parsons990c4f42021-05-25 12:10:58 -0400264 srcs_c = ["math/cosf.c"],
Jingwen Chen4ecc67d2021-04-27 09:47:02 +0000265)`},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200266 })
267}
268
269func TestCcLibrarySharedStaticProps(t *testing.T) {
270 runCcLibraryTestCase(t, bp2buildTestCase{
271 description: "cc_library shared/static props",
272 moduleTypeUnderTest: "cc_library",
273 moduleTypeUnderTestFactory: cc.LibraryFactory,
274 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200275 filesystem: map[string]string{
Liz Kammer8337ea42021-09-10 10:06:32 -0400276 "both.cpp": "",
277 "sharedonly.cpp": "",
278 "staticonly.cpp": "",
279 },
280 blueprint: soongCcLibraryPreamble + `
Jingwen Chen53681ef2021-04-29 08:15:13 +0000281cc_library {
282 name: "a",
Chris Parsons08648312021-05-06 16:23:19 -0400283 srcs: ["both.cpp"],
284 cflags: ["bothflag"],
285 shared_libs: ["shared_dep_for_both"],
286 static_libs: ["static_dep_for_both"],
287 whole_static_libs: ["whole_static_lib_for_both"],
288 static: {
289 srcs: ["staticonly.cpp"],
290 cflags: ["staticflag"],
291 shared_libs: ["shared_dep_for_static"],
292 static_libs: ["static_dep_for_static"],
293 whole_static_libs: ["whole_static_lib_for_static"],
294 },
295 shared: {
296 srcs: ["sharedonly.cpp"],
297 cflags: ["sharedflag"],
298 shared_libs: ["shared_dep_for_shared"],
299 static_libs: ["static_dep_for_shared"],
300 whole_static_libs: ["whole_static_lib_for_shared"],
301 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400302 include_build_directory: false,
Jingwen Chen53681ef2021-04-29 08:15:13 +0000303}
304
Liz Kammer8337ea42021-09-10 10:06:32 -0400305cc_library_static {
306 name: "static_dep_for_shared",
307 bazel_module: { bp2build_available: false },
308}
Chris Parsons08648312021-05-06 16:23:19 -0400309
Liz Kammer8337ea42021-09-10 10:06:32 -0400310cc_library_static {
311 name: "static_dep_for_static",
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_both",
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: "whole_static_lib_for_shared",
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_static",
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_both",
332 bazel_module: { bp2build_available: false },
333}
Chris Parsons08648312021-05-06 16:23:19 -0400334
Liz Kammer8337ea42021-09-10 10:06:32 -0400335cc_library {
336 name: "shared_dep_for_shared",
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_static",
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_both",
347 bazel_module: { bp2build_available: false },
348}
Jingwen Chen53681ef2021-04-29 08:15:13 +0000349`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200350 expectedBazelTargets: []string{`cc_library(
Jingwen Chen53681ef2021-04-29 08:15:13 +0000351 name = "a",
Liz Kammer8337ea42021-09-10 10:06:32 -0400352 copts = ["bothflag"],
Chris Parsonsd6358772021-05-18 18:35:24 -0400353 implementation_deps = [":static_dep_for_both"],
Liz Kammer7a210ac2021-09-22 15:52:58 -0400354 implementation_dynamic_deps = [":shared_dep_for_both"],
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000355 shared = {
356 "copts": ["sharedflag"],
Liz Kammer7a210ac2021-09-22 15:52:58 -0400357 "implementation_deps": [":static_dep_for_shared"],
358 "implementation_dynamic_deps": [":shared_dep_for_shared"],
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000359 "srcs": ["sharedonly.cpp"],
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000360 "whole_archive_deps": [":whole_static_lib_for_shared"],
361 },
Chris Parsons08648312021-05-06 16:23:19 -0400362 srcs = ["both.cpp"],
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000363 static = {
364 "copts": ["staticflag"],
Liz Kammer7a210ac2021-09-22 15:52:58 -0400365 "implementation_deps": [":static_dep_for_static"],
366 "implementation_dynamic_deps": [":shared_dep_for_static"],
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000367 "srcs": ["staticonly.cpp"],
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000368 "whole_archive_deps": [":whole_static_lib_for_static"],
369 },
Chris Parsons08648312021-05-06 16:23:19 -0400370 whole_archive_deps = [":whole_static_lib_for_both"],
Jingwen Chen53681ef2021-04-29 08:15:13 +0000371)`},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200372 })
373}
374
Liz Kammer7a210ac2021-09-22 15:52:58 -0400375func TestCcLibraryDeps(t *testing.T) {
376 runCcLibraryTestCase(t, bp2buildTestCase{
377 description: "cc_library shared/static props",
378 moduleTypeUnderTest: "cc_library",
379 moduleTypeUnderTestFactory: cc.LibraryFactory,
380 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
381 filesystem: map[string]string{
382 "both.cpp": "",
383 "sharedonly.cpp": "",
384 "staticonly.cpp": "",
385 },
386 blueprint: soongCcLibraryPreamble + `
387cc_library {
388 name: "a",
389 srcs: ["both.cpp"],
390 cflags: ["bothflag"],
391 shared_libs: ["implementation_shared_dep_for_both", "shared_dep_for_both"],
392 export_shared_lib_headers: ["shared_dep_for_both"],
393 static_libs: ["implementation_static_dep_for_both", "static_dep_for_both"],
394 export_static_lib_headers: ["static_dep_for_both", "whole_static_dep_for_both"],
395 whole_static_libs: ["not_explicitly_exported_whole_static_dep_for_both", "whole_static_dep_for_both"],
396 static: {
397 srcs: ["staticonly.cpp"],
398 cflags: ["staticflag"],
399 shared_libs: ["implementation_shared_dep_for_static", "shared_dep_for_static"],
400 export_shared_lib_headers: ["shared_dep_for_static"],
401 static_libs: ["implementation_static_dep_for_static", "static_dep_for_static"],
402 export_static_lib_headers: ["static_dep_for_static", "whole_static_dep_for_static"],
403 whole_static_libs: ["not_explicitly_exported_whole_static_dep_for_static", "whole_static_dep_for_static"],
404 },
405 shared: {
406 srcs: ["sharedonly.cpp"],
407 cflags: ["sharedflag"],
408 shared_libs: ["implementation_shared_dep_for_shared", "shared_dep_for_shared"],
409 export_shared_lib_headers: ["shared_dep_for_shared"],
410 static_libs: ["implementation_static_dep_for_shared", "static_dep_for_shared"],
411 export_static_lib_headers: ["static_dep_for_shared", "whole_static_dep_for_shared"],
412 whole_static_libs: ["not_explicitly_exported_whole_static_dep_for_shared", "whole_static_dep_for_shared"],
413 },
414 include_build_directory: false,
415}
416` + simpleModuleDoNotConvertBp2build("cc_library_static", "static_dep_for_shared") +
417 simpleModuleDoNotConvertBp2build("cc_library_static", "implementation_static_dep_for_shared") +
418 simpleModuleDoNotConvertBp2build("cc_library_static", "static_dep_for_static") +
419 simpleModuleDoNotConvertBp2build("cc_library_static", "implementation_static_dep_for_static") +
420 simpleModuleDoNotConvertBp2build("cc_library_static", "static_dep_for_both") +
421 simpleModuleDoNotConvertBp2build("cc_library_static", "implementation_static_dep_for_both") +
422 simpleModuleDoNotConvertBp2build("cc_library_static", "whole_static_dep_for_shared") +
423 simpleModuleDoNotConvertBp2build("cc_library_static", "not_explicitly_exported_whole_static_dep_for_shared") +
424 simpleModuleDoNotConvertBp2build("cc_library_static", "whole_static_dep_for_static") +
425 simpleModuleDoNotConvertBp2build("cc_library_static", "not_explicitly_exported_whole_static_dep_for_static") +
426 simpleModuleDoNotConvertBp2build("cc_library_static", "whole_static_dep_for_both") +
427 simpleModuleDoNotConvertBp2build("cc_library_static", "not_explicitly_exported_whole_static_dep_for_both") +
428 simpleModuleDoNotConvertBp2build("cc_library", "shared_dep_for_shared") +
429 simpleModuleDoNotConvertBp2build("cc_library", "implementation_shared_dep_for_shared") +
430 simpleModuleDoNotConvertBp2build("cc_library", "shared_dep_for_static") +
431 simpleModuleDoNotConvertBp2build("cc_library", "implementation_shared_dep_for_static") +
432 simpleModuleDoNotConvertBp2build("cc_library", "shared_dep_for_both") +
433 simpleModuleDoNotConvertBp2build("cc_library", "implementation_shared_dep_for_both"),
434 expectedBazelTargets: []string{`cc_library(
435 name = "a",
436 copts = ["bothflag"],
437 deps = [":static_dep_for_both"],
438 dynamic_deps = [":shared_dep_for_both"],
439 implementation_deps = [":implementation_static_dep_for_both"],
440 implementation_dynamic_deps = [":implementation_shared_dep_for_both"],
441 shared = {
442 "copts": ["sharedflag"],
443 "deps": [":static_dep_for_shared"],
444 "dynamic_deps": [":shared_dep_for_shared"],
445 "implementation_deps": [":implementation_static_dep_for_shared"],
446 "implementation_dynamic_deps": [":implementation_shared_dep_for_shared"],
447 "srcs": ["sharedonly.cpp"],
448 "whole_archive_deps": [
449 ":not_explicitly_exported_whole_static_dep_for_shared",
450 ":whole_static_dep_for_shared",
451 ],
452 },
453 srcs = ["both.cpp"],
454 static = {
455 "copts": ["staticflag"],
456 "deps": [":static_dep_for_static"],
457 "dynamic_deps": [":shared_dep_for_static"],
458 "implementation_deps": [":implementation_static_dep_for_static"],
459 "implementation_dynamic_deps": [":implementation_shared_dep_for_static"],
460 "srcs": ["staticonly.cpp"],
461 "whole_archive_deps": [
462 ":not_explicitly_exported_whole_static_dep_for_static",
463 ":whole_static_dep_for_static",
464 ],
465 },
466 whole_archive_deps = [
467 ":not_explicitly_exported_whole_static_dep_for_both",
468 ":whole_static_dep_for_both",
469 ],
470)`},
471 })
472}
473
Liz Kammer2d7bbe32021-06-10 18:20:06 -0400474func TestCcLibraryWholeStaticLibsAlwaysLink(t *testing.T) {
475 runCcLibraryTestCase(t, bp2buildTestCase{
476 moduleTypeUnderTest: "cc_library",
477 moduleTypeUnderTestFactory: cc.LibraryFactory,
478 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Liz Kammer2d7bbe32021-06-10 18:20:06 -0400479 dir: "foo/bar",
480 filesystem: map[string]string{
481 "foo/bar/Android.bp": `
482cc_library {
483 name: "a",
484 whole_static_libs: ["whole_static_lib_for_both"],
485 static: {
486 whole_static_libs: ["whole_static_lib_for_static"],
487 },
488 shared: {
489 whole_static_libs: ["whole_static_lib_for_shared"],
490 },
491 bazel_module: { bp2build_available: true },
Liz Kammer8337ea42021-09-10 10:06:32 -0400492 include_build_directory: false,
Liz Kammer2d7bbe32021-06-10 18:20:06 -0400493}
494
495cc_prebuilt_library_static { name: "whole_static_lib_for_shared" }
496
497cc_prebuilt_library_static { name: "whole_static_lib_for_static" }
498
499cc_prebuilt_library_static { name: "whole_static_lib_for_both" }
500`,
501 },
502 blueprint: soongCcLibraryPreamble,
503 expectedBazelTargets: []string{`cc_library(
504 name = "a",
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000505 shared = {
506 "whole_archive_deps": [":whole_static_lib_for_shared_alwayslink"],
507 },
508 static = {
509 "whole_archive_deps": [":whole_static_lib_for_static_alwayslink"],
510 },
Liz Kammer2d7bbe32021-06-10 18:20:06 -0400511 whole_archive_deps = [":whole_static_lib_for_both_alwayslink"],
Liz Kammer2d7bbe32021-06-10 18:20:06 -0400512)`},
513 })
514}
515
Jingwen Chenbcf53042021-05-26 04:42:42 +0000516func TestCcLibrarySharedStaticPropsInArch(t *testing.T) {
517 runCcLibraryTestCase(t, bp2buildTestCase{
518 description: "cc_library shared/static props in arch",
519 moduleTypeUnderTest: "cc_library",
520 moduleTypeUnderTestFactory: cc.LibraryFactory,
521 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Jingwen Chenbcf53042021-05-26 04:42:42 +0000522 dir: "foo/bar",
523 filesystem: map[string]string{
524 "foo/bar/arm.cpp": "",
525 "foo/bar/x86.cpp": "",
526 "foo/bar/sharedonly.cpp": "",
527 "foo/bar/staticonly.cpp": "",
528 "foo/bar/Android.bp": `
529cc_library {
530 name: "a",
531 arch: {
532 arm: {
533 shared: {
534 srcs: ["arm_shared.cpp"],
535 cflags: ["-DARM_SHARED"],
536 static_libs: ["arm_static_dep_for_shared"],
537 whole_static_libs: ["arm_whole_static_dep_for_shared"],
538 shared_libs: ["arm_shared_dep_for_shared"],
539 },
540 },
541 x86: {
542 static: {
543 srcs: ["x86_static.cpp"],
544 cflags: ["-DX86_STATIC"],
545 static_libs: ["x86_dep_for_static"],
546 },
547 },
548 },
549 target: {
550 android: {
551 shared: {
552 srcs: ["android_shared.cpp"],
553 cflags: ["-DANDROID_SHARED"],
554 static_libs: ["android_dep_for_shared"],
555 },
556 },
557 android_arm: {
558 shared: {
559 cflags: ["-DANDROID_ARM_SHARED"],
560 },
561 },
562 },
563 srcs: ["both.cpp"],
564 cflags: ["bothflag"],
565 static_libs: ["static_dep_for_both"],
566 static: {
567 srcs: ["staticonly.cpp"],
568 cflags: ["staticflag"],
569 static_libs: ["static_dep_for_static"],
570 },
571 shared: {
572 srcs: ["sharedonly.cpp"],
573 cflags: ["sharedflag"],
574 static_libs: ["static_dep_for_shared"],
575 },
576 bazel_module: { bp2build_available: true },
577}
578
579cc_library_static { name: "static_dep_for_shared" }
580cc_library_static { name: "static_dep_for_static" }
581cc_library_static { name: "static_dep_for_both" }
582
583cc_library_static { name: "arm_static_dep_for_shared" }
584cc_library_static { name: "arm_whole_static_dep_for_shared" }
585cc_library_static { name: "arm_shared_dep_for_shared" }
586
587cc_library_static { name: "x86_dep_for_static" }
588
589cc_library_static { name: "android_dep_for_shared" }
590`,
591 },
592 blueprint: soongCcLibraryPreamble,
593 expectedBazelTargets: []string{`cc_library(
594 name = "a",
Liz Kammer35687bc2021-09-10 10:07:07 -0400595 copts = ["bothflag"],
Jingwen Chenbcf53042021-05-26 04:42:42 +0000596 implementation_deps = [":static_dep_for_both"],
Liz Kammer35687bc2021-09-10 10:07:07 -0400597 local_includes = ["."],
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000598 shared = {
599 "copts": ["sharedflag"] + select({
600 "//build/bazel/platforms/arch:arm": ["-DARM_SHARED"],
601 "//conditions:default": [],
602 }) + select({
603 "//build/bazel/platforms/os:android": ["-DANDROID_SHARED"],
604 "//conditions:default": [],
605 }) + select({
606 "//build/bazel/platforms/os_arch:android_arm": ["-DANDROID_ARM_SHARED"],
607 "//conditions:default": [],
608 }),
Liz Kammer7a210ac2021-09-22 15:52:58 -0400609 "implementation_deps": [":static_dep_for_shared"] + select({
610 "//build/bazel/platforms/arch:arm": [":arm_static_dep_for_shared"],
611 "//conditions:default": [],
612 }) + select({
613 "//build/bazel/platforms/os:android": [":android_dep_for_shared"],
614 "//conditions:default": [],
615 }),
616 "implementation_dynamic_deps": select({
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000617 "//build/bazel/platforms/arch:arm": [":arm_shared_dep_for_shared"],
618 "//conditions:default": [],
619 }),
620 "srcs": ["sharedonly.cpp"] + select({
621 "//build/bazel/platforms/arch:arm": ["arm_shared.cpp"],
622 "//conditions:default": [],
623 }) + select({
624 "//build/bazel/platforms/os:android": ["android_shared.cpp"],
625 "//conditions:default": [],
626 }),
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000627 "whole_archive_deps": select({
628 "//build/bazel/platforms/arch:arm": [":arm_whole_static_dep_for_shared"],
629 "//conditions:default": [],
630 }),
631 },
Jingwen Chenbcf53042021-05-26 04:42:42 +0000632 srcs = ["both.cpp"],
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000633 static = {
634 "copts": ["staticflag"] + select({
635 "//build/bazel/platforms/arch:x86": ["-DX86_STATIC"],
636 "//conditions:default": [],
637 }),
Liz Kammer7a210ac2021-09-22 15:52:58 -0400638 "implementation_deps": [":static_dep_for_static"] + select({
639 "//build/bazel/platforms/arch:x86": [":x86_dep_for_static"],
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000640 "//conditions:default": [],
641 }),
Liz Kammer7a210ac2021-09-22 15:52:58 -0400642 "srcs": ["staticonly.cpp"] + select({
643 "//build/bazel/platforms/arch:x86": ["x86_static.cpp"],
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000644 "//conditions:default": [],
645 }),
646 },
Jingwen Chenbcf53042021-05-26 04:42:42 +0000647)`},
648 })
649}
650
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000651func TestCcLibrarySharedStaticPropsWithMixedSources(t *testing.T) {
652 runCcLibraryTestCase(t, bp2buildTestCase{
653 description: "cc_library shared/static props with c/cpp/s mixed sources",
654 moduleTypeUnderTest: "cc_library",
655 moduleTypeUnderTestFactory: cc.LibraryFactory,
656 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000657 dir: "foo/bar",
658 filesystem: map[string]string{
659 "foo/bar/both_source.cpp": "",
660 "foo/bar/both_source.cc": "",
661 "foo/bar/both_source.c": "",
662 "foo/bar/both_source.s": "",
663 "foo/bar/both_source.S": "",
664 "foo/bar/shared_source.cpp": "",
665 "foo/bar/shared_source.cc": "",
666 "foo/bar/shared_source.c": "",
667 "foo/bar/shared_source.s": "",
668 "foo/bar/shared_source.S": "",
669 "foo/bar/static_source.cpp": "",
670 "foo/bar/static_source.cc": "",
671 "foo/bar/static_source.c": "",
672 "foo/bar/static_source.s": "",
673 "foo/bar/static_source.S": "",
674 "foo/bar/Android.bp": `
675cc_library {
676 name: "a",
677 srcs: [
Liz Kammerd366c902021-06-03 13:43:01 -0400678 "both_source.cpp",
679 "both_source.cc",
680 "both_source.c",
681 "both_source.s",
682 "both_source.S",
Liz Kammer57e2e7a2021-09-20 12:55:02 -0400683 ":both_filegroup",
Liz Kammerd366c902021-06-03 13:43:01 -0400684 ],
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000685 static: {
Liz Kammer8337ea42021-09-10 10:06:32 -0400686 srcs: [
687 "static_source.cpp",
688 "static_source.cc",
689 "static_source.c",
690 "static_source.s",
691 "static_source.S",
692 ":static_filegroup",
693 ],
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000694 },
695 shared: {
Liz Kammer8337ea42021-09-10 10:06:32 -0400696 srcs: [
697 "shared_source.cpp",
698 "shared_source.cc",
699 "shared_source.c",
700 "shared_source.s",
701 "shared_source.S",
702 ":shared_filegroup",
703 ],
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000704 },
705 bazel_module: { bp2build_available: true },
706}
707
708filegroup {
709 name: "both_filegroup",
710 srcs: [
711 // Not relevant, handled by filegroup macro
Liz Kammerd366c902021-06-03 13:43:01 -0400712 ],
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000713}
714
715filegroup {
716 name: "shared_filegroup",
717 srcs: [
718 // Not relevant, handled by filegroup macro
Liz Kammerd366c902021-06-03 13:43:01 -0400719 ],
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000720}
721
722filegroup {
723 name: "static_filegroup",
724 srcs: [
725 // Not relevant, handled by filegroup macro
Liz Kammerd366c902021-06-03 13:43:01 -0400726 ],
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000727}
728`,
729 },
730 blueprint: soongCcLibraryPreamble,
731 expectedBazelTargets: []string{`cc_library(
732 name = "a",
Liz Kammer35687bc2021-09-10 10:07:07 -0400733 local_includes = ["."],
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000734 shared = {
735 "srcs": [
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000736 "shared_source.cpp",
Liz Kammer57e2e7a2021-09-20 12:55:02 -0400737 "shared_source.cc",
738 ":shared_filegroup_cpp_srcs",
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000739 ],
740 "srcs_as": [
741 "shared_source.s",
742 "shared_source.S",
743 ":shared_filegroup_as_srcs",
744 ],
745 "srcs_c": [
746 "shared_source.c",
747 ":shared_filegroup_c_srcs",
748 ],
749 },
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000750 srcs = [
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000751 "both_source.cpp",
Liz Kammer57e2e7a2021-09-20 12:55:02 -0400752 "both_source.cc",
753 ":both_filegroup_cpp_srcs",
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000754 ],
755 srcs_as = [
756 "both_source.s",
757 "both_source.S",
758 ":both_filegroup_as_srcs",
759 ],
760 srcs_c = [
761 "both_source.c",
762 ":both_filegroup_c_srcs",
763 ],
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000764 static = {
765 "srcs": [
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000766 "static_source.cpp",
Liz Kammer57e2e7a2021-09-20 12:55:02 -0400767 "static_source.cc",
768 ":static_filegroup_cpp_srcs",
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000769 ],
770 "srcs_as": [
771 "static_source.s",
772 "static_source.S",
773 ":static_filegroup_as_srcs",
774 ],
775 "srcs_c": [
776 "static_source.c",
777 ":static_filegroup_c_srcs",
778 ],
779 },
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000780)`},
781 })
782}
783
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200784func TestCcLibraryNonConfiguredVersionScript(t *testing.T) {
785 runCcLibraryTestCase(t, bp2buildTestCase{
786 description: "cc_library non-configured version script",
787 moduleTypeUnderTest: "cc_library",
788 moduleTypeUnderTestFactory: cc.LibraryFactory,
789 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200790 dir: "foo/bar",
791 filesystem: map[string]string{
792 "foo/bar/Android.bp": `
Lukacs T. Berki1353e592021-04-30 15:35:09 +0200793cc_library {
794 name: "a",
795 srcs: ["a.cpp"],
796 version_script: "v.map",
797 bazel_module: { bp2build_available: true },
Liz Kammer8337ea42021-09-10 10:06:32 -0400798 include_build_directory: false,
Lukacs T. Berki1353e592021-04-30 15:35:09 +0200799}
800`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200801 },
802 blueprint: soongCcLibraryPreamble,
803 expectedBazelTargets: []string{`cc_library(
Lukacs T. Berki1353e592021-04-30 15:35:09 +0200804 name = "a",
Lukacs T. Berki1353e592021-04-30 15:35:09 +0200805 srcs = ["a.cpp"],
806 version_script = "v.map",
807)`},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200808 })
809}
810
811func TestCcLibraryConfiguredVersionScript(t *testing.T) {
812 runCcLibraryTestCase(t, bp2buildTestCase{
813 description: "cc_library configured version script",
814 moduleTypeUnderTest: "cc_library",
815 moduleTypeUnderTestFactory: cc.LibraryFactory,
816 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200817 dir: "foo/bar",
818 filesystem: map[string]string{
819 "foo/bar/Android.bp": `
Liz Kammer8337ea42021-09-10 10:06:32 -0400820cc_library {
821 name: "a",
822 srcs: ["a.cpp"],
823 arch: {
824 arm: {
825 version_script: "arm.map",
826 },
827 arm64: {
828 version_script: "arm64.map",
829 },
830 },
Lukacs T. Berki56bb0832021-05-12 12:36:45 +0200831
Liz Kammer8337ea42021-09-10 10:06:32 -0400832 bazel_module: { bp2build_available: true },
833 include_build_directory: false,
834}
Liz Kammerd366c902021-06-03 13:43:01 -0400835 `,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200836 },
837 blueprint: soongCcLibraryPreamble,
838 expectedBazelTargets: []string{`cc_library(
Lukacs T. Berki56bb0832021-05-12 12:36:45 +0200839 name = "a",
Lukacs T. Berki56bb0832021-05-12 12:36:45 +0200840 srcs = ["a.cpp"],
841 version_script = select({
842 "//build/bazel/platforms/arch:arm": "arm.map",
843 "//build/bazel/platforms/arch:arm64": "arm64.map",
844 "//conditions:default": None,
845 }),
846)`},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200847 })
848}
849
850func TestCcLibrarySharedLibs(t *testing.T) {
851 runCcLibraryTestCase(t, bp2buildTestCase{
852 description: "cc_library shared_libs",
853 moduleTypeUnderTest: "cc_library",
854 moduleTypeUnderTestFactory: cc.LibraryFactory,
855 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Liz Kammer8337ea42021-09-10 10:06:32 -0400856 blueprint: soongCcLibraryPreamble + `
Rupert Shuttleworthc50fa8d2021-05-06 02:40:33 -0400857cc_library {
858 name: "mylib",
Liz Kammer8337ea42021-09-10 10:06:32 -0400859 bazel_module: { bp2build_available: false },
Rupert Shuttleworthc50fa8d2021-05-06 02:40:33 -0400860}
861
862cc_library {
863 name: "a",
864 shared_libs: ["mylib",],
Liz Kammer8337ea42021-09-10 10:06:32 -0400865 include_build_directory: false,
Rupert Shuttleworthc50fa8d2021-05-06 02:40:33 -0400866}
867`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200868 expectedBazelTargets: []string{`cc_library(
Rupert Shuttleworthc50fa8d2021-05-06 02:40:33 -0400869 name = "a",
Liz Kammer7a210ac2021-09-22 15:52:58 -0400870 implementation_dynamic_deps = [":mylib"],
Rupert Shuttleworthc50fa8d2021-05-06 02:40:33 -0400871)`},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200872 })
873}
874
875func TestCcLibraryPackRelocations(t *testing.T) {
876 runCcLibraryTestCase(t, bp2buildTestCase{
877 description: "cc_library pack_relocations test",
878 moduleTypeUnderTest: "cc_library",
879 moduleTypeUnderTestFactory: cc.LibraryFactory,
880 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Liz Kammer8337ea42021-09-10 10:06:32 -0400881 blueprint: soongCcLibraryPreamble + `
Rupert Shuttleworth143be942021-05-09 23:55:51 -0400882cc_library {
883 name: "a",
884 srcs: ["a.cpp"],
885 pack_relocations: false,
Liz Kammer8337ea42021-09-10 10:06:32 -0400886 include_build_directory: false,
Rupert Shuttleworth143be942021-05-09 23:55:51 -0400887}
888
889cc_library {
890 name: "b",
891 srcs: ["b.cpp"],
892 arch: {
893 x86_64: {
Liz Kammer8337ea42021-09-10 10:06:32 -0400894 pack_relocations: false,
895 },
Rupert Shuttleworth143be942021-05-09 23:55:51 -0400896 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400897 include_build_directory: false,
Rupert Shuttleworth143be942021-05-09 23:55:51 -0400898}
899
900cc_library {
901 name: "c",
902 srcs: ["c.cpp"],
903 target: {
904 darwin: {
Liz Kammer8337ea42021-09-10 10:06:32 -0400905 pack_relocations: false,
906 },
Rupert Shuttleworth143be942021-05-09 23:55:51 -0400907 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400908 include_build_directory: false,
Rupert Shuttleworth143be942021-05-09 23:55:51 -0400909}`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200910 expectedBazelTargets: []string{`cc_library(
Rupert Shuttleworth143be942021-05-09 23:55:51 -0400911 name = "a",
Rupert Shuttleworth143be942021-05-09 23:55:51 -0400912 linkopts = ["-Wl,--pack-dyn-relocs=none"],
913 srcs = ["a.cpp"],
914)`, `cc_library(
915 name = "b",
Rupert Shuttleworth143be942021-05-09 23:55:51 -0400916 linkopts = select({
917 "//build/bazel/platforms/arch:x86_64": ["-Wl,--pack-dyn-relocs=none"],
918 "//conditions:default": [],
919 }),
920 srcs = ["b.cpp"],
921)`, `cc_library(
922 name = "c",
Rupert Shuttleworth143be942021-05-09 23:55:51 -0400923 linkopts = select({
924 "//build/bazel/platforms/os:darwin": ["-Wl,--pack-dyn-relocs=none"],
925 "//conditions:default": [],
926 }),
927 srcs = ["c.cpp"],
928)`},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200929 })
930}
931
932func TestCcLibrarySpacesInCopts(t *testing.T) {
933 runCcLibraryTestCase(t, bp2buildTestCase{
934 description: "cc_library spaces in copts",
935 moduleTypeUnderTest: "cc_library",
936 moduleTypeUnderTestFactory: cc.LibraryFactory,
937 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Liz Kammer8337ea42021-09-10 10:06:32 -0400938 blueprint: soongCcLibraryPreamble + `
Jingwen Chen3950cd62021-05-12 04:33:00 +0000939cc_library {
940 name: "a",
941 cflags: ["-include header.h",],
Liz Kammer8337ea42021-09-10 10:06:32 -0400942 include_build_directory: false,
Jingwen Chen3950cd62021-05-12 04:33:00 +0000943}
944`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200945 expectedBazelTargets: []string{`cc_library(
Jingwen Chen3950cd62021-05-12 04:33:00 +0000946 name = "a",
947 copts = [
948 "-include",
949 "header.h",
Jingwen Chen3950cd62021-05-12 04:33:00 +0000950 ],
951)`},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200952 })
953}
954
955func TestCcLibraryCppFlagsGoesIntoCopts(t *testing.T) {
956 runCcLibraryTestCase(t, bp2buildTestCase{
Chris Parsons990c4f42021-05-25 12:10:58 -0400957 description: "cc_library cppflags usage",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200958 moduleTypeUnderTest: "cc_library",
959 moduleTypeUnderTestFactory: cc.LibraryFactory,
960 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Liz Kammer8337ea42021-09-10 10:06:32 -0400961 blueprint: soongCcLibraryPreamble + `cc_library {
Jingwen Chen75be1ca2021-05-12 05:04:58 +0000962 name: "a",
963 srcs: ["a.cpp"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400964 cflags: ["-Wall"],
Jingwen Chen75be1ca2021-05-12 05:04:58 +0000965 cppflags: [
966 "-fsigned-char",
967 "-pedantic",
Liz Kammer8337ea42021-09-10 10:06:32 -0400968 ],
Jingwen Chen75be1ca2021-05-12 05:04:58 +0000969 arch: {
970 arm64: {
971 cppflags: ["-DARM64=1"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400972 },
Liz Kammerd366c902021-06-03 13:43:01 -0400973 },
Jingwen Chen75be1ca2021-05-12 05:04:58 +0000974 target: {
975 android: {
976 cppflags: ["-DANDROID=1"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400977 },
Liz Kammerd366c902021-06-03 13:43:01 -0400978 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400979 include_build_directory: false,
Jingwen Chen75be1ca2021-05-12 05:04:58 +0000980}
981`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200982 expectedBazelTargets: []string{`cc_library(
Jingwen Chen75be1ca2021-05-12 05:04:58 +0000983 name = "a",
Liz Kammer8337ea42021-09-10 10:06:32 -0400984 copts = ["-Wall"],
Chris Parsons990c4f42021-05-25 12:10:58 -0400985 cppflags = [
986 "-fsigned-char",
987 "-pedantic",
Jingwen Chen75be1ca2021-05-12 05:04:58 +0000988 ] + select({
989 "//build/bazel/platforms/arch:arm64": ["-DARM64=1"],
990 "//conditions:default": [],
991 }) + select({
992 "//build/bazel/platforms/os:android": ["-DANDROID=1"],
993 "//conditions:default": [],
994 }),
995 srcs = ["a.cpp"],
996)`},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200997 })
Jingwen Chen63930982021-03-24 10:04:33 -0400998}
Rupert Shuttleworth22cd2eb2021-05-27 02:15:54 -0400999
1000func TestCcLibraryLabelAttributeGetTargetProperties(t *testing.T) {
1001 runCcLibraryTestCase(t, bp2buildTestCase{
1002 description: "cc_library GetTargetProperties on a LabelAttribute",
1003 moduleTypeUnderTest: "cc_library",
1004 moduleTypeUnderTestFactory: cc.LibraryFactory,
1005 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Liz Kammer8337ea42021-09-10 10:06:32 -04001006 blueprint: soongCcLibraryPreamble + `
1007cc_library {
1008 name: "a",
1009 srcs: ["a.cpp"],
1010 target: {
1011 android_arm: {
1012 version_script: "android_arm.map",
1013 },
1014 linux_bionic_arm64: {
1015 version_script: "linux_bionic_arm64.map",
1016 },
1017 },
1018 include_build_directory: false,
1019}
Liz Kammerd366c902021-06-03 13:43:01 -04001020 `,
Rupert Shuttleworth22cd2eb2021-05-27 02:15:54 -04001021 expectedBazelTargets: []string{`cc_library(
1022 name = "a",
Rupert Shuttleworth22cd2eb2021-05-27 02:15:54 -04001023 srcs = ["a.cpp"],
1024 version_script = select({
Rupert Shuttleworthffd45822021-05-14 03:02:34 -04001025 "//build/bazel/platforms/os_arch:android_arm": "android_arm.map",
1026 "//build/bazel/platforms/os_arch:linux_bionic_arm64": "linux_bionic_arm64.map",
Rupert Shuttleworth22cd2eb2021-05-27 02:15:54 -04001027 "//conditions:default": None,
1028 }),
1029)`},
1030 })
1031}
Liz Kammer47535c52021-06-02 16:02:22 -04001032
1033func TestCcLibraryExcludeLibs(t *testing.T) {
1034 runCcLibraryTestCase(t, bp2buildTestCase{
1035 moduleTypeUnderTest: "cc_library",
1036 moduleTypeUnderTestFactory: cc.LibraryFactory,
1037 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Liz Kammer47535c52021-06-02 16:02:22 -04001038 filesystem: map[string]string{},
1039 blueprint: soongCcLibraryStaticPreamble + `
1040cc_library {
1041 name: "foo_static",
1042 srcs: ["common.c"],
1043 whole_static_libs: [
1044 "arm_whole_static_lib_excludes",
1045 "malloc_not_svelte_whole_static_lib_excludes"
1046 ],
1047 static_libs: [
1048 "arm_static_lib_excludes",
1049 "malloc_not_svelte_static_lib_excludes"
1050 ],
1051 shared_libs: [
1052 "arm_shared_lib_excludes",
1053 ],
1054 arch: {
1055 arm: {
1056 exclude_shared_libs: [
1057 "arm_shared_lib_excludes",
1058 ],
1059 exclude_static_libs: [
1060 "arm_static_lib_excludes",
1061 "arm_whole_static_lib_excludes",
1062 ],
1063 },
1064 },
1065 product_variables: {
1066 malloc_not_svelte: {
1067 shared_libs: ["malloc_not_svelte_shared_lib"],
1068 whole_static_libs: ["malloc_not_svelte_whole_static_lib"],
1069 exclude_static_libs: [
1070 "malloc_not_svelte_static_lib_excludes",
1071 "malloc_not_svelte_whole_static_lib_excludes",
1072 ],
1073 },
1074 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001075 include_build_directory: false,
Liz Kammer47535c52021-06-02 16:02:22 -04001076}
1077
1078cc_library {
1079 name: "arm_whole_static_lib_excludes",
1080 bazel_module: { bp2build_available: false },
1081}
1082
1083cc_library {
1084 name: "malloc_not_svelte_whole_static_lib",
1085 bazel_module: { bp2build_available: false },
1086}
1087
1088cc_library {
1089 name: "malloc_not_svelte_whole_static_lib_excludes",
1090 bazel_module: { bp2build_available: false },
1091}
1092
1093cc_library {
1094 name: "arm_static_lib_excludes",
1095 bazel_module: { bp2build_available: false },
1096}
1097
1098cc_library {
1099 name: "malloc_not_svelte_static_lib_excludes",
1100 bazel_module: { bp2build_available: false },
1101}
1102
1103cc_library {
1104 name: "arm_shared_lib_excludes",
1105 bazel_module: { bp2build_available: false },
1106}
1107
1108cc_library {
1109 name: "malloc_not_svelte_shared_lib",
1110 bazel_module: { bp2build_available: false },
1111}
1112`,
1113 expectedBazelTargets: []string{
1114 `cc_library(
1115 name = "foo_static",
Liz Kammer47535c52021-06-02 16:02:22 -04001116 implementation_deps = select({
1117 "//build/bazel/platforms/arch:arm": [],
Chris Parsons953b3562021-09-20 15:14:39 -04001118 "//conditions:default": [":arm_static_lib_excludes_bp2build_cc_library_static"],
Liz Kammer47535c52021-06-02 16:02:22 -04001119 }) + select({
1120 "//build/bazel/product_variables:malloc_not_svelte": [],
Chris Parsons953b3562021-09-20 15:14:39 -04001121 "//conditions:default": [":malloc_not_svelte_static_lib_excludes_bp2build_cc_library_static"],
Liz Kammer47535c52021-06-02 16:02:22 -04001122 }),
Liz Kammer7a210ac2021-09-22 15:52:58 -04001123 implementation_dynamic_deps = select({
1124 "//build/bazel/platforms/arch:arm": [],
1125 "//conditions:default": [":arm_shared_lib_excludes"],
1126 }) + select({
1127 "//build/bazel/product_variables:malloc_not_svelte": [":malloc_not_svelte_shared_lib"],
1128 "//conditions:default": [],
1129 }),
Liz Kammer47535c52021-06-02 16:02:22 -04001130 srcs_c = ["common.c"],
1131 whole_archive_deps = select({
1132 "//build/bazel/platforms/arch:arm": [],
Chris Parsons953b3562021-09-20 15:14:39 -04001133 "//conditions:default": [":arm_whole_static_lib_excludes_bp2build_cc_library_static"],
Liz Kammer47535c52021-06-02 16:02:22 -04001134 }) + select({
Chris Parsons953b3562021-09-20 15:14:39 -04001135 "//build/bazel/product_variables:malloc_not_svelte": [":malloc_not_svelte_whole_static_lib_bp2build_cc_library_static"],
1136 "//conditions:default": [":malloc_not_svelte_whole_static_lib_excludes_bp2build_cc_library_static"],
Liz Kammer47535c52021-06-02 16:02:22 -04001137 }),
1138)`,
1139 },
1140 })
1141}
Liz Kammerd366c902021-06-03 13:43:01 -04001142
1143func TestCCLibraryNoCrtTrue(t *testing.T) {
1144 runCcLibraryTestCase(t, bp2buildTestCase{
1145 description: "cc_library - simple example",
1146 moduleTypeUnderTest: "cc_library",
1147 moduleTypeUnderTestFactory: cc.LibraryFactory,
1148 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1149 filesystem: map[string]string{
1150 "impl.cpp": "",
1151 },
1152 blueprint: soongCcLibraryPreamble + `
1153cc_library_headers { name: "some-headers" }
1154cc_library {
1155 name: "foo-lib",
1156 srcs: ["impl.cpp"],
1157 no_libcrt: true,
Liz Kammer8337ea42021-09-10 10:06:32 -04001158 include_build_directory: false,
Liz Kammerd366c902021-06-03 13:43:01 -04001159}
1160`,
1161 expectedBazelTargets: []string{`cc_library(
1162 name = "foo-lib",
Liz Kammerd366c902021-06-03 13:43:01 -04001163 srcs = ["impl.cpp"],
1164 use_libcrt = False,
1165)`}})
1166}
1167
1168func TestCCLibraryNoCrtFalse(t *testing.T) {
1169 runCcLibraryTestCase(t, bp2buildTestCase{
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_headers { name: "some-headers" }
1178cc_library {
1179 name: "foo-lib",
1180 srcs: ["impl.cpp"],
1181 no_libcrt: false,
Liz Kammer8337ea42021-09-10 10:06:32 -04001182 include_build_directory: false,
Liz Kammerd366c902021-06-03 13:43:01 -04001183}
1184`,
1185 expectedBazelTargets: []string{`cc_library(
1186 name = "foo-lib",
Liz Kammerd366c902021-06-03 13:43:01 -04001187 srcs = ["impl.cpp"],
1188 use_libcrt = True,
1189)`}})
1190}
1191
1192func TestCCLibraryNoCrtArchVariant(t *testing.T) {
1193 runCcLibraryTestCase(t, bp2buildTestCase{
1194 moduleTypeUnderTest: "cc_library",
1195 moduleTypeUnderTestFactory: cc.LibraryFactory,
1196 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1197 filesystem: map[string]string{
1198 "impl.cpp": "",
1199 },
1200 blueprint: soongCcLibraryPreamble + `
Liz Kammerd366c902021-06-03 13:43:01 -04001201cc_library {
1202 name: "foo-lib",
1203 srcs: ["impl.cpp"],
1204 arch: {
1205 arm: {
1206 no_libcrt: true,
1207 },
1208 x86: {
1209 no_libcrt: true,
1210 },
1211 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001212 include_build_directory: false,
Liz Kammerd366c902021-06-03 13:43:01 -04001213}
1214`,
1215 expectedBazelTargets: []string{`cc_library(
1216 name = "foo-lib",
Liz Kammerd366c902021-06-03 13:43:01 -04001217 srcs = ["impl.cpp"],
1218 use_libcrt = select({
1219 "//build/bazel/platforms/arch:arm": False,
1220 "//build/bazel/platforms/arch:x86": False,
1221 "//conditions:default": None,
1222 }),
1223)`}})
1224}
1225
1226func TestCCLibraryNoCrtArchVariantWithDefault(t *testing.T) {
1227 runCcLibraryTestCase(t, bp2buildTestCase{
1228 moduleTypeUnderTest: "cc_library",
1229 moduleTypeUnderTestFactory: cc.LibraryFactory,
1230 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1231 filesystem: map[string]string{
1232 "impl.cpp": "",
1233 },
1234 blueprint: soongCcLibraryPreamble + `
Liz Kammerd366c902021-06-03 13:43:01 -04001235cc_library {
1236 name: "foo-lib",
1237 srcs: ["impl.cpp"],
1238 no_libcrt: false,
1239 arch: {
1240 arm: {
1241 no_libcrt: true,
1242 },
1243 x86: {
1244 no_libcrt: true,
1245 },
1246 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001247 include_build_directory: false,
Liz Kammerd366c902021-06-03 13:43:01 -04001248}
1249`,
1250 expectedBazelTargets: []string{`cc_library(
1251 name = "foo-lib",
Liz Kammerd366c902021-06-03 13:43:01 -04001252 srcs = ["impl.cpp"],
1253 use_libcrt = select({
1254 "//build/bazel/platforms/arch:arm": False,
1255 "//build/bazel/platforms/arch:x86": False,
1256 "//conditions:default": True,
1257 }),
1258)`}})
1259}
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001260
1261func TestCcLibraryStrip(t *testing.T) {
1262 runCcLibraryTestCase(t, bp2buildTestCase{
1263 description: "cc_library strip args",
1264 moduleTypeUnderTest: "cc_library",
1265 moduleTypeUnderTestFactory: cc.LibraryFactory,
1266 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Liz Kammer8337ea42021-09-10 10:06:32 -04001267 blueprint: soongCcLibraryPreamble + `
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001268cc_library {
1269 name: "nothing",
Liz Kammer8337ea42021-09-10 10:06:32 -04001270 include_build_directory: false,
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001271}
1272cc_library {
1273 name: "keep_symbols",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001274 strip: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001275 keep_symbols: true,
1276 },
1277 include_build_directory: false,
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001278}
1279cc_library {
1280 name: "keep_symbols_and_debug_frame",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001281 strip: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001282 keep_symbols_and_debug_frame: true,
1283 },
1284 include_build_directory: false,
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001285}
1286cc_library {
1287 name: "none",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001288 strip: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001289 none: true,
1290 },
1291 include_build_directory: false,
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001292}
1293cc_library {
1294 name: "keep_symbols_list",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001295 strip: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001296 keep_symbols_list: ["symbol"],
1297 },
1298 include_build_directory: false,
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001299}
1300cc_library {
1301 name: "all",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001302 strip: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001303 all: true,
1304 },
1305 include_build_directory: false,
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001306}
1307`,
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001308 expectedBazelTargets: []string{`cc_library(
1309 name = "all",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001310 strip = {
1311 "all": True,
1312 },
1313)`, `cc_library(
1314 name = "keep_symbols",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001315 strip = {
1316 "keep_symbols": True,
1317 },
1318)`, `cc_library(
1319 name = "keep_symbols_and_debug_frame",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001320 strip = {
1321 "keep_symbols_and_debug_frame": True,
1322 },
1323)`, `cc_library(
1324 name = "keep_symbols_list",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001325 strip = {
1326 "keep_symbols_list": ["symbol"],
1327 },
1328)`, `cc_library(
1329 name = "none",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001330 strip = {
1331 "none": True,
1332 },
1333)`, `cc_library(
1334 name = "nothing",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001335)`},
1336 })
1337}
1338
1339func TestCcLibraryStripWithArch(t *testing.T) {
1340 runCcLibraryTestCase(t, bp2buildTestCase{
1341 description: "cc_library strip args",
1342 moduleTypeUnderTest: "cc_library",
1343 moduleTypeUnderTestFactory: cc.LibraryFactory,
1344 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Liz Kammer8337ea42021-09-10 10:06:32 -04001345 blueprint: soongCcLibraryPreamble + `
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001346cc_library {
1347 name: "multi-arch",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001348 target: {
1349 darwin: {
1350 strip: {
1351 keep_symbols_list: ["foo", "bar"]
1352 }
1353 },
1354 },
1355 arch: {
1356 arm: {
1357 strip: {
1358 keep_symbols_and_debug_frame: true,
1359 },
1360 },
1361 arm64: {
1362 strip: {
1363 keep_symbols: true,
1364 },
1365 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001366 },
1367 include_build_directory: false,
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001368}
1369`,
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001370 expectedBazelTargets: []string{`cc_library(
1371 name = "multi-arch",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001372 strip = {
1373 "keep_symbols": select({
1374 "//build/bazel/platforms/arch:arm64": True,
1375 "//conditions:default": None,
1376 }),
1377 "keep_symbols_and_debug_frame": select({
1378 "//build/bazel/platforms/arch:arm": True,
1379 "//conditions:default": None,
1380 }),
1381 "keep_symbols_list": select({
1382 "//build/bazel/platforms/os:darwin": [
1383 "foo",
1384 "bar",
1385 ],
1386 "//conditions:default": [],
1387 }),
1388 },
1389)`},
1390 })
1391}
Chris Parsons51f8c392021-08-03 21:01:05 -04001392
1393func TestCcLibrary_SystemSharedLibsRootEmpty(t *testing.T) {
1394 runCcLibraryTestCase(t, bp2buildTestCase{
1395 description: "cc_library system_shared_libs empty at root",
1396 moduleTypeUnderTest: "cc_library",
1397 moduleTypeUnderTestFactory: cc.LibraryFactory,
1398 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1399 blueprint: soongCcLibraryPreamble + `
1400cc_library {
1401 name: "root_empty",
Liz Kammer8337ea42021-09-10 10:06:32 -04001402 system_shared_libs: [],
1403 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001404}
1405`,
1406 expectedBazelTargets: []string{`cc_library(
1407 name = "root_empty",
Chris Parsons51f8c392021-08-03 21:01:05 -04001408 system_dynamic_deps = [],
1409)`},
1410 })
1411}
1412
1413func TestCcLibrary_SystemSharedLibsStaticEmpty(t *testing.T) {
1414 runCcLibraryTestCase(t, bp2buildTestCase{
1415 description: "cc_library system_shared_libs empty for static variant",
1416 moduleTypeUnderTest: "cc_library",
1417 moduleTypeUnderTestFactory: cc.LibraryFactory,
1418 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1419 blueprint: soongCcLibraryPreamble + `
1420cc_library {
1421 name: "static_empty",
1422 static: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001423 system_shared_libs: [],
1424 },
1425 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001426}
1427`,
1428 expectedBazelTargets: []string{`cc_library(
1429 name = "static_empty",
Chris Parsons51f8c392021-08-03 21:01:05 -04001430 static = {
1431 "system_dynamic_deps": [],
1432 },
1433)`},
1434 })
1435}
1436
1437func TestCcLibrary_SystemSharedLibsSharedEmpty(t *testing.T) {
1438 runCcLibraryTestCase(t, bp2buildTestCase{
1439 description: "cc_library system_shared_libs empty for shared variant",
1440 moduleTypeUnderTest: "cc_library",
1441 moduleTypeUnderTestFactory: cc.LibraryFactory,
1442 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1443 blueprint: soongCcLibraryPreamble + `
1444cc_library {
1445 name: "shared_empty",
1446 shared: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001447 system_shared_libs: [],
1448 },
1449 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001450}
1451`,
1452 expectedBazelTargets: []string{`cc_library(
1453 name = "shared_empty",
Chris Parsons51f8c392021-08-03 21:01:05 -04001454 shared = {
1455 "system_dynamic_deps": [],
1456 },
1457)`},
1458 })
1459}
1460
1461func TestCcLibrary_SystemSharedLibsSharedBionicEmpty(t *testing.T) {
1462 runCcLibraryTestCase(t, bp2buildTestCase{
1463 description: "cc_library system_shared_libs empty for shared, bionic variant",
1464 moduleTypeUnderTest: "cc_library",
1465 moduleTypeUnderTestFactory: cc.LibraryFactory,
1466 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1467 blueprint: soongCcLibraryPreamble + `
1468cc_library {
1469 name: "shared_empty",
1470 target: {
1471 bionic: {
1472 shared: {
1473 system_shared_libs: [],
1474 }
1475 }
Liz Kammer8337ea42021-09-10 10:06:32 -04001476 },
1477 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001478}
1479`,
1480 expectedBazelTargets: []string{`cc_library(
1481 name = "shared_empty",
Chris Parsons51f8c392021-08-03 21:01:05 -04001482 shared = {
1483 "system_dynamic_deps": [],
1484 },
1485)`},
1486 })
1487}
1488
1489func TestCcLibrary_SystemSharedLibsLinuxBionicEmpty(t *testing.T) {
1490 // Note that this behavior is technically incorrect (it's a simplification).
1491 // The correct behavior would be if bp2build wrote `system_dynamic_deps = []`
1492 // only for linux_bionic, but `android` had `["libc", "libdl", "libm"].
1493 // b/195791252 tracks the fix.
1494 runCcLibraryTestCase(t, bp2buildTestCase{
1495 description: "cc_library system_shared_libs empty for linux_bionic variant",
1496 moduleTypeUnderTest: "cc_library",
1497 moduleTypeUnderTestFactory: cc.LibraryFactory,
1498 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1499 blueprint: soongCcLibraryPreamble + `
1500cc_library {
1501 name: "target_linux_bionic_empty",
1502 target: {
1503 linux_bionic: {
1504 system_shared_libs: [],
1505 },
1506 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001507 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001508}
1509`,
1510 expectedBazelTargets: []string{`cc_library(
1511 name = "target_linux_bionic_empty",
Chris Parsons51f8c392021-08-03 21:01:05 -04001512 system_dynamic_deps = [],
1513)`},
1514 })
1515}
1516
1517func TestCcLibrary_SystemSharedLibsBionicEmpty(t *testing.T) {
1518 runCcLibraryTestCase(t, bp2buildTestCase{
1519 description: "cc_library system_shared_libs empty for bionic variant",
1520 moduleTypeUnderTest: "cc_library",
1521 moduleTypeUnderTestFactory: cc.LibraryFactory,
1522 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1523 blueprint: soongCcLibraryPreamble + `
1524cc_library {
1525 name: "target_bionic_empty",
1526 target: {
1527 bionic: {
1528 system_shared_libs: [],
1529 },
1530 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001531 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001532}
1533`,
1534 expectedBazelTargets: []string{`cc_library(
1535 name = "target_bionic_empty",
Chris Parsons51f8c392021-08-03 21:01:05 -04001536 system_dynamic_deps = [],
1537)`},
1538 })
1539}
1540
1541func TestCcLibrary_SystemSharedLibsSharedAndRoot(t *testing.T) {
1542 runCcLibraryTestCase(t, bp2buildTestCase{
1543 description: "cc_library system_shared_libs set for shared and root",
1544 moduleTypeUnderTest: "cc_library",
1545 moduleTypeUnderTestFactory: cc.LibraryFactory,
1546 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1547 blueprint: soongCcLibraryPreamble + `
Liz Kammer8337ea42021-09-10 10:06:32 -04001548cc_library {
1549 name: "libc",
1550 bazel_module: { bp2build_available: false },
1551}
1552cc_library {
1553 name: "libm",
1554 bazel_module: { bp2build_available: false },
1555}
Chris Parsons51f8c392021-08-03 21:01:05 -04001556
1557cc_library {
1558 name: "foo",
1559 system_shared_libs: ["libc"],
1560 shared: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001561 system_shared_libs: ["libm"],
Chris Parsons51f8c392021-08-03 21:01:05 -04001562 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001563 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001564}
1565`,
1566 expectedBazelTargets: []string{`cc_library(
1567 name = "foo",
Chris Parsons51f8c392021-08-03 21:01:05 -04001568 shared = {
1569 "system_dynamic_deps": [":libm"],
1570 },
1571 system_dynamic_deps = [":libc"],
Chris Parsons51f8c392021-08-03 21:01:05 -04001572)`},
1573 })
1574}
Chris Parsons2dde0cb2021-10-01 14:45:30 -04001575
1576func TestCcLibraryOsSelects(t *testing.T) {
1577 runCcLibraryTestCase(t, bp2buildTestCase{
1578 description: "cc_library - selects for all os targets",
1579 moduleTypeUnderTest: "cc_library",
1580 moduleTypeUnderTestFactory: cc.LibraryFactory,
1581 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1582 filesystem: map[string]string{},
1583 blueprint: soongCcLibraryPreamble + `
1584cc_library_headers { name: "some-headers" }
1585cc_library {
1586 name: "foo-lib",
1587 srcs: ["base.cpp"],
1588 target: {
1589 android: {
1590 srcs: ["android.cpp"],
1591 },
1592 linux: {
1593 srcs: ["linux.cpp"],
1594 },
1595 linux_glibc: {
1596 srcs: ["linux_glibc.cpp"],
1597 },
1598 darwin: {
1599 srcs: ["darwin.cpp"],
1600 },
1601 bionic: {
1602 srcs: ["bionic.cpp"],
1603 },
1604 linux_musl: {
1605 srcs: ["linux_musl.cpp"],
1606 },
1607 windows: {
1608 srcs: ["windows.cpp"],
1609 },
1610 },
1611 include_build_directory: false,
1612}
1613`,
1614 expectedBazelTargets: []string{`cc_library(
1615 name = "foo-lib",
1616 srcs = ["base.cpp"] + select({
1617 "//build/bazel/platforms/os:android": [
1618 "android.cpp",
1619 "bionic.cpp",
1620 "linux.cpp",
1621 ],
1622 "//build/bazel/platforms/os:darwin": ["darwin.cpp"],
1623 "//build/bazel/platforms/os:linux": [
1624 "linux.cpp",
1625 "linux_glibc.cpp",
1626 ],
1627 "//build/bazel/platforms/os:linux_bionic": [
1628 "bionic.cpp",
1629 "linux.cpp",
1630 ],
1631 "//build/bazel/platforms/os:linux_musl": [
1632 "linux.cpp",
1633 "linux_musl.cpp",
1634 ],
1635 "//build/bazel/platforms/os:windows": ["windows.cpp"],
1636 "//conditions:default": [],
1637 }),
1638)`}})
1639}