blob: be10e866d058d3ca9474435e7139dc751d77384b [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)
32
33func TestCcLibraryStaticLoadStatement(t *testing.T) {
34 testCases := []struct {
35 bazelTargets BazelTargets
36 expectedLoadStatements string
37 }{
38 {
39 bazelTargets: BazelTargets{
40 BazelTarget{
41 name: "cc_library_static_target",
42 ruleClass: "cc_library_static",
43 // NOTE: No bzlLoadLocation for native rules
44 },
45 },
46 expectedLoadStatements: ``,
47 },
48 }
49
50 for _, testCase := range testCases {
51 actual := testCase.bazelTargets.LoadStatements()
52 expected := testCase.expectedLoadStatements
53 if actual != expected {
54 t.Fatalf("Expected load statements to be %s, got %s", expected, actual)
55 }
56 }
Rupert Shuttleworth095081c2021-03-25 09:06:03 +000057}
58
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020059func registerCcLibraryStaticModuleTypes(ctx android.RegistrationContext) {
60 cc.RegisterCCBuildComponents(ctx)
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020061 ctx.RegisterModuleType("cc_library_headers", cc.LibraryHeaderFactory)
62 ctx.RegisterModuleType("genrule", genrule.GenRuleFactory)
Chris Parsons51f8c392021-08-03 21:01:05 -040063 // Required for system_shared_libs dependencies.
64 ctx.RegisterModuleType("cc_library", cc.LibraryFactory)
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020065}
66
67func runCcLibraryStaticTestCase(t *testing.T, tc bp2buildTestCase) {
Liz Kammere4982e82021-05-25 10:39:35 -040068 t.Helper()
Liz Kammer78cfdaa2021-11-08 12:56:31 -050069
70 (&tc).moduleTypeUnderTest = "cc_library_static"
71 (&tc).moduleTypeUnderTestFactory = cc.LibraryStaticFactory
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020072 runBp2BuildTestCase(t, registerCcLibraryStaticModuleTypes, tc)
73}
74
75func TestCcLibraryStaticSimple(t *testing.T) {
76 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -050077 description: "cc_library_static test",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020078 filesystem: map[string]string{
79 // NOTE: include_dir headers *should not* appear in Bazel hdrs later (?)
80 "include_dir_1/include_dir_1_a.h": "",
81 "include_dir_1/include_dir_1_b.h": "",
82 "include_dir_2/include_dir_2_a.h": "",
83 "include_dir_2/include_dir_2_b.h": "",
84 // NOTE: local_include_dir headers *should not* appear in Bazel hdrs later (?)
85 "local_include_dir_1/local_include_dir_1_a.h": "",
86 "local_include_dir_1/local_include_dir_1_b.h": "",
87 "local_include_dir_2/local_include_dir_2_a.h": "",
88 "local_include_dir_2/local_include_dir_2_b.h": "",
89 // NOTE: export_include_dir headers *should* appear in Bazel hdrs later
90 "export_include_dir_1/export_include_dir_1_a.h": "",
91 "export_include_dir_1/export_include_dir_1_b.h": "",
92 "export_include_dir_2/export_include_dir_2_a.h": "",
93 "export_include_dir_2/export_include_dir_2_b.h": "",
94 // NOTE: Soong implicitly includes headers in the current directory
95 "implicit_include_1.h": "",
96 "implicit_include_2.h": "",
97 },
98 blueprint: soongCcLibraryStaticPreamble + `
Rupert Shuttleworth095081c2021-03-25 09:06:03 +000099cc_library_headers {
100 name: "header_lib_1",
101 export_include_dirs: ["header_lib_1"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400102 bazel_module: { bp2build_available: false },
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000103}
104
105cc_library_headers {
106 name: "header_lib_2",
107 export_include_dirs: ["header_lib_2"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400108 bazel_module: { bp2build_available: false },
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000109}
110
111cc_library_static {
112 name: "static_lib_1",
113 srcs: ["static_lib_1.cc"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400114 bazel_module: { bp2build_available: false },
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000115}
116
117cc_library_static {
118 name: "static_lib_2",
119 srcs: ["static_lib_2.cc"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400120 bazel_module: { bp2build_available: false },
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000121}
122
123cc_library_static {
124 name: "whole_static_lib_1",
125 srcs: ["whole_static_lib_1.cc"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400126 bazel_module: { bp2build_available: false },
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000127}
128
129cc_library_static {
130 name: "whole_static_lib_2",
131 srcs: ["whole_static_lib_2.cc"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400132 bazel_module: { bp2build_available: false },
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000133}
134
135cc_library_static {
136 name: "foo_static",
137 srcs: [
138 "foo_static1.cc",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000139 "foo_static2.cc",
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000140 ],
141 cflags: [
142 "-Dflag1",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000143 "-Dflag2"
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000144 ],
145 static_libs: [
146 "static_lib_1",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000147 "static_lib_2"
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000148 ],
149 whole_static_libs: [
150 "whole_static_lib_1",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000151 "whole_static_lib_2"
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000152 ],
153 include_dirs: [
Jingwen Chened9c17d2021-04-13 07:14:55 +0000154 "include_dir_1",
155 "include_dir_2",
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000156 ],
157 local_include_dirs: [
158 "local_include_dir_1",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000159 "local_include_dir_2",
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000160 ],
161 export_include_dirs: [
Chris Parsonsd6358772021-05-18 18:35:24 -0400162 "export_include_dir_1",
163 "export_include_dir_2"
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000164 ],
165 header_libs: [
166 "header_lib_1",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000167 "header_lib_2"
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000168 ],
Yu Liufc603162022-03-01 15:44:08 -0800169 sdk_version: "current",
170 min_sdk_version: "29",
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000171
172 // TODO: Also support export_header_lib_headers
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000173}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500174 expectedBazelTargets: []string{
175 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
176 "absolute_includes": `[
Liz Kammer35687bc2021-09-10 10:07:07 -0400177 "include_dir_1",
178 "include_dir_2",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500179 ]`,
180 "copts": `[
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000181 "-Dflag1",
182 "-Dflag2",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500183 ]`,
184 "export_includes": `[
Liz Kammer5fad5012021-09-09 14:08:21 -0400185 "export_include_dir_1",
186 "export_include_dir_2",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500187 ]`,
188 "implementation_deps": `[
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000189 ":header_lib_1",
190 ":header_lib_2",
191 ":static_lib_1",
192 ":static_lib_2",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500193 ]`,
194 "local_includes": `[
Liz Kammer35687bc2021-09-10 10:07:07 -0400195 "local_include_dir_1",
196 "local_include_dir_2",
197 ".",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500198 ]`,
199 "srcs": `[
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000200 "foo_static1.cc",
201 "foo_static2.cc",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500202 ]`,
203 "whole_archive_deps": `[
Chris Parsons08648312021-05-06 16:23:19 -0400204 ":whole_static_lib_1",
205 ":whole_static_lib_2",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500206 ]`,
Yu Liufc603162022-03-01 15:44:08 -0800207 "sdk_version": `"current"`,
208 "min_sdk_version": `"29"`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500209 }),
210 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200211 })
212}
213
214func TestCcLibraryStaticSubpackage(t *testing.T) {
215 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500216 description: "cc_library_static subpackage test",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200217 filesystem: map[string]string{
218 // subpackage with subdirectory
219 "subpackage/Android.bp": "",
220 "subpackage/subpackage_header.h": "",
221 "subpackage/subdirectory/subdirectory_header.h": "",
222 // subsubpackage with subdirectory
223 "subpackage/subsubpackage/Android.bp": "",
224 "subpackage/subsubpackage/subsubpackage_header.h": "",
225 "subpackage/subsubpackage/subdirectory/subdirectory_header.h": "",
226 // subsubsubpackage with subdirectory
227 "subpackage/subsubpackage/subsubsubpackage/Android.bp": "",
228 "subpackage/subsubpackage/subsubsubpackage/subsubsubpackage_header.h": "",
229 "subpackage/subsubpackage/subsubsubpackage/subdirectory/subdirectory_header.h": "",
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000230 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200231 blueprint: soongCcLibraryStaticPreamble + `
Rupert Shuttleworthc143cc52021-04-13 13:08:04 -0400232cc_library_static {
233 name: "foo_static",
Liz Kammer35687bc2021-09-10 10:07:07 -0400234 srcs: [],
Rupert Shuttleworthc143cc52021-04-13 13:08:04 -0400235 include_dirs: [
Liz Kammer35687bc2021-09-10 10:07:07 -0400236 "subpackage",
Rupert Shuttleworthc143cc52021-04-13 13:08:04 -0400237 ],
Rupert Shuttleworthc143cc52021-04-13 13:08:04 -0400238}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500239 expectedBazelTargets: []string{
240 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
241 "absolute_includes": `["subpackage"]`,
242 "local_includes": `["."]`,
243 }),
244 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200245 })
246}
247
248func TestCcLibraryStaticExportIncludeDir(t *testing.T) {
249 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500250 description: "cc_library_static export include dir",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200251 filesystem: map[string]string{
252 // subpackage with subdirectory
253 "subpackage/Android.bp": "",
254 "subpackage/subpackage_header.h": "",
255 "subpackage/subdirectory/subdirectory_header.h": "",
Rupert Shuttleworthc143cc52021-04-13 13:08:04 -0400256 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200257 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chened9c17d2021-04-13 07:14:55 +0000258cc_library_static {
259 name: "foo_static",
260 export_include_dirs: ["subpackage"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400261 include_build_directory: false,
Jingwen Chened9c17d2021-04-13 07:14:55 +0000262}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500263 expectedBazelTargets: []string{
264 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
265 "export_includes": `["subpackage"]`,
266 }),
267 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200268 })
269}
270
271func TestCcLibraryStaticExportSystemIncludeDir(t *testing.T) {
272 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500273 description: "cc_library_static export system include dir",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200274 filesystem: map[string]string{
275 // subpackage with subdirectory
276 "subpackage/Android.bp": "",
277 "subpackage/subpackage_header.h": "",
278 "subpackage/subdirectory/subdirectory_header.h": "",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000279 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200280 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chened9c17d2021-04-13 07:14:55 +0000281cc_library_static {
282 name: "foo_static",
283 export_system_include_dirs: ["subpackage"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400284 include_build_directory: false,
Jingwen Chened9c17d2021-04-13 07:14:55 +0000285}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500286 expectedBazelTargets: []string{
287 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
288 "export_system_includes": `["subpackage"]`,
289 }),
290 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200291 })
292}
293
294func TestCcLibraryStaticManyIncludeDirs(t *testing.T) {
295 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500296 description: "cc_library_static include_dirs, local_include_dirs, export_include_dirs (b/183742505)",
297 dir: "subpackage",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200298 filesystem: map[string]string{
299 // subpackage with subdirectory
300 "subpackage/Android.bp": `
Jingwen Chened9c17d2021-04-13 07:14:55 +0000301cc_library_static {
302 name: "foo_static",
303 // include_dirs are workspace/root relative
304 include_dirs: [
305 "subpackage/subsubpackage",
306 "subpackage2",
307 "subpackage3/subsubpackage"
308 ],
309 local_include_dirs: ["subsubpackage2"], // module dir relative
310 export_include_dirs: ["./exported_subsubpackage"], // module dir relative
311 include_build_directory: true,
312 bazel_module: { bp2build_available: true },
313}`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200314 "subpackage/subsubpackage/header.h": "",
315 "subpackage/subsubpackage2/header.h": "",
316 "subpackage/exported_subsubpackage/header.h": "",
317 "subpackage2/header.h": "",
318 "subpackage3/subsubpackage/header.h": "",
319 },
320 blueprint: soongCcLibraryStaticPreamble,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500321 expectedBazelTargets: []string{
322 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
323 "absolute_includes": `[
Liz Kammer35687bc2021-09-10 10:07:07 -0400324 "subpackage/subsubpackage",
325 "subpackage2",
326 "subpackage3/subsubpackage",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500327 ]`,
328 "export_includes": `["./exported_subsubpackage"]`,
329 "local_includes": `[
Liz Kammer35687bc2021-09-10 10:07:07 -0400330 "subsubpackage2",
331 ".",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500332 ]`,
333 })},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200334 })
335}
336
337func TestCcLibraryStaticIncludeBuildDirectoryDisabled(t *testing.T) {
338 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500339 description: "cc_library_static include_build_directory disabled",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200340 filesystem: map[string]string{
341 // subpackage with subdirectory
342 "subpackage/Android.bp": "",
343 "subpackage/subpackage_header.h": "",
344 "subpackage/subdirectory/subdirectory_header.h": "",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000345 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200346 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chened9c17d2021-04-13 07:14:55 +0000347cc_library_static {
348 name: "foo_static",
349 include_dirs: ["subpackage"], // still used, but local_include_dirs is recommended
350 local_include_dirs: ["subpackage2"],
351 include_build_directory: false,
352}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500353 expectedBazelTargets: []string{
354 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
355 "absolute_includes": `["subpackage"]`,
356 "local_includes": `["subpackage2"]`,
357 }),
358 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200359 })
360}
361
362func TestCcLibraryStaticIncludeBuildDirectoryEnabled(t *testing.T) {
363 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500364 description: "cc_library_static include_build_directory enabled",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200365 filesystem: map[string]string{
366 // subpackage with subdirectory
367 "subpackage/Android.bp": "",
368 "subpackage/subpackage_header.h": "",
369 "subpackage2/Android.bp": "",
370 "subpackage2/subpackage2_header.h": "",
371 "subpackage/subdirectory/subdirectory_header.h": "",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000372 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200373 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chened9c17d2021-04-13 07:14:55 +0000374cc_library_static {
375 name: "foo_static",
376 include_dirs: ["subpackage"], // still used, but local_include_dirs is recommended
377 local_include_dirs: ["subpackage2"],
378 include_build_directory: true,
379}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500380 expectedBazelTargets: []string{
381 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
382 "absolute_includes": `["subpackage"]`,
383 "local_includes": `[
Liz Kammer35687bc2021-09-10 10:07:07 -0400384 "subpackage2",
385 ".",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500386 ]`,
387 }),
388 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200389 })
390}
391
392func TestCcLibraryStaticArchSpecificStaticLib(t *testing.T) {
393 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500394 description: "cc_library_static arch-specific static_libs",
395 filesystem: map[string]string{},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200396 blueprint: soongCcLibraryStaticPreamble + `
Liz Kammer8337ea42021-09-10 10:06:32 -0400397cc_library_static {
398 name: "static_dep",
399 bazel_module: { bp2build_available: false },
400}
401cc_library_static {
402 name: "static_dep2",
403 bazel_module: { bp2build_available: false },
404}
Jingwen Chened9c17d2021-04-13 07:14:55 +0000405cc_library_static {
406 name: "foo_static",
407 arch: { arm64: { static_libs: ["static_dep"], whole_static_libs: ["static_dep2"] } },
Liz Kammer8337ea42021-09-10 10:06:32 -0400408 include_build_directory: false,
Jingwen Chened9c17d2021-04-13 07:14:55 +0000409}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500410 expectedBazelTargets: []string{
411 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
412 "implementation_deps": `select({
Chris Parsons08648312021-05-06 16:23:19 -0400413 "//build/bazel/platforms/arch:arm64": [":static_dep"],
Jingwen Chened9c17d2021-04-13 07:14:55 +0000414 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500415 })`,
416 "whole_archive_deps": `select({
Chris Parsons08648312021-05-06 16:23:19 -0400417 "//build/bazel/platforms/arch:arm64": [":static_dep2"],
418 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500419 })`,
420 }),
421 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200422 })
423}
424
425func TestCcLibraryStaticOsSpecificStaticLib(t *testing.T) {
426 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500427 description: "cc_library_static os-specific static_libs",
428 filesystem: map[string]string{},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200429 blueprint: soongCcLibraryStaticPreamble + `
Liz Kammer8337ea42021-09-10 10:06:32 -0400430cc_library_static {
431 name: "static_dep",
432 bazel_module: { bp2build_available: false },
433}
434cc_library_static {
435 name: "static_dep2",
436 bazel_module: { bp2build_available: false },
437}
Jingwen Chened9c17d2021-04-13 07:14:55 +0000438cc_library_static {
439 name: "foo_static",
440 target: { android: { static_libs: ["static_dep"], whole_static_libs: ["static_dep2"] } },
Liz Kammer8337ea42021-09-10 10:06:32 -0400441 include_build_directory: false,
Jingwen Chened9c17d2021-04-13 07:14:55 +0000442}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500443 expectedBazelTargets: []string{
444 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
445 "implementation_deps": `select({
Chris Parsons08648312021-05-06 16:23:19 -0400446 "//build/bazel/platforms/os:android": [":static_dep"],
Jingwen Chened9c17d2021-04-13 07:14:55 +0000447 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500448 })`,
449 "whole_archive_deps": `select({
Chris Parsons08648312021-05-06 16:23:19 -0400450 "//build/bazel/platforms/os:android": [":static_dep2"],
451 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500452 })`,
453 }),
454 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200455 })
456}
457
458func TestCcLibraryStaticBaseArchOsSpecificStaticLib(t *testing.T) {
459 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500460 description: "cc_library_static base, arch and os-specific static_libs",
461 filesystem: map[string]string{},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200462 blueprint: soongCcLibraryStaticPreamble + `
Liz Kammer8337ea42021-09-10 10:06:32 -0400463cc_library_static {
464 name: "static_dep",
465 bazel_module: { bp2build_available: false },
466}
467cc_library_static {
468 name: "static_dep2",
469 bazel_module: { bp2build_available: false },
470}
471cc_library_static {
472 name: "static_dep3",
473 bazel_module: { bp2build_available: false },
474}
475cc_library_static {
476 name: "static_dep4",
477 bazel_module: { bp2build_available: false },
478}
Jingwen Chened9c17d2021-04-13 07:14:55 +0000479cc_library_static {
480 name: "foo_static",
481 static_libs: ["static_dep"],
482 whole_static_libs: ["static_dep2"],
483 target: { android: { static_libs: ["static_dep3"] } },
484 arch: { arm64: { static_libs: ["static_dep4"] } },
Liz Kammer8337ea42021-09-10 10:06:32 -0400485 include_build_directory: false,
Jingwen Chened9c17d2021-04-13 07:14:55 +0000486}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500487 expectedBazelTargets: []string{
488 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
489 "implementation_deps": `[":static_dep"] + select({
Jingwen Chened9c17d2021-04-13 07:14:55 +0000490 "//build/bazel/platforms/arch:arm64": [":static_dep4"],
491 "//conditions:default": [],
492 }) + select({
493 "//build/bazel/platforms/os:android": [":static_dep3"],
494 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500495 })`,
496 "whole_archive_deps": `[":static_dep2"]`,
497 }),
498 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200499 })
500}
501
502func TestCcLibraryStaticSimpleExcludeSrcs(t *testing.T) {
503 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500504 description: "cc_library_static simple exclude_srcs",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200505 filesystem: map[string]string{
506 "common.c": "",
507 "foo-a.c": "",
508 "foo-excluded.c": "",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000509 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200510 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chene32e9e02021-04-23 09:17:24 +0000511cc_library_static {
512 name: "foo_static",
513 srcs: ["common.c", "foo-*.c"],
514 exclude_srcs: ["foo-excluded.c"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400515 include_build_directory: false,
Jingwen Chene32e9e02021-04-23 09:17:24 +0000516}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500517 expectedBazelTargets: []string{
518 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
519 "srcs_c": `[
Jingwen Chene32e9e02021-04-23 09:17:24 +0000520 "common.c",
521 "foo-a.c",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500522 ]`,
523 }),
524 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200525 })
526}
527
528func TestCcLibraryStaticOneArchSrcs(t *testing.T) {
529 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500530 description: "cc_library_static one arch specific srcs",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200531 filesystem: map[string]string{
532 "common.c": "",
533 "foo-arm.c": "",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000534 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200535 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chene32e9e02021-04-23 09:17:24 +0000536cc_library_static {
537 name: "foo_static",
538 srcs: ["common.c"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400539 arch: { arm: { srcs: ["foo-arm.c"] } },
540 include_build_directory: false,
Jingwen Chene32e9e02021-04-23 09:17:24 +0000541}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500542 expectedBazelTargets: []string{
543 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
544 "srcs_c": `["common.c"] + select({
Jingwen Chene32e9e02021-04-23 09:17:24 +0000545 "//build/bazel/platforms/arch:arm": ["foo-arm.c"],
546 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500547 })`,
548 }),
549 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200550 })
551}
552
553func TestCcLibraryStaticOneArchSrcsExcludeSrcs(t *testing.T) {
554 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500555 description: "cc_library_static one arch specific srcs and exclude_srcs",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200556 filesystem: map[string]string{
557 "common.c": "",
558 "for-arm.c": "",
559 "not-for-arm.c": "",
560 "not-for-anything.c": "",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000561 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200562 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chene32e9e02021-04-23 09:17:24 +0000563cc_library_static {
564 name: "foo_static",
565 srcs: ["common.c", "not-for-*.c"],
566 exclude_srcs: ["not-for-anything.c"],
567 arch: {
568 arm: { srcs: ["for-arm.c"], exclude_srcs: ["not-for-arm.c"] },
569 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400570 include_build_directory: false,
Jingwen Chene32e9e02021-04-23 09:17:24 +0000571}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500572 expectedBazelTargets: []string{
573 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
574 "srcs_c": `["common.c"] + select({
Jingwen Chene32e9e02021-04-23 09:17:24 +0000575 "//build/bazel/platforms/arch:arm": ["for-arm.c"],
576 "//conditions:default": ["not-for-arm.c"],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500577 })`,
578 }),
579 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200580 })
581}
582
583func TestCcLibraryStaticTwoArchExcludeSrcs(t *testing.T) {
584 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500585 description: "cc_library_static arch specific exclude_srcs for 2 architectures",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200586 filesystem: map[string]string{
587 "common.c": "",
588 "for-arm.c": "",
589 "for-x86.c": "",
590 "not-for-arm.c": "",
591 "not-for-x86.c": "",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000592 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200593 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chene32e9e02021-04-23 09:17:24 +0000594cc_library_static {
595 name: "foo_static",
596 srcs: ["common.c", "not-for-*.c"],
597 exclude_srcs: ["not-for-everything.c"],
598 arch: {
599 arm: { srcs: ["for-arm.c"], exclude_srcs: ["not-for-arm.c"] },
600 x86: { srcs: ["for-x86.c"], exclude_srcs: ["not-for-x86.c"] },
601 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400602 include_build_directory: false,
Jingwen Chene32e9e02021-04-23 09:17:24 +0000603} `,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500604 expectedBazelTargets: []string{
605 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
606 "srcs_c": `["common.c"] + select({
Jingwen Chene32e9e02021-04-23 09:17:24 +0000607 "//build/bazel/platforms/arch:arm": [
Jingwen Chene32e9e02021-04-23 09:17:24 +0000608 "not-for-x86.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400609 "for-arm.c",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000610 ],
611 "//build/bazel/platforms/arch:x86": [
Jingwen Chene32e9e02021-04-23 09:17:24 +0000612 "not-for-arm.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400613 "for-x86.c",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000614 ],
615 "//conditions:default": [
616 "not-for-arm.c",
617 "not-for-x86.c",
618 ],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500619 })`,
620 }),
621 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200622 })
623}
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500624
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200625func TestCcLibraryStaticFourArchExcludeSrcs(t *testing.T) {
626 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500627 description: "cc_library_static arch specific exclude_srcs for 4 architectures",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200628 filesystem: map[string]string{
629 "common.c": "",
630 "for-arm.c": "",
631 "for-arm64.c": "",
632 "for-x86.c": "",
633 "for-x86_64.c": "",
634 "not-for-arm.c": "",
635 "not-for-arm64.c": "",
636 "not-for-x86.c": "",
637 "not-for-x86_64.c": "",
638 "not-for-everything.c": "",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000639 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200640 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chene32e9e02021-04-23 09:17:24 +0000641cc_library_static {
642 name: "foo_static",
643 srcs: ["common.c", "not-for-*.c"],
644 exclude_srcs: ["not-for-everything.c"],
645 arch: {
646 arm: { srcs: ["for-arm.c"], exclude_srcs: ["not-for-arm.c"] },
647 arm64: { srcs: ["for-arm64.c"], exclude_srcs: ["not-for-arm64.c"] },
648 x86: { srcs: ["for-x86.c"], exclude_srcs: ["not-for-x86.c"] },
649 x86_64: { srcs: ["for-x86_64.c"], exclude_srcs: ["not-for-x86_64.c"] },
Liz Kammer8337ea42021-09-10 10:06:32 -0400650 },
651 include_build_directory: false,
Jingwen Chene32e9e02021-04-23 09:17:24 +0000652} `,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500653 expectedBazelTargets: []string{
654 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
655 "srcs_c": `["common.c"] + select({
Jingwen Chene32e9e02021-04-23 09:17:24 +0000656 "//build/bazel/platforms/arch:arm": [
Jingwen Chene32e9e02021-04-23 09:17:24 +0000657 "not-for-arm64.c",
658 "not-for-x86.c",
659 "not-for-x86_64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400660 "for-arm.c",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000661 ],
662 "//build/bazel/platforms/arch:arm64": [
Jingwen Chene32e9e02021-04-23 09:17:24 +0000663 "not-for-arm.c",
664 "not-for-x86.c",
665 "not-for-x86_64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400666 "for-arm64.c",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000667 ],
668 "//build/bazel/platforms/arch:x86": [
Jingwen Chene32e9e02021-04-23 09:17:24 +0000669 "not-for-arm.c",
670 "not-for-arm64.c",
671 "not-for-x86_64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400672 "for-x86.c",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000673 ],
674 "//build/bazel/platforms/arch:x86_64": [
Jingwen Chene32e9e02021-04-23 09:17:24 +0000675 "not-for-arm.c",
676 "not-for-arm64.c",
677 "not-for-x86.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400678 "for-x86_64.c",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000679 ],
680 "//conditions:default": [
681 "not-for-arm.c",
682 "not-for-arm64.c",
683 "not-for-x86.c",
684 "not-for-x86_64.c",
685 ],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500686 })`,
687 }),
688 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200689 })
690}
691
Liz Kammer2b07ec72021-05-26 15:08:27 -0400692func TestCcLibraryStaticOneArchEmpty(t *testing.T) {
693 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500694 description: "cc_library_static one arch empty",
Liz Kammer2b07ec72021-05-26 15:08:27 -0400695 filesystem: map[string]string{
696 "common.cc": "",
697 "foo-no-arm.cc": "",
698 "foo-excluded.cc": "",
699 },
700 blueprint: soongCcLibraryStaticPreamble + `
701cc_library_static {
702 name: "foo_static",
703 srcs: ["common.cc", "foo-*.cc"],
704 exclude_srcs: ["foo-excluded.cc"],
705 arch: {
706 arm: { exclude_srcs: ["foo-no-arm.cc"] },
707 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400708 include_build_directory: false,
Liz Kammer2b07ec72021-05-26 15:08:27 -0400709}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500710 expectedBazelTargets: []string{
711 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
712 "srcs": `["common.cc"] + select({
Liz Kammer2b07ec72021-05-26 15:08:27 -0400713 "//build/bazel/platforms/arch:arm": [],
714 "//conditions:default": ["foo-no-arm.cc"],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500715 })`,
716 }),
717 },
Liz Kammer2b07ec72021-05-26 15:08:27 -0400718 })
719}
720
721func TestCcLibraryStaticOneArchEmptyOtherSet(t *testing.T) {
722 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500723 description: "cc_library_static one arch empty other set",
Liz Kammer2b07ec72021-05-26 15:08:27 -0400724 filesystem: map[string]string{
725 "common.cc": "",
726 "foo-no-arm.cc": "",
727 "x86-only.cc": "",
728 "foo-excluded.cc": "",
729 },
730 blueprint: soongCcLibraryStaticPreamble + `
731cc_library_static {
732 name: "foo_static",
733 srcs: ["common.cc", "foo-*.cc"],
734 exclude_srcs: ["foo-excluded.cc"],
735 arch: {
736 arm: { exclude_srcs: ["foo-no-arm.cc"] },
737 x86: { srcs: ["x86-only.cc"] },
738 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400739 include_build_directory: false,
Liz Kammer2b07ec72021-05-26 15:08:27 -0400740}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500741 expectedBazelTargets: []string{
742 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
743 "srcs": `["common.cc"] + select({
Liz Kammer2b07ec72021-05-26 15:08:27 -0400744 "//build/bazel/platforms/arch:arm": [],
745 "//build/bazel/platforms/arch:x86": [
746 "foo-no-arm.cc",
747 "x86-only.cc",
748 ],
749 "//conditions:default": ["foo-no-arm.cc"],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500750 })`,
751 }),
752 },
Liz Kammer2b07ec72021-05-26 15:08:27 -0400753 })
754}
755
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200756func TestCcLibraryStaticMultipleDepSameName(t *testing.T) {
757 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500758 description: "cc_library_static multiple dep same name panic",
759 filesystem: map[string]string{},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200760 blueprint: soongCcLibraryStaticPreamble + `
Liz Kammer8337ea42021-09-10 10:06:32 -0400761cc_library_static {
762 name: "static_dep",
763 bazel_module: { bp2build_available: false },
764}
Liz Kammer2b50ce62021-04-26 15:47:28 -0400765cc_library_static {
766 name: "foo_static",
Chris Parsons08648312021-05-06 16:23:19 -0400767 static_libs: ["static_dep", "static_dep"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400768 include_build_directory: false,
Liz Kammer2b50ce62021-04-26 15:47:28 -0400769}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500770 expectedBazelTargets: []string{
771 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
772 "implementation_deps": `[":static_dep"]`,
773 }),
774 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200775 })
776}
777
778func TestCcLibraryStaticOneMultilibSrcsExcludeSrcs(t *testing.T) {
779 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500780 description: "cc_library_static 1 multilib srcs and exclude_srcs",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200781 filesystem: map[string]string{
782 "common.c": "",
783 "for-lib32.c": "",
784 "not-for-lib32.c": "",
Liz Kammer2b50ce62021-04-26 15:47:28 -0400785 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200786 blueprint: soongCcLibraryStaticPreamble + `
Chris Parsonsc424b762021-04-29 18:06:50 -0400787cc_library_static {
788 name: "foo_static",
789 srcs: ["common.c", "not-for-*.c"],
790 multilib: {
791 lib32: { srcs: ["for-lib32.c"], exclude_srcs: ["not-for-lib32.c"] },
792 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400793 include_build_directory: false,
Chris Parsonsc424b762021-04-29 18:06:50 -0400794} `,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500795 expectedBazelTargets: []string{
796 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
797 "srcs_c": `["common.c"] + select({
Chris Parsonsc424b762021-04-29 18:06:50 -0400798 "//build/bazel/platforms/arch:arm": ["for-lib32.c"],
799 "//build/bazel/platforms/arch:x86": ["for-lib32.c"],
800 "//conditions:default": ["not-for-lib32.c"],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500801 })`,
802 }),
803 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200804 })
805}
806
807func TestCcLibraryStaticTwoMultilibSrcsExcludeSrcs(t *testing.T) {
808 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500809 description: "cc_library_static 2 multilib srcs and exclude_srcs",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200810 filesystem: map[string]string{
811 "common.c": "",
812 "for-lib32.c": "",
813 "for-lib64.c": "",
814 "not-for-lib32.c": "",
815 "not-for-lib64.c": "",
Chris Parsonsc424b762021-04-29 18:06:50 -0400816 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200817 blueprint: soongCcLibraryStaticPreamble + `
Chris Parsonsc424b762021-04-29 18:06:50 -0400818cc_library_static {
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500819 name: "foo_static",
Chris Parsonsc424b762021-04-29 18:06:50 -0400820 srcs: ["common.c", "not-for-*.c"],
821 multilib: {
822 lib32: { srcs: ["for-lib32.c"], exclude_srcs: ["not-for-lib32.c"] },
823 lib64: { srcs: ["for-lib64.c"], exclude_srcs: ["not-for-lib64.c"] },
824 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400825 include_build_directory: false,
Chris Parsonsc424b762021-04-29 18:06:50 -0400826} `,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500827 expectedBazelTargets: []string{
828 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
829 "srcs_c": `["common.c"] + select({
Chris Parsonsc424b762021-04-29 18:06:50 -0400830 "//build/bazel/platforms/arch:arm": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400831 "not-for-lib64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400832 "for-lib32.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400833 ],
834 "//build/bazel/platforms/arch:arm64": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400835 "not-for-lib32.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400836 "for-lib64.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400837 ],
838 "//build/bazel/platforms/arch:x86": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400839 "not-for-lib64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400840 "for-lib32.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400841 ],
842 "//build/bazel/platforms/arch:x86_64": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400843 "not-for-lib32.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400844 "for-lib64.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400845 ],
846 "//conditions:default": [
847 "not-for-lib32.c",
848 "not-for-lib64.c",
849 ],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500850 })`,
851 }),
852 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200853 })
854}
855
856func TestCcLibrarySTaticArchMultilibSrcsExcludeSrcs(t *testing.T) {
857 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500858 description: "cc_library_static arch and multilib srcs and exclude_srcs",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200859 filesystem: map[string]string{
860 "common.c": "",
861 "for-arm.c": "",
862 "for-arm64.c": "",
863 "for-x86.c": "",
864 "for-x86_64.c": "",
865 "for-lib32.c": "",
866 "for-lib64.c": "",
867 "not-for-arm.c": "",
868 "not-for-arm64.c": "",
869 "not-for-x86.c": "",
870 "not-for-x86_64.c": "",
871 "not-for-lib32.c": "",
872 "not-for-lib64.c": "",
873 "not-for-everything.c": "",
Chris Parsonsc424b762021-04-29 18:06:50 -0400874 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200875 blueprint: soongCcLibraryStaticPreamble + `
Chris Parsonsc424b762021-04-29 18:06:50 -0400876cc_library_static {
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500877 name: "foo_static",
Chris Parsonsc424b762021-04-29 18:06:50 -0400878 srcs: ["common.c", "not-for-*.c"],
879 exclude_srcs: ["not-for-everything.c"],
880 arch: {
881 arm: { srcs: ["for-arm.c"], exclude_srcs: ["not-for-arm.c"] },
882 arm64: { srcs: ["for-arm64.c"], exclude_srcs: ["not-for-arm64.c"] },
883 x86: { srcs: ["for-x86.c"], exclude_srcs: ["not-for-x86.c"] },
884 x86_64: { srcs: ["for-x86_64.c"], exclude_srcs: ["not-for-x86_64.c"] },
885 },
886 multilib: {
887 lib32: { srcs: ["for-lib32.c"], exclude_srcs: ["not-for-lib32.c"] },
888 lib64: { srcs: ["for-lib64.c"], exclude_srcs: ["not-for-lib64.c"] },
889 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400890 include_build_directory: false,
Chris Parsonsc424b762021-04-29 18:06:50 -0400891}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500892 expectedBazelTargets: []string{
893 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
894 "srcs_c": `["common.c"] + select({
Chris Parsonsc424b762021-04-29 18:06:50 -0400895 "//build/bazel/platforms/arch:arm": [
Liz Kammer9bad9d62021-10-11 15:40:35 -0400896 "not-for-arm64.c",
897 "not-for-lib64.c",
898 "not-for-x86.c",
899 "not-for-x86_64.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400900 "for-arm.c",
901 "for-lib32.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400902 ],
903 "//build/bazel/platforms/arch:arm64": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400904 "not-for-arm.c",
905 "not-for-lib32.c",
906 "not-for-x86.c",
907 "not-for-x86_64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400908 "for-arm64.c",
909 "for-lib64.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400910 ],
911 "//build/bazel/platforms/arch:x86": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400912 "not-for-arm.c",
913 "not-for-arm64.c",
914 "not-for-lib64.c",
915 "not-for-x86_64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400916 "for-x86.c",
917 "for-lib32.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400918 ],
919 "//build/bazel/platforms/arch:x86_64": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400920 "not-for-arm.c",
921 "not-for-arm64.c",
922 "not-for-lib32.c",
923 "not-for-x86.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400924 "for-x86_64.c",
925 "for-lib64.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400926 ],
927 "//conditions:default": [
928 "not-for-arm.c",
929 "not-for-arm64.c",
930 "not-for-lib32.c",
931 "not-for-lib64.c",
932 "not-for-x86.c",
933 "not-for-x86_64.c",
934 ],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500935 })`,
936 }),
937 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200938 })
939}
940
Liz Kammerae3994e2021-10-19 09:45:48 -0400941func TestCcLibraryStaticGeneratedHeadersAllPartitions(t *testing.T) {
942 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammerae3994e2021-10-19 09:45:48 -0400943 blueprint: soongCcLibraryStaticPreamble + `
944genrule {
945 name: "generated_hdr",
946 cmd: "nothing to see here",
Liz Kammerbe46fcc2021-11-01 15:32:43 -0400947 bazel_module: { bp2build_available: false },
Liz Kammerae3994e2021-10-19 09:45:48 -0400948}
949
Liz Kammere6583482021-10-19 13:56:10 -0400950genrule {
951 name: "export_generated_hdr",
952 cmd: "nothing to see here",
Liz Kammerbe46fcc2021-11-01 15:32:43 -0400953 bazel_module: { bp2build_available: false },
Liz Kammere6583482021-10-19 13:56:10 -0400954}
955
Liz Kammerae3994e2021-10-19 09:45:48 -0400956cc_library_static {
957 name: "foo_static",
958 srcs: ["cpp_src.cpp", "as_src.S", "c_src.c"],
Liz Kammere6583482021-10-19 13:56:10 -0400959 generated_headers: ["generated_hdr", "export_generated_hdr"],
960 export_generated_headers: ["export_generated_hdr"],
Liz Kammerae3994e2021-10-19 09:45:48 -0400961 include_build_directory: false,
962}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500963 expectedBazelTargets: []string{
964 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
Liz Kammer1263d9b2021-12-10 14:28:20 -0500965 "export_includes": `["."]`,
966 "local_includes": `["."]`,
967 "hdrs": `[":export_generated_hdr"]`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500968 "srcs": `[
Liz Kammerae3994e2021-10-19 09:45:48 -0400969 "cpp_src.cpp",
970 ":generated_hdr",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500971 ]`,
972 "srcs_as": `[
Liz Kammerae3994e2021-10-19 09:45:48 -0400973 "as_src.S",
974 ":generated_hdr",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500975 ]`,
976 "srcs_c": `[
Liz Kammerae3994e2021-10-19 09:45:48 -0400977 "c_src.c",
978 ":generated_hdr",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500979 ]`,
980 }),
981 },
Liz Kammerae3994e2021-10-19 09:45:48 -0400982 })
983}
984
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200985func TestCcLibraryStaticArchSrcsExcludeSrcsGeneratedFiles(t *testing.T) {
986 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500987 description: "cc_library_static arch srcs/exclude_srcs with generated files",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200988 filesystem: map[string]string{
Chris Parsons990c4f42021-05-25 12:10:58 -0400989 "common.cpp": "",
990 "for-x86.cpp": "",
991 "not-for-x86.cpp": "",
992 "not-for-everything.cpp": "",
Liz Kammerbe46fcc2021-11-01 15:32:43 -0400993 "dep/Android.bp": simpleModuleDoNotConvertBp2build("genrule", "generated_src_other_pkg") +
994 simpleModuleDoNotConvertBp2build("genrule", "generated_hdr_other_pkg") +
995 simpleModuleDoNotConvertBp2build("genrule", "generated_src_other_pkg_x86") +
996 simpleModuleDoNotConvertBp2build("genrule", "generated_hdr_other_pkg_x86") +
997 simpleModuleDoNotConvertBp2build("genrule", "generated_hdr_other_pkg_android"),
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200998 },
Liz Kammerbe46fcc2021-11-01 15:32:43 -0400999 blueprint: soongCcLibraryStaticPreamble +
1000 simpleModuleDoNotConvertBp2build("genrule", "generated_src") +
1001 simpleModuleDoNotConvertBp2build("genrule", "generated_src_not_x86") +
1002 simpleModuleDoNotConvertBp2build("genrule", "generated_src_android") +
1003 simpleModuleDoNotConvertBp2build("genrule", "generated_hdr") + `
Chris Parsons484e50a2021-05-13 15:13:04 -04001004cc_library_static {
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001005 name: "foo_static",
Liz Kammer222bdcf2021-10-11 14:15:51 -04001006 srcs: ["common.cpp", "not-for-*.cpp"],
1007 exclude_srcs: ["not-for-everything.cpp"],
1008 generated_sources: ["generated_src", "generated_src_other_pkg", "generated_src_not_x86"],
1009 generated_headers: ["generated_hdr", "generated_hdr_other_pkg"],
Liz Kammer1263d9b2021-12-10 14:28:20 -05001010 export_generated_headers: ["generated_hdr_other_pkg"],
Liz Kammer222bdcf2021-10-11 14:15:51 -04001011 arch: {
1012 x86: {
1013 srcs: ["for-x86.cpp"],
1014 exclude_srcs: ["not-for-x86.cpp"],
1015 generated_headers: ["generated_hdr_other_pkg_x86"],
1016 exclude_generated_sources: ["generated_src_not_x86"],
Liz Kammer1263d9b2021-12-10 14:28:20 -05001017 export_generated_headers: ["generated_hdr_other_pkg_x86"],
Liz Kammer222bdcf2021-10-11 14:15:51 -04001018 },
1019 },
1020 target: {
1021 android: {
1022 generated_sources: ["generated_src_android"],
1023 generated_headers: ["generated_hdr_other_pkg_android"],
Liz Kammer1263d9b2021-12-10 14:28:20 -05001024 export_generated_headers: ["generated_hdr_other_pkg_android"],
Liz Kammer222bdcf2021-10-11 14:15:51 -04001025 },
1026 },
1027
Liz Kammer8337ea42021-09-10 10:06:32 -04001028 include_build_directory: false,
Chris Parsons484e50a2021-05-13 15:13:04 -04001029}
1030`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001031 expectedBazelTargets: []string{
1032 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
1033 "srcs": `[
Chris Parsons990c4f42021-05-25 12:10:58 -04001034 "common.cpp",
Liz Kammer9bad9d62021-10-11 15:40:35 -04001035 ":generated_src",
1036 "//dep:generated_src_other_pkg",
Liz Kammerae3994e2021-10-19 09:45:48 -04001037 ":generated_hdr",
Chris Parsons484e50a2021-05-13 15:13:04 -04001038 ] + select({
Liz Kammer1263d9b2021-12-10 14:28:20 -05001039 "//build/bazel/platforms/arch:x86": ["for-x86.cpp"],
Liz Kammer222bdcf2021-10-11 14:15:51 -04001040 "//conditions:default": [
Liz Kammer222bdcf2021-10-11 14:15:51 -04001041 "not-for-x86.cpp",
Liz Kammer9bad9d62021-10-11 15:40:35 -04001042 ":generated_src_not_x86",
Liz Kammer222bdcf2021-10-11 14:15:51 -04001043 ],
1044 }) + select({
Liz Kammer1263d9b2021-12-10 14:28:20 -05001045 "//build/bazel/platforms/os:android": [":generated_src_android"],
Liz Kammer222bdcf2021-10-11 14:15:51 -04001046 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001047 })`,
Liz Kammer1263d9b2021-12-10 14:28:20 -05001048 "hdrs": `["//dep:generated_hdr_other_pkg"] + select({
1049 "//build/bazel/platforms/arch:x86": ["//dep:generated_hdr_other_pkg_x86"],
1050 "//conditions:default": [],
1051 }) + select({
1052 "//build/bazel/platforms/os:android": ["//dep:generated_hdr_other_pkg_android"],
1053 "//conditions:default": [],
1054 })`,
1055 "local_includes": `["."]`,
1056 "export_absolute_includes": `["dep"]`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001057 }),
1058 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +02001059 })
Rupert Shuttleworth095081c2021-03-25 09:06:03 +00001060}
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001061
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001062func TestCcLibraryStaticGetTargetProperties(t *testing.T) {
1063 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1064
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001065 description: "cc_library_static complex GetTargetProperties",
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001066 blueprint: soongCcLibraryStaticPreamble + `
1067cc_library_static {
1068 name: "foo_static",
1069 target: {
1070 android: {
1071 srcs: ["android_src.c"],
1072 },
1073 android_arm: {
1074 srcs: ["android_arm_src.c"],
1075 },
1076 android_arm64: {
1077 srcs: ["android_arm64_src.c"],
1078 },
1079 android_x86: {
1080 srcs: ["android_x86_src.c"],
1081 },
1082 android_x86_64: {
1083 srcs: ["android_x86_64_src.c"],
1084 },
1085 linux_bionic_arm64: {
1086 srcs: ["linux_bionic_arm64_src.c"],
1087 },
1088 linux_bionic_x86_64: {
1089 srcs: ["linux_bionic_x86_64_src.c"],
1090 },
1091 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001092 include_build_directory: false,
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001093}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001094 expectedBazelTargets: []string{
1095 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
1096 "srcs_c": `select({
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001097 "//build/bazel/platforms/os:android": ["android_src.c"],
1098 "//conditions:default": [],
1099 }) + select({
Rupert Shuttleworthffd45822021-05-14 03:02:34 -04001100 "//build/bazel/platforms/os_arch:android_arm": ["android_arm_src.c"],
1101 "//build/bazel/platforms/os_arch:android_arm64": ["android_arm64_src.c"],
1102 "//build/bazel/platforms/os_arch:android_x86": ["android_x86_src.c"],
1103 "//build/bazel/platforms/os_arch:android_x86_64": ["android_x86_64_src.c"],
Rupert Shuttleworthffd45822021-05-14 03:02:34 -04001104 "//build/bazel/platforms/os_arch:linux_bionic_arm64": ["linux_bionic_arm64_src.c"],
1105 "//build/bazel/platforms/os_arch:linux_bionic_x86_64": ["linux_bionic_x86_64_src.c"],
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001106 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001107 })`,
1108 }),
1109 },
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001110 })
1111}
1112
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001113func TestCcLibraryStaticProductVariableSelects(t *testing.T) {
1114 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001115 description: "cc_library_static product variable selects",
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001116 blueprint: soongCcLibraryStaticPreamble + `
1117cc_library_static {
1118 name: "foo_static",
1119 srcs: ["common.c"],
1120 product_variables: {
1121 malloc_not_svelte: {
1122 cflags: ["-Wmalloc_not_svelte"],
1123 },
1124 malloc_zero_contents: {
1125 cflags: ["-Wmalloc_zero_contents"],
1126 },
1127 binder32bit: {
1128 cflags: ["-Wbinder32bit"],
1129 },
1130 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001131 include_build_directory: false,
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001132} `,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001133 expectedBazelTargets: []string{
1134 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
1135 "copts": `select({
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001136 "//build/bazel/product_variables:binder32bit": ["-Wbinder32bit"],
1137 "//conditions:default": [],
1138 }) + select({
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001139 "//build/bazel/product_variables:malloc_not_svelte": ["-Wmalloc_not_svelte"],
1140 "//conditions:default": [],
1141 }) + select({
1142 "//build/bazel/product_variables:malloc_zero_contents": ["-Wmalloc_zero_contents"],
1143 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001144 })`,
1145 "srcs_c": `["common.c"]`,
1146 }),
1147 },
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001148 })
1149}
1150
1151func TestCcLibraryStaticProductVariableArchSpecificSelects(t *testing.T) {
1152 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001153 description: "cc_library_static arch-specific product variable selects",
1154 filesystem: map[string]string{},
Liz Kammere3e4a5f2021-05-10 11:39:53 -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 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001164 arch: {
1165 arm64: {
1166 product_variables: {
1167 malloc_not_svelte: {
1168 cflags: ["-Warm64_malloc_not_svelte"],
1169 },
1170 },
1171 },
1172 },
1173 multilib: {
1174 lib32: {
1175 product_variables: {
1176 malloc_not_svelte: {
1177 cflags: ["-Wlib32_malloc_not_svelte"],
1178 },
1179 },
1180 },
1181 },
1182 target: {
1183 android: {
1184 product_variables: {
1185 malloc_not_svelte: {
1186 cflags: ["-Wandroid_malloc_not_svelte"],
1187 },
1188 },
1189 }
1190 },
1191 include_build_directory: false,
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001192} `,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001193 expectedBazelTargets: []string{
1194 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
1195 "copts": `select({
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001196 "//build/bazel/product_variables:malloc_not_svelte": ["-Wmalloc_not_svelte"],
1197 "//conditions:default": [],
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001198 }) + select({
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001199 "//build/bazel/product_variables:malloc_not_svelte-android": ["-Wandroid_malloc_not_svelte"],
1200 "//conditions:default": [],
1201 }) + select({
1202 "//build/bazel/product_variables:malloc_not_svelte-arm": ["-Wlib32_malloc_not_svelte"],
1203 "//conditions:default": [],
1204 }) + select({
1205 "//build/bazel/product_variables:malloc_not_svelte-arm64": ["-Warm64_malloc_not_svelte"],
1206 "//conditions:default": [],
1207 }) + select({
1208 "//build/bazel/product_variables:malloc_not_svelte-x86": ["-Wlib32_malloc_not_svelte"],
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001209 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001210 })`,
1211 "srcs_c": `["common.c"]`,
1212 }),
1213 },
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001214 })
1215}
Liz Kammerba7a9c52021-05-26 08:45:30 -04001216
1217func TestCcLibraryStaticProductVariableStringReplacement(t *testing.T) {
1218 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001219 description: "cc_library_static product variable string replacement",
1220 filesystem: map[string]string{},
Liz Kammerba7a9c52021-05-26 08:45:30 -04001221 blueprint: soongCcLibraryStaticPreamble + `
1222cc_library_static {
1223 name: "foo_static",
Chris Parsons69fa9f92021-07-13 11:47:44 -04001224 srcs: ["common.S"],
Liz Kammerba7a9c52021-05-26 08:45:30 -04001225 product_variables: {
1226 platform_sdk_version: {
1227 asflags: ["-DPLATFORM_SDK_VERSION=%d"],
1228 },
1229 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001230 include_build_directory: false,
Liz Kammerba7a9c52021-05-26 08:45:30 -04001231} `,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001232 expectedBazelTargets: []string{
1233 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
1234 "asflags": `select({
Liz Kammerba7a9c52021-05-26 08:45:30 -04001235 "//build/bazel/product_variables:platform_sdk_version": ["-DPLATFORM_SDK_VERSION=$(Platform_sdk_version)"],
1236 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001237 })`,
1238 "srcs_as": `["common.S"]`,
1239 }),
1240 },
Liz Kammerba7a9c52021-05-26 08:45:30 -04001241 })
1242}
Chris Parsons51f8c392021-08-03 21:01:05 -04001243
1244func TestStaticLibrary_SystemSharedLibsRootEmpty(t *testing.T) {
1245 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001246 description: "cc_library_static system_shared_lib empty root",
Chris Parsons51f8c392021-08-03 21:01:05 -04001247 blueprint: soongCcLibraryStaticPreamble + `
1248cc_library_static {
1249 name: "root_empty",
Liz Kammer8337ea42021-09-10 10:06:32 -04001250 system_shared_libs: [],
1251 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001252}
1253`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001254 expectedBazelTargets: []string{
1255 makeBazelTarget("cc_library_static", "root_empty", attrNameToString{
1256 "system_dynamic_deps": `[]`,
1257 }),
1258 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001259 })
1260}
1261
1262func TestStaticLibrary_SystemSharedLibsStaticEmpty(t *testing.T) {
1263 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001264 description: "cc_library_static system_shared_lib empty static default",
Chris Parsons51f8c392021-08-03 21:01:05 -04001265 blueprint: soongCcLibraryStaticPreamble + `
1266cc_defaults {
1267 name: "static_empty_defaults",
1268 static: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001269 system_shared_libs: [],
1270 },
1271 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001272}
1273cc_library_static {
1274 name: "static_empty",
Liz Kammer8337ea42021-09-10 10:06:32 -04001275 defaults: ["static_empty_defaults"],
Chris Parsons51f8c392021-08-03 21:01:05 -04001276}
1277`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001278 expectedBazelTargets: []string{
1279 makeBazelTarget("cc_library_static", "static_empty", attrNameToString{
1280 "system_dynamic_deps": `[]`,
1281 }),
1282 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001283 })
1284}
1285
1286func TestStaticLibrary_SystemSharedLibsBionicEmpty(t *testing.T) {
1287 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001288 description: "cc_library_static system_shared_lib empty for bionic variant",
Chris Parsons51f8c392021-08-03 21:01:05 -04001289 blueprint: soongCcLibraryStaticPreamble + `
1290cc_library_static {
1291 name: "target_bionic_empty",
1292 target: {
1293 bionic: {
1294 system_shared_libs: [],
1295 },
1296 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001297 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001298}
1299`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001300 expectedBazelTargets: []string{
1301 makeBazelTarget("cc_library_static", "target_bionic_empty", attrNameToString{
1302 "system_dynamic_deps": `[]`,
1303 }),
1304 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001305 })
1306}
1307
1308func TestStaticLibrary_SystemSharedLibsLinuxBionicEmpty(t *testing.T) {
1309 // Note that this behavior is technically incorrect (it's a simplification).
1310 // The correct behavior would be if bp2build wrote `system_dynamic_deps = []`
1311 // only for linux_bionic, but `android` had `["libc", "libdl", "libm"].
1312 // b/195791252 tracks the fix.
1313 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001314 description: "cc_library_static system_shared_lib empty for linux_bionic variant",
Chris Parsons51f8c392021-08-03 21:01:05 -04001315 blueprint: soongCcLibraryStaticPreamble + `
1316cc_library_static {
1317 name: "target_linux_bionic_empty",
1318 target: {
1319 linux_bionic: {
1320 system_shared_libs: [],
1321 },
1322 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001323 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001324}
1325`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001326 expectedBazelTargets: []string{
1327 makeBazelTarget("cc_library_static", "target_linux_bionic_empty", attrNameToString{
1328 "system_dynamic_deps": `[]`,
1329 }),
1330 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001331 })
1332}
1333
1334func TestStaticLibrary_SystemSharedLibsBionic(t *testing.T) {
1335 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001336 description: "cc_library_static system_shared_libs set for bionic variant",
Liz Kammerbe46fcc2021-11-01 15:32:43 -04001337 blueprint: soongCcLibraryStaticPreamble +
1338 simpleModuleDoNotConvertBp2build("cc_library", "libc") + `
Chris Parsons51f8c392021-08-03 21:01:05 -04001339cc_library_static {
1340 name: "target_bionic",
1341 target: {
1342 bionic: {
1343 system_shared_libs: ["libc"],
1344 },
1345 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001346 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001347}
1348`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001349 expectedBazelTargets: []string{
1350 makeBazelTarget("cc_library_static", "target_bionic", attrNameToString{
1351 "system_dynamic_deps": `select({
Chris Parsons2dde0cb2021-10-01 14:45:30 -04001352 "//build/bazel/platforms/os:android": [":libc"],
1353 "//build/bazel/platforms/os:linux_bionic": [":libc"],
Chris Parsons51f8c392021-08-03 21:01:05 -04001354 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001355 })`,
1356 }),
1357 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001358 })
1359}
1360
1361func TestStaticLibrary_SystemSharedLibsLinuxRootAndLinuxBionic(t *testing.T) {
1362 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001363 description: "cc_library_static system_shared_libs set for root and linux_bionic variant",
Liz Kammerbe46fcc2021-11-01 15:32:43 -04001364 blueprint: soongCcLibraryStaticPreamble +
1365 simpleModuleDoNotConvertBp2build("cc_library", "libc") +
1366 simpleModuleDoNotConvertBp2build("cc_library", "libm") + `
Chris Parsons51f8c392021-08-03 21:01:05 -04001367cc_library_static {
1368 name: "target_linux_bionic",
Liz Kammer8337ea42021-09-10 10:06:32 -04001369 system_shared_libs: ["libc"],
Chris Parsons51f8c392021-08-03 21:01:05 -04001370 target: {
1371 linux_bionic: {
1372 system_shared_libs: ["libm"],
1373 },
1374 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001375 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001376}
1377`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001378 expectedBazelTargets: []string{
1379 makeBazelTarget("cc_library_static", "target_linux_bionic", attrNameToString{
1380 "system_dynamic_deps": `[":libc"] + select({
Chris Parsons51f8c392021-08-03 21:01:05 -04001381 "//build/bazel/platforms/os:linux_bionic": [":libm"],
1382 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001383 })`,
1384 }),
1385 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001386 })
1387}
Liz Kammer12615db2021-09-28 09:19:17 -04001388
Liz Kammer54309532021-12-14 12:21:22 -05001389func TestCcLibrarystatic_SystemSharedLibUsedAsDep(t *testing.T) {
1390 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1391 description: "cc_library_static system_shared_lib empty for linux_bionic variant",
1392 blueprint: soongCcLibraryStaticPreamble +
1393 simpleModuleDoNotConvertBp2build("cc_library", "libc") + `
1394cc_library_static {
1395 name: "used_in_bionic_oses",
1396 target: {
1397 android: {
1398 shared_libs: ["libc"],
1399 },
1400 linux_bionic: {
1401 shared_libs: ["libc"],
1402 },
1403 },
1404 include_build_directory: false,
1405}
1406
1407cc_library_static {
1408 name: "all",
1409 shared_libs: ["libc"],
1410 include_build_directory: false,
1411}
1412
1413cc_library_static {
1414 name: "keep_for_empty_system_shared_libs",
1415 shared_libs: ["libc"],
1416 system_shared_libs: [],
1417 include_build_directory: false,
1418}
1419`,
1420 expectedBazelTargets: []string{
1421 makeBazelTarget("cc_library_static", "all", attrNameToString{
1422 "implementation_dynamic_deps": `select({
1423 "//build/bazel/platforms/os:android": [],
1424 "//build/bazel/platforms/os:linux_bionic": [],
1425 "//conditions:default": [":libc"],
1426 })`,
1427 }),
1428 makeBazelTarget("cc_library_static", "keep_for_empty_system_shared_libs", attrNameToString{
1429 "implementation_dynamic_deps": `[":libc"]`,
1430 "system_dynamic_deps": `[]`,
1431 }),
1432 makeBazelTarget("cc_library_static", "used_in_bionic_oses", attrNameToString{}),
1433 },
1434 })
1435}
1436
Liz Kammer12615db2021-09-28 09:19:17 -04001437func TestCcLibraryStaticProto(t *testing.T) {
1438 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1439 blueprint: soongCcProtoPreamble + `cc_library_static {
1440 name: "foo",
1441 srcs: ["foo.proto"],
1442 proto: {
Liz Kammer12615db2021-09-28 09:19:17 -04001443 export_proto_headers: true,
1444 },
1445 include_build_directory: false,
1446}`,
1447 expectedBazelTargets: []string{
1448 makeBazelTarget("proto_library", "foo_proto", attrNameToString{
1449 "srcs": `["foo.proto"]`,
1450 }), makeBazelTarget("cc_lite_proto_library", "foo_cc_proto_lite", attrNameToString{
1451 "deps": `[":foo_proto"]`,
1452 }), makeBazelTarget("cc_library_static", "foo", attrNameToString{
1453 "deps": `[":libprotobuf-cpp-lite"]`,
1454 "whole_archive_deps": `[":foo_cc_proto_lite"]`,
1455 }),
1456 },
1457 })
1458}
Rupert Shuttleworth484aa252021-12-10 07:22:53 -05001459
1460func TestCcLibraryStaticUseVersionLib(t *testing.T) {
1461 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1462 blueprint: soongCcProtoPreamble + `cc_library_static {
1463 name: "foo",
1464 use_version_lib: true,
1465 include_build_directory: false,
1466}`,
1467 expectedBazelTargets: []string{
1468 makeBazelTarget("cc_library_static", "foo", attrNameToString{
1469 "use_version_lib": "True",
1470 }),
1471 },
1472 })
1473}
Liz Kammercac7f692021-12-16 14:19:32 -05001474
1475func TestCcLibraryStaticStdInFlags(t *testing.T) {
1476 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1477 blueprint: soongCcProtoPreamble + `cc_library_static {
1478 name: "foo",
1479 cflags: ["-std=candcpp"],
1480 conlyflags: ["-std=conly"],
1481 cppflags: ["-std=cpp"],
1482 include_build_directory: false,
1483}`,
1484 expectedBazelTargets: []string{
1485 makeBazelTarget("cc_library_static", "foo", attrNameToString{
1486 "conlyflags": `["-std=conly"]`,
1487 "cppflags": `["-std=cpp"]`,
1488 }),
1489 },
1490 })
1491}