blob: e65a1fa0b6bea1b3180ce214dd6babf9114ed1af [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
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020085 runBp2BuildTestCase(t, registerCcLibraryStaticModuleTypes, tc)
86}
87
88func TestCcLibraryStaticSimple(t *testing.T) {
89 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -050090 description: "cc_library_static test",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020091 filesystem: map[string]string{
92 // NOTE: include_dir headers *should not* appear in Bazel hdrs later (?)
93 "include_dir_1/include_dir_1_a.h": "",
94 "include_dir_1/include_dir_1_b.h": "",
95 "include_dir_2/include_dir_2_a.h": "",
96 "include_dir_2/include_dir_2_b.h": "",
97 // NOTE: local_include_dir headers *should not* appear in Bazel hdrs later (?)
98 "local_include_dir_1/local_include_dir_1_a.h": "",
99 "local_include_dir_1/local_include_dir_1_b.h": "",
100 "local_include_dir_2/local_include_dir_2_a.h": "",
101 "local_include_dir_2/local_include_dir_2_b.h": "",
102 // NOTE: export_include_dir headers *should* appear in Bazel hdrs later
103 "export_include_dir_1/export_include_dir_1_a.h": "",
104 "export_include_dir_1/export_include_dir_1_b.h": "",
105 "export_include_dir_2/export_include_dir_2_a.h": "",
106 "export_include_dir_2/export_include_dir_2_b.h": "",
107 // NOTE: Soong implicitly includes headers in the current directory
108 "implicit_include_1.h": "",
109 "implicit_include_2.h": "",
110 },
111 blueprint: soongCcLibraryStaticPreamble + `
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000112cc_library_headers {
113 name: "header_lib_1",
114 export_include_dirs: ["header_lib_1"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400115 bazel_module: { bp2build_available: false },
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000116}
117
118cc_library_headers {
119 name: "header_lib_2",
120 export_include_dirs: ["header_lib_2"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400121 bazel_module: { bp2build_available: false },
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000122}
123
124cc_library_static {
125 name: "static_lib_1",
126 srcs: ["static_lib_1.cc"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400127 bazel_module: { bp2build_available: false },
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000128}
129
130cc_library_static {
131 name: "static_lib_2",
132 srcs: ["static_lib_2.cc"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400133 bazel_module: { bp2build_available: false },
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000134}
135
136cc_library_static {
137 name: "whole_static_lib_1",
138 srcs: ["whole_static_lib_1.cc"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400139 bazel_module: { bp2build_available: false },
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000140}
141
142cc_library_static {
143 name: "whole_static_lib_2",
144 srcs: ["whole_static_lib_2.cc"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400145 bazel_module: { bp2build_available: false },
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000146}
147
148cc_library_static {
149 name: "foo_static",
150 srcs: [
151 "foo_static1.cc",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000152 "foo_static2.cc",
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000153 ],
154 cflags: [
155 "-Dflag1",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000156 "-Dflag2"
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000157 ],
158 static_libs: [
159 "static_lib_1",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000160 "static_lib_2"
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000161 ],
162 whole_static_libs: [
163 "whole_static_lib_1",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000164 "whole_static_lib_2"
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000165 ],
166 include_dirs: [
Jingwen Chened9c17d2021-04-13 07:14:55 +0000167 "include_dir_1",
168 "include_dir_2",
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000169 ],
170 local_include_dirs: [
171 "local_include_dir_1",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000172 "local_include_dir_2",
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000173 ],
174 export_include_dirs: [
Chris Parsonsd6358772021-05-18 18:35:24 -0400175 "export_include_dir_1",
176 "export_include_dir_2"
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000177 ],
178 header_libs: [
179 "header_lib_1",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000180 "header_lib_2"
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000181 ],
182
183 // TODO: Also support export_header_lib_headers
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000184}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500185 expectedBazelTargets: []string{
186 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
187 "absolute_includes": `[
Liz Kammer35687bc2021-09-10 10:07:07 -0400188 "include_dir_1",
189 "include_dir_2",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500190 ]`,
191 "copts": `[
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000192 "-Dflag1",
193 "-Dflag2",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500194 ]`,
195 "export_includes": `[
Liz Kammer5fad5012021-09-09 14:08:21 -0400196 "export_include_dir_1",
197 "export_include_dir_2",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500198 ]`,
199 "implementation_deps": `[
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000200 ":header_lib_1",
201 ":header_lib_2",
202 ":static_lib_1",
203 ":static_lib_2",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500204 ]`,
205 "local_includes": `[
Liz Kammer35687bc2021-09-10 10:07:07 -0400206 "local_include_dir_1",
207 "local_include_dir_2",
208 ".",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500209 ]`,
210 "srcs": `[
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000211 "foo_static1.cc",
212 "foo_static2.cc",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500213 ]`,
214 "whole_archive_deps": `[
Chris Parsons08648312021-05-06 16:23:19 -0400215 ":whole_static_lib_1",
216 ":whole_static_lib_2",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500217 ]`,
218 }),
219 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200220 })
221}
222
223func TestCcLibraryStaticSubpackage(t *testing.T) {
224 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500225 description: "cc_library_static subpackage test",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200226 filesystem: map[string]string{
227 // subpackage with subdirectory
228 "subpackage/Android.bp": "",
229 "subpackage/subpackage_header.h": "",
230 "subpackage/subdirectory/subdirectory_header.h": "",
231 // subsubpackage with subdirectory
232 "subpackage/subsubpackage/Android.bp": "",
233 "subpackage/subsubpackage/subsubpackage_header.h": "",
234 "subpackage/subsubpackage/subdirectory/subdirectory_header.h": "",
235 // subsubsubpackage with subdirectory
236 "subpackage/subsubpackage/subsubsubpackage/Android.bp": "",
237 "subpackage/subsubpackage/subsubsubpackage/subsubsubpackage_header.h": "",
238 "subpackage/subsubpackage/subsubsubpackage/subdirectory/subdirectory_header.h": "",
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000239 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200240 blueprint: soongCcLibraryStaticPreamble + `
Rupert Shuttleworthc143cc52021-04-13 13:08:04 -0400241cc_library_static {
242 name: "foo_static",
Liz Kammer35687bc2021-09-10 10:07:07 -0400243 srcs: [],
Rupert Shuttleworthc143cc52021-04-13 13:08:04 -0400244 include_dirs: [
Liz Kammer35687bc2021-09-10 10:07:07 -0400245 "subpackage",
Rupert Shuttleworthc143cc52021-04-13 13:08:04 -0400246 ],
Rupert Shuttleworthc143cc52021-04-13 13:08:04 -0400247}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500248 expectedBazelTargets: []string{
249 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
250 "absolute_includes": `["subpackage"]`,
251 "local_includes": `["."]`,
252 }),
253 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200254 })
255}
256
257func TestCcLibraryStaticExportIncludeDir(t *testing.T) {
258 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500259 description: "cc_library_static export include dir",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200260 filesystem: map[string]string{
261 // subpackage with subdirectory
262 "subpackage/Android.bp": "",
263 "subpackage/subpackage_header.h": "",
264 "subpackage/subdirectory/subdirectory_header.h": "",
Rupert Shuttleworthc143cc52021-04-13 13:08:04 -0400265 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200266 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chened9c17d2021-04-13 07:14:55 +0000267cc_library_static {
268 name: "foo_static",
269 export_include_dirs: ["subpackage"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400270 include_build_directory: false,
Jingwen Chened9c17d2021-04-13 07:14:55 +0000271}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500272 expectedBazelTargets: []string{
273 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
274 "export_includes": `["subpackage"]`,
275 }),
276 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200277 })
278}
279
280func TestCcLibraryStaticExportSystemIncludeDir(t *testing.T) {
281 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500282 description: "cc_library_static export system include dir",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200283 filesystem: map[string]string{
284 // subpackage with subdirectory
285 "subpackage/Android.bp": "",
286 "subpackage/subpackage_header.h": "",
287 "subpackage/subdirectory/subdirectory_header.h": "",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000288 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200289 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chened9c17d2021-04-13 07:14:55 +0000290cc_library_static {
291 name: "foo_static",
292 export_system_include_dirs: ["subpackage"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400293 include_build_directory: false,
Jingwen Chened9c17d2021-04-13 07:14:55 +0000294}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500295 expectedBazelTargets: []string{
296 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
297 "export_system_includes": `["subpackage"]`,
298 }),
299 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200300 })
301}
302
303func TestCcLibraryStaticManyIncludeDirs(t *testing.T) {
304 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500305 description: "cc_library_static include_dirs, local_include_dirs, export_include_dirs (b/183742505)",
306 dir: "subpackage",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200307 filesystem: map[string]string{
308 // subpackage with subdirectory
309 "subpackage/Android.bp": `
Jingwen Chened9c17d2021-04-13 07:14:55 +0000310cc_library_static {
311 name: "foo_static",
312 // include_dirs are workspace/root relative
313 include_dirs: [
314 "subpackage/subsubpackage",
315 "subpackage2",
316 "subpackage3/subsubpackage"
317 ],
318 local_include_dirs: ["subsubpackage2"], // module dir relative
319 export_include_dirs: ["./exported_subsubpackage"], // module dir relative
320 include_build_directory: true,
321 bazel_module: { bp2build_available: true },
322}`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200323 "subpackage/subsubpackage/header.h": "",
324 "subpackage/subsubpackage2/header.h": "",
325 "subpackage/exported_subsubpackage/header.h": "",
326 "subpackage2/header.h": "",
327 "subpackage3/subsubpackage/header.h": "",
328 },
329 blueprint: soongCcLibraryStaticPreamble,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500330 expectedBazelTargets: []string{
331 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
332 "absolute_includes": `[
Liz Kammer35687bc2021-09-10 10:07:07 -0400333 "subpackage/subsubpackage",
334 "subpackage2",
335 "subpackage3/subsubpackage",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500336 ]`,
337 "export_includes": `["./exported_subsubpackage"]`,
338 "local_includes": `[
Liz Kammer35687bc2021-09-10 10:07:07 -0400339 "subsubpackage2",
340 ".",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500341 ]`,
342 })},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200343 })
344}
345
346func TestCcLibraryStaticIncludeBuildDirectoryDisabled(t *testing.T) {
347 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500348 description: "cc_library_static include_build_directory disabled",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200349 filesystem: map[string]string{
350 // subpackage with subdirectory
351 "subpackage/Android.bp": "",
352 "subpackage/subpackage_header.h": "",
353 "subpackage/subdirectory/subdirectory_header.h": "",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000354 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200355 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chened9c17d2021-04-13 07:14:55 +0000356cc_library_static {
357 name: "foo_static",
358 include_dirs: ["subpackage"], // still used, but local_include_dirs is recommended
359 local_include_dirs: ["subpackage2"],
360 include_build_directory: false,
361}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500362 expectedBazelTargets: []string{
363 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
364 "absolute_includes": `["subpackage"]`,
365 "local_includes": `["subpackage2"]`,
366 }),
367 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200368 })
369}
370
371func TestCcLibraryStaticIncludeBuildDirectoryEnabled(t *testing.T) {
372 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500373 description: "cc_library_static include_build_directory enabled",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200374 filesystem: map[string]string{
375 // subpackage with subdirectory
376 "subpackage/Android.bp": "",
377 "subpackage/subpackage_header.h": "",
378 "subpackage2/Android.bp": "",
379 "subpackage2/subpackage2_header.h": "",
380 "subpackage/subdirectory/subdirectory_header.h": "",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000381 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200382 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chened9c17d2021-04-13 07:14:55 +0000383cc_library_static {
384 name: "foo_static",
385 include_dirs: ["subpackage"], // still used, but local_include_dirs is recommended
386 local_include_dirs: ["subpackage2"],
387 include_build_directory: true,
388}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500389 expectedBazelTargets: []string{
390 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
391 "absolute_includes": `["subpackage"]`,
392 "local_includes": `[
Liz Kammer35687bc2021-09-10 10:07:07 -0400393 "subpackage2",
394 ".",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500395 ]`,
396 }),
397 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200398 })
399}
400
401func TestCcLibraryStaticArchSpecificStaticLib(t *testing.T) {
402 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500403 description: "cc_library_static arch-specific static_libs",
404 filesystem: map[string]string{},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200405 blueprint: soongCcLibraryStaticPreamble + `
Liz Kammer8337ea42021-09-10 10:06:32 -0400406cc_library_static {
407 name: "static_dep",
408 bazel_module: { bp2build_available: false },
409}
410cc_library_static {
411 name: "static_dep2",
412 bazel_module: { bp2build_available: false },
413}
Jingwen Chened9c17d2021-04-13 07:14:55 +0000414cc_library_static {
415 name: "foo_static",
416 arch: { arm64: { static_libs: ["static_dep"], whole_static_libs: ["static_dep2"] } },
Liz Kammer8337ea42021-09-10 10:06:32 -0400417 include_build_directory: false,
Jingwen Chened9c17d2021-04-13 07:14:55 +0000418}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500419 expectedBazelTargets: []string{
420 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
421 "implementation_deps": `select({
Chris Parsons08648312021-05-06 16:23:19 -0400422 "//build/bazel/platforms/arch:arm64": [":static_dep"],
Jingwen Chened9c17d2021-04-13 07:14:55 +0000423 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500424 })`,
425 "whole_archive_deps": `select({
Chris Parsons08648312021-05-06 16:23:19 -0400426 "//build/bazel/platforms/arch:arm64": [":static_dep2"],
427 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500428 })`,
429 }),
430 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200431 })
432}
433
434func TestCcLibraryStaticOsSpecificStaticLib(t *testing.T) {
435 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500436 description: "cc_library_static os-specific static_libs",
437 filesystem: map[string]string{},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200438 blueprint: soongCcLibraryStaticPreamble + `
Liz Kammer8337ea42021-09-10 10:06:32 -0400439cc_library_static {
440 name: "static_dep",
441 bazel_module: { bp2build_available: false },
442}
443cc_library_static {
444 name: "static_dep2",
445 bazel_module: { bp2build_available: false },
446}
Jingwen Chened9c17d2021-04-13 07:14:55 +0000447cc_library_static {
448 name: "foo_static",
449 target: { android: { static_libs: ["static_dep"], whole_static_libs: ["static_dep2"] } },
Liz Kammer8337ea42021-09-10 10:06:32 -0400450 include_build_directory: false,
Jingwen Chened9c17d2021-04-13 07:14:55 +0000451}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500452 expectedBazelTargets: []string{
453 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
454 "implementation_deps": `select({
Chris Parsons08648312021-05-06 16:23:19 -0400455 "//build/bazel/platforms/os:android": [":static_dep"],
Jingwen Chened9c17d2021-04-13 07:14:55 +0000456 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500457 })`,
458 "whole_archive_deps": `select({
Chris Parsons08648312021-05-06 16:23:19 -0400459 "//build/bazel/platforms/os:android": [":static_dep2"],
460 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500461 })`,
462 }),
463 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200464 })
465}
466
467func TestCcLibraryStaticBaseArchOsSpecificStaticLib(t *testing.T) {
468 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500469 description: "cc_library_static base, arch and os-specific static_libs",
470 filesystem: map[string]string{},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200471 blueprint: soongCcLibraryStaticPreamble + `
Liz Kammer8337ea42021-09-10 10:06:32 -0400472cc_library_static {
473 name: "static_dep",
474 bazel_module: { bp2build_available: false },
475}
476cc_library_static {
477 name: "static_dep2",
478 bazel_module: { bp2build_available: false },
479}
480cc_library_static {
481 name: "static_dep3",
482 bazel_module: { bp2build_available: false },
483}
484cc_library_static {
485 name: "static_dep4",
486 bazel_module: { bp2build_available: false },
487}
Jingwen Chened9c17d2021-04-13 07:14:55 +0000488cc_library_static {
489 name: "foo_static",
490 static_libs: ["static_dep"],
491 whole_static_libs: ["static_dep2"],
492 target: { android: { static_libs: ["static_dep3"] } },
493 arch: { arm64: { static_libs: ["static_dep4"] } },
Liz Kammer8337ea42021-09-10 10:06:32 -0400494 include_build_directory: false,
Jingwen Chened9c17d2021-04-13 07:14:55 +0000495}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500496 expectedBazelTargets: []string{
497 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
498 "implementation_deps": `[":static_dep"] + select({
Jingwen Chened9c17d2021-04-13 07:14:55 +0000499 "//build/bazel/platforms/arch:arm64": [":static_dep4"],
500 "//conditions:default": [],
501 }) + select({
502 "//build/bazel/platforms/os:android": [":static_dep3"],
503 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500504 })`,
505 "whole_archive_deps": `[":static_dep2"]`,
506 }),
507 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200508 })
509}
510
511func TestCcLibraryStaticSimpleExcludeSrcs(t *testing.T) {
512 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500513 description: "cc_library_static simple exclude_srcs",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200514 filesystem: map[string]string{
515 "common.c": "",
516 "foo-a.c": "",
517 "foo-excluded.c": "",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000518 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200519 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chene32e9e02021-04-23 09:17:24 +0000520cc_library_static {
521 name: "foo_static",
522 srcs: ["common.c", "foo-*.c"],
523 exclude_srcs: ["foo-excluded.c"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400524 include_build_directory: false,
Jingwen Chene32e9e02021-04-23 09:17:24 +0000525}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500526 expectedBazelTargets: []string{
527 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
528 "srcs_c": `[
Jingwen Chene32e9e02021-04-23 09:17:24 +0000529 "common.c",
530 "foo-a.c",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500531 ]`,
532 }),
533 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200534 })
535}
536
537func TestCcLibraryStaticOneArchSrcs(t *testing.T) {
538 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500539 description: "cc_library_static one arch specific srcs",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200540 filesystem: map[string]string{
541 "common.c": "",
542 "foo-arm.c": "",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000543 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200544 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chene32e9e02021-04-23 09:17:24 +0000545cc_library_static {
546 name: "foo_static",
547 srcs: ["common.c"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400548 arch: { arm: { srcs: ["foo-arm.c"] } },
549 include_build_directory: false,
Jingwen Chene32e9e02021-04-23 09:17:24 +0000550}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500551 expectedBazelTargets: []string{
552 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
553 "srcs_c": `["common.c"] + select({
Jingwen Chene32e9e02021-04-23 09:17:24 +0000554 "//build/bazel/platforms/arch:arm": ["foo-arm.c"],
555 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500556 })`,
557 }),
558 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200559 })
560}
561
562func TestCcLibraryStaticOneArchSrcsExcludeSrcs(t *testing.T) {
563 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500564 description: "cc_library_static one arch specific srcs and exclude_srcs",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200565 filesystem: map[string]string{
566 "common.c": "",
567 "for-arm.c": "",
568 "not-for-arm.c": "",
569 "not-for-anything.c": "",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000570 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200571 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chene32e9e02021-04-23 09:17:24 +0000572cc_library_static {
573 name: "foo_static",
574 srcs: ["common.c", "not-for-*.c"],
575 exclude_srcs: ["not-for-anything.c"],
576 arch: {
577 arm: { srcs: ["for-arm.c"], exclude_srcs: ["not-for-arm.c"] },
578 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400579 include_build_directory: false,
Jingwen Chene32e9e02021-04-23 09:17:24 +0000580}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500581 expectedBazelTargets: []string{
582 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
583 "srcs_c": `["common.c"] + select({
Jingwen Chene32e9e02021-04-23 09:17:24 +0000584 "//build/bazel/platforms/arch:arm": ["for-arm.c"],
585 "//conditions:default": ["not-for-arm.c"],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500586 })`,
587 }),
588 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200589 })
590}
591
592func TestCcLibraryStaticTwoArchExcludeSrcs(t *testing.T) {
593 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500594 description: "cc_library_static arch specific exclude_srcs for 2 architectures",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200595 filesystem: map[string]string{
596 "common.c": "",
597 "for-arm.c": "",
598 "for-x86.c": "",
599 "not-for-arm.c": "",
600 "not-for-x86.c": "",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000601 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200602 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chene32e9e02021-04-23 09:17:24 +0000603cc_library_static {
604 name: "foo_static",
605 srcs: ["common.c", "not-for-*.c"],
606 exclude_srcs: ["not-for-everything.c"],
607 arch: {
608 arm: { srcs: ["for-arm.c"], exclude_srcs: ["not-for-arm.c"] },
609 x86: { srcs: ["for-x86.c"], exclude_srcs: ["not-for-x86.c"] },
610 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400611 include_build_directory: false,
Jingwen Chene32e9e02021-04-23 09:17:24 +0000612} `,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500613 expectedBazelTargets: []string{
614 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
615 "srcs_c": `["common.c"] + select({
Jingwen Chene32e9e02021-04-23 09:17:24 +0000616 "//build/bazel/platforms/arch:arm": [
Jingwen Chene32e9e02021-04-23 09:17:24 +0000617 "not-for-x86.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400618 "for-arm.c",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000619 ],
620 "//build/bazel/platforms/arch:x86": [
Jingwen Chene32e9e02021-04-23 09:17:24 +0000621 "not-for-arm.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400622 "for-x86.c",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000623 ],
624 "//conditions:default": [
625 "not-for-arm.c",
626 "not-for-x86.c",
627 ],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500628 })`,
629 }),
630 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200631 })
632}
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500633
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200634func TestCcLibraryStaticFourArchExcludeSrcs(t *testing.T) {
635 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500636 description: "cc_library_static arch specific exclude_srcs for 4 architectures",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200637 filesystem: map[string]string{
638 "common.c": "",
639 "for-arm.c": "",
640 "for-arm64.c": "",
641 "for-x86.c": "",
642 "for-x86_64.c": "",
643 "not-for-arm.c": "",
644 "not-for-arm64.c": "",
645 "not-for-x86.c": "",
646 "not-for-x86_64.c": "",
647 "not-for-everything.c": "",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000648 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200649 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chene32e9e02021-04-23 09:17:24 +0000650cc_library_static {
651 name: "foo_static",
652 srcs: ["common.c", "not-for-*.c"],
653 exclude_srcs: ["not-for-everything.c"],
654 arch: {
655 arm: { srcs: ["for-arm.c"], exclude_srcs: ["not-for-arm.c"] },
656 arm64: { srcs: ["for-arm64.c"], exclude_srcs: ["not-for-arm64.c"] },
657 x86: { srcs: ["for-x86.c"], exclude_srcs: ["not-for-x86.c"] },
658 x86_64: { srcs: ["for-x86_64.c"], exclude_srcs: ["not-for-x86_64.c"] },
Liz Kammer8337ea42021-09-10 10:06:32 -0400659 },
660 include_build_directory: false,
Jingwen Chene32e9e02021-04-23 09:17:24 +0000661} `,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500662 expectedBazelTargets: []string{
663 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
664 "srcs_c": `["common.c"] + select({
Jingwen Chene32e9e02021-04-23 09:17:24 +0000665 "//build/bazel/platforms/arch:arm": [
Jingwen Chene32e9e02021-04-23 09:17:24 +0000666 "not-for-arm64.c",
667 "not-for-x86.c",
668 "not-for-x86_64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400669 "for-arm.c",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000670 ],
671 "//build/bazel/platforms/arch:arm64": [
Jingwen Chene32e9e02021-04-23 09:17:24 +0000672 "not-for-arm.c",
673 "not-for-x86.c",
674 "not-for-x86_64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400675 "for-arm64.c",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000676 ],
677 "//build/bazel/platforms/arch:x86": [
Jingwen Chene32e9e02021-04-23 09:17:24 +0000678 "not-for-arm.c",
679 "not-for-arm64.c",
680 "not-for-x86_64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400681 "for-x86.c",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000682 ],
683 "//build/bazel/platforms/arch:x86_64": [
Jingwen Chene32e9e02021-04-23 09:17:24 +0000684 "not-for-arm.c",
685 "not-for-arm64.c",
686 "not-for-x86.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400687 "for-x86_64.c",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000688 ],
689 "//conditions:default": [
690 "not-for-arm.c",
691 "not-for-arm64.c",
692 "not-for-x86.c",
693 "not-for-x86_64.c",
694 ],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500695 })`,
696 }),
697 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200698 })
699}
700
Liz Kammer2b07ec72021-05-26 15:08:27 -0400701func TestCcLibraryStaticOneArchEmpty(t *testing.T) {
702 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500703 description: "cc_library_static one arch empty",
Liz Kammer2b07ec72021-05-26 15:08:27 -0400704 filesystem: map[string]string{
705 "common.cc": "",
706 "foo-no-arm.cc": "",
707 "foo-excluded.cc": "",
708 },
709 blueprint: soongCcLibraryStaticPreamble + `
710cc_library_static {
711 name: "foo_static",
712 srcs: ["common.cc", "foo-*.cc"],
713 exclude_srcs: ["foo-excluded.cc"],
714 arch: {
715 arm: { exclude_srcs: ["foo-no-arm.cc"] },
716 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400717 include_build_directory: false,
Liz Kammer2b07ec72021-05-26 15:08:27 -0400718}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500719 expectedBazelTargets: []string{
720 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
721 "srcs": `["common.cc"] + select({
Liz Kammer2b07ec72021-05-26 15:08:27 -0400722 "//build/bazel/platforms/arch:arm": [],
723 "//conditions:default": ["foo-no-arm.cc"],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500724 })`,
725 }),
726 },
Liz Kammer2b07ec72021-05-26 15:08:27 -0400727 })
728}
729
730func TestCcLibraryStaticOneArchEmptyOtherSet(t *testing.T) {
731 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500732 description: "cc_library_static one arch empty other set",
Liz Kammer2b07ec72021-05-26 15:08:27 -0400733 filesystem: map[string]string{
734 "common.cc": "",
735 "foo-no-arm.cc": "",
736 "x86-only.cc": "",
737 "foo-excluded.cc": "",
738 },
739 blueprint: soongCcLibraryStaticPreamble + `
740cc_library_static {
741 name: "foo_static",
742 srcs: ["common.cc", "foo-*.cc"],
743 exclude_srcs: ["foo-excluded.cc"],
744 arch: {
745 arm: { exclude_srcs: ["foo-no-arm.cc"] },
746 x86: { srcs: ["x86-only.cc"] },
747 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400748 include_build_directory: false,
Liz Kammer2b07ec72021-05-26 15:08:27 -0400749}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500750 expectedBazelTargets: []string{
751 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
752 "srcs": `["common.cc"] + select({
Liz Kammer2b07ec72021-05-26 15:08:27 -0400753 "//build/bazel/platforms/arch:arm": [],
754 "//build/bazel/platforms/arch:x86": [
755 "foo-no-arm.cc",
756 "x86-only.cc",
757 ],
758 "//conditions:default": ["foo-no-arm.cc"],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500759 })`,
760 }),
761 },
Liz Kammer2b07ec72021-05-26 15:08:27 -0400762 })
763}
764
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200765func TestCcLibraryStaticMultipleDepSameName(t *testing.T) {
766 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500767 description: "cc_library_static multiple dep same name panic",
768 filesystem: map[string]string{},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200769 blueprint: soongCcLibraryStaticPreamble + `
Liz Kammer8337ea42021-09-10 10:06:32 -0400770cc_library_static {
771 name: "static_dep",
772 bazel_module: { bp2build_available: false },
773}
Liz Kammer2b50ce62021-04-26 15:47:28 -0400774cc_library_static {
775 name: "foo_static",
Chris Parsons08648312021-05-06 16:23:19 -0400776 static_libs: ["static_dep", "static_dep"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400777 include_build_directory: false,
Liz Kammer2b50ce62021-04-26 15:47:28 -0400778}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500779 expectedBazelTargets: []string{
780 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
781 "implementation_deps": `[":static_dep"]`,
782 }),
783 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200784 })
785}
786
787func TestCcLibraryStaticOneMultilibSrcsExcludeSrcs(t *testing.T) {
788 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500789 description: "cc_library_static 1 multilib srcs and exclude_srcs",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200790 filesystem: map[string]string{
791 "common.c": "",
792 "for-lib32.c": "",
793 "not-for-lib32.c": "",
Liz Kammer2b50ce62021-04-26 15:47:28 -0400794 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200795 blueprint: soongCcLibraryStaticPreamble + `
Chris Parsonsc424b762021-04-29 18:06:50 -0400796cc_library_static {
797 name: "foo_static",
798 srcs: ["common.c", "not-for-*.c"],
799 multilib: {
800 lib32: { srcs: ["for-lib32.c"], exclude_srcs: ["not-for-lib32.c"] },
801 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400802 include_build_directory: false,
Chris Parsonsc424b762021-04-29 18:06:50 -0400803} `,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500804 expectedBazelTargets: []string{
805 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
806 "srcs_c": `["common.c"] + select({
Chris Parsonsc424b762021-04-29 18:06:50 -0400807 "//build/bazel/platforms/arch:arm": ["for-lib32.c"],
808 "//build/bazel/platforms/arch:x86": ["for-lib32.c"],
809 "//conditions:default": ["not-for-lib32.c"],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500810 })`,
811 }),
812 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200813 })
814}
815
816func TestCcLibraryStaticTwoMultilibSrcsExcludeSrcs(t *testing.T) {
817 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500818 description: "cc_library_static 2 multilib srcs and exclude_srcs",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200819 filesystem: map[string]string{
820 "common.c": "",
821 "for-lib32.c": "",
822 "for-lib64.c": "",
823 "not-for-lib32.c": "",
824 "not-for-lib64.c": "",
Chris Parsonsc424b762021-04-29 18:06:50 -0400825 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200826 blueprint: soongCcLibraryStaticPreamble + `
Chris Parsonsc424b762021-04-29 18:06:50 -0400827cc_library_static {
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500828 name: "foo_static",
Chris Parsonsc424b762021-04-29 18:06:50 -0400829 srcs: ["common.c", "not-for-*.c"],
830 multilib: {
831 lib32: { srcs: ["for-lib32.c"], exclude_srcs: ["not-for-lib32.c"] },
832 lib64: { srcs: ["for-lib64.c"], exclude_srcs: ["not-for-lib64.c"] },
833 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400834 include_build_directory: false,
Chris Parsonsc424b762021-04-29 18:06:50 -0400835} `,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500836 expectedBazelTargets: []string{
837 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
838 "srcs_c": `["common.c"] + select({
Chris Parsonsc424b762021-04-29 18:06:50 -0400839 "//build/bazel/platforms/arch:arm": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400840 "not-for-lib64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400841 "for-lib32.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400842 ],
843 "//build/bazel/platforms/arch:arm64": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400844 "not-for-lib32.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400845 "for-lib64.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400846 ],
847 "//build/bazel/platforms/arch:x86": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400848 "not-for-lib64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400849 "for-lib32.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400850 ],
851 "//build/bazel/platforms/arch:x86_64": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400852 "not-for-lib32.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400853 "for-lib64.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400854 ],
855 "//conditions:default": [
856 "not-for-lib32.c",
857 "not-for-lib64.c",
858 ],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500859 })`,
860 }),
861 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200862 })
863}
864
865func TestCcLibrarySTaticArchMultilibSrcsExcludeSrcs(t *testing.T) {
866 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500867 description: "cc_library_static arch and multilib srcs and exclude_srcs",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200868 filesystem: map[string]string{
869 "common.c": "",
870 "for-arm.c": "",
871 "for-arm64.c": "",
872 "for-x86.c": "",
873 "for-x86_64.c": "",
874 "for-lib32.c": "",
875 "for-lib64.c": "",
876 "not-for-arm.c": "",
877 "not-for-arm64.c": "",
878 "not-for-x86.c": "",
879 "not-for-x86_64.c": "",
880 "not-for-lib32.c": "",
881 "not-for-lib64.c": "",
882 "not-for-everything.c": "",
Chris Parsonsc424b762021-04-29 18:06:50 -0400883 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200884 blueprint: soongCcLibraryStaticPreamble + `
Chris Parsonsc424b762021-04-29 18:06:50 -0400885cc_library_static {
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500886 name: "foo_static",
Chris Parsonsc424b762021-04-29 18:06:50 -0400887 srcs: ["common.c", "not-for-*.c"],
888 exclude_srcs: ["not-for-everything.c"],
889 arch: {
890 arm: { srcs: ["for-arm.c"], exclude_srcs: ["not-for-arm.c"] },
891 arm64: { srcs: ["for-arm64.c"], exclude_srcs: ["not-for-arm64.c"] },
892 x86: { srcs: ["for-x86.c"], exclude_srcs: ["not-for-x86.c"] },
893 x86_64: { srcs: ["for-x86_64.c"], exclude_srcs: ["not-for-x86_64.c"] },
894 },
895 multilib: {
896 lib32: { srcs: ["for-lib32.c"], exclude_srcs: ["not-for-lib32.c"] },
897 lib64: { srcs: ["for-lib64.c"], exclude_srcs: ["not-for-lib64.c"] },
898 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400899 include_build_directory: false,
Chris Parsonsc424b762021-04-29 18:06:50 -0400900}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500901 expectedBazelTargets: []string{
902 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
903 "srcs_c": `["common.c"] + select({
Chris Parsonsc424b762021-04-29 18:06:50 -0400904 "//build/bazel/platforms/arch:arm": [
Liz Kammer9bad9d62021-10-11 15:40:35 -0400905 "not-for-arm64.c",
906 "not-for-lib64.c",
907 "not-for-x86.c",
908 "not-for-x86_64.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400909 "for-arm.c",
910 "for-lib32.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400911 ],
912 "//build/bazel/platforms/arch:arm64": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400913 "not-for-arm.c",
914 "not-for-lib32.c",
915 "not-for-x86.c",
916 "not-for-x86_64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400917 "for-arm64.c",
918 "for-lib64.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400919 ],
920 "//build/bazel/platforms/arch:x86": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400921 "not-for-arm.c",
922 "not-for-arm64.c",
923 "not-for-lib64.c",
924 "not-for-x86_64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400925 "for-x86.c",
926 "for-lib32.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400927 ],
928 "//build/bazel/platforms/arch:x86_64": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400929 "not-for-arm.c",
930 "not-for-arm64.c",
931 "not-for-lib32.c",
932 "not-for-x86.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400933 "for-x86_64.c",
934 "for-lib64.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400935 ],
936 "//conditions:default": [
937 "not-for-arm.c",
938 "not-for-arm64.c",
939 "not-for-lib32.c",
940 "not-for-lib64.c",
941 "not-for-x86.c",
942 "not-for-x86_64.c",
943 ],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500944 })`,
945 }),
946 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200947 })
948}
949
Liz Kammerae3994e2021-10-19 09:45:48 -0400950func TestCcLibraryStaticGeneratedHeadersAllPartitions(t *testing.T) {
951 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammerae3994e2021-10-19 09:45:48 -0400952 blueprint: soongCcLibraryStaticPreamble + `
953genrule {
954 name: "generated_hdr",
955 cmd: "nothing to see here",
Liz Kammerbe46fcc2021-11-01 15:32:43 -0400956 bazel_module: { bp2build_available: false },
Liz Kammerae3994e2021-10-19 09:45:48 -0400957}
958
Liz Kammere6583482021-10-19 13:56:10 -0400959genrule {
960 name: "export_generated_hdr",
961 cmd: "nothing to see here",
Liz Kammerbe46fcc2021-11-01 15:32:43 -0400962 bazel_module: { bp2build_available: false },
Liz Kammere6583482021-10-19 13:56:10 -0400963}
964
Liz Kammerae3994e2021-10-19 09:45:48 -0400965cc_library_static {
966 name: "foo_static",
967 srcs: ["cpp_src.cpp", "as_src.S", "c_src.c"],
Liz Kammere6583482021-10-19 13:56:10 -0400968 generated_headers: ["generated_hdr", "export_generated_hdr"],
969 export_generated_headers: ["export_generated_hdr"],
Liz Kammerae3994e2021-10-19 09:45:48 -0400970 include_build_directory: false,
971}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500972 expectedBazelTargets: []string{
973 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
Liz Kammer1263d9b2021-12-10 14:28:20 -0500974 "export_includes": `["."]`,
975 "local_includes": `["."]`,
976 "hdrs": `[":export_generated_hdr"]`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500977 "srcs": `[
Liz Kammerae3994e2021-10-19 09:45:48 -0400978 "cpp_src.cpp",
979 ":generated_hdr",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500980 ]`,
981 "srcs_as": `[
Liz Kammerae3994e2021-10-19 09:45:48 -0400982 "as_src.S",
983 ":generated_hdr",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500984 ]`,
985 "srcs_c": `[
Liz Kammerae3994e2021-10-19 09:45:48 -0400986 "c_src.c",
987 ":generated_hdr",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500988 ]`,
989 }),
990 },
Liz Kammerae3994e2021-10-19 09:45:48 -0400991 })
992}
993
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200994func TestCcLibraryStaticArchSrcsExcludeSrcsGeneratedFiles(t *testing.T) {
995 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500996 description: "cc_library_static arch srcs/exclude_srcs with generated files",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200997 filesystem: map[string]string{
Chris Parsons990c4f42021-05-25 12:10:58 -0400998 "common.cpp": "",
999 "for-x86.cpp": "",
1000 "not-for-x86.cpp": "",
1001 "not-for-everything.cpp": "",
Liz Kammerbe46fcc2021-11-01 15:32:43 -04001002 "dep/Android.bp": simpleModuleDoNotConvertBp2build("genrule", "generated_src_other_pkg") +
1003 simpleModuleDoNotConvertBp2build("genrule", "generated_hdr_other_pkg") +
1004 simpleModuleDoNotConvertBp2build("genrule", "generated_src_other_pkg_x86") +
1005 simpleModuleDoNotConvertBp2build("genrule", "generated_hdr_other_pkg_x86") +
1006 simpleModuleDoNotConvertBp2build("genrule", "generated_hdr_other_pkg_android"),
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +02001007 },
Liz Kammerbe46fcc2021-11-01 15:32:43 -04001008 blueprint: soongCcLibraryStaticPreamble +
1009 simpleModuleDoNotConvertBp2build("genrule", "generated_src") +
1010 simpleModuleDoNotConvertBp2build("genrule", "generated_src_not_x86") +
1011 simpleModuleDoNotConvertBp2build("genrule", "generated_src_android") +
1012 simpleModuleDoNotConvertBp2build("genrule", "generated_hdr") + `
Chris Parsons484e50a2021-05-13 15:13:04 -04001013cc_library_static {
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001014 name: "foo_static",
Liz Kammer222bdcf2021-10-11 14:15:51 -04001015 srcs: ["common.cpp", "not-for-*.cpp"],
1016 exclude_srcs: ["not-for-everything.cpp"],
1017 generated_sources: ["generated_src", "generated_src_other_pkg", "generated_src_not_x86"],
1018 generated_headers: ["generated_hdr", "generated_hdr_other_pkg"],
Liz Kammer1263d9b2021-12-10 14:28:20 -05001019 export_generated_headers: ["generated_hdr_other_pkg"],
Liz Kammer222bdcf2021-10-11 14:15:51 -04001020 arch: {
1021 x86: {
1022 srcs: ["for-x86.cpp"],
1023 exclude_srcs: ["not-for-x86.cpp"],
1024 generated_headers: ["generated_hdr_other_pkg_x86"],
1025 exclude_generated_sources: ["generated_src_not_x86"],
Liz Kammer1263d9b2021-12-10 14:28:20 -05001026 export_generated_headers: ["generated_hdr_other_pkg_x86"],
Liz Kammer222bdcf2021-10-11 14:15:51 -04001027 },
1028 },
1029 target: {
1030 android: {
1031 generated_sources: ["generated_src_android"],
1032 generated_headers: ["generated_hdr_other_pkg_android"],
Liz Kammer1263d9b2021-12-10 14:28:20 -05001033 export_generated_headers: ["generated_hdr_other_pkg_android"],
Liz Kammer222bdcf2021-10-11 14:15:51 -04001034 },
1035 },
1036
Liz Kammer8337ea42021-09-10 10:06:32 -04001037 include_build_directory: false,
Chris Parsons484e50a2021-05-13 15:13:04 -04001038}
1039`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001040 expectedBazelTargets: []string{
1041 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
1042 "srcs": `[
Chris Parsons990c4f42021-05-25 12:10:58 -04001043 "common.cpp",
Liz Kammer9bad9d62021-10-11 15:40:35 -04001044 ":generated_src",
1045 "//dep:generated_src_other_pkg",
Liz Kammerae3994e2021-10-19 09:45:48 -04001046 ":generated_hdr",
Chris Parsons484e50a2021-05-13 15:13:04 -04001047 ] + select({
Liz Kammer1263d9b2021-12-10 14:28:20 -05001048 "//build/bazel/platforms/arch:x86": ["for-x86.cpp"],
Liz Kammer222bdcf2021-10-11 14:15:51 -04001049 "//conditions:default": [
Liz Kammer222bdcf2021-10-11 14:15:51 -04001050 "not-for-x86.cpp",
Liz Kammer9bad9d62021-10-11 15:40:35 -04001051 ":generated_src_not_x86",
Liz Kammer222bdcf2021-10-11 14:15:51 -04001052 ],
1053 }) + select({
Liz Kammer1263d9b2021-12-10 14:28:20 -05001054 "//build/bazel/platforms/os:android": [":generated_src_android"],
Liz Kammer222bdcf2021-10-11 14:15:51 -04001055 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001056 })`,
Liz Kammer1263d9b2021-12-10 14:28:20 -05001057 "hdrs": `["//dep:generated_hdr_other_pkg"] + select({
1058 "//build/bazel/platforms/arch:x86": ["//dep:generated_hdr_other_pkg_x86"],
1059 "//conditions:default": [],
1060 }) + select({
1061 "//build/bazel/platforms/os:android": ["//dep:generated_hdr_other_pkg_android"],
1062 "//conditions:default": [],
1063 })`,
1064 "local_includes": `["."]`,
1065 "export_absolute_includes": `["dep"]`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001066 }),
1067 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +02001068 })
Rupert Shuttleworth095081c2021-03-25 09:06:03 +00001069}
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001070
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001071func TestCcLibraryStaticGetTargetProperties(t *testing.T) {
1072 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1073
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001074 description: "cc_library_static complex GetTargetProperties",
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001075 blueprint: soongCcLibraryStaticPreamble + `
1076cc_library_static {
1077 name: "foo_static",
1078 target: {
1079 android: {
1080 srcs: ["android_src.c"],
1081 },
1082 android_arm: {
1083 srcs: ["android_arm_src.c"],
1084 },
1085 android_arm64: {
1086 srcs: ["android_arm64_src.c"],
1087 },
1088 android_x86: {
1089 srcs: ["android_x86_src.c"],
1090 },
1091 android_x86_64: {
1092 srcs: ["android_x86_64_src.c"],
1093 },
1094 linux_bionic_arm64: {
1095 srcs: ["linux_bionic_arm64_src.c"],
1096 },
1097 linux_bionic_x86_64: {
1098 srcs: ["linux_bionic_x86_64_src.c"],
1099 },
1100 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001101 include_build_directory: false,
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001102}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001103 expectedBazelTargets: []string{
1104 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
1105 "srcs_c": `select({
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001106 "//build/bazel/platforms/os:android": ["android_src.c"],
1107 "//conditions:default": [],
1108 }) + select({
Rupert Shuttleworthffd45822021-05-14 03:02:34 -04001109 "//build/bazel/platforms/os_arch:android_arm": ["android_arm_src.c"],
1110 "//build/bazel/platforms/os_arch:android_arm64": ["android_arm64_src.c"],
1111 "//build/bazel/platforms/os_arch:android_x86": ["android_x86_src.c"],
1112 "//build/bazel/platforms/os_arch:android_x86_64": ["android_x86_64_src.c"],
Rupert Shuttleworthffd45822021-05-14 03:02:34 -04001113 "//build/bazel/platforms/os_arch:linux_bionic_arm64": ["linux_bionic_arm64_src.c"],
1114 "//build/bazel/platforms/os_arch:linux_bionic_x86_64": ["linux_bionic_x86_64_src.c"],
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001115 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001116 })`,
1117 }),
1118 },
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001119 })
1120}
1121
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001122func TestCcLibraryStaticProductVariableSelects(t *testing.T) {
1123 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001124 description: "cc_library_static product variable selects",
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001125 blueprint: soongCcLibraryStaticPreamble + `
1126cc_library_static {
1127 name: "foo_static",
1128 srcs: ["common.c"],
1129 product_variables: {
1130 malloc_not_svelte: {
1131 cflags: ["-Wmalloc_not_svelte"],
1132 },
1133 malloc_zero_contents: {
1134 cflags: ["-Wmalloc_zero_contents"],
1135 },
1136 binder32bit: {
1137 cflags: ["-Wbinder32bit"],
1138 },
1139 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001140 include_build_directory: false,
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001141} `,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001142 expectedBazelTargets: []string{
1143 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
1144 "copts": `select({
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001145 "//build/bazel/product_variables:binder32bit": ["-Wbinder32bit"],
1146 "//conditions:default": [],
1147 }) + select({
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001148 "//build/bazel/product_variables:malloc_not_svelte": ["-Wmalloc_not_svelte"],
1149 "//conditions:default": [],
1150 }) + select({
1151 "//build/bazel/product_variables:malloc_zero_contents": ["-Wmalloc_zero_contents"],
1152 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001153 })`,
1154 "srcs_c": `["common.c"]`,
1155 }),
1156 },
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001157 })
1158}
1159
1160func TestCcLibraryStaticProductVariableArchSpecificSelects(t *testing.T) {
1161 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001162 description: "cc_library_static arch-specific product variable selects",
1163 filesystem: map[string]string{},
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001164 blueprint: soongCcLibraryStaticPreamble + `
1165cc_library_static {
1166 name: "foo_static",
1167 srcs: ["common.c"],
1168 product_variables: {
1169 malloc_not_svelte: {
1170 cflags: ["-Wmalloc_not_svelte"],
1171 },
1172 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001173 arch: {
1174 arm64: {
1175 product_variables: {
1176 malloc_not_svelte: {
1177 cflags: ["-Warm64_malloc_not_svelte"],
1178 },
1179 },
1180 },
1181 },
1182 multilib: {
1183 lib32: {
1184 product_variables: {
1185 malloc_not_svelte: {
1186 cflags: ["-Wlib32_malloc_not_svelte"],
1187 },
1188 },
1189 },
1190 },
1191 target: {
1192 android: {
1193 product_variables: {
1194 malloc_not_svelte: {
1195 cflags: ["-Wandroid_malloc_not_svelte"],
1196 },
1197 },
1198 }
1199 },
1200 include_build_directory: false,
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001201} `,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001202 expectedBazelTargets: []string{
1203 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
1204 "copts": `select({
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001205 "//build/bazel/product_variables:malloc_not_svelte": ["-Wmalloc_not_svelte"],
1206 "//conditions:default": [],
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001207 }) + select({
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001208 "//build/bazel/product_variables:malloc_not_svelte-android": ["-Wandroid_malloc_not_svelte"],
1209 "//conditions:default": [],
1210 }) + select({
1211 "//build/bazel/product_variables:malloc_not_svelte-arm": ["-Wlib32_malloc_not_svelte"],
1212 "//conditions:default": [],
1213 }) + select({
1214 "//build/bazel/product_variables:malloc_not_svelte-arm64": ["-Warm64_malloc_not_svelte"],
1215 "//conditions:default": [],
1216 }) + select({
1217 "//build/bazel/product_variables:malloc_not_svelte-x86": ["-Wlib32_malloc_not_svelte"],
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001218 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001219 })`,
1220 "srcs_c": `["common.c"]`,
1221 }),
1222 },
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001223 })
1224}
Liz Kammerba7a9c52021-05-26 08:45:30 -04001225
1226func TestCcLibraryStaticProductVariableStringReplacement(t *testing.T) {
1227 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001228 description: "cc_library_static product variable string replacement",
1229 filesystem: map[string]string{},
Liz Kammerba7a9c52021-05-26 08:45:30 -04001230 blueprint: soongCcLibraryStaticPreamble + `
1231cc_library_static {
1232 name: "foo_static",
Chris Parsons69fa9f92021-07-13 11:47:44 -04001233 srcs: ["common.S"],
Liz Kammerba7a9c52021-05-26 08:45:30 -04001234 product_variables: {
1235 platform_sdk_version: {
1236 asflags: ["-DPLATFORM_SDK_VERSION=%d"],
1237 },
1238 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001239 include_build_directory: false,
Liz Kammerba7a9c52021-05-26 08:45:30 -04001240} `,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001241 expectedBazelTargets: []string{
1242 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
1243 "asflags": `select({
Liz Kammerba7a9c52021-05-26 08:45:30 -04001244 "//build/bazel/product_variables:platform_sdk_version": ["-DPLATFORM_SDK_VERSION=$(Platform_sdk_version)"],
1245 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001246 })`,
1247 "srcs_as": `["common.S"]`,
1248 }),
1249 },
Liz Kammerba7a9c52021-05-26 08:45:30 -04001250 })
1251}
Chris Parsons51f8c392021-08-03 21:01:05 -04001252
1253func TestStaticLibrary_SystemSharedLibsRootEmpty(t *testing.T) {
1254 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001255 description: "cc_library_static system_shared_lib empty root",
Chris Parsons51f8c392021-08-03 21:01:05 -04001256 blueprint: soongCcLibraryStaticPreamble + `
1257cc_library_static {
1258 name: "root_empty",
Liz Kammer8337ea42021-09-10 10:06:32 -04001259 system_shared_libs: [],
1260 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001261}
1262`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001263 expectedBazelTargets: []string{
1264 makeBazelTarget("cc_library_static", "root_empty", attrNameToString{
1265 "system_dynamic_deps": `[]`,
1266 }),
1267 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001268 })
1269}
1270
1271func TestStaticLibrary_SystemSharedLibsStaticEmpty(t *testing.T) {
1272 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001273 description: "cc_library_static system_shared_lib empty static default",
Chris Parsons51f8c392021-08-03 21:01:05 -04001274 blueprint: soongCcLibraryStaticPreamble + `
1275cc_defaults {
1276 name: "static_empty_defaults",
1277 static: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001278 system_shared_libs: [],
1279 },
1280 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001281}
1282cc_library_static {
1283 name: "static_empty",
Liz Kammer8337ea42021-09-10 10:06:32 -04001284 defaults: ["static_empty_defaults"],
Chris Parsons51f8c392021-08-03 21:01:05 -04001285}
1286`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001287 expectedBazelTargets: []string{
1288 makeBazelTarget("cc_library_static", "static_empty", attrNameToString{
1289 "system_dynamic_deps": `[]`,
1290 }),
1291 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001292 })
1293}
1294
1295func TestStaticLibrary_SystemSharedLibsBionicEmpty(t *testing.T) {
1296 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001297 description: "cc_library_static system_shared_lib empty for bionic variant",
Chris Parsons51f8c392021-08-03 21:01:05 -04001298 blueprint: soongCcLibraryStaticPreamble + `
1299cc_library_static {
1300 name: "target_bionic_empty",
1301 target: {
1302 bionic: {
1303 system_shared_libs: [],
1304 },
1305 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001306 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001307}
1308`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001309 expectedBazelTargets: []string{
1310 makeBazelTarget("cc_library_static", "target_bionic_empty", attrNameToString{
1311 "system_dynamic_deps": `[]`,
1312 }),
1313 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001314 })
1315}
1316
1317func TestStaticLibrary_SystemSharedLibsLinuxBionicEmpty(t *testing.T) {
1318 // Note that this behavior is technically incorrect (it's a simplification).
1319 // The correct behavior would be if bp2build wrote `system_dynamic_deps = []`
1320 // only for linux_bionic, but `android` had `["libc", "libdl", "libm"].
1321 // b/195791252 tracks the fix.
1322 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001323 description: "cc_library_static system_shared_lib empty for linux_bionic variant",
Chris Parsons51f8c392021-08-03 21:01:05 -04001324 blueprint: soongCcLibraryStaticPreamble + `
1325cc_library_static {
1326 name: "target_linux_bionic_empty",
1327 target: {
1328 linux_bionic: {
1329 system_shared_libs: [],
1330 },
1331 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001332 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001333}
1334`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001335 expectedBazelTargets: []string{
1336 makeBazelTarget("cc_library_static", "target_linux_bionic_empty", attrNameToString{
1337 "system_dynamic_deps": `[]`,
1338 }),
1339 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001340 })
1341}
1342
1343func TestStaticLibrary_SystemSharedLibsBionic(t *testing.T) {
1344 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001345 description: "cc_library_static system_shared_libs set for bionic variant",
Liz Kammerbe46fcc2021-11-01 15:32:43 -04001346 blueprint: soongCcLibraryStaticPreamble +
1347 simpleModuleDoNotConvertBp2build("cc_library", "libc") + `
Chris Parsons51f8c392021-08-03 21:01:05 -04001348cc_library_static {
1349 name: "target_bionic",
1350 target: {
1351 bionic: {
1352 system_shared_libs: ["libc"],
1353 },
1354 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001355 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001356}
1357`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001358 expectedBazelTargets: []string{
1359 makeBazelTarget("cc_library_static", "target_bionic", attrNameToString{
1360 "system_dynamic_deps": `select({
Chris Parsons2dde0cb2021-10-01 14:45:30 -04001361 "//build/bazel/platforms/os:android": [":libc"],
1362 "//build/bazel/platforms/os:linux_bionic": [":libc"],
Chris Parsons51f8c392021-08-03 21:01:05 -04001363 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001364 })`,
1365 }),
1366 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001367 })
1368}
1369
1370func TestStaticLibrary_SystemSharedLibsLinuxRootAndLinuxBionic(t *testing.T) {
1371 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001372 description: "cc_library_static system_shared_libs set for root and linux_bionic variant",
Liz Kammerbe46fcc2021-11-01 15:32:43 -04001373 blueprint: soongCcLibraryStaticPreamble +
1374 simpleModuleDoNotConvertBp2build("cc_library", "libc") +
1375 simpleModuleDoNotConvertBp2build("cc_library", "libm") + `
Chris Parsons51f8c392021-08-03 21:01:05 -04001376cc_library_static {
1377 name: "target_linux_bionic",
Liz Kammer8337ea42021-09-10 10:06:32 -04001378 system_shared_libs: ["libc"],
Chris Parsons51f8c392021-08-03 21:01:05 -04001379 target: {
1380 linux_bionic: {
1381 system_shared_libs: ["libm"],
1382 },
1383 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001384 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001385}
1386`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001387 expectedBazelTargets: []string{
1388 makeBazelTarget("cc_library_static", "target_linux_bionic", attrNameToString{
1389 "system_dynamic_deps": `[":libc"] + select({
Chris Parsons51f8c392021-08-03 21:01:05 -04001390 "//build/bazel/platforms/os:linux_bionic": [":libm"],
1391 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001392 })`,
1393 }),
1394 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001395 })
1396}
Liz Kammer12615db2021-09-28 09:19:17 -04001397
1398func TestCcLibraryStaticProto(t *testing.T) {
1399 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1400 blueprint: soongCcProtoPreamble + `cc_library_static {
1401 name: "foo",
1402 srcs: ["foo.proto"],
1403 proto: {
1404 canonical_path_from_root: false,
1405 export_proto_headers: true,
1406 },
1407 include_build_directory: false,
1408}`,
1409 expectedBazelTargets: []string{
1410 makeBazelTarget("proto_library", "foo_proto", attrNameToString{
1411 "srcs": `["foo.proto"]`,
1412 }), makeBazelTarget("cc_lite_proto_library", "foo_cc_proto_lite", attrNameToString{
1413 "deps": `[":foo_proto"]`,
1414 }), makeBazelTarget("cc_library_static", "foo", attrNameToString{
1415 "deps": `[":libprotobuf-cpp-lite"]`,
1416 "whole_archive_deps": `[":foo_cc_proto_lite"]`,
1417 }),
1418 },
1419 })
1420}
Rupert Shuttleworth484aa252021-12-10 07:22:53 -05001421
1422func TestCcLibraryStaticUseVersionLib(t *testing.T) {
1423 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1424 blueprint: soongCcProtoPreamble + `cc_library_static {
1425 name: "foo",
1426 use_version_lib: true,
1427 include_build_directory: false,
1428}`,
1429 expectedBazelTargets: []string{
1430 makeBazelTarget("cc_library_static", "foo", attrNameToString{
1431 "use_version_lib": "True",
1432 }),
1433 },
1434 })
1435}
Liz Kammercac7f692021-12-16 14:19:32 -05001436
1437func TestCcLibraryStaticStdInFlags(t *testing.T) {
1438 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1439 blueprint: soongCcProtoPreamble + `cc_library_static {
1440 name: "foo",
1441 cflags: ["-std=candcpp"],
1442 conlyflags: ["-std=conly"],
1443 cppflags: ["-std=cpp"],
1444 include_build_directory: false,
1445}`,
1446 expectedBazelTargets: []string{
1447 makeBazelTarget("cc_library_static", "foo", attrNameToString{
1448 "conlyflags": `["-std=conly"]`,
1449 "cppflags": `["-std=cpp"]`,
1450 }),
1451 },
1452 })
1453}