blob: ec8882bee591dd606d18bda2bc62fcbee84b967a [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({
Jingwen Chenb4628eb2021-04-08 14:40:57 +0000134 "//build/bazel/platforms/os:android": ["android.cpp"],
135 "//build/bazel/platforms/os:darwin": ["darwin.cpp"],
136 "//build/bazel/platforms/os:linux": ["linux.cpp"],
Jingwen Chen63930982021-03-24 10:04:33 -0400137 "//conditions:default": [],
Liz Kammer01a16e82021-07-16 16:33:47 -0400138 }) + select({
139 "//build/bazel/platforms/os:bionic": ["bionic.cpp"],
140 "//conditions:default": [],
Jingwen Chen63930982021-03-24 10:04:33 -0400141 }),
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200142)`}})
143}
144
145func TestCcLibraryTrimmedLdAndroid(t *testing.T) {
146 runCcLibraryTestCase(t, bp2buildTestCase{
147 description: "cc_library - trimmed example of //bionic/linker:ld-android",
148 moduleTypeUnderTest: "cc_library",
149 moduleTypeUnderTestFactory: cc.LibraryFactory,
150 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
151 filesystem: map[string]string{
152 "ld-android.cpp": "",
153 "linked_list.h": "",
154 "linker.h": "",
155 "linker_block_allocator.h": "",
156 "linker_cfi.h": "",
Jingwen Chen63930982021-03-24 10:04:33 -0400157 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200158 blueprint: soongCcLibraryPreamble + `
Jingwen Chen63930982021-03-24 10:04:33 -0400159cc_library_headers { name: "libc_headers" }
160cc_library {
161 name: "fake-ld-android",
162 srcs: ["ld_android.cpp"],
163 cflags: [
164 "-Wall",
165 "-Wextra",
166 "-Wunused",
167 "-Werror",
168 ],
169 header_libs: ["libc_headers"],
170 ldflags: [
171 "-Wl,--exclude-libs=libgcc.a",
172 "-Wl,--exclude-libs=libgcc_stripped.a",
173 "-Wl,--exclude-libs=libclang_rt.builtins-arm-android.a",
174 "-Wl,--exclude-libs=libclang_rt.builtins-aarch64-android.a",
175 "-Wl,--exclude-libs=libclang_rt.builtins-i686-android.a",
176 "-Wl,--exclude-libs=libclang_rt.builtins-x86_64-android.a",
177 ],
178 arch: {
179 x86: {
180 ldflags: ["-Wl,--exclude-libs=libgcc_eh.a"],
181 },
182 x86_64: {
183 ldflags: ["-Wl,--exclude-libs=libgcc_eh.a"],
184 },
185 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400186 include_build_directory: false,
Jingwen Chen63930982021-03-24 10:04:33 -0400187}
188`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200189 expectedBazelTargets: []string{`cc_library(
Jingwen Chen63930982021-03-24 10:04:33 -0400190 name = "fake-ld-android",
191 copts = [
192 "-Wall",
193 "-Wextra",
194 "-Wunused",
195 "-Werror",
196 ],
Chris Parsonsd6358772021-05-18 18:35:24 -0400197 implementation_deps = [":libc_headers"],
Jingwen Chen63930982021-03-24 10:04:33 -0400198 linkopts = [
199 "-Wl,--exclude-libs=libgcc.a",
200 "-Wl,--exclude-libs=libgcc_stripped.a",
201 "-Wl,--exclude-libs=libclang_rt.builtins-arm-android.a",
202 "-Wl,--exclude-libs=libclang_rt.builtins-aarch64-android.a",
203 "-Wl,--exclude-libs=libclang_rt.builtins-i686-android.a",
204 "-Wl,--exclude-libs=libclang_rt.builtins-x86_64-android.a",
205 ] + select({
Jingwen Chenb4628eb2021-04-08 14:40:57 +0000206 "//build/bazel/platforms/arch:x86": ["-Wl,--exclude-libs=libgcc_eh.a"],
207 "//build/bazel/platforms/arch:x86_64": ["-Wl,--exclude-libs=libgcc_eh.a"],
Jingwen Chen63930982021-03-24 10:04:33 -0400208 "//conditions:default": [],
209 }),
Jingwen Chen882bcc12021-04-27 05:54:20 +0000210 srcs = ["ld_android.cpp"],
Jingwen Chen63930982021-03-24 10:04:33 -0400211)`},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200212 })
213}
214
215func TestCcLibraryExcludeSrcs(t *testing.T) {
216 runCcLibraryTestCase(t, bp2buildTestCase{
217 description: "cc_library exclude_srcs - trimmed example of //external/arm-optimized-routines:libarm-optimized-routines-math",
218 moduleTypeUnderTest: "cc_library",
219 moduleTypeUnderTestFactory: cc.LibraryFactory,
220 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
221 dir: "external",
222 filesystem: map[string]string{
223 "external/math/cosf.c": "",
224 "external/math/erf.c": "",
225 "external/math/erf_data.c": "",
226 "external/math/erff.c": "",
227 "external/math/erff_data.c": "",
228 "external/Android.bp": `
Jingwen Chen4ecc67d2021-04-27 09:47:02 +0000229cc_library {
230 name: "fake-libarm-optimized-routines-math",
231 exclude_srcs: [
232 // Provided by:
233 // bionic/libm/upstream-freebsd/lib/msun/src/s_erf.c
234 // bionic/libm/upstream-freebsd/lib/msun/src/s_erff.c
235 "math/erf.c",
236 "math/erf_data.c",
237 "math/erff.c",
238 "math/erff_data.c",
239 ],
240 srcs: [
241 "math/*.c",
242 ],
243 // arch-specific settings
244 arch: {
245 arm64: {
246 cflags: [
247 "-DHAVE_FAST_FMA=1",
248 ],
249 },
250 },
251 bazel_module: { bp2build_available: true },
252}
253`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200254 },
255 blueprint: soongCcLibraryPreamble,
256 expectedBazelTargets: []string{`cc_library(
Jingwen Chen4ecc67d2021-04-27 09:47:02 +0000257 name = "fake-libarm-optimized-routines-math",
Liz Kammer35687bc2021-09-10 10:07:07 -0400258 copts = select({
Jingwen Chen4ecc67d2021-04-27 09:47:02 +0000259 "//build/bazel/platforms/arch:arm64": ["-DHAVE_FAST_FMA=1"],
260 "//conditions:default": [],
261 }),
Liz Kammer35687bc2021-09-10 10:07:07 -0400262 local_includes = ["."],
Chris Parsons990c4f42021-05-25 12:10:58 -0400263 srcs_c = ["math/cosf.c"],
Jingwen Chen4ecc67d2021-04-27 09:47:02 +0000264)`},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200265 })
266}
267
268func TestCcLibrarySharedStaticProps(t *testing.T) {
269 runCcLibraryTestCase(t, bp2buildTestCase{
270 description: "cc_library shared/static props",
271 moduleTypeUnderTest: "cc_library",
272 moduleTypeUnderTestFactory: cc.LibraryFactory,
273 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200274 filesystem: map[string]string{
Liz Kammer8337ea42021-09-10 10:06:32 -0400275 "both.cpp": "",
276 "sharedonly.cpp": "",
277 "staticonly.cpp": "",
278 },
279 blueprint: soongCcLibraryPreamble + `
Jingwen Chen53681ef2021-04-29 08:15:13 +0000280cc_library {
281 name: "a",
Chris Parsons08648312021-05-06 16:23:19 -0400282 srcs: ["both.cpp"],
283 cflags: ["bothflag"],
284 shared_libs: ["shared_dep_for_both"],
285 static_libs: ["static_dep_for_both"],
286 whole_static_libs: ["whole_static_lib_for_both"],
287 static: {
288 srcs: ["staticonly.cpp"],
289 cflags: ["staticflag"],
290 shared_libs: ["shared_dep_for_static"],
291 static_libs: ["static_dep_for_static"],
292 whole_static_libs: ["whole_static_lib_for_static"],
293 },
294 shared: {
295 srcs: ["sharedonly.cpp"],
296 cflags: ["sharedflag"],
297 shared_libs: ["shared_dep_for_shared"],
298 static_libs: ["static_dep_for_shared"],
299 whole_static_libs: ["whole_static_lib_for_shared"],
300 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400301 include_build_directory: false,
Jingwen Chen53681ef2021-04-29 08:15:13 +0000302}
303
Liz Kammer8337ea42021-09-10 10:06:32 -0400304cc_library_static {
305 name: "static_dep_for_shared",
306 bazel_module: { bp2build_available: false },
307}
Chris Parsons08648312021-05-06 16:23:19 -0400308
Liz Kammer8337ea42021-09-10 10:06:32 -0400309cc_library_static {
310 name: "static_dep_for_static",
311 bazel_module: { bp2build_available: false },
312}
Chris Parsons08648312021-05-06 16:23:19 -0400313
Liz Kammer8337ea42021-09-10 10:06:32 -0400314cc_library_static {
315 name: "static_dep_for_both",
316 bazel_module: { bp2build_available: false },
317}
Chris Parsons08648312021-05-06 16:23:19 -0400318
Liz Kammer8337ea42021-09-10 10:06:32 -0400319cc_library_static {
320 name: "whole_static_lib_for_shared",
321 bazel_module: { bp2build_available: false },
322}
Chris Parsons08648312021-05-06 16:23:19 -0400323
Liz Kammer8337ea42021-09-10 10:06:32 -0400324cc_library_static {
325 name: "whole_static_lib_for_static",
326 bazel_module: { bp2build_available: false },
327}
Chris Parsons08648312021-05-06 16:23:19 -0400328
Liz Kammer8337ea42021-09-10 10:06:32 -0400329cc_library_static {
330 name: "whole_static_lib_for_both",
331 bazel_module: { bp2build_available: false },
332}
Chris Parsons08648312021-05-06 16:23:19 -0400333
Liz Kammer8337ea42021-09-10 10:06:32 -0400334cc_library {
335 name: "shared_dep_for_shared",
336 bazel_module: { bp2build_available: false },
337}
Chris Parsons08648312021-05-06 16:23:19 -0400338
Liz Kammer8337ea42021-09-10 10:06:32 -0400339cc_library {
340 name: "shared_dep_for_static",
341 bazel_module: { bp2build_available: false },
342}
Chris Parsons08648312021-05-06 16:23:19 -0400343
Liz Kammer8337ea42021-09-10 10:06:32 -0400344cc_library {
345 name: "shared_dep_for_both",
346 bazel_module: { bp2build_available: false },
347}
Jingwen Chen53681ef2021-04-29 08:15:13 +0000348`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200349 expectedBazelTargets: []string{`cc_library(
Jingwen Chen53681ef2021-04-29 08:15:13 +0000350 name = "a",
Liz Kammer8337ea42021-09-10 10:06:32 -0400351 copts = ["bothflag"],
Chris Parsonsd6358772021-05-18 18:35:24 -0400352 implementation_deps = [":static_dep_for_both"],
Liz Kammer7a210ac2021-09-22 15:52:58 -0400353 implementation_dynamic_deps = [":shared_dep_for_both"],
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000354 shared = {
355 "copts": ["sharedflag"],
Liz Kammer7a210ac2021-09-22 15:52:58 -0400356 "implementation_deps": [":static_dep_for_shared"],
357 "implementation_dynamic_deps": [":shared_dep_for_shared"],
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000358 "srcs": ["sharedonly.cpp"],
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000359 "whole_archive_deps": [":whole_static_lib_for_shared"],
360 },
Chris Parsons08648312021-05-06 16:23:19 -0400361 srcs = ["both.cpp"],
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000362 static = {
363 "copts": ["staticflag"],
Liz Kammer7a210ac2021-09-22 15:52:58 -0400364 "implementation_deps": [":static_dep_for_static"],
365 "implementation_dynamic_deps": [":shared_dep_for_static"],
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000366 "srcs": ["staticonly.cpp"],
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000367 "whole_archive_deps": [":whole_static_lib_for_static"],
368 },
Chris Parsons08648312021-05-06 16:23:19 -0400369 whole_archive_deps = [":whole_static_lib_for_both"],
Jingwen Chen53681ef2021-04-29 08:15:13 +0000370)`},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200371 })
372}
373
Liz Kammer7a210ac2021-09-22 15:52:58 -0400374func TestCcLibraryDeps(t *testing.T) {
375 runCcLibraryTestCase(t, bp2buildTestCase{
376 description: "cc_library shared/static props",
377 moduleTypeUnderTest: "cc_library",
378 moduleTypeUnderTestFactory: cc.LibraryFactory,
379 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
380 filesystem: map[string]string{
381 "both.cpp": "",
382 "sharedonly.cpp": "",
383 "staticonly.cpp": "",
384 },
385 blueprint: soongCcLibraryPreamble + `
386cc_library {
387 name: "a",
388 srcs: ["both.cpp"],
389 cflags: ["bothflag"],
390 shared_libs: ["implementation_shared_dep_for_both", "shared_dep_for_both"],
391 export_shared_lib_headers: ["shared_dep_for_both"],
392 static_libs: ["implementation_static_dep_for_both", "static_dep_for_both"],
393 export_static_lib_headers: ["static_dep_for_both", "whole_static_dep_for_both"],
394 whole_static_libs: ["not_explicitly_exported_whole_static_dep_for_both", "whole_static_dep_for_both"],
395 static: {
396 srcs: ["staticonly.cpp"],
397 cflags: ["staticflag"],
398 shared_libs: ["implementation_shared_dep_for_static", "shared_dep_for_static"],
399 export_shared_lib_headers: ["shared_dep_for_static"],
400 static_libs: ["implementation_static_dep_for_static", "static_dep_for_static"],
401 export_static_lib_headers: ["static_dep_for_static", "whole_static_dep_for_static"],
402 whole_static_libs: ["not_explicitly_exported_whole_static_dep_for_static", "whole_static_dep_for_static"],
403 },
404 shared: {
405 srcs: ["sharedonly.cpp"],
406 cflags: ["sharedflag"],
407 shared_libs: ["implementation_shared_dep_for_shared", "shared_dep_for_shared"],
408 export_shared_lib_headers: ["shared_dep_for_shared"],
409 static_libs: ["implementation_static_dep_for_shared", "static_dep_for_shared"],
410 export_static_lib_headers: ["static_dep_for_shared", "whole_static_dep_for_shared"],
411 whole_static_libs: ["not_explicitly_exported_whole_static_dep_for_shared", "whole_static_dep_for_shared"],
412 },
413 include_build_directory: false,
414}
415` + simpleModuleDoNotConvertBp2build("cc_library_static", "static_dep_for_shared") +
416 simpleModuleDoNotConvertBp2build("cc_library_static", "implementation_static_dep_for_shared") +
417 simpleModuleDoNotConvertBp2build("cc_library_static", "static_dep_for_static") +
418 simpleModuleDoNotConvertBp2build("cc_library_static", "implementation_static_dep_for_static") +
419 simpleModuleDoNotConvertBp2build("cc_library_static", "static_dep_for_both") +
420 simpleModuleDoNotConvertBp2build("cc_library_static", "implementation_static_dep_for_both") +
421 simpleModuleDoNotConvertBp2build("cc_library_static", "whole_static_dep_for_shared") +
422 simpleModuleDoNotConvertBp2build("cc_library_static", "not_explicitly_exported_whole_static_dep_for_shared") +
423 simpleModuleDoNotConvertBp2build("cc_library_static", "whole_static_dep_for_static") +
424 simpleModuleDoNotConvertBp2build("cc_library_static", "not_explicitly_exported_whole_static_dep_for_static") +
425 simpleModuleDoNotConvertBp2build("cc_library_static", "whole_static_dep_for_both") +
426 simpleModuleDoNotConvertBp2build("cc_library_static", "not_explicitly_exported_whole_static_dep_for_both") +
427 simpleModuleDoNotConvertBp2build("cc_library", "shared_dep_for_shared") +
428 simpleModuleDoNotConvertBp2build("cc_library", "implementation_shared_dep_for_shared") +
429 simpleModuleDoNotConvertBp2build("cc_library", "shared_dep_for_static") +
430 simpleModuleDoNotConvertBp2build("cc_library", "implementation_shared_dep_for_static") +
431 simpleModuleDoNotConvertBp2build("cc_library", "shared_dep_for_both") +
432 simpleModuleDoNotConvertBp2build("cc_library", "implementation_shared_dep_for_both"),
433 expectedBazelTargets: []string{`cc_library(
434 name = "a",
435 copts = ["bothflag"],
436 deps = [":static_dep_for_both"],
437 dynamic_deps = [":shared_dep_for_both"],
438 implementation_deps = [":implementation_static_dep_for_both"],
439 implementation_dynamic_deps = [":implementation_shared_dep_for_both"],
440 shared = {
441 "copts": ["sharedflag"],
442 "deps": [":static_dep_for_shared"],
443 "dynamic_deps": [":shared_dep_for_shared"],
444 "implementation_deps": [":implementation_static_dep_for_shared"],
445 "implementation_dynamic_deps": [":implementation_shared_dep_for_shared"],
446 "srcs": ["sharedonly.cpp"],
447 "whole_archive_deps": [
448 ":not_explicitly_exported_whole_static_dep_for_shared",
449 ":whole_static_dep_for_shared",
450 ],
451 },
452 srcs = ["both.cpp"],
453 static = {
454 "copts": ["staticflag"],
455 "deps": [":static_dep_for_static"],
456 "dynamic_deps": [":shared_dep_for_static"],
457 "implementation_deps": [":implementation_static_dep_for_static"],
458 "implementation_dynamic_deps": [":implementation_shared_dep_for_static"],
459 "srcs": ["staticonly.cpp"],
460 "whole_archive_deps": [
461 ":not_explicitly_exported_whole_static_dep_for_static",
462 ":whole_static_dep_for_static",
463 ],
464 },
465 whole_archive_deps = [
466 ":not_explicitly_exported_whole_static_dep_for_both",
467 ":whole_static_dep_for_both",
468 ],
469)`},
470 })
471}
472
Liz Kammer2d7bbe32021-06-10 18:20:06 -0400473func TestCcLibraryWholeStaticLibsAlwaysLink(t *testing.T) {
474 runCcLibraryTestCase(t, bp2buildTestCase{
475 moduleTypeUnderTest: "cc_library",
476 moduleTypeUnderTestFactory: cc.LibraryFactory,
477 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Liz Kammer2d7bbe32021-06-10 18:20:06 -0400478 dir: "foo/bar",
479 filesystem: map[string]string{
480 "foo/bar/Android.bp": `
481cc_library {
482 name: "a",
483 whole_static_libs: ["whole_static_lib_for_both"],
484 static: {
485 whole_static_libs: ["whole_static_lib_for_static"],
486 },
487 shared: {
488 whole_static_libs: ["whole_static_lib_for_shared"],
489 },
490 bazel_module: { bp2build_available: true },
Liz Kammer8337ea42021-09-10 10:06:32 -0400491 include_build_directory: false,
Liz Kammer2d7bbe32021-06-10 18:20:06 -0400492}
493
494cc_prebuilt_library_static { name: "whole_static_lib_for_shared" }
495
496cc_prebuilt_library_static { name: "whole_static_lib_for_static" }
497
498cc_prebuilt_library_static { name: "whole_static_lib_for_both" }
499`,
500 },
501 blueprint: soongCcLibraryPreamble,
502 expectedBazelTargets: []string{`cc_library(
503 name = "a",
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000504 shared = {
505 "whole_archive_deps": [":whole_static_lib_for_shared_alwayslink"],
506 },
507 static = {
508 "whole_archive_deps": [":whole_static_lib_for_static_alwayslink"],
509 },
Liz Kammer2d7bbe32021-06-10 18:20:06 -0400510 whole_archive_deps = [":whole_static_lib_for_both_alwayslink"],
Liz Kammer2d7bbe32021-06-10 18:20:06 -0400511)`},
512 })
513}
514
Jingwen Chenbcf53042021-05-26 04:42:42 +0000515func TestCcLibrarySharedStaticPropsInArch(t *testing.T) {
516 runCcLibraryTestCase(t, bp2buildTestCase{
517 description: "cc_library shared/static props in arch",
518 moduleTypeUnderTest: "cc_library",
519 moduleTypeUnderTestFactory: cc.LibraryFactory,
520 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Jingwen Chenbcf53042021-05-26 04:42:42 +0000521 dir: "foo/bar",
522 filesystem: map[string]string{
523 "foo/bar/arm.cpp": "",
524 "foo/bar/x86.cpp": "",
525 "foo/bar/sharedonly.cpp": "",
526 "foo/bar/staticonly.cpp": "",
527 "foo/bar/Android.bp": `
528cc_library {
529 name: "a",
530 arch: {
531 arm: {
532 shared: {
533 srcs: ["arm_shared.cpp"],
534 cflags: ["-DARM_SHARED"],
535 static_libs: ["arm_static_dep_for_shared"],
536 whole_static_libs: ["arm_whole_static_dep_for_shared"],
537 shared_libs: ["arm_shared_dep_for_shared"],
538 },
539 },
540 x86: {
541 static: {
542 srcs: ["x86_static.cpp"],
543 cflags: ["-DX86_STATIC"],
544 static_libs: ["x86_dep_for_static"],
545 },
546 },
547 },
548 target: {
549 android: {
550 shared: {
551 srcs: ["android_shared.cpp"],
552 cflags: ["-DANDROID_SHARED"],
553 static_libs: ["android_dep_for_shared"],
554 },
555 },
556 android_arm: {
557 shared: {
558 cflags: ["-DANDROID_ARM_SHARED"],
559 },
560 },
561 },
562 srcs: ["both.cpp"],
563 cflags: ["bothflag"],
564 static_libs: ["static_dep_for_both"],
565 static: {
566 srcs: ["staticonly.cpp"],
567 cflags: ["staticflag"],
568 static_libs: ["static_dep_for_static"],
569 },
570 shared: {
571 srcs: ["sharedonly.cpp"],
572 cflags: ["sharedflag"],
573 static_libs: ["static_dep_for_shared"],
574 },
575 bazel_module: { bp2build_available: true },
576}
577
578cc_library_static { name: "static_dep_for_shared" }
579cc_library_static { name: "static_dep_for_static" }
580cc_library_static { name: "static_dep_for_both" }
581
582cc_library_static { name: "arm_static_dep_for_shared" }
583cc_library_static { name: "arm_whole_static_dep_for_shared" }
584cc_library_static { name: "arm_shared_dep_for_shared" }
585
586cc_library_static { name: "x86_dep_for_static" }
587
588cc_library_static { name: "android_dep_for_shared" }
589`,
590 },
591 blueprint: soongCcLibraryPreamble,
592 expectedBazelTargets: []string{`cc_library(
593 name = "a",
Liz Kammer35687bc2021-09-10 10:07:07 -0400594 copts = ["bothflag"],
Jingwen Chenbcf53042021-05-26 04:42:42 +0000595 implementation_deps = [":static_dep_for_both"],
Liz Kammer35687bc2021-09-10 10:07:07 -0400596 local_includes = ["."],
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000597 shared = {
598 "copts": ["sharedflag"] + select({
599 "//build/bazel/platforms/arch:arm": ["-DARM_SHARED"],
600 "//conditions:default": [],
601 }) + select({
602 "//build/bazel/platforms/os:android": ["-DANDROID_SHARED"],
603 "//conditions:default": [],
604 }) + select({
605 "//build/bazel/platforms/os_arch:android_arm": ["-DANDROID_ARM_SHARED"],
606 "//conditions:default": [],
607 }),
Liz Kammer7a210ac2021-09-22 15:52:58 -0400608 "implementation_deps": [":static_dep_for_shared"] + select({
609 "//build/bazel/platforms/arch:arm": [":arm_static_dep_for_shared"],
610 "//conditions:default": [],
611 }) + select({
612 "//build/bazel/platforms/os:android": [":android_dep_for_shared"],
613 "//conditions:default": [],
614 }),
615 "implementation_dynamic_deps": select({
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000616 "//build/bazel/platforms/arch:arm": [":arm_shared_dep_for_shared"],
617 "//conditions:default": [],
618 }),
619 "srcs": ["sharedonly.cpp"] + select({
620 "//build/bazel/platforms/arch:arm": ["arm_shared.cpp"],
621 "//conditions:default": [],
622 }) + select({
623 "//build/bazel/platforms/os:android": ["android_shared.cpp"],
624 "//conditions:default": [],
625 }),
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000626 "whole_archive_deps": select({
627 "//build/bazel/platforms/arch:arm": [":arm_whole_static_dep_for_shared"],
628 "//conditions:default": [],
629 }),
630 },
Jingwen Chenbcf53042021-05-26 04:42:42 +0000631 srcs = ["both.cpp"],
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000632 static = {
633 "copts": ["staticflag"] + select({
634 "//build/bazel/platforms/arch:x86": ["-DX86_STATIC"],
635 "//conditions:default": [],
636 }),
Liz Kammer7a210ac2021-09-22 15:52:58 -0400637 "implementation_deps": [":static_dep_for_static"] + select({
638 "//build/bazel/platforms/arch:x86": [":x86_dep_for_static"],
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000639 "//conditions:default": [],
640 }),
Liz Kammer7a210ac2021-09-22 15:52:58 -0400641 "srcs": ["staticonly.cpp"] + select({
642 "//build/bazel/platforms/arch:x86": ["x86_static.cpp"],
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000643 "//conditions:default": [],
644 }),
645 },
Jingwen Chenbcf53042021-05-26 04:42:42 +0000646)`},
647 })
648}
649
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000650func TestCcLibrarySharedStaticPropsWithMixedSources(t *testing.T) {
651 runCcLibraryTestCase(t, bp2buildTestCase{
652 description: "cc_library shared/static props with c/cpp/s mixed sources",
653 moduleTypeUnderTest: "cc_library",
654 moduleTypeUnderTestFactory: cc.LibraryFactory,
655 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000656 dir: "foo/bar",
657 filesystem: map[string]string{
658 "foo/bar/both_source.cpp": "",
659 "foo/bar/both_source.cc": "",
660 "foo/bar/both_source.c": "",
661 "foo/bar/both_source.s": "",
662 "foo/bar/both_source.S": "",
663 "foo/bar/shared_source.cpp": "",
664 "foo/bar/shared_source.cc": "",
665 "foo/bar/shared_source.c": "",
666 "foo/bar/shared_source.s": "",
667 "foo/bar/shared_source.S": "",
668 "foo/bar/static_source.cpp": "",
669 "foo/bar/static_source.cc": "",
670 "foo/bar/static_source.c": "",
671 "foo/bar/static_source.s": "",
672 "foo/bar/static_source.S": "",
673 "foo/bar/Android.bp": `
674cc_library {
675 name: "a",
676 srcs: [
Liz Kammerd366c902021-06-03 13:43:01 -0400677 "both_source.cpp",
678 "both_source.cc",
679 "both_source.c",
680 "both_source.s",
681 "both_source.S",
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000682 ":both_filegroup",
Liz Kammerd366c902021-06-03 13:43:01 -0400683 ],
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000684 static: {
Liz Kammer8337ea42021-09-10 10:06:32 -0400685 srcs: [
686 "static_source.cpp",
687 "static_source.cc",
688 "static_source.c",
689 "static_source.s",
690 "static_source.S",
691 ":static_filegroup",
692 ],
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000693 },
694 shared: {
Liz Kammer8337ea42021-09-10 10:06:32 -0400695 srcs: [
696 "shared_source.cpp",
697 "shared_source.cc",
698 "shared_source.c",
699 "shared_source.s",
700 "shared_source.S",
701 ":shared_filegroup",
702 ],
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000703 },
704 bazel_module: { bp2build_available: true },
705}
706
707filegroup {
708 name: "both_filegroup",
709 srcs: [
710 // Not relevant, handled by filegroup macro
Liz Kammerd366c902021-06-03 13:43:01 -0400711 ],
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000712}
713
714filegroup {
715 name: "shared_filegroup",
716 srcs: [
717 // Not relevant, handled by filegroup macro
Liz Kammerd366c902021-06-03 13:43:01 -0400718 ],
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000719}
720
721filegroup {
722 name: "static_filegroup",
723 srcs: [
724 // Not relevant, handled by filegroup macro
Liz Kammerd366c902021-06-03 13:43:01 -0400725 ],
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000726}
727`,
728 },
729 blueprint: soongCcLibraryPreamble,
730 expectedBazelTargets: []string{`cc_library(
731 name = "a",
Liz Kammer35687bc2021-09-10 10:07:07 -0400732 local_includes = ["."],
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000733 shared = {
734 "srcs": [
735 ":shared_filegroup_cpp_srcs",
736 "shared_source.cc",
737 "shared_source.cpp",
738 ],
739 "srcs_as": [
740 "shared_source.s",
741 "shared_source.S",
742 ":shared_filegroup_as_srcs",
743 ],
744 "srcs_c": [
745 "shared_source.c",
746 ":shared_filegroup_c_srcs",
747 ],
748 },
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000749 srcs = [
750 ":both_filegroup_cpp_srcs",
751 "both_source.cc",
752 "both_source.cpp",
753 ],
754 srcs_as = [
755 "both_source.s",
756 "both_source.S",
757 ":both_filegroup_as_srcs",
758 ],
759 srcs_c = [
760 "both_source.c",
761 ":both_filegroup_c_srcs",
762 ],
Jingwen Chenc4dc9b42021-06-11 12:51:48 +0000763 static = {
764 "srcs": [
765 ":static_filegroup_cpp_srcs",
766 "static_source.cc",
767 "static_source.cpp",
768 ],
769 "srcs_as": [
770 "static_source.s",
771 "static_source.S",
772 ":static_filegroup_as_srcs",
773 ],
774 "srcs_c": [
775 "static_source.c",
776 ":static_filegroup_c_srcs",
777 ],
778 },
Jingwen Chen14a8bda2021-06-02 11:10:02 +0000779)`},
780 })
781}
782
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200783func TestCcLibraryNonConfiguredVersionScript(t *testing.T) {
784 runCcLibraryTestCase(t, bp2buildTestCase{
785 description: "cc_library non-configured version script",
786 moduleTypeUnderTest: "cc_library",
787 moduleTypeUnderTestFactory: cc.LibraryFactory,
788 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200789 dir: "foo/bar",
790 filesystem: map[string]string{
791 "foo/bar/Android.bp": `
Lukacs T. Berki1353e592021-04-30 15:35:09 +0200792cc_library {
793 name: "a",
794 srcs: ["a.cpp"],
795 version_script: "v.map",
796 bazel_module: { bp2build_available: true },
Liz Kammer8337ea42021-09-10 10:06:32 -0400797 include_build_directory: false,
Lukacs T. Berki1353e592021-04-30 15:35:09 +0200798}
799`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200800 },
801 blueprint: soongCcLibraryPreamble,
802 expectedBazelTargets: []string{`cc_library(
Lukacs T. Berki1353e592021-04-30 15:35:09 +0200803 name = "a",
Lukacs T. Berki1353e592021-04-30 15:35:09 +0200804 srcs = ["a.cpp"],
805 version_script = "v.map",
806)`},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200807 })
808}
809
810func TestCcLibraryConfiguredVersionScript(t *testing.T) {
811 runCcLibraryTestCase(t, bp2buildTestCase{
812 description: "cc_library configured version script",
813 moduleTypeUnderTest: "cc_library",
814 moduleTypeUnderTestFactory: cc.LibraryFactory,
815 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200816 dir: "foo/bar",
817 filesystem: map[string]string{
818 "foo/bar/Android.bp": `
Liz Kammer8337ea42021-09-10 10:06:32 -0400819cc_library {
820 name: "a",
821 srcs: ["a.cpp"],
822 arch: {
823 arm: {
824 version_script: "arm.map",
825 },
826 arm64: {
827 version_script: "arm64.map",
828 },
829 },
Lukacs T. Berki56bb0832021-05-12 12:36:45 +0200830
Liz Kammer8337ea42021-09-10 10:06:32 -0400831 bazel_module: { bp2build_available: true },
832 include_build_directory: false,
833}
Liz Kammerd366c902021-06-03 13:43:01 -0400834 `,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200835 },
836 blueprint: soongCcLibraryPreamble,
837 expectedBazelTargets: []string{`cc_library(
Lukacs T. Berki56bb0832021-05-12 12:36:45 +0200838 name = "a",
Lukacs T. Berki56bb0832021-05-12 12:36:45 +0200839 srcs = ["a.cpp"],
840 version_script = select({
841 "//build/bazel/platforms/arch:arm": "arm.map",
842 "//build/bazel/platforms/arch:arm64": "arm64.map",
843 "//conditions:default": None,
844 }),
845)`},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200846 })
847}
848
849func TestCcLibrarySharedLibs(t *testing.T) {
850 runCcLibraryTestCase(t, bp2buildTestCase{
851 description: "cc_library shared_libs",
852 moduleTypeUnderTest: "cc_library",
853 moduleTypeUnderTestFactory: cc.LibraryFactory,
854 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Liz Kammer8337ea42021-09-10 10:06:32 -0400855 blueprint: soongCcLibraryPreamble + `
Rupert Shuttleworthc50fa8d2021-05-06 02:40:33 -0400856cc_library {
857 name: "mylib",
Liz Kammer8337ea42021-09-10 10:06:32 -0400858 bazel_module: { bp2build_available: false },
Rupert Shuttleworthc50fa8d2021-05-06 02:40:33 -0400859}
860
861cc_library {
862 name: "a",
863 shared_libs: ["mylib",],
Liz Kammer8337ea42021-09-10 10:06:32 -0400864 include_build_directory: false,
Rupert Shuttleworthc50fa8d2021-05-06 02:40:33 -0400865}
866`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200867 expectedBazelTargets: []string{`cc_library(
Rupert Shuttleworthc50fa8d2021-05-06 02:40:33 -0400868 name = "a",
Liz Kammer7a210ac2021-09-22 15:52:58 -0400869 implementation_dynamic_deps = [":mylib"],
Rupert Shuttleworthc50fa8d2021-05-06 02:40:33 -0400870)`},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200871 })
872}
873
874func TestCcLibraryPackRelocations(t *testing.T) {
875 runCcLibraryTestCase(t, bp2buildTestCase{
876 description: "cc_library pack_relocations test",
877 moduleTypeUnderTest: "cc_library",
878 moduleTypeUnderTestFactory: cc.LibraryFactory,
879 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Liz Kammer8337ea42021-09-10 10:06:32 -0400880 blueprint: soongCcLibraryPreamble + `
Rupert Shuttleworth143be942021-05-09 23:55:51 -0400881cc_library {
882 name: "a",
883 srcs: ["a.cpp"],
884 pack_relocations: false,
Liz Kammer8337ea42021-09-10 10:06:32 -0400885 include_build_directory: false,
Rupert Shuttleworth143be942021-05-09 23:55:51 -0400886}
887
888cc_library {
889 name: "b",
890 srcs: ["b.cpp"],
891 arch: {
892 x86_64: {
Liz Kammer8337ea42021-09-10 10:06:32 -0400893 pack_relocations: false,
894 },
Rupert Shuttleworth143be942021-05-09 23:55:51 -0400895 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400896 include_build_directory: false,
Rupert Shuttleworth143be942021-05-09 23:55:51 -0400897}
898
899cc_library {
900 name: "c",
901 srcs: ["c.cpp"],
902 target: {
903 darwin: {
Liz Kammer8337ea42021-09-10 10:06:32 -0400904 pack_relocations: false,
905 },
Rupert Shuttleworth143be942021-05-09 23:55:51 -0400906 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400907 include_build_directory: false,
Rupert Shuttleworth143be942021-05-09 23:55:51 -0400908}`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200909 expectedBazelTargets: []string{`cc_library(
Rupert Shuttleworth143be942021-05-09 23:55:51 -0400910 name = "a",
Rupert Shuttleworth143be942021-05-09 23:55:51 -0400911 linkopts = ["-Wl,--pack-dyn-relocs=none"],
912 srcs = ["a.cpp"],
913)`, `cc_library(
914 name = "b",
Rupert Shuttleworth143be942021-05-09 23:55:51 -0400915 linkopts = select({
916 "//build/bazel/platforms/arch:x86_64": ["-Wl,--pack-dyn-relocs=none"],
917 "//conditions:default": [],
918 }),
919 srcs = ["b.cpp"],
920)`, `cc_library(
921 name = "c",
Rupert Shuttleworth143be942021-05-09 23:55:51 -0400922 linkopts = select({
923 "//build/bazel/platforms/os:darwin": ["-Wl,--pack-dyn-relocs=none"],
924 "//conditions:default": [],
925 }),
926 srcs = ["c.cpp"],
927)`},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200928 })
929}
930
931func TestCcLibrarySpacesInCopts(t *testing.T) {
932 runCcLibraryTestCase(t, bp2buildTestCase{
933 description: "cc_library spaces in copts",
934 moduleTypeUnderTest: "cc_library",
935 moduleTypeUnderTestFactory: cc.LibraryFactory,
936 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Liz Kammer8337ea42021-09-10 10:06:32 -0400937 blueprint: soongCcLibraryPreamble + `
Jingwen Chen3950cd62021-05-12 04:33:00 +0000938cc_library {
939 name: "a",
940 cflags: ["-include header.h",],
Liz Kammer8337ea42021-09-10 10:06:32 -0400941 include_build_directory: false,
Jingwen Chen3950cd62021-05-12 04:33:00 +0000942}
943`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200944 expectedBazelTargets: []string{`cc_library(
Jingwen Chen3950cd62021-05-12 04:33:00 +0000945 name = "a",
946 copts = [
947 "-include",
948 "header.h",
Jingwen Chen3950cd62021-05-12 04:33:00 +0000949 ],
950)`},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200951 })
952}
953
954func TestCcLibraryCppFlagsGoesIntoCopts(t *testing.T) {
955 runCcLibraryTestCase(t, bp2buildTestCase{
Chris Parsons990c4f42021-05-25 12:10:58 -0400956 description: "cc_library cppflags usage",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200957 moduleTypeUnderTest: "cc_library",
958 moduleTypeUnderTestFactory: cc.LibraryFactory,
959 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Liz Kammer8337ea42021-09-10 10:06:32 -0400960 blueprint: soongCcLibraryPreamble + `cc_library {
Jingwen Chen75be1ca2021-05-12 05:04:58 +0000961 name: "a",
962 srcs: ["a.cpp"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400963 cflags: ["-Wall"],
Jingwen Chen75be1ca2021-05-12 05:04:58 +0000964 cppflags: [
965 "-fsigned-char",
966 "-pedantic",
Liz Kammer8337ea42021-09-10 10:06:32 -0400967 ],
Jingwen Chen75be1ca2021-05-12 05:04:58 +0000968 arch: {
969 arm64: {
970 cppflags: ["-DARM64=1"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400971 },
Liz Kammerd366c902021-06-03 13:43:01 -0400972 },
Jingwen Chen75be1ca2021-05-12 05:04:58 +0000973 target: {
974 android: {
975 cppflags: ["-DANDROID=1"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400976 },
Liz Kammerd366c902021-06-03 13:43:01 -0400977 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400978 include_build_directory: false,
Jingwen Chen75be1ca2021-05-12 05:04:58 +0000979}
980`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200981 expectedBazelTargets: []string{`cc_library(
Jingwen Chen75be1ca2021-05-12 05:04:58 +0000982 name = "a",
Liz Kammer8337ea42021-09-10 10:06:32 -0400983 copts = ["-Wall"],
Chris Parsons990c4f42021-05-25 12:10:58 -0400984 cppflags = [
985 "-fsigned-char",
986 "-pedantic",
Jingwen Chen75be1ca2021-05-12 05:04:58 +0000987 ] + select({
988 "//build/bazel/platforms/arch:arm64": ["-DARM64=1"],
989 "//conditions:default": [],
990 }) + select({
991 "//build/bazel/platforms/os:android": ["-DANDROID=1"],
992 "//conditions:default": [],
993 }),
994 srcs = ["a.cpp"],
995)`},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200996 })
Jingwen Chen63930982021-03-24 10:04:33 -0400997}
Rupert Shuttleworth22cd2eb2021-05-27 02:15:54 -0400998
999func TestCcLibraryLabelAttributeGetTargetProperties(t *testing.T) {
1000 runCcLibraryTestCase(t, bp2buildTestCase{
1001 description: "cc_library GetTargetProperties on a LabelAttribute",
1002 moduleTypeUnderTest: "cc_library",
1003 moduleTypeUnderTestFactory: cc.LibraryFactory,
1004 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Liz Kammer8337ea42021-09-10 10:06:32 -04001005 blueprint: soongCcLibraryPreamble + `
1006cc_library {
1007 name: "a",
1008 srcs: ["a.cpp"],
1009 target: {
1010 android_arm: {
1011 version_script: "android_arm.map",
1012 },
1013 linux_bionic_arm64: {
1014 version_script: "linux_bionic_arm64.map",
1015 },
1016 },
1017 include_build_directory: false,
1018}
Liz Kammerd366c902021-06-03 13:43:01 -04001019 `,
Rupert Shuttleworth22cd2eb2021-05-27 02:15:54 -04001020 expectedBazelTargets: []string{`cc_library(
1021 name = "a",
Rupert Shuttleworth22cd2eb2021-05-27 02:15:54 -04001022 srcs = ["a.cpp"],
1023 version_script = select({
Rupert Shuttleworthffd45822021-05-14 03:02:34 -04001024 "//build/bazel/platforms/os_arch:android_arm": "android_arm.map",
1025 "//build/bazel/platforms/os_arch:linux_bionic_arm64": "linux_bionic_arm64.map",
Rupert Shuttleworth22cd2eb2021-05-27 02:15:54 -04001026 "//conditions:default": None,
1027 }),
1028)`},
1029 })
1030}
Liz Kammer47535c52021-06-02 16:02:22 -04001031
1032func TestCcLibraryExcludeLibs(t *testing.T) {
1033 runCcLibraryTestCase(t, bp2buildTestCase{
1034 moduleTypeUnderTest: "cc_library",
1035 moduleTypeUnderTestFactory: cc.LibraryFactory,
1036 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Liz Kammer47535c52021-06-02 16:02:22 -04001037 filesystem: map[string]string{},
1038 blueprint: soongCcLibraryStaticPreamble + `
1039cc_library {
1040 name: "foo_static",
1041 srcs: ["common.c"],
1042 whole_static_libs: [
1043 "arm_whole_static_lib_excludes",
1044 "malloc_not_svelte_whole_static_lib_excludes"
1045 ],
1046 static_libs: [
1047 "arm_static_lib_excludes",
1048 "malloc_not_svelte_static_lib_excludes"
1049 ],
1050 shared_libs: [
1051 "arm_shared_lib_excludes",
1052 ],
1053 arch: {
1054 arm: {
1055 exclude_shared_libs: [
1056 "arm_shared_lib_excludes",
1057 ],
1058 exclude_static_libs: [
1059 "arm_static_lib_excludes",
1060 "arm_whole_static_lib_excludes",
1061 ],
1062 },
1063 },
1064 product_variables: {
1065 malloc_not_svelte: {
1066 shared_libs: ["malloc_not_svelte_shared_lib"],
1067 whole_static_libs: ["malloc_not_svelte_whole_static_lib"],
1068 exclude_static_libs: [
1069 "malloc_not_svelte_static_lib_excludes",
1070 "malloc_not_svelte_whole_static_lib_excludes",
1071 ],
1072 },
1073 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001074 include_build_directory: false,
Liz Kammer47535c52021-06-02 16:02:22 -04001075}
1076
1077cc_library {
1078 name: "arm_whole_static_lib_excludes",
1079 bazel_module: { bp2build_available: false },
1080}
1081
1082cc_library {
1083 name: "malloc_not_svelte_whole_static_lib",
1084 bazel_module: { bp2build_available: false },
1085}
1086
1087cc_library {
1088 name: "malloc_not_svelte_whole_static_lib_excludes",
1089 bazel_module: { bp2build_available: false },
1090}
1091
1092cc_library {
1093 name: "arm_static_lib_excludes",
1094 bazel_module: { bp2build_available: false },
1095}
1096
1097cc_library {
1098 name: "malloc_not_svelte_static_lib_excludes",
1099 bazel_module: { bp2build_available: false },
1100}
1101
1102cc_library {
1103 name: "arm_shared_lib_excludes",
1104 bazel_module: { bp2build_available: false },
1105}
1106
1107cc_library {
1108 name: "malloc_not_svelte_shared_lib",
1109 bazel_module: { bp2build_available: false },
1110}
1111`,
1112 expectedBazelTargets: []string{
1113 `cc_library(
1114 name = "foo_static",
Liz Kammer47535c52021-06-02 16:02:22 -04001115 implementation_deps = select({
1116 "//build/bazel/platforms/arch:arm": [],
Chris Parsons953b3562021-09-20 15:14:39 -04001117 "//conditions:default": [":arm_static_lib_excludes_bp2build_cc_library_static"],
Liz Kammer47535c52021-06-02 16:02:22 -04001118 }) + select({
1119 "//build/bazel/product_variables:malloc_not_svelte": [],
Chris Parsons953b3562021-09-20 15:14:39 -04001120 "//conditions:default": [":malloc_not_svelte_static_lib_excludes_bp2build_cc_library_static"],
Liz Kammer47535c52021-06-02 16:02:22 -04001121 }),
Liz Kammer7a210ac2021-09-22 15:52:58 -04001122 implementation_dynamic_deps = select({
1123 "//build/bazel/platforms/arch:arm": [],
1124 "//conditions:default": [":arm_shared_lib_excludes"],
1125 }) + select({
1126 "//build/bazel/product_variables:malloc_not_svelte": [":malloc_not_svelte_shared_lib"],
1127 "//conditions:default": [],
1128 }),
Liz Kammer47535c52021-06-02 16:02:22 -04001129 srcs_c = ["common.c"],
1130 whole_archive_deps = select({
1131 "//build/bazel/platforms/arch:arm": [],
Chris Parsons953b3562021-09-20 15:14:39 -04001132 "//conditions:default": [":arm_whole_static_lib_excludes_bp2build_cc_library_static"],
Liz Kammer47535c52021-06-02 16:02:22 -04001133 }) + select({
Chris Parsons953b3562021-09-20 15:14:39 -04001134 "//build/bazel/product_variables:malloc_not_svelte": [":malloc_not_svelte_whole_static_lib_bp2build_cc_library_static"],
1135 "//conditions:default": [":malloc_not_svelte_whole_static_lib_excludes_bp2build_cc_library_static"],
Liz Kammer47535c52021-06-02 16:02:22 -04001136 }),
1137)`,
1138 },
1139 })
1140}
Liz Kammerd366c902021-06-03 13:43:01 -04001141
1142func TestCCLibraryNoCrtTrue(t *testing.T) {
1143 runCcLibraryTestCase(t, bp2buildTestCase{
1144 description: "cc_library - simple example",
1145 moduleTypeUnderTest: "cc_library",
1146 moduleTypeUnderTestFactory: cc.LibraryFactory,
1147 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1148 filesystem: map[string]string{
1149 "impl.cpp": "",
1150 },
1151 blueprint: soongCcLibraryPreamble + `
1152cc_library_headers { name: "some-headers" }
1153cc_library {
1154 name: "foo-lib",
1155 srcs: ["impl.cpp"],
1156 no_libcrt: true,
Liz Kammer8337ea42021-09-10 10:06:32 -04001157 include_build_directory: false,
Liz Kammerd366c902021-06-03 13:43:01 -04001158}
1159`,
1160 expectedBazelTargets: []string{`cc_library(
1161 name = "foo-lib",
Liz Kammerd366c902021-06-03 13:43:01 -04001162 srcs = ["impl.cpp"],
1163 use_libcrt = False,
1164)`}})
1165}
1166
1167func TestCCLibraryNoCrtFalse(t *testing.T) {
1168 runCcLibraryTestCase(t, bp2buildTestCase{
1169 moduleTypeUnderTest: "cc_library",
1170 moduleTypeUnderTestFactory: cc.LibraryFactory,
1171 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1172 filesystem: map[string]string{
1173 "impl.cpp": "",
1174 },
1175 blueprint: soongCcLibraryPreamble + `
1176cc_library_headers { name: "some-headers" }
1177cc_library {
1178 name: "foo-lib",
1179 srcs: ["impl.cpp"],
1180 no_libcrt: false,
Liz Kammer8337ea42021-09-10 10:06:32 -04001181 include_build_directory: false,
Liz Kammerd366c902021-06-03 13:43:01 -04001182}
1183`,
1184 expectedBazelTargets: []string{`cc_library(
1185 name = "foo-lib",
Liz Kammerd366c902021-06-03 13:43:01 -04001186 srcs = ["impl.cpp"],
1187 use_libcrt = True,
1188)`}})
1189}
1190
1191func TestCCLibraryNoCrtArchVariant(t *testing.T) {
1192 runCcLibraryTestCase(t, bp2buildTestCase{
1193 moduleTypeUnderTest: "cc_library",
1194 moduleTypeUnderTestFactory: cc.LibraryFactory,
1195 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1196 filesystem: map[string]string{
1197 "impl.cpp": "",
1198 },
1199 blueprint: soongCcLibraryPreamble + `
Liz Kammerd366c902021-06-03 13:43:01 -04001200cc_library {
1201 name: "foo-lib",
1202 srcs: ["impl.cpp"],
1203 arch: {
1204 arm: {
1205 no_libcrt: true,
1206 },
1207 x86: {
1208 no_libcrt: true,
1209 },
1210 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001211 include_build_directory: false,
Liz Kammerd366c902021-06-03 13:43:01 -04001212}
1213`,
1214 expectedBazelTargets: []string{`cc_library(
1215 name = "foo-lib",
Liz Kammerd366c902021-06-03 13:43:01 -04001216 srcs = ["impl.cpp"],
1217 use_libcrt = select({
1218 "//build/bazel/platforms/arch:arm": False,
1219 "//build/bazel/platforms/arch:x86": False,
1220 "//conditions:default": None,
1221 }),
1222)`}})
1223}
1224
1225func TestCCLibraryNoCrtArchVariantWithDefault(t *testing.T) {
1226 runCcLibraryTestCase(t, bp2buildTestCase{
1227 moduleTypeUnderTest: "cc_library",
1228 moduleTypeUnderTestFactory: cc.LibraryFactory,
1229 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1230 filesystem: map[string]string{
1231 "impl.cpp": "",
1232 },
1233 blueprint: soongCcLibraryPreamble + `
Liz Kammerd366c902021-06-03 13:43:01 -04001234cc_library {
1235 name: "foo-lib",
1236 srcs: ["impl.cpp"],
1237 no_libcrt: false,
1238 arch: {
1239 arm: {
1240 no_libcrt: true,
1241 },
1242 x86: {
1243 no_libcrt: true,
1244 },
1245 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001246 include_build_directory: false,
Liz Kammerd366c902021-06-03 13:43:01 -04001247}
1248`,
1249 expectedBazelTargets: []string{`cc_library(
1250 name = "foo-lib",
Liz Kammerd366c902021-06-03 13:43:01 -04001251 srcs = ["impl.cpp"],
1252 use_libcrt = select({
1253 "//build/bazel/platforms/arch:arm": False,
1254 "//build/bazel/platforms/arch:x86": False,
1255 "//conditions:default": True,
1256 }),
1257)`}})
1258}
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001259
1260func TestCcLibraryStrip(t *testing.T) {
1261 runCcLibraryTestCase(t, bp2buildTestCase{
1262 description: "cc_library strip args",
1263 moduleTypeUnderTest: "cc_library",
1264 moduleTypeUnderTestFactory: cc.LibraryFactory,
1265 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Liz Kammer8337ea42021-09-10 10:06:32 -04001266 blueprint: soongCcLibraryPreamble + `
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001267cc_library {
1268 name: "nothing",
Liz Kammer8337ea42021-09-10 10:06:32 -04001269 include_build_directory: false,
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001270}
1271cc_library {
1272 name: "keep_symbols",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001273 strip: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001274 keep_symbols: true,
1275 },
1276 include_build_directory: false,
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001277}
1278cc_library {
1279 name: "keep_symbols_and_debug_frame",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001280 strip: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001281 keep_symbols_and_debug_frame: true,
1282 },
1283 include_build_directory: false,
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001284}
1285cc_library {
1286 name: "none",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001287 strip: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001288 none: true,
1289 },
1290 include_build_directory: false,
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001291}
1292cc_library {
1293 name: "keep_symbols_list",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001294 strip: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001295 keep_symbols_list: ["symbol"],
1296 },
1297 include_build_directory: false,
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001298}
1299cc_library {
1300 name: "all",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001301 strip: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001302 all: true,
1303 },
1304 include_build_directory: false,
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001305}
1306`,
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001307 expectedBazelTargets: []string{`cc_library(
1308 name = "all",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001309 strip = {
1310 "all": True,
1311 },
1312)`, `cc_library(
1313 name = "keep_symbols",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001314 strip = {
1315 "keep_symbols": True,
1316 },
1317)`, `cc_library(
1318 name = "keep_symbols_and_debug_frame",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001319 strip = {
1320 "keep_symbols_and_debug_frame": True,
1321 },
1322)`, `cc_library(
1323 name = "keep_symbols_list",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001324 strip = {
1325 "keep_symbols_list": ["symbol"],
1326 },
1327)`, `cc_library(
1328 name = "none",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001329 strip = {
1330 "none": True,
1331 },
1332)`, `cc_library(
1333 name = "nothing",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001334)`},
1335 })
1336}
1337
1338func TestCcLibraryStripWithArch(t *testing.T) {
1339 runCcLibraryTestCase(t, bp2buildTestCase{
1340 description: "cc_library strip args",
1341 moduleTypeUnderTest: "cc_library",
1342 moduleTypeUnderTestFactory: cc.LibraryFactory,
1343 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
Liz Kammer8337ea42021-09-10 10:06:32 -04001344 blueprint: soongCcLibraryPreamble + `
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001345cc_library {
1346 name: "multi-arch",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001347 target: {
1348 darwin: {
1349 strip: {
1350 keep_symbols_list: ["foo", "bar"]
1351 }
1352 },
1353 },
1354 arch: {
1355 arm: {
1356 strip: {
1357 keep_symbols_and_debug_frame: true,
1358 },
1359 },
1360 arm64: {
1361 strip: {
1362 keep_symbols: true,
1363 },
1364 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001365 },
1366 include_build_directory: false,
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001367}
1368`,
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001369 expectedBazelTargets: []string{`cc_library(
1370 name = "multi-arch",
Jingwen Chen3d383bb2021-06-09 07:18:37 +00001371 strip = {
1372 "keep_symbols": select({
1373 "//build/bazel/platforms/arch:arm64": True,
1374 "//conditions:default": None,
1375 }),
1376 "keep_symbols_and_debug_frame": select({
1377 "//build/bazel/platforms/arch:arm": True,
1378 "//conditions:default": None,
1379 }),
1380 "keep_symbols_list": select({
1381 "//build/bazel/platforms/os:darwin": [
1382 "foo",
1383 "bar",
1384 ],
1385 "//conditions:default": [],
1386 }),
1387 },
1388)`},
1389 })
1390}
Chris Parsons51f8c392021-08-03 21:01:05 -04001391
1392func TestCcLibrary_SystemSharedLibsRootEmpty(t *testing.T) {
1393 runCcLibraryTestCase(t, bp2buildTestCase{
1394 description: "cc_library system_shared_libs empty at root",
1395 moduleTypeUnderTest: "cc_library",
1396 moduleTypeUnderTestFactory: cc.LibraryFactory,
1397 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1398 blueprint: soongCcLibraryPreamble + `
1399cc_library {
1400 name: "root_empty",
Liz Kammer8337ea42021-09-10 10:06:32 -04001401 system_shared_libs: [],
1402 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001403}
1404`,
1405 expectedBazelTargets: []string{`cc_library(
1406 name = "root_empty",
Chris Parsons51f8c392021-08-03 21:01:05 -04001407 system_dynamic_deps = [],
1408)`},
1409 })
1410}
1411
1412func TestCcLibrary_SystemSharedLibsStaticEmpty(t *testing.T) {
1413 runCcLibraryTestCase(t, bp2buildTestCase{
1414 description: "cc_library system_shared_libs empty for static variant",
1415 moduleTypeUnderTest: "cc_library",
1416 moduleTypeUnderTestFactory: cc.LibraryFactory,
1417 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1418 blueprint: soongCcLibraryPreamble + `
1419cc_library {
1420 name: "static_empty",
1421 static: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001422 system_shared_libs: [],
1423 },
1424 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001425}
1426`,
1427 expectedBazelTargets: []string{`cc_library(
1428 name = "static_empty",
Chris Parsons51f8c392021-08-03 21:01:05 -04001429 static = {
1430 "system_dynamic_deps": [],
1431 },
1432)`},
1433 })
1434}
1435
1436func TestCcLibrary_SystemSharedLibsSharedEmpty(t *testing.T) {
1437 runCcLibraryTestCase(t, bp2buildTestCase{
1438 description: "cc_library system_shared_libs empty for shared variant",
1439 moduleTypeUnderTest: "cc_library",
1440 moduleTypeUnderTestFactory: cc.LibraryFactory,
1441 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1442 blueprint: soongCcLibraryPreamble + `
1443cc_library {
1444 name: "shared_empty",
1445 shared: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001446 system_shared_libs: [],
1447 },
1448 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001449}
1450`,
1451 expectedBazelTargets: []string{`cc_library(
1452 name = "shared_empty",
Chris Parsons51f8c392021-08-03 21:01:05 -04001453 shared = {
1454 "system_dynamic_deps": [],
1455 },
1456)`},
1457 })
1458}
1459
1460func TestCcLibrary_SystemSharedLibsSharedBionicEmpty(t *testing.T) {
1461 runCcLibraryTestCase(t, bp2buildTestCase{
1462 description: "cc_library system_shared_libs empty for shared, bionic variant",
1463 moduleTypeUnderTest: "cc_library",
1464 moduleTypeUnderTestFactory: cc.LibraryFactory,
1465 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1466 blueprint: soongCcLibraryPreamble + `
1467cc_library {
1468 name: "shared_empty",
1469 target: {
1470 bionic: {
1471 shared: {
1472 system_shared_libs: [],
1473 }
1474 }
Liz Kammer8337ea42021-09-10 10:06:32 -04001475 },
1476 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001477}
1478`,
1479 expectedBazelTargets: []string{`cc_library(
1480 name = "shared_empty",
Chris Parsons51f8c392021-08-03 21:01:05 -04001481 shared = {
1482 "system_dynamic_deps": [],
1483 },
1484)`},
1485 })
1486}
1487
1488func TestCcLibrary_SystemSharedLibsLinuxBionicEmpty(t *testing.T) {
1489 // Note that this behavior is technically incorrect (it's a simplification).
1490 // The correct behavior would be if bp2build wrote `system_dynamic_deps = []`
1491 // only for linux_bionic, but `android` had `["libc", "libdl", "libm"].
1492 // b/195791252 tracks the fix.
1493 runCcLibraryTestCase(t, bp2buildTestCase{
1494 description: "cc_library system_shared_libs empty for linux_bionic variant",
1495 moduleTypeUnderTest: "cc_library",
1496 moduleTypeUnderTestFactory: cc.LibraryFactory,
1497 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1498 blueprint: soongCcLibraryPreamble + `
1499cc_library {
1500 name: "target_linux_bionic_empty",
1501 target: {
1502 linux_bionic: {
1503 system_shared_libs: [],
1504 },
1505 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001506 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001507}
1508`,
1509 expectedBazelTargets: []string{`cc_library(
1510 name = "target_linux_bionic_empty",
Chris Parsons51f8c392021-08-03 21:01:05 -04001511 system_dynamic_deps = [],
1512)`},
1513 })
1514}
1515
1516func TestCcLibrary_SystemSharedLibsBionicEmpty(t *testing.T) {
1517 runCcLibraryTestCase(t, bp2buildTestCase{
1518 description: "cc_library system_shared_libs empty for bionic variant",
1519 moduleTypeUnderTest: "cc_library",
1520 moduleTypeUnderTestFactory: cc.LibraryFactory,
1521 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1522 blueprint: soongCcLibraryPreamble + `
1523cc_library {
1524 name: "target_bionic_empty",
1525 target: {
1526 bionic: {
1527 system_shared_libs: [],
1528 },
1529 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001530 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001531}
1532`,
1533 expectedBazelTargets: []string{`cc_library(
1534 name = "target_bionic_empty",
Chris Parsons51f8c392021-08-03 21:01:05 -04001535 system_dynamic_deps = [],
1536)`},
1537 })
1538}
1539
1540func TestCcLibrary_SystemSharedLibsSharedAndRoot(t *testing.T) {
1541 runCcLibraryTestCase(t, bp2buildTestCase{
1542 description: "cc_library system_shared_libs set for shared and root",
1543 moduleTypeUnderTest: "cc_library",
1544 moduleTypeUnderTestFactory: cc.LibraryFactory,
1545 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
1546 blueprint: soongCcLibraryPreamble + `
Liz Kammer8337ea42021-09-10 10:06:32 -04001547cc_library {
1548 name: "libc",
1549 bazel_module: { bp2build_available: false },
1550}
1551cc_library {
1552 name: "libm",
1553 bazel_module: { bp2build_available: false },
1554}
Chris Parsons51f8c392021-08-03 21:01:05 -04001555
1556cc_library {
1557 name: "foo",
1558 system_shared_libs: ["libc"],
1559 shared: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001560 system_shared_libs: ["libm"],
Chris Parsons51f8c392021-08-03 21:01:05 -04001561 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001562 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001563}
1564`,
1565 expectedBazelTargets: []string{`cc_library(
1566 name = "foo",
Chris Parsons51f8c392021-08-03 21:01:05 -04001567 shared = {
1568 "system_dynamic_deps": [":libm"],
1569 },
1570 system_dynamic_deps = [":libc"],
Chris Parsons51f8c392021-08-03 21:01:05 -04001571)`},
1572 })
1573}