blob: fff0b4eb19ea95a01ece6da61a060ef45fa4ab89 [file] [log] [blame]
Rupert Shuttleworth095081c2021-03-25 09:06:03 +00001// 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 (
18 "android/soong/android"
19 "android/soong/cc"
Chris Parsons484e50a2021-05-13 15:13:04 -040020 "android/soong/genrule"
21
Rupert Shuttleworth095081c2021-03-25 09:06:03 +000022 "testing"
23)
24
25const (
26 // See cc/testing.go for more context
27 soongCcLibraryStaticPreamble = `
28cc_defaults {
Liz Kammer8337ea42021-09-10 10:06:32 -040029 name: "linux_bionic_supported",
Rupert Shuttleworth095081c2021-03-25 09:06:03 +000030}
31
32toolchain_library {
Liz Kammer8337ea42021-09-10 10:06:32 -040033 name: "libclang_rt.builtins-x86_64-android",
34 defaults: ["linux_bionic_supported"],
35 vendor_available: true,
36 vendor_ramdisk_available: true,
37 product_available: true,
38 recovery_available: true,
39 native_bridge_supported: true,
40 src: "",
Rupert Shuttleworth095081c2021-03-25 09:06:03 +000041}`
42)
43
44func TestCcLibraryStaticLoadStatement(t *testing.T) {
45 testCases := []struct {
46 bazelTargets BazelTargets
47 expectedLoadStatements string
48 }{
49 {
50 bazelTargets: BazelTargets{
51 BazelTarget{
52 name: "cc_library_static_target",
53 ruleClass: "cc_library_static",
54 // NOTE: No bzlLoadLocation for native rules
55 },
56 },
57 expectedLoadStatements: ``,
58 },
59 }
60
61 for _, testCase := range testCases {
62 actual := testCase.bazelTargets.LoadStatements()
63 expected := testCase.expectedLoadStatements
64 if actual != expected {
65 t.Fatalf("Expected load statements to be %s, got %s", expected, actual)
66 }
67 }
68
69}
70
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020071func registerCcLibraryStaticModuleTypes(ctx android.RegistrationContext) {
72 cc.RegisterCCBuildComponents(ctx)
73 ctx.RegisterModuleType("toolchain_library", cc.ToolchainLibraryFactory)
74 ctx.RegisterModuleType("cc_library_headers", cc.LibraryHeaderFactory)
75 ctx.RegisterModuleType("genrule", genrule.GenRuleFactory)
Chris Parsons51f8c392021-08-03 21:01:05 -040076 // Required for system_shared_libs dependencies.
77 ctx.RegisterModuleType("cc_library", cc.LibraryFactory)
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020078}
79
80func runCcLibraryStaticTestCase(t *testing.T, tc bp2buildTestCase) {
Liz Kammere4982e82021-05-25 10:39:35 -040081 t.Helper()
Liz Kammer78cfdaa2021-11-08 12:56:31 -050082
83 (&tc).moduleTypeUnderTest = "cc_library_static"
84 (&tc).moduleTypeUnderTestFactory = cc.LibraryStaticFactory
85 (&tc).moduleTypeUnderTestBp2BuildMutator = cc.CcLibraryStaticBp2Build
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020086 runBp2BuildTestCase(t, registerCcLibraryStaticModuleTypes, tc)
87}
88
89func TestCcLibraryStaticSimple(t *testing.T) {
90 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -050091 description: "cc_library_static test",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020092 filesystem: map[string]string{
93 // NOTE: include_dir headers *should not* appear in Bazel hdrs later (?)
94 "include_dir_1/include_dir_1_a.h": "",
95 "include_dir_1/include_dir_1_b.h": "",
96 "include_dir_2/include_dir_2_a.h": "",
97 "include_dir_2/include_dir_2_b.h": "",
98 // NOTE: local_include_dir headers *should not* appear in Bazel hdrs later (?)
99 "local_include_dir_1/local_include_dir_1_a.h": "",
100 "local_include_dir_1/local_include_dir_1_b.h": "",
101 "local_include_dir_2/local_include_dir_2_a.h": "",
102 "local_include_dir_2/local_include_dir_2_b.h": "",
103 // NOTE: export_include_dir headers *should* appear in Bazel hdrs later
104 "export_include_dir_1/export_include_dir_1_a.h": "",
105 "export_include_dir_1/export_include_dir_1_b.h": "",
106 "export_include_dir_2/export_include_dir_2_a.h": "",
107 "export_include_dir_2/export_include_dir_2_b.h": "",
108 // NOTE: Soong implicitly includes headers in the current directory
109 "implicit_include_1.h": "",
110 "implicit_include_2.h": "",
111 },
112 blueprint: soongCcLibraryStaticPreamble + `
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000113cc_library_headers {
114 name: "header_lib_1",
115 export_include_dirs: ["header_lib_1"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400116 bazel_module: { bp2build_available: false },
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000117}
118
119cc_library_headers {
120 name: "header_lib_2",
121 export_include_dirs: ["header_lib_2"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400122 bazel_module: { bp2build_available: false },
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000123}
124
125cc_library_static {
126 name: "static_lib_1",
127 srcs: ["static_lib_1.cc"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400128 bazel_module: { bp2build_available: false },
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000129}
130
131cc_library_static {
132 name: "static_lib_2",
133 srcs: ["static_lib_2.cc"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400134 bazel_module: { bp2build_available: false },
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000135}
136
137cc_library_static {
138 name: "whole_static_lib_1",
139 srcs: ["whole_static_lib_1.cc"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400140 bazel_module: { bp2build_available: false },
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000141}
142
143cc_library_static {
144 name: "whole_static_lib_2",
145 srcs: ["whole_static_lib_2.cc"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400146 bazel_module: { bp2build_available: false },
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000147}
148
149cc_library_static {
150 name: "foo_static",
151 srcs: [
152 "foo_static1.cc",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000153 "foo_static2.cc",
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000154 ],
155 cflags: [
156 "-Dflag1",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000157 "-Dflag2"
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000158 ],
159 static_libs: [
160 "static_lib_1",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000161 "static_lib_2"
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000162 ],
163 whole_static_libs: [
164 "whole_static_lib_1",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000165 "whole_static_lib_2"
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000166 ],
167 include_dirs: [
Jingwen Chened9c17d2021-04-13 07:14:55 +0000168 "include_dir_1",
169 "include_dir_2",
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000170 ],
171 local_include_dirs: [
172 "local_include_dir_1",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000173 "local_include_dir_2",
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000174 ],
175 export_include_dirs: [
Chris Parsonsd6358772021-05-18 18:35:24 -0400176 "export_include_dir_1",
177 "export_include_dir_2"
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000178 ],
179 header_libs: [
180 "header_lib_1",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000181 "header_lib_2"
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000182 ],
183
184 // TODO: Also support export_header_lib_headers
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000185}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500186 expectedBazelTargets: []string{
187 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
188 "absolute_includes": `[
Liz Kammer35687bc2021-09-10 10:07:07 -0400189 "include_dir_1",
190 "include_dir_2",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500191 ]`,
192 "copts": `[
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000193 "-Dflag1",
194 "-Dflag2",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500195 ]`,
196 "export_includes": `[
Liz Kammer5fad5012021-09-09 14:08:21 -0400197 "export_include_dir_1",
198 "export_include_dir_2",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500199 ]`,
200 "implementation_deps": `[
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000201 ":header_lib_1",
202 ":header_lib_2",
203 ":static_lib_1",
204 ":static_lib_2",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500205 ]`,
206 "local_includes": `[
Liz Kammer35687bc2021-09-10 10:07:07 -0400207 "local_include_dir_1",
208 "local_include_dir_2",
209 ".",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500210 ]`,
211 "srcs": `[
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000212 "foo_static1.cc",
213 "foo_static2.cc",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500214 ]`,
215 "whole_archive_deps": `[
Chris Parsons08648312021-05-06 16:23:19 -0400216 ":whole_static_lib_1",
217 ":whole_static_lib_2",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500218 ]`,
219 }),
220 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200221 })
222}
223
224func TestCcLibraryStaticSubpackage(t *testing.T) {
225 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500226 description: "cc_library_static subpackage test",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200227 filesystem: map[string]string{
228 // subpackage with subdirectory
229 "subpackage/Android.bp": "",
230 "subpackage/subpackage_header.h": "",
231 "subpackage/subdirectory/subdirectory_header.h": "",
232 // subsubpackage with subdirectory
233 "subpackage/subsubpackage/Android.bp": "",
234 "subpackage/subsubpackage/subsubpackage_header.h": "",
235 "subpackage/subsubpackage/subdirectory/subdirectory_header.h": "",
236 // subsubsubpackage with subdirectory
237 "subpackage/subsubpackage/subsubsubpackage/Android.bp": "",
238 "subpackage/subsubpackage/subsubsubpackage/subsubsubpackage_header.h": "",
239 "subpackage/subsubpackage/subsubsubpackage/subdirectory/subdirectory_header.h": "",
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000240 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200241 blueprint: soongCcLibraryStaticPreamble + `
Rupert Shuttleworthc143cc52021-04-13 13:08:04 -0400242cc_library_static {
243 name: "foo_static",
Liz Kammer35687bc2021-09-10 10:07:07 -0400244 srcs: [],
Rupert Shuttleworthc143cc52021-04-13 13:08:04 -0400245 include_dirs: [
Liz Kammer35687bc2021-09-10 10:07:07 -0400246 "subpackage",
Rupert Shuttleworthc143cc52021-04-13 13:08:04 -0400247 ],
Rupert Shuttleworthc143cc52021-04-13 13:08:04 -0400248}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500249 expectedBazelTargets: []string{
250 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
251 "absolute_includes": `["subpackage"]`,
252 "local_includes": `["."]`,
253 }),
254 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200255 })
256}
257
258func TestCcLibraryStaticExportIncludeDir(t *testing.T) {
259 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500260 description: "cc_library_static export include dir",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200261 filesystem: map[string]string{
262 // subpackage with subdirectory
263 "subpackage/Android.bp": "",
264 "subpackage/subpackage_header.h": "",
265 "subpackage/subdirectory/subdirectory_header.h": "",
Rupert Shuttleworthc143cc52021-04-13 13:08:04 -0400266 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200267 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chened9c17d2021-04-13 07:14:55 +0000268cc_library_static {
269 name: "foo_static",
270 export_include_dirs: ["subpackage"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400271 include_build_directory: false,
Jingwen Chened9c17d2021-04-13 07:14:55 +0000272}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500273 expectedBazelTargets: []string{
274 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
275 "export_includes": `["subpackage"]`,
276 }),
277 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200278 })
279}
280
281func TestCcLibraryStaticExportSystemIncludeDir(t *testing.T) {
282 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500283 description: "cc_library_static export system include dir",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200284 filesystem: map[string]string{
285 // subpackage with subdirectory
286 "subpackage/Android.bp": "",
287 "subpackage/subpackage_header.h": "",
288 "subpackage/subdirectory/subdirectory_header.h": "",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000289 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200290 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chened9c17d2021-04-13 07:14:55 +0000291cc_library_static {
292 name: "foo_static",
293 export_system_include_dirs: ["subpackage"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400294 include_build_directory: false,
Jingwen Chened9c17d2021-04-13 07:14:55 +0000295}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500296 expectedBazelTargets: []string{
297 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
298 "export_system_includes": `["subpackage"]`,
299 }),
300 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200301 })
302}
303
304func TestCcLibraryStaticManyIncludeDirs(t *testing.T) {
305 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500306 description: "cc_library_static include_dirs, local_include_dirs, export_include_dirs (b/183742505)",
307 dir: "subpackage",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200308 filesystem: map[string]string{
309 // subpackage with subdirectory
310 "subpackage/Android.bp": `
Jingwen Chened9c17d2021-04-13 07:14:55 +0000311cc_library_static {
312 name: "foo_static",
313 // include_dirs are workspace/root relative
314 include_dirs: [
315 "subpackage/subsubpackage",
316 "subpackage2",
317 "subpackage3/subsubpackage"
318 ],
319 local_include_dirs: ["subsubpackage2"], // module dir relative
320 export_include_dirs: ["./exported_subsubpackage"], // module dir relative
321 include_build_directory: true,
322 bazel_module: { bp2build_available: true },
323}`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200324 "subpackage/subsubpackage/header.h": "",
325 "subpackage/subsubpackage2/header.h": "",
326 "subpackage/exported_subsubpackage/header.h": "",
327 "subpackage2/header.h": "",
328 "subpackage3/subsubpackage/header.h": "",
329 },
330 blueprint: soongCcLibraryStaticPreamble,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500331 expectedBazelTargets: []string{
332 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
333 "absolute_includes": `[
Liz Kammer35687bc2021-09-10 10:07:07 -0400334 "subpackage/subsubpackage",
335 "subpackage2",
336 "subpackage3/subsubpackage",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500337 ]`,
338 "export_includes": `["./exported_subsubpackage"]`,
339 "local_includes": `[
Liz Kammer35687bc2021-09-10 10:07:07 -0400340 "subsubpackage2",
341 ".",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500342 ]`,
343 })},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200344 })
345}
346
347func TestCcLibraryStaticIncludeBuildDirectoryDisabled(t *testing.T) {
348 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500349 description: "cc_library_static include_build_directory disabled",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200350 filesystem: map[string]string{
351 // subpackage with subdirectory
352 "subpackage/Android.bp": "",
353 "subpackage/subpackage_header.h": "",
354 "subpackage/subdirectory/subdirectory_header.h": "",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000355 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200356 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chened9c17d2021-04-13 07:14:55 +0000357cc_library_static {
358 name: "foo_static",
359 include_dirs: ["subpackage"], // still used, but local_include_dirs is recommended
360 local_include_dirs: ["subpackage2"],
361 include_build_directory: false,
362}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500363 expectedBazelTargets: []string{
364 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
365 "absolute_includes": `["subpackage"]`,
366 "local_includes": `["subpackage2"]`,
367 }),
368 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200369 })
370}
371
372func TestCcLibraryStaticIncludeBuildDirectoryEnabled(t *testing.T) {
373 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500374 description: "cc_library_static include_build_directory enabled",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200375 filesystem: map[string]string{
376 // subpackage with subdirectory
377 "subpackage/Android.bp": "",
378 "subpackage/subpackage_header.h": "",
379 "subpackage2/Android.bp": "",
380 "subpackage2/subpackage2_header.h": "",
381 "subpackage/subdirectory/subdirectory_header.h": "",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000382 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200383 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chened9c17d2021-04-13 07:14:55 +0000384cc_library_static {
385 name: "foo_static",
386 include_dirs: ["subpackage"], // still used, but local_include_dirs is recommended
387 local_include_dirs: ["subpackage2"],
388 include_build_directory: true,
389}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500390 expectedBazelTargets: []string{
391 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
392 "absolute_includes": `["subpackage"]`,
393 "local_includes": `[
Liz Kammer35687bc2021-09-10 10:07:07 -0400394 "subpackage2",
395 ".",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500396 ]`,
397 }),
398 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200399 })
400}
401
402func TestCcLibraryStaticArchSpecificStaticLib(t *testing.T) {
403 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500404 description: "cc_library_static arch-specific static_libs",
405 filesystem: map[string]string{},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200406 blueprint: soongCcLibraryStaticPreamble + `
Liz Kammer8337ea42021-09-10 10:06:32 -0400407cc_library_static {
408 name: "static_dep",
409 bazel_module: { bp2build_available: false },
410}
411cc_library_static {
412 name: "static_dep2",
413 bazel_module: { bp2build_available: false },
414}
Jingwen Chened9c17d2021-04-13 07:14:55 +0000415cc_library_static {
416 name: "foo_static",
417 arch: { arm64: { static_libs: ["static_dep"], whole_static_libs: ["static_dep2"] } },
Liz Kammer8337ea42021-09-10 10:06:32 -0400418 include_build_directory: false,
Jingwen Chened9c17d2021-04-13 07:14:55 +0000419}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500420 expectedBazelTargets: []string{
421 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
422 "implementation_deps": `select({
Chris Parsons08648312021-05-06 16:23:19 -0400423 "//build/bazel/platforms/arch:arm64": [":static_dep"],
Jingwen Chened9c17d2021-04-13 07:14:55 +0000424 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500425 })`,
426 "whole_archive_deps": `select({
Chris Parsons08648312021-05-06 16:23:19 -0400427 "//build/bazel/platforms/arch:arm64": [":static_dep2"],
428 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500429 })`,
430 }),
431 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200432 })
433}
434
435func TestCcLibraryStaticOsSpecificStaticLib(t *testing.T) {
436 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500437 description: "cc_library_static os-specific static_libs",
438 filesystem: map[string]string{},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200439 blueprint: soongCcLibraryStaticPreamble + `
Liz Kammer8337ea42021-09-10 10:06:32 -0400440cc_library_static {
441 name: "static_dep",
442 bazel_module: { bp2build_available: false },
443}
444cc_library_static {
445 name: "static_dep2",
446 bazel_module: { bp2build_available: false },
447}
Jingwen Chened9c17d2021-04-13 07:14:55 +0000448cc_library_static {
449 name: "foo_static",
450 target: { android: { static_libs: ["static_dep"], whole_static_libs: ["static_dep2"] } },
Liz Kammer8337ea42021-09-10 10:06:32 -0400451 include_build_directory: false,
Jingwen Chened9c17d2021-04-13 07:14:55 +0000452}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500453 expectedBazelTargets: []string{
454 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
455 "implementation_deps": `select({
Chris Parsons08648312021-05-06 16:23:19 -0400456 "//build/bazel/platforms/os:android": [":static_dep"],
Jingwen Chened9c17d2021-04-13 07:14:55 +0000457 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500458 })`,
459 "whole_archive_deps": `select({
Chris Parsons08648312021-05-06 16:23:19 -0400460 "//build/bazel/platforms/os:android": [":static_dep2"],
461 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500462 })`,
463 }),
464 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200465 })
466}
467
468func TestCcLibraryStaticBaseArchOsSpecificStaticLib(t *testing.T) {
469 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500470 description: "cc_library_static base, arch and os-specific static_libs",
471 filesystem: map[string]string{},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200472 blueprint: soongCcLibraryStaticPreamble + `
Liz Kammer8337ea42021-09-10 10:06:32 -0400473cc_library_static {
474 name: "static_dep",
475 bazel_module: { bp2build_available: false },
476}
477cc_library_static {
478 name: "static_dep2",
479 bazel_module: { bp2build_available: false },
480}
481cc_library_static {
482 name: "static_dep3",
483 bazel_module: { bp2build_available: false },
484}
485cc_library_static {
486 name: "static_dep4",
487 bazel_module: { bp2build_available: false },
488}
Jingwen Chened9c17d2021-04-13 07:14:55 +0000489cc_library_static {
490 name: "foo_static",
491 static_libs: ["static_dep"],
492 whole_static_libs: ["static_dep2"],
493 target: { android: { static_libs: ["static_dep3"] } },
494 arch: { arm64: { static_libs: ["static_dep4"] } },
Liz Kammer8337ea42021-09-10 10:06:32 -0400495 include_build_directory: false,
Jingwen Chened9c17d2021-04-13 07:14:55 +0000496}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500497 expectedBazelTargets: []string{
498 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
499 "implementation_deps": `[":static_dep"] + select({
Jingwen Chened9c17d2021-04-13 07:14:55 +0000500 "//build/bazel/platforms/arch:arm64": [":static_dep4"],
501 "//conditions:default": [],
502 }) + select({
503 "//build/bazel/platforms/os:android": [":static_dep3"],
504 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500505 })`,
506 "whole_archive_deps": `[":static_dep2"]`,
507 }),
508 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200509 })
510}
511
512func TestCcLibraryStaticSimpleExcludeSrcs(t *testing.T) {
513 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500514 description: "cc_library_static simple exclude_srcs",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200515 filesystem: map[string]string{
516 "common.c": "",
517 "foo-a.c": "",
518 "foo-excluded.c": "",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000519 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200520 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chene32e9e02021-04-23 09:17:24 +0000521cc_library_static {
522 name: "foo_static",
523 srcs: ["common.c", "foo-*.c"],
524 exclude_srcs: ["foo-excluded.c"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400525 include_build_directory: false,
Jingwen Chene32e9e02021-04-23 09:17:24 +0000526}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500527 expectedBazelTargets: []string{
528 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
529 "srcs_c": `[
Jingwen Chene32e9e02021-04-23 09:17:24 +0000530 "common.c",
531 "foo-a.c",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500532 ]`,
533 }),
534 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200535 })
536}
537
538func TestCcLibraryStaticOneArchSrcs(t *testing.T) {
539 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500540 description: "cc_library_static one arch specific srcs",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200541 filesystem: map[string]string{
542 "common.c": "",
543 "foo-arm.c": "",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000544 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200545 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chene32e9e02021-04-23 09:17:24 +0000546cc_library_static {
547 name: "foo_static",
548 srcs: ["common.c"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400549 arch: { arm: { srcs: ["foo-arm.c"] } },
550 include_build_directory: false,
Jingwen Chene32e9e02021-04-23 09:17:24 +0000551}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500552 expectedBazelTargets: []string{
553 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
554 "srcs_c": `["common.c"] + select({
Jingwen Chene32e9e02021-04-23 09:17:24 +0000555 "//build/bazel/platforms/arch:arm": ["foo-arm.c"],
556 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500557 })`,
558 }),
559 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200560 })
561}
562
563func TestCcLibraryStaticOneArchSrcsExcludeSrcs(t *testing.T) {
564 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500565 description: "cc_library_static one arch specific srcs and exclude_srcs",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200566 filesystem: map[string]string{
567 "common.c": "",
568 "for-arm.c": "",
569 "not-for-arm.c": "",
570 "not-for-anything.c": "",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000571 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200572 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chene32e9e02021-04-23 09:17:24 +0000573cc_library_static {
574 name: "foo_static",
575 srcs: ["common.c", "not-for-*.c"],
576 exclude_srcs: ["not-for-anything.c"],
577 arch: {
578 arm: { srcs: ["for-arm.c"], exclude_srcs: ["not-for-arm.c"] },
579 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400580 include_build_directory: false,
Jingwen Chene32e9e02021-04-23 09:17:24 +0000581}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500582 expectedBazelTargets: []string{
583 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
584 "srcs_c": `["common.c"] + select({
Jingwen Chene32e9e02021-04-23 09:17:24 +0000585 "//build/bazel/platforms/arch:arm": ["for-arm.c"],
586 "//conditions:default": ["not-for-arm.c"],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500587 })`,
588 }),
589 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200590 })
591}
592
593func TestCcLibraryStaticTwoArchExcludeSrcs(t *testing.T) {
594 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500595 description: "cc_library_static arch specific exclude_srcs for 2 architectures",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200596 filesystem: map[string]string{
597 "common.c": "",
598 "for-arm.c": "",
599 "for-x86.c": "",
600 "not-for-arm.c": "",
601 "not-for-x86.c": "",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000602 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200603 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chene32e9e02021-04-23 09:17:24 +0000604cc_library_static {
605 name: "foo_static",
606 srcs: ["common.c", "not-for-*.c"],
607 exclude_srcs: ["not-for-everything.c"],
608 arch: {
609 arm: { srcs: ["for-arm.c"], exclude_srcs: ["not-for-arm.c"] },
610 x86: { srcs: ["for-x86.c"], exclude_srcs: ["not-for-x86.c"] },
611 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400612 include_build_directory: false,
Jingwen Chene32e9e02021-04-23 09:17:24 +0000613} `,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500614 expectedBazelTargets: []string{
615 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
616 "srcs_c": `["common.c"] + select({
Jingwen Chene32e9e02021-04-23 09:17:24 +0000617 "//build/bazel/platforms/arch:arm": [
Jingwen Chene32e9e02021-04-23 09:17:24 +0000618 "not-for-x86.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400619 "for-arm.c",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000620 ],
621 "//build/bazel/platforms/arch:x86": [
Jingwen Chene32e9e02021-04-23 09:17:24 +0000622 "not-for-arm.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400623 "for-x86.c",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000624 ],
625 "//conditions:default": [
626 "not-for-arm.c",
627 "not-for-x86.c",
628 ],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500629 })`,
630 }),
631 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200632 })
633}
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500634
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200635func TestCcLibraryStaticFourArchExcludeSrcs(t *testing.T) {
636 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500637 description: "cc_library_static arch specific exclude_srcs for 4 architectures",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200638 filesystem: map[string]string{
639 "common.c": "",
640 "for-arm.c": "",
641 "for-arm64.c": "",
642 "for-x86.c": "",
643 "for-x86_64.c": "",
644 "not-for-arm.c": "",
645 "not-for-arm64.c": "",
646 "not-for-x86.c": "",
647 "not-for-x86_64.c": "",
648 "not-for-everything.c": "",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000649 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200650 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chene32e9e02021-04-23 09:17:24 +0000651cc_library_static {
652 name: "foo_static",
653 srcs: ["common.c", "not-for-*.c"],
654 exclude_srcs: ["not-for-everything.c"],
655 arch: {
656 arm: { srcs: ["for-arm.c"], exclude_srcs: ["not-for-arm.c"] },
657 arm64: { srcs: ["for-arm64.c"], exclude_srcs: ["not-for-arm64.c"] },
658 x86: { srcs: ["for-x86.c"], exclude_srcs: ["not-for-x86.c"] },
659 x86_64: { srcs: ["for-x86_64.c"], exclude_srcs: ["not-for-x86_64.c"] },
Liz Kammer8337ea42021-09-10 10:06:32 -0400660 },
661 include_build_directory: false,
Jingwen Chene32e9e02021-04-23 09:17:24 +0000662} `,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500663 expectedBazelTargets: []string{
664 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
665 "srcs_c": `["common.c"] + select({
Jingwen Chene32e9e02021-04-23 09:17:24 +0000666 "//build/bazel/platforms/arch:arm": [
Jingwen Chene32e9e02021-04-23 09:17:24 +0000667 "not-for-arm64.c",
668 "not-for-x86.c",
669 "not-for-x86_64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400670 "for-arm.c",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000671 ],
672 "//build/bazel/platforms/arch:arm64": [
Jingwen Chene32e9e02021-04-23 09:17:24 +0000673 "not-for-arm.c",
674 "not-for-x86.c",
675 "not-for-x86_64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400676 "for-arm64.c",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000677 ],
678 "//build/bazel/platforms/arch:x86": [
Jingwen Chene32e9e02021-04-23 09:17:24 +0000679 "not-for-arm.c",
680 "not-for-arm64.c",
681 "not-for-x86_64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400682 "for-x86.c",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000683 ],
684 "//build/bazel/platforms/arch:x86_64": [
Jingwen Chene32e9e02021-04-23 09:17:24 +0000685 "not-for-arm.c",
686 "not-for-arm64.c",
687 "not-for-x86.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400688 "for-x86_64.c",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000689 ],
690 "//conditions:default": [
691 "not-for-arm.c",
692 "not-for-arm64.c",
693 "not-for-x86.c",
694 "not-for-x86_64.c",
695 ],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500696 })`,
697 }),
698 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200699 })
700}
701
Liz Kammer2b07ec72021-05-26 15:08:27 -0400702func TestCcLibraryStaticOneArchEmpty(t *testing.T) {
703 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500704 description: "cc_library_static one arch empty",
Liz Kammer2b07ec72021-05-26 15:08:27 -0400705 filesystem: map[string]string{
706 "common.cc": "",
707 "foo-no-arm.cc": "",
708 "foo-excluded.cc": "",
709 },
710 blueprint: soongCcLibraryStaticPreamble + `
711cc_library_static {
712 name: "foo_static",
713 srcs: ["common.cc", "foo-*.cc"],
714 exclude_srcs: ["foo-excluded.cc"],
715 arch: {
716 arm: { exclude_srcs: ["foo-no-arm.cc"] },
717 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400718 include_build_directory: false,
Liz Kammer2b07ec72021-05-26 15:08:27 -0400719}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500720 expectedBazelTargets: []string{
721 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
722 "srcs": `["common.cc"] + select({
Liz Kammer2b07ec72021-05-26 15:08:27 -0400723 "//build/bazel/platforms/arch:arm": [],
724 "//conditions:default": ["foo-no-arm.cc"],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500725 })`,
726 }),
727 },
Liz Kammer2b07ec72021-05-26 15:08:27 -0400728 })
729}
730
731func TestCcLibraryStaticOneArchEmptyOtherSet(t *testing.T) {
732 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500733 description: "cc_library_static one arch empty other set",
Liz Kammer2b07ec72021-05-26 15:08:27 -0400734 filesystem: map[string]string{
735 "common.cc": "",
736 "foo-no-arm.cc": "",
737 "x86-only.cc": "",
738 "foo-excluded.cc": "",
739 },
740 blueprint: soongCcLibraryStaticPreamble + `
741cc_library_static {
742 name: "foo_static",
743 srcs: ["common.cc", "foo-*.cc"],
744 exclude_srcs: ["foo-excluded.cc"],
745 arch: {
746 arm: { exclude_srcs: ["foo-no-arm.cc"] },
747 x86: { srcs: ["x86-only.cc"] },
748 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400749 include_build_directory: false,
Liz Kammer2b07ec72021-05-26 15:08:27 -0400750}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500751 expectedBazelTargets: []string{
752 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
753 "srcs": `["common.cc"] + select({
Liz Kammer2b07ec72021-05-26 15:08:27 -0400754 "//build/bazel/platforms/arch:arm": [],
755 "//build/bazel/platforms/arch:x86": [
756 "foo-no-arm.cc",
757 "x86-only.cc",
758 ],
759 "//conditions:default": ["foo-no-arm.cc"],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500760 })`,
761 }),
762 },
Liz Kammer2b07ec72021-05-26 15:08:27 -0400763 })
764}
765
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200766func TestCcLibraryStaticMultipleDepSameName(t *testing.T) {
767 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500768 description: "cc_library_static multiple dep same name panic",
769 filesystem: map[string]string{},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200770 blueprint: soongCcLibraryStaticPreamble + `
Liz Kammer8337ea42021-09-10 10:06:32 -0400771cc_library_static {
772 name: "static_dep",
773 bazel_module: { bp2build_available: false },
774}
Liz Kammer2b50ce62021-04-26 15:47:28 -0400775cc_library_static {
776 name: "foo_static",
Chris Parsons08648312021-05-06 16:23:19 -0400777 static_libs: ["static_dep", "static_dep"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400778 include_build_directory: false,
Liz Kammer2b50ce62021-04-26 15:47:28 -0400779}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500780 expectedBazelTargets: []string{
781 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
782 "implementation_deps": `[":static_dep"]`,
783 }),
784 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200785 })
786}
787
788func TestCcLibraryStaticOneMultilibSrcsExcludeSrcs(t *testing.T) {
789 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500790 description: "cc_library_static 1 multilib srcs and exclude_srcs",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200791 filesystem: map[string]string{
792 "common.c": "",
793 "for-lib32.c": "",
794 "not-for-lib32.c": "",
Liz Kammer2b50ce62021-04-26 15:47:28 -0400795 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200796 blueprint: soongCcLibraryStaticPreamble + `
Chris Parsonsc424b762021-04-29 18:06:50 -0400797cc_library_static {
798 name: "foo_static",
799 srcs: ["common.c", "not-for-*.c"],
800 multilib: {
801 lib32: { srcs: ["for-lib32.c"], exclude_srcs: ["not-for-lib32.c"] },
802 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400803 include_build_directory: false,
Chris Parsonsc424b762021-04-29 18:06:50 -0400804} `,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500805 expectedBazelTargets: []string{
806 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
807 "srcs_c": `["common.c"] + select({
Chris Parsonsc424b762021-04-29 18:06:50 -0400808 "//build/bazel/platforms/arch:arm": ["for-lib32.c"],
809 "//build/bazel/platforms/arch:x86": ["for-lib32.c"],
810 "//conditions:default": ["not-for-lib32.c"],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500811 })`,
812 }),
813 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200814 })
815}
816
817func TestCcLibraryStaticTwoMultilibSrcsExcludeSrcs(t *testing.T) {
818 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500819 description: "cc_library_static 2 multilib srcs and exclude_srcs",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200820 filesystem: map[string]string{
821 "common.c": "",
822 "for-lib32.c": "",
823 "for-lib64.c": "",
824 "not-for-lib32.c": "",
825 "not-for-lib64.c": "",
Chris Parsonsc424b762021-04-29 18:06:50 -0400826 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200827 blueprint: soongCcLibraryStaticPreamble + `
Chris Parsonsc424b762021-04-29 18:06:50 -0400828cc_library_static {
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500829 name: "foo_static",
Chris Parsonsc424b762021-04-29 18:06:50 -0400830 srcs: ["common.c", "not-for-*.c"],
831 multilib: {
832 lib32: { srcs: ["for-lib32.c"], exclude_srcs: ["not-for-lib32.c"] },
833 lib64: { srcs: ["for-lib64.c"], exclude_srcs: ["not-for-lib64.c"] },
834 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400835 include_build_directory: false,
Chris Parsonsc424b762021-04-29 18:06:50 -0400836} `,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500837 expectedBazelTargets: []string{
838 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
839 "srcs_c": `["common.c"] + select({
Chris Parsonsc424b762021-04-29 18:06:50 -0400840 "//build/bazel/platforms/arch:arm": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400841 "not-for-lib64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400842 "for-lib32.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400843 ],
844 "//build/bazel/platforms/arch:arm64": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400845 "not-for-lib32.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400846 "for-lib64.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400847 ],
848 "//build/bazel/platforms/arch:x86": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400849 "not-for-lib64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400850 "for-lib32.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400851 ],
852 "//build/bazel/platforms/arch:x86_64": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400853 "not-for-lib32.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400854 "for-lib64.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400855 ],
856 "//conditions:default": [
857 "not-for-lib32.c",
858 "not-for-lib64.c",
859 ],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500860 })`,
861 }),
862 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200863 })
864}
865
866func TestCcLibrarySTaticArchMultilibSrcsExcludeSrcs(t *testing.T) {
867 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500868 description: "cc_library_static arch and multilib srcs and exclude_srcs",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200869 filesystem: map[string]string{
870 "common.c": "",
871 "for-arm.c": "",
872 "for-arm64.c": "",
873 "for-x86.c": "",
874 "for-x86_64.c": "",
875 "for-lib32.c": "",
876 "for-lib64.c": "",
877 "not-for-arm.c": "",
878 "not-for-arm64.c": "",
879 "not-for-x86.c": "",
880 "not-for-x86_64.c": "",
881 "not-for-lib32.c": "",
882 "not-for-lib64.c": "",
883 "not-for-everything.c": "",
Chris Parsonsc424b762021-04-29 18:06:50 -0400884 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200885 blueprint: soongCcLibraryStaticPreamble + `
Chris Parsonsc424b762021-04-29 18:06:50 -0400886cc_library_static {
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500887 name: "foo_static",
Chris Parsonsc424b762021-04-29 18:06:50 -0400888 srcs: ["common.c", "not-for-*.c"],
889 exclude_srcs: ["not-for-everything.c"],
890 arch: {
891 arm: { srcs: ["for-arm.c"], exclude_srcs: ["not-for-arm.c"] },
892 arm64: { srcs: ["for-arm64.c"], exclude_srcs: ["not-for-arm64.c"] },
893 x86: { srcs: ["for-x86.c"], exclude_srcs: ["not-for-x86.c"] },
894 x86_64: { srcs: ["for-x86_64.c"], exclude_srcs: ["not-for-x86_64.c"] },
895 },
896 multilib: {
897 lib32: { srcs: ["for-lib32.c"], exclude_srcs: ["not-for-lib32.c"] },
898 lib64: { srcs: ["for-lib64.c"], exclude_srcs: ["not-for-lib64.c"] },
899 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400900 include_build_directory: false,
Chris Parsonsc424b762021-04-29 18:06:50 -0400901}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500902 expectedBazelTargets: []string{
903 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
904 "srcs_c": `["common.c"] + select({
Chris Parsonsc424b762021-04-29 18:06:50 -0400905 "//build/bazel/platforms/arch:arm": [
Liz Kammer9bad9d62021-10-11 15:40:35 -0400906 "not-for-arm64.c",
907 "not-for-lib64.c",
908 "not-for-x86.c",
909 "not-for-x86_64.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400910 "for-arm.c",
911 "for-lib32.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400912 ],
913 "//build/bazel/platforms/arch:arm64": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400914 "not-for-arm.c",
915 "not-for-lib32.c",
916 "not-for-x86.c",
917 "not-for-x86_64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400918 "for-arm64.c",
919 "for-lib64.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400920 ],
921 "//build/bazel/platforms/arch:x86": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400922 "not-for-arm.c",
923 "not-for-arm64.c",
924 "not-for-lib64.c",
925 "not-for-x86_64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400926 "for-x86.c",
927 "for-lib32.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400928 ],
929 "//build/bazel/platforms/arch:x86_64": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400930 "not-for-arm.c",
931 "not-for-arm64.c",
932 "not-for-lib32.c",
933 "not-for-x86.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400934 "for-x86_64.c",
935 "for-lib64.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400936 ],
937 "//conditions:default": [
938 "not-for-arm.c",
939 "not-for-arm64.c",
940 "not-for-lib32.c",
941 "not-for-lib64.c",
942 "not-for-x86.c",
943 "not-for-x86_64.c",
944 ],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500945 })`,
946 }),
947 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200948 })
949}
950
Liz Kammerae3994e2021-10-19 09:45:48 -0400951func TestCcLibraryStaticGeneratedHeadersAllPartitions(t *testing.T) {
952 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammerae3994e2021-10-19 09:45:48 -0400953 blueprint: soongCcLibraryStaticPreamble + `
954genrule {
955 name: "generated_hdr",
956 cmd: "nothing to see here",
957}
958
Liz Kammere6583482021-10-19 13:56:10 -0400959genrule {
960 name: "export_generated_hdr",
961 cmd: "nothing to see here",
962}
963
Liz Kammerae3994e2021-10-19 09:45:48 -0400964cc_library_static {
965 name: "foo_static",
966 srcs: ["cpp_src.cpp", "as_src.S", "c_src.c"],
Liz Kammere6583482021-10-19 13:56:10 -0400967 generated_headers: ["generated_hdr", "export_generated_hdr"],
968 export_generated_headers: ["export_generated_hdr"],
Liz Kammerae3994e2021-10-19 09:45:48 -0400969 include_build_directory: false,
970}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500971 expectedBazelTargets: []string{
972 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
Liz Kammer1263d9b2021-12-10 14:28:20 -0500973 "export_includes": `["."]`,
974 "local_includes": `["."]`,
975 "hdrs": `[":export_generated_hdr"]`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500976 "srcs": `[
Liz Kammerae3994e2021-10-19 09:45:48 -0400977 "cpp_src.cpp",
978 ":generated_hdr",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500979 ]`,
980 "srcs_as": `[
Liz Kammerae3994e2021-10-19 09:45:48 -0400981 "as_src.S",
982 ":generated_hdr",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500983 ]`,
984 "srcs_c": `[
Liz Kammerae3994e2021-10-19 09:45:48 -0400985 "c_src.c",
986 ":generated_hdr",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500987 ]`,
988 }),
989 },
Liz Kammerae3994e2021-10-19 09:45:48 -0400990 })
991}
992
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200993func TestCcLibraryStaticArchSrcsExcludeSrcsGeneratedFiles(t *testing.T) {
994 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500995 description: "cc_library_static arch srcs/exclude_srcs with generated files",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200996 filesystem: map[string]string{
Chris Parsons990c4f42021-05-25 12:10:58 -0400997 "common.cpp": "",
998 "for-x86.cpp": "",
999 "not-for-x86.cpp": "",
1000 "not-for-everything.cpp": "",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +02001001 "dep/Android.bp": `
Chris Parsons484e50a2021-05-13 15:13:04 -04001002genrule {
Liz Kammer8337ea42021-09-10 10:06:32 -04001003 name: "generated_src_other_pkg",
Liz Kammer8337ea42021-09-10 10:06:32 -04001004 cmd: "nothing to see here",
Chris Parsons484e50a2021-05-13 15:13:04 -04001005}
1006
1007genrule {
Liz Kammer8337ea42021-09-10 10:06:32 -04001008 name: "generated_hdr_other_pkg",
Liz Kammer8337ea42021-09-10 10:06:32 -04001009 cmd: "nothing to see here",
Chris Parsons484e50a2021-05-13 15:13:04 -04001010}
1011
1012genrule {
Liz Kammer8337ea42021-09-10 10:06:32 -04001013 name: "generated_hdr_other_pkg_x86",
Liz Kammer222bdcf2021-10-11 14:15:51 -04001014 cmd: "nothing to see here",
1015}
1016
1017genrule {
1018 name: "generated_hdr_other_pkg_android",
Liz Kammer8337ea42021-09-10 10:06:32 -04001019 cmd: "nothing to see here",
Chris Parsons484e50a2021-05-13 15:13:04 -04001020}`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +02001021 },
1022 blueprint: soongCcLibraryStaticPreamble + `
Chris Parsons484e50a2021-05-13 15:13:04 -04001023genrule {
1024 name: "generated_src",
Chris Parsons484e50a2021-05-13 15:13:04 -04001025 cmd: "nothing to see here",
1026}
1027
1028genrule {
Liz Kammer222bdcf2021-10-11 14:15:51 -04001029 name: "generated_src_not_x86",
1030 cmd: "nothing to see here",
1031}
1032
1033genrule {
1034 name: "generated_src_android",
Chris Parsons484e50a2021-05-13 15:13:04 -04001035 cmd: "nothing to see here",
1036}
1037
1038genrule {
1039 name: "generated_hdr",
Chris Parsons484e50a2021-05-13 15:13:04 -04001040 cmd: "nothing to see here",
1041}
1042
1043cc_library_static {
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001044 name: "foo_static",
Liz Kammer222bdcf2021-10-11 14:15:51 -04001045 srcs: ["common.cpp", "not-for-*.cpp"],
1046 exclude_srcs: ["not-for-everything.cpp"],
1047 generated_sources: ["generated_src", "generated_src_other_pkg", "generated_src_not_x86"],
1048 generated_headers: ["generated_hdr", "generated_hdr_other_pkg"],
Liz Kammer1263d9b2021-12-10 14:28:20 -05001049 export_generated_headers: ["generated_hdr_other_pkg"],
Liz Kammer222bdcf2021-10-11 14:15:51 -04001050 arch: {
1051 x86: {
1052 srcs: ["for-x86.cpp"],
1053 exclude_srcs: ["not-for-x86.cpp"],
1054 generated_headers: ["generated_hdr_other_pkg_x86"],
1055 exclude_generated_sources: ["generated_src_not_x86"],
Liz Kammer1263d9b2021-12-10 14:28:20 -05001056 export_generated_headers: ["generated_hdr_other_pkg_x86"],
Liz Kammer222bdcf2021-10-11 14:15:51 -04001057 },
1058 },
1059 target: {
1060 android: {
1061 generated_sources: ["generated_src_android"],
1062 generated_headers: ["generated_hdr_other_pkg_android"],
Liz Kammer1263d9b2021-12-10 14:28:20 -05001063 export_generated_headers: ["generated_hdr_other_pkg_android"],
Liz Kammer222bdcf2021-10-11 14:15:51 -04001064 },
1065 },
1066
Liz Kammer8337ea42021-09-10 10:06:32 -04001067 include_build_directory: false,
Chris Parsons484e50a2021-05-13 15:13:04 -04001068}
1069`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001070 expectedBazelTargets: []string{
1071 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
1072 "srcs": `[
Chris Parsons990c4f42021-05-25 12:10:58 -04001073 "common.cpp",
Liz Kammer9bad9d62021-10-11 15:40:35 -04001074 ":generated_src",
1075 "//dep:generated_src_other_pkg",
Liz Kammerae3994e2021-10-19 09:45:48 -04001076 ":generated_hdr",
Chris Parsons484e50a2021-05-13 15:13:04 -04001077 ] + select({
Liz Kammer1263d9b2021-12-10 14:28:20 -05001078 "//build/bazel/platforms/arch:x86": ["for-x86.cpp"],
Liz Kammer222bdcf2021-10-11 14:15:51 -04001079 "//conditions:default": [
Liz Kammer222bdcf2021-10-11 14:15:51 -04001080 "not-for-x86.cpp",
Liz Kammer9bad9d62021-10-11 15:40:35 -04001081 ":generated_src_not_x86",
Liz Kammer222bdcf2021-10-11 14:15:51 -04001082 ],
1083 }) + select({
Liz Kammer1263d9b2021-12-10 14:28:20 -05001084 "//build/bazel/platforms/os:android": [":generated_src_android"],
Liz Kammer222bdcf2021-10-11 14:15:51 -04001085 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001086 })`,
Liz Kammer1263d9b2021-12-10 14:28:20 -05001087 "hdrs": `["//dep:generated_hdr_other_pkg"] + select({
1088 "//build/bazel/platforms/arch:x86": ["//dep:generated_hdr_other_pkg_x86"],
1089 "//conditions:default": [],
1090 }) + select({
1091 "//build/bazel/platforms/os:android": ["//dep:generated_hdr_other_pkg_android"],
1092 "//conditions:default": [],
1093 })`,
1094 "local_includes": `["."]`,
1095 "export_absolute_includes": `["dep"]`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001096 }),
1097 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +02001098 })
Rupert Shuttleworth095081c2021-03-25 09:06:03 +00001099}
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001100
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001101func TestCcLibraryStaticGetTargetProperties(t *testing.T) {
1102 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1103
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001104 description: "cc_library_static complex GetTargetProperties",
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001105 blueprint: soongCcLibraryStaticPreamble + `
1106cc_library_static {
1107 name: "foo_static",
1108 target: {
1109 android: {
1110 srcs: ["android_src.c"],
1111 },
1112 android_arm: {
1113 srcs: ["android_arm_src.c"],
1114 },
1115 android_arm64: {
1116 srcs: ["android_arm64_src.c"],
1117 },
1118 android_x86: {
1119 srcs: ["android_x86_src.c"],
1120 },
1121 android_x86_64: {
1122 srcs: ["android_x86_64_src.c"],
1123 },
1124 linux_bionic_arm64: {
1125 srcs: ["linux_bionic_arm64_src.c"],
1126 },
1127 linux_bionic_x86_64: {
1128 srcs: ["linux_bionic_x86_64_src.c"],
1129 },
1130 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001131 include_build_directory: false,
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001132}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001133 expectedBazelTargets: []string{
1134 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
1135 "srcs_c": `select({
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001136 "//build/bazel/platforms/os:android": ["android_src.c"],
1137 "//conditions:default": [],
1138 }) + select({
Rupert Shuttleworthffd45822021-05-14 03:02:34 -04001139 "//build/bazel/platforms/os_arch:android_arm": ["android_arm_src.c"],
1140 "//build/bazel/platforms/os_arch:android_arm64": ["android_arm64_src.c"],
1141 "//build/bazel/platforms/os_arch:android_x86": ["android_x86_src.c"],
1142 "//build/bazel/platforms/os_arch:android_x86_64": ["android_x86_64_src.c"],
Rupert Shuttleworthffd45822021-05-14 03:02:34 -04001143 "//build/bazel/platforms/os_arch:linux_bionic_arm64": ["linux_bionic_arm64_src.c"],
1144 "//build/bazel/platforms/os_arch:linux_bionic_x86_64": ["linux_bionic_x86_64_src.c"],
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001145 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001146 })`,
1147 }),
1148 },
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001149 })
1150}
1151
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001152func TestCcLibraryStaticProductVariableSelects(t *testing.T) {
1153 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001154 description: "cc_library_static product variable selects",
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001155 blueprint: soongCcLibraryStaticPreamble + `
1156cc_library_static {
1157 name: "foo_static",
1158 srcs: ["common.c"],
1159 product_variables: {
1160 malloc_not_svelte: {
1161 cflags: ["-Wmalloc_not_svelte"],
1162 },
1163 malloc_zero_contents: {
1164 cflags: ["-Wmalloc_zero_contents"],
1165 },
1166 binder32bit: {
1167 cflags: ["-Wbinder32bit"],
1168 },
1169 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001170 include_build_directory: false,
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001171} `,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001172 expectedBazelTargets: []string{
1173 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
1174 "copts": `select({
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001175 "//build/bazel/product_variables:binder32bit": ["-Wbinder32bit"],
1176 "//conditions:default": [],
1177 }) + select({
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001178 "//build/bazel/product_variables:malloc_not_svelte": ["-Wmalloc_not_svelte"],
1179 "//conditions:default": [],
1180 }) + select({
1181 "//build/bazel/product_variables:malloc_zero_contents": ["-Wmalloc_zero_contents"],
1182 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001183 })`,
1184 "srcs_c": `["common.c"]`,
1185 }),
1186 },
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001187 })
1188}
1189
1190func TestCcLibraryStaticProductVariableArchSpecificSelects(t *testing.T) {
1191 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001192 description: "cc_library_static arch-specific product variable selects",
1193 filesystem: map[string]string{},
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001194 blueprint: soongCcLibraryStaticPreamble + `
1195cc_library_static {
1196 name: "foo_static",
1197 srcs: ["common.c"],
1198 product_variables: {
1199 malloc_not_svelte: {
1200 cflags: ["-Wmalloc_not_svelte"],
1201 },
1202 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001203 arch: {
1204 arm64: {
1205 product_variables: {
1206 malloc_not_svelte: {
1207 cflags: ["-Warm64_malloc_not_svelte"],
1208 },
1209 },
1210 },
1211 },
1212 multilib: {
1213 lib32: {
1214 product_variables: {
1215 malloc_not_svelte: {
1216 cflags: ["-Wlib32_malloc_not_svelte"],
1217 },
1218 },
1219 },
1220 },
1221 target: {
1222 android: {
1223 product_variables: {
1224 malloc_not_svelte: {
1225 cflags: ["-Wandroid_malloc_not_svelte"],
1226 },
1227 },
1228 }
1229 },
1230 include_build_directory: false,
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001231} `,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001232 expectedBazelTargets: []string{
1233 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
1234 "copts": `select({
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001235 "//build/bazel/product_variables:malloc_not_svelte": ["-Wmalloc_not_svelte"],
1236 "//conditions:default": [],
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001237 }) + select({
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001238 "//build/bazel/product_variables:malloc_not_svelte-android": ["-Wandroid_malloc_not_svelte"],
1239 "//conditions:default": [],
1240 }) + select({
1241 "//build/bazel/product_variables:malloc_not_svelte-arm": ["-Wlib32_malloc_not_svelte"],
1242 "//conditions:default": [],
1243 }) + select({
1244 "//build/bazel/product_variables:malloc_not_svelte-arm64": ["-Warm64_malloc_not_svelte"],
1245 "//conditions:default": [],
1246 }) + select({
1247 "//build/bazel/product_variables:malloc_not_svelte-x86": ["-Wlib32_malloc_not_svelte"],
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001248 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001249 })`,
1250 "srcs_c": `["common.c"]`,
1251 }),
1252 },
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001253 })
1254}
Liz Kammerba7a9c52021-05-26 08:45:30 -04001255
1256func TestCcLibraryStaticProductVariableStringReplacement(t *testing.T) {
1257 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001258 description: "cc_library_static product variable string replacement",
1259 filesystem: map[string]string{},
Liz Kammerba7a9c52021-05-26 08:45:30 -04001260 blueprint: soongCcLibraryStaticPreamble + `
1261cc_library_static {
1262 name: "foo_static",
Chris Parsons69fa9f92021-07-13 11:47:44 -04001263 srcs: ["common.S"],
Liz Kammerba7a9c52021-05-26 08:45:30 -04001264 product_variables: {
1265 platform_sdk_version: {
1266 asflags: ["-DPLATFORM_SDK_VERSION=%d"],
1267 },
1268 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001269 include_build_directory: false,
Liz Kammerba7a9c52021-05-26 08:45:30 -04001270} `,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001271 expectedBazelTargets: []string{
1272 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
1273 "asflags": `select({
Liz Kammerba7a9c52021-05-26 08:45:30 -04001274 "//build/bazel/product_variables:platform_sdk_version": ["-DPLATFORM_SDK_VERSION=$(Platform_sdk_version)"],
1275 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001276 })`,
1277 "srcs_as": `["common.S"]`,
1278 }),
1279 },
Liz Kammerba7a9c52021-05-26 08:45:30 -04001280 })
1281}
Chris Parsons51f8c392021-08-03 21:01:05 -04001282
1283func TestStaticLibrary_SystemSharedLibsRootEmpty(t *testing.T) {
1284 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001285 description: "cc_library_static system_shared_lib empty root",
Chris Parsons51f8c392021-08-03 21:01:05 -04001286 blueprint: soongCcLibraryStaticPreamble + `
1287cc_library_static {
1288 name: "root_empty",
Liz Kammer8337ea42021-09-10 10:06:32 -04001289 system_shared_libs: [],
1290 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001291}
1292`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001293 expectedBazelTargets: []string{
1294 makeBazelTarget("cc_library_static", "root_empty", attrNameToString{
1295 "system_dynamic_deps": `[]`,
1296 }),
1297 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001298 })
1299}
1300
1301func TestStaticLibrary_SystemSharedLibsStaticEmpty(t *testing.T) {
1302 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001303 description: "cc_library_static system_shared_lib empty static default",
Chris Parsons51f8c392021-08-03 21:01:05 -04001304 blueprint: soongCcLibraryStaticPreamble + `
1305cc_defaults {
1306 name: "static_empty_defaults",
1307 static: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001308 system_shared_libs: [],
1309 },
1310 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001311}
1312cc_library_static {
1313 name: "static_empty",
Liz Kammer8337ea42021-09-10 10:06:32 -04001314 defaults: ["static_empty_defaults"],
Chris Parsons51f8c392021-08-03 21:01:05 -04001315}
1316`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001317 expectedBazelTargets: []string{
1318 makeBazelTarget("cc_library_static", "static_empty", attrNameToString{
1319 "system_dynamic_deps": `[]`,
1320 }),
1321 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001322 })
1323}
1324
1325func TestStaticLibrary_SystemSharedLibsBionicEmpty(t *testing.T) {
1326 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001327 description: "cc_library_static system_shared_lib empty for bionic variant",
Chris Parsons51f8c392021-08-03 21:01:05 -04001328 blueprint: soongCcLibraryStaticPreamble + `
1329cc_library_static {
1330 name: "target_bionic_empty",
1331 target: {
1332 bionic: {
1333 system_shared_libs: [],
1334 },
1335 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001336 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001337}
1338`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001339 expectedBazelTargets: []string{
1340 makeBazelTarget("cc_library_static", "target_bionic_empty", attrNameToString{
1341 "system_dynamic_deps": `[]`,
1342 }),
1343 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001344 })
1345}
1346
1347func TestStaticLibrary_SystemSharedLibsLinuxBionicEmpty(t *testing.T) {
1348 // Note that this behavior is technically incorrect (it's a simplification).
1349 // The correct behavior would be if bp2build wrote `system_dynamic_deps = []`
1350 // only for linux_bionic, but `android` had `["libc", "libdl", "libm"].
1351 // b/195791252 tracks the fix.
1352 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001353 description: "cc_library_static system_shared_lib empty for linux_bionic variant",
Chris Parsons51f8c392021-08-03 21:01:05 -04001354 blueprint: soongCcLibraryStaticPreamble + `
1355cc_library_static {
1356 name: "target_linux_bionic_empty",
1357 target: {
1358 linux_bionic: {
1359 system_shared_libs: [],
1360 },
1361 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001362 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001363}
1364`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001365 expectedBazelTargets: []string{
1366 makeBazelTarget("cc_library_static", "target_linux_bionic_empty", attrNameToString{
1367 "system_dynamic_deps": `[]`,
1368 }),
1369 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001370 })
1371}
1372
1373func TestStaticLibrary_SystemSharedLibsBionic(t *testing.T) {
1374 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001375 description: "cc_library_static system_shared_libs set for bionic variant",
Chris Parsons51f8c392021-08-03 21:01:05 -04001376 blueprint: soongCcLibraryStaticPreamble + `
1377cc_library{name: "libc"}
1378
1379cc_library_static {
1380 name: "target_bionic",
1381 target: {
1382 bionic: {
1383 system_shared_libs: ["libc"],
1384 },
1385 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001386 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001387}
1388`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001389 expectedBazelTargets: []string{
1390 makeBazelTarget("cc_library_static", "target_bionic", attrNameToString{
1391 "system_dynamic_deps": `select({
Chris Parsons2dde0cb2021-10-01 14:45:30 -04001392 "//build/bazel/platforms/os:android": [":libc"],
1393 "//build/bazel/platforms/os:linux_bionic": [":libc"],
Chris Parsons51f8c392021-08-03 21:01:05 -04001394 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001395 })`,
1396 }),
1397 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001398 })
1399}
1400
1401func TestStaticLibrary_SystemSharedLibsLinuxRootAndLinuxBionic(t *testing.T) {
1402 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001403 description: "cc_library_static system_shared_libs set for root and linux_bionic variant",
Chris Parsons51f8c392021-08-03 21:01:05 -04001404 blueprint: soongCcLibraryStaticPreamble + `
1405cc_library{name: "libc"}
1406cc_library{name: "libm"}
1407
1408cc_library_static {
1409 name: "target_linux_bionic",
Liz Kammer8337ea42021-09-10 10:06:32 -04001410 system_shared_libs: ["libc"],
Chris Parsons51f8c392021-08-03 21:01:05 -04001411 target: {
1412 linux_bionic: {
1413 system_shared_libs: ["libm"],
1414 },
1415 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001416 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001417}
1418`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001419 expectedBazelTargets: []string{
1420 makeBazelTarget("cc_library_static", "target_linux_bionic", attrNameToString{
1421 "system_dynamic_deps": `[":libc"] + select({
Chris Parsons51f8c392021-08-03 21:01:05 -04001422 "//build/bazel/platforms/os:linux_bionic": [":libm"],
1423 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001424 })`,
1425 }),
1426 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001427 })
1428}
Liz Kammer12615db2021-09-28 09:19:17 -04001429
1430func TestCcLibraryStaticProto(t *testing.T) {
1431 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1432 blueprint: soongCcProtoPreamble + `cc_library_static {
1433 name: "foo",
1434 srcs: ["foo.proto"],
1435 proto: {
1436 canonical_path_from_root: false,
1437 export_proto_headers: true,
1438 },
1439 include_build_directory: false,
1440}`,
1441 expectedBazelTargets: []string{
1442 makeBazelTarget("proto_library", "foo_proto", attrNameToString{
1443 "srcs": `["foo.proto"]`,
1444 }), makeBazelTarget("cc_lite_proto_library", "foo_cc_proto_lite", attrNameToString{
1445 "deps": `[":foo_proto"]`,
1446 }), makeBazelTarget("cc_library_static", "foo", attrNameToString{
1447 "deps": `[":libprotobuf-cpp-lite"]`,
1448 "whole_archive_deps": `[":foo_cc_proto_lite"]`,
1449 }),
1450 },
1451 })
1452}
Rupert Shuttleworth484aa252021-12-10 07:22:53 -05001453
1454func TestCcLibraryStaticUseVersionLib(t *testing.T) {
1455 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1456 blueprint: soongCcProtoPreamble + `cc_library_static {
1457 name: "foo",
1458 use_version_lib: true,
1459 include_build_directory: false,
1460}`,
1461 expectedBazelTargets: []string{
1462 makeBazelTarget("cc_library_static", "foo", attrNameToString{
1463 "use_version_lib": "True",
1464 }),
1465 },
1466 })
1467}