blob: 36c46a4276a85740b45a332dbd326e1360da105b [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"
Liz Kammer7128d382022-05-12 11:42:33 -040021 "fmt"
Chris Parsons484e50a2021-05-13 15:13:04 -040022
Rupert Shuttleworth095081c2021-03-25 09:06:03 +000023 "testing"
24)
25
26const (
27 // See cc/testing.go for more context
28 soongCcLibraryStaticPreamble = `
29cc_defaults {
Liz Kammer8337ea42021-09-10 10:06:32 -040030 name: "linux_bionic_supported",
Rupert Shuttleworth095081c2021-03-25 09:06:03 +000031}`
32)
33
34func TestCcLibraryStaticLoadStatement(t *testing.T) {
35 testCases := []struct {
36 bazelTargets BazelTargets
37 expectedLoadStatements string
38 }{
39 {
40 bazelTargets: BazelTargets{
41 BazelTarget{
42 name: "cc_library_static_target",
43 ruleClass: "cc_library_static",
44 // NOTE: No bzlLoadLocation for native rules
45 },
46 },
47 expectedLoadStatements: ``,
48 },
49 }
50
51 for _, testCase := range testCases {
52 actual := testCase.bazelTargets.LoadStatements()
53 expected := testCase.expectedLoadStatements
54 if actual != expected {
55 t.Fatalf("Expected load statements to be %s, got %s", expected, actual)
56 }
57 }
Rupert Shuttleworth095081c2021-03-25 09:06:03 +000058}
59
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020060func registerCcLibraryStaticModuleTypes(ctx android.RegistrationContext) {
61 cc.RegisterCCBuildComponents(ctx)
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020062 ctx.RegisterModuleType("cc_library_headers", cc.LibraryHeaderFactory)
63 ctx.RegisterModuleType("genrule", genrule.GenRuleFactory)
Chris Parsons51f8c392021-08-03 21:01:05 -040064 // Required for system_shared_libs dependencies.
65 ctx.RegisterModuleType("cc_library", cc.LibraryFactory)
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020066}
67
68func runCcLibraryStaticTestCase(t *testing.T, tc bp2buildTestCase) {
Liz Kammere4982e82021-05-25 10:39:35 -040069 t.Helper()
Liz Kammer78cfdaa2021-11-08 12:56:31 -050070
71 (&tc).moduleTypeUnderTest = "cc_library_static"
72 (&tc).moduleTypeUnderTestFactory = cc.LibraryStaticFactory
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020073 runBp2BuildTestCase(t, registerCcLibraryStaticModuleTypes, tc)
74}
75
76func TestCcLibraryStaticSimple(t *testing.T) {
77 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -050078 description: "cc_library_static test",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020079 filesystem: map[string]string{
80 // NOTE: include_dir headers *should not* appear in Bazel hdrs later (?)
81 "include_dir_1/include_dir_1_a.h": "",
82 "include_dir_1/include_dir_1_b.h": "",
83 "include_dir_2/include_dir_2_a.h": "",
84 "include_dir_2/include_dir_2_b.h": "",
85 // NOTE: local_include_dir headers *should not* appear in Bazel hdrs later (?)
86 "local_include_dir_1/local_include_dir_1_a.h": "",
87 "local_include_dir_1/local_include_dir_1_b.h": "",
88 "local_include_dir_2/local_include_dir_2_a.h": "",
89 "local_include_dir_2/local_include_dir_2_b.h": "",
90 // NOTE: export_include_dir headers *should* appear in Bazel hdrs later
91 "export_include_dir_1/export_include_dir_1_a.h": "",
92 "export_include_dir_1/export_include_dir_1_b.h": "",
93 "export_include_dir_2/export_include_dir_2_a.h": "",
94 "export_include_dir_2/export_include_dir_2_b.h": "",
95 // NOTE: Soong implicitly includes headers in the current directory
96 "implicit_include_1.h": "",
97 "implicit_include_2.h": "",
98 },
99 blueprint: soongCcLibraryStaticPreamble + `
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000100cc_library_headers {
101 name: "header_lib_1",
102 export_include_dirs: ["header_lib_1"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400103 bazel_module: { bp2build_available: false },
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000104}
105
106cc_library_headers {
107 name: "header_lib_2",
108 export_include_dirs: ["header_lib_2"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400109 bazel_module: { bp2build_available: false },
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000110}
111
112cc_library_static {
113 name: "static_lib_1",
114 srcs: ["static_lib_1.cc"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400115 bazel_module: { bp2build_available: false },
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000116}
117
118cc_library_static {
119 name: "static_lib_2",
120 srcs: ["static_lib_2.cc"],
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: "whole_static_lib_1",
126 srcs: ["whole_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: "whole_static_lib_2",
132 srcs: ["whole_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: "foo_static",
138 srcs: [
139 "foo_static1.cc",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000140 "foo_static2.cc",
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000141 ],
142 cflags: [
143 "-Dflag1",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000144 "-Dflag2"
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000145 ],
146 static_libs: [
147 "static_lib_1",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000148 "static_lib_2"
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000149 ],
150 whole_static_libs: [
151 "whole_static_lib_1",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000152 "whole_static_lib_2"
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000153 ],
154 include_dirs: [
Jingwen Chened9c17d2021-04-13 07:14:55 +0000155 "include_dir_1",
156 "include_dir_2",
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000157 ],
158 local_include_dirs: [
159 "local_include_dir_1",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000160 "local_include_dir_2",
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000161 ],
162 export_include_dirs: [
Chris Parsonsd6358772021-05-18 18:35:24 -0400163 "export_include_dir_1",
164 "export_include_dir_2"
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000165 ],
166 header_libs: [
167 "header_lib_1",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000168 "header_lib_2"
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000169 ],
Yu Liufc603162022-03-01 15:44:08 -0800170 sdk_version: "current",
171 min_sdk_version: "29",
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000172
173 // TODO: Also support export_header_lib_headers
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000174}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500175 expectedBazelTargets: []string{
176 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
177 "absolute_includes": `[
Liz Kammer35687bc2021-09-10 10:07:07 -0400178 "include_dir_1",
179 "include_dir_2",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500180 ]`,
181 "copts": `[
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000182 "-Dflag1",
183 "-Dflag2",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500184 ]`,
185 "export_includes": `[
Liz Kammer5fad5012021-09-09 14:08:21 -0400186 "export_include_dir_1",
187 "export_include_dir_2",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500188 ]`,
189 "implementation_deps": `[
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000190 ":header_lib_1",
191 ":header_lib_2",
192 ":static_lib_1",
193 ":static_lib_2",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500194 ]`,
195 "local_includes": `[
Liz Kammer35687bc2021-09-10 10:07:07 -0400196 "local_include_dir_1",
197 "local_include_dir_2",
198 ".",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500199 ]`,
200 "srcs": `[
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000201 "foo_static1.cc",
202 "foo_static2.cc",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500203 ]`,
204 "whole_archive_deps": `[
Chris Parsons08648312021-05-06 16:23:19 -0400205 ":whole_static_lib_1",
206 ":whole_static_lib_2",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500207 ]`,
Liz Kammer7128d382022-05-12 11:42:33 -0400208 "sdk_version": `"current"`,
209 "min_sdk_version": `"29"`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500210 }),
211 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200212 })
213}
214
215func TestCcLibraryStaticSubpackage(t *testing.T) {
216 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500217 description: "cc_library_static subpackage test",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200218 filesystem: map[string]string{
219 // subpackage with subdirectory
220 "subpackage/Android.bp": "",
221 "subpackage/subpackage_header.h": "",
222 "subpackage/subdirectory/subdirectory_header.h": "",
223 // subsubpackage with subdirectory
224 "subpackage/subsubpackage/Android.bp": "",
225 "subpackage/subsubpackage/subsubpackage_header.h": "",
226 "subpackage/subsubpackage/subdirectory/subdirectory_header.h": "",
227 // subsubsubpackage with subdirectory
228 "subpackage/subsubpackage/subsubsubpackage/Android.bp": "",
229 "subpackage/subsubpackage/subsubsubpackage/subsubsubpackage_header.h": "",
230 "subpackage/subsubpackage/subsubsubpackage/subdirectory/subdirectory_header.h": "",
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000231 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200232 blueprint: soongCcLibraryStaticPreamble + `
Rupert Shuttleworthc143cc52021-04-13 13:08:04 -0400233cc_library_static {
234 name: "foo_static",
Liz Kammer35687bc2021-09-10 10:07:07 -0400235 srcs: [],
Rupert Shuttleworthc143cc52021-04-13 13:08:04 -0400236 include_dirs: [
Liz Kammer35687bc2021-09-10 10:07:07 -0400237 "subpackage",
Rupert Shuttleworthc143cc52021-04-13 13:08:04 -0400238 ],
Rupert Shuttleworthc143cc52021-04-13 13:08:04 -0400239}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500240 expectedBazelTargets: []string{
241 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
242 "absolute_includes": `["subpackage"]`,
243 "local_includes": `["."]`,
244 }),
245 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200246 })
247}
248
249func TestCcLibraryStaticExportIncludeDir(t *testing.T) {
250 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500251 description: "cc_library_static export include dir",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200252 filesystem: map[string]string{
253 // subpackage with subdirectory
254 "subpackage/Android.bp": "",
255 "subpackage/subpackage_header.h": "",
256 "subpackage/subdirectory/subdirectory_header.h": "",
Rupert Shuttleworthc143cc52021-04-13 13:08:04 -0400257 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200258 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chened9c17d2021-04-13 07:14:55 +0000259cc_library_static {
260 name: "foo_static",
261 export_include_dirs: ["subpackage"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400262 include_build_directory: false,
Jingwen Chened9c17d2021-04-13 07:14:55 +0000263}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500264 expectedBazelTargets: []string{
265 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
266 "export_includes": `["subpackage"]`,
267 }),
268 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200269 })
270}
271
272func TestCcLibraryStaticExportSystemIncludeDir(t *testing.T) {
273 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500274 description: "cc_library_static export system include dir",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200275 filesystem: map[string]string{
276 // subpackage with subdirectory
277 "subpackage/Android.bp": "",
278 "subpackage/subpackage_header.h": "",
279 "subpackage/subdirectory/subdirectory_header.h": "",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000280 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200281 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chened9c17d2021-04-13 07:14:55 +0000282cc_library_static {
283 name: "foo_static",
284 export_system_include_dirs: ["subpackage"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400285 include_build_directory: false,
Jingwen Chened9c17d2021-04-13 07:14:55 +0000286}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500287 expectedBazelTargets: []string{
288 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
289 "export_system_includes": `["subpackage"]`,
290 }),
291 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200292 })
293}
294
295func TestCcLibraryStaticManyIncludeDirs(t *testing.T) {
296 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500297 description: "cc_library_static include_dirs, local_include_dirs, export_include_dirs (b/183742505)",
298 dir: "subpackage",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200299 filesystem: map[string]string{
300 // subpackage with subdirectory
301 "subpackage/Android.bp": `
Jingwen Chened9c17d2021-04-13 07:14:55 +0000302cc_library_static {
303 name: "foo_static",
304 // include_dirs are workspace/root relative
305 include_dirs: [
306 "subpackage/subsubpackage",
307 "subpackage2",
308 "subpackage3/subsubpackage"
309 ],
310 local_include_dirs: ["subsubpackage2"], // module dir relative
311 export_include_dirs: ["./exported_subsubpackage"], // module dir relative
312 include_build_directory: true,
313 bazel_module: { bp2build_available: true },
314}`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200315 "subpackage/subsubpackage/header.h": "",
316 "subpackage/subsubpackage2/header.h": "",
317 "subpackage/exported_subsubpackage/header.h": "",
318 "subpackage2/header.h": "",
319 "subpackage3/subsubpackage/header.h": "",
320 },
321 blueprint: soongCcLibraryStaticPreamble,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500322 expectedBazelTargets: []string{
323 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
324 "absolute_includes": `[
Liz Kammer35687bc2021-09-10 10:07:07 -0400325 "subpackage/subsubpackage",
326 "subpackage2",
327 "subpackage3/subsubpackage",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500328 ]`,
329 "export_includes": `["./exported_subsubpackage"]`,
330 "local_includes": `[
Liz Kammer35687bc2021-09-10 10:07:07 -0400331 "subsubpackage2",
332 ".",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500333 ]`,
334 })},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200335 })
336}
337
338func TestCcLibraryStaticIncludeBuildDirectoryDisabled(t *testing.T) {
339 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500340 description: "cc_library_static include_build_directory disabled",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200341 filesystem: map[string]string{
342 // subpackage with subdirectory
343 "subpackage/Android.bp": "",
344 "subpackage/subpackage_header.h": "",
345 "subpackage/subdirectory/subdirectory_header.h": "",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000346 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200347 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chened9c17d2021-04-13 07:14:55 +0000348cc_library_static {
349 name: "foo_static",
350 include_dirs: ["subpackage"], // still used, but local_include_dirs is recommended
351 local_include_dirs: ["subpackage2"],
352 include_build_directory: false,
353}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500354 expectedBazelTargets: []string{
355 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
356 "absolute_includes": `["subpackage"]`,
357 "local_includes": `["subpackage2"]`,
358 }),
359 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200360 })
361}
362
363func TestCcLibraryStaticIncludeBuildDirectoryEnabled(t *testing.T) {
364 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500365 description: "cc_library_static include_build_directory enabled",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200366 filesystem: map[string]string{
367 // subpackage with subdirectory
368 "subpackage/Android.bp": "",
369 "subpackage/subpackage_header.h": "",
370 "subpackage2/Android.bp": "",
371 "subpackage2/subpackage2_header.h": "",
372 "subpackage/subdirectory/subdirectory_header.h": "",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000373 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200374 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chened9c17d2021-04-13 07:14:55 +0000375cc_library_static {
376 name: "foo_static",
377 include_dirs: ["subpackage"], // still used, but local_include_dirs is recommended
378 local_include_dirs: ["subpackage2"],
379 include_build_directory: true,
380}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500381 expectedBazelTargets: []string{
382 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
383 "absolute_includes": `["subpackage"]`,
384 "local_includes": `[
Liz Kammer35687bc2021-09-10 10:07:07 -0400385 "subpackage2",
386 ".",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500387 ]`,
388 }),
389 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200390 })
391}
392
393func TestCcLibraryStaticArchSpecificStaticLib(t *testing.T) {
394 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500395 description: "cc_library_static arch-specific static_libs",
396 filesystem: map[string]string{},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200397 blueprint: soongCcLibraryStaticPreamble + `
Liz Kammer8337ea42021-09-10 10:06:32 -0400398cc_library_static {
399 name: "static_dep",
400 bazel_module: { bp2build_available: false },
401}
402cc_library_static {
403 name: "static_dep2",
404 bazel_module: { bp2build_available: false },
405}
Jingwen Chened9c17d2021-04-13 07:14:55 +0000406cc_library_static {
407 name: "foo_static",
408 arch: { arm64: { static_libs: ["static_dep"], whole_static_libs: ["static_dep2"] } },
Liz Kammer8337ea42021-09-10 10:06:32 -0400409 include_build_directory: false,
Jingwen Chened9c17d2021-04-13 07:14:55 +0000410}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500411 expectedBazelTargets: []string{
412 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
413 "implementation_deps": `select({
Chris Parsons08648312021-05-06 16:23:19 -0400414 "//build/bazel/platforms/arch:arm64": [":static_dep"],
Jingwen Chened9c17d2021-04-13 07:14:55 +0000415 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500416 })`,
417 "whole_archive_deps": `select({
Chris Parsons08648312021-05-06 16:23:19 -0400418 "//build/bazel/platforms/arch:arm64": [":static_dep2"],
419 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500420 })`,
421 }),
422 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200423 })
424}
425
426func TestCcLibraryStaticOsSpecificStaticLib(t *testing.T) {
427 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500428 description: "cc_library_static os-specific static_libs",
429 filesystem: map[string]string{},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200430 blueprint: soongCcLibraryStaticPreamble + `
Liz Kammer8337ea42021-09-10 10:06:32 -0400431cc_library_static {
432 name: "static_dep",
433 bazel_module: { bp2build_available: false },
434}
435cc_library_static {
436 name: "static_dep2",
437 bazel_module: { bp2build_available: false },
438}
Jingwen Chened9c17d2021-04-13 07:14:55 +0000439cc_library_static {
440 name: "foo_static",
441 target: { android: { static_libs: ["static_dep"], whole_static_libs: ["static_dep2"] } },
Liz Kammer8337ea42021-09-10 10:06:32 -0400442 include_build_directory: false,
Jingwen Chened9c17d2021-04-13 07:14:55 +0000443}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500444 expectedBazelTargets: []string{
445 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
446 "implementation_deps": `select({
Chris Parsons08648312021-05-06 16:23:19 -0400447 "//build/bazel/platforms/os:android": [":static_dep"],
Jingwen Chened9c17d2021-04-13 07:14:55 +0000448 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500449 })`,
450 "whole_archive_deps": `select({
Chris Parsons08648312021-05-06 16:23:19 -0400451 "//build/bazel/platforms/os:android": [":static_dep2"],
452 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500453 })`,
454 }),
455 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200456 })
457}
458
459func TestCcLibraryStaticBaseArchOsSpecificStaticLib(t *testing.T) {
460 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500461 description: "cc_library_static base, arch and os-specific static_libs",
462 filesystem: map[string]string{},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200463 blueprint: soongCcLibraryStaticPreamble + `
Liz Kammer8337ea42021-09-10 10:06:32 -0400464cc_library_static {
465 name: "static_dep",
466 bazel_module: { bp2build_available: false },
467}
468cc_library_static {
469 name: "static_dep2",
470 bazel_module: { bp2build_available: false },
471}
472cc_library_static {
473 name: "static_dep3",
474 bazel_module: { bp2build_available: false },
475}
476cc_library_static {
477 name: "static_dep4",
478 bazel_module: { bp2build_available: false },
479}
Jingwen Chened9c17d2021-04-13 07:14:55 +0000480cc_library_static {
481 name: "foo_static",
482 static_libs: ["static_dep"],
483 whole_static_libs: ["static_dep2"],
484 target: { android: { static_libs: ["static_dep3"] } },
485 arch: { arm64: { static_libs: ["static_dep4"] } },
Liz Kammer8337ea42021-09-10 10:06:32 -0400486 include_build_directory: false,
Jingwen Chened9c17d2021-04-13 07:14:55 +0000487}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500488 expectedBazelTargets: []string{
489 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
490 "implementation_deps": `[":static_dep"] + select({
Jingwen Chened9c17d2021-04-13 07:14:55 +0000491 "//build/bazel/platforms/arch:arm64": [":static_dep4"],
492 "//conditions:default": [],
493 }) + select({
494 "//build/bazel/platforms/os:android": [":static_dep3"],
495 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500496 })`,
497 "whole_archive_deps": `[":static_dep2"]`,
498 }),
499 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200500 })
501}
502
503func TestCcLibraryStaticSimpleExcludeSrcs(t *testing.T) {
504 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500505 description: "cc_library_static simple exclude_srcs",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200506 filesystem: map[string]string{
507 "common.c": "",
508 "foo-a.c": "",
509 "foo-excluded.c": "",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000510 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200511 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chene32e9e02021-04-23 09:17:24 +0000512cc_library_static {
513 name: "foo_static",
514 srcs: ["common.c", "foo-*.c"],
515 exclude_srcs: ["foo-excluded.c"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400516 include_build_directory: false,
Jingwen Chene32e9e02021-04-23 09:17:24 +0000517}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500518 expectedBazelTargets: []string{
519 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
520 "srcs_c": `[
Jingwen Chene32e9e02021-04-23 09:17:24 +0000521 "common.c",
522 "foo-a.c",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500523 ]`,
524 }),
525 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200526 })
527}
528
529func TestCcLibraryStaticOneArchSrcs(t *testing.T) {
530 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500531 description: "cc_library_static one arch specific srcs",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200532 filesystem: map[string]string{
533 "common.c": "",
534 "foo-arm.c": "",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000535 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200536 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chene32e9e02021-04-23 09:17:24 +0000537cc_library_static {
538 name: "foo_static",
539 srcs: ["common.c"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400540 arch: { arm: { srcs: ["foo-arm.c"] } },
541 include_build_directory: false,
Jingwen Chene32e9e02021-04-23 09:17:24 +0000542}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500543 expectedBazelTargets: []string{
544 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
545 "srcs_c": `["common.c"] + select({
Jingwen Chene32e9e02021-04-23 09:17:24 +0000546 "//build/bazel/platforms/arch:arm": ["foo-arm.c"],
547 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500548 })`,
549 }),
550 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200551 })
552}
553
554func TestCcLibraryStaticOneArchSrcsExcludeSrcs(t *testing.T) {
555 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500556 description: "cc_library_static one arch specific srcs and exclude_srcs",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200557 filesystem: map[string]string{
558 "common.c": "",
559 "for-arm.c": "",
560 "not-for-arm.c": "",
561 "not-for-anything.c": "",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000562 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200563 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chene32e9e02021-04-23 09:17:24 +0000564cc_library_static {
565 name: "foo_static",
566 srcs: ["common.c", "not-for-*.c"],
567 exclude_srcs: ["not-for-anything.c"],
568 arch: {
569 arm: { srcs: ["for-arm.c"], exclude_srcs: ["not-for-arm.c"] },
570 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400571 include_build_directory: false,
Jingwen Chene32e9e02021-04-23 09:17:24 +0000572}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500573 expectedBazelTargets: []string{
574 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
575 "srcs_c": `["common.c"] + select({
Jingwen Chene32e9e02021-04-23 09:17:24 +0000576 "//build/bazel/platforms/arch:arm": ["for-arm.c"],
577 "//conditions:default": ["not-for-arm.c"],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500578 })`,
579 }),
580 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200581 })
582}
583
584func TestCcLibraryStaticTwoArchExcludeSrcs(t *testing.T) {
585 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500586 description: "cc_library_static arch specific exclude_srcs for 2 architectures",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200587 filesystem: map[string]string{
588 "common.c": "",
589 "for-arm.c": "",
590 "for-x86.c": "",
591 "not-for-arm.c": "",
592 "not-for-x86.c": "",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000593 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200594 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chene32e9e02021-04-23 09:17:24 +0000595cc_library_static {
596 name: "foo_static",
597 srcs: ["common.c", "not-for-*.c"],
598 exclude_srcs: ["not-for-everything.c"],
599 arch: {
600 arm: { srcs: ["for-arm.c"], exclude_srcs: ["not-for-arm.c"] },
601 x86: { srcs: ["for-x86.c"], exclude_srcs: ["not-for-x86.c"] },
602 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400603 include_build_directory: false,
Jingwen Chene32e9e02021-04-23 09:17:24 +0000604} `,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500605 expectedBazelTargets: []string{
606 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
607 "srcs_c": `["common.c"] + select({
Jingwen Chene32e9e02021-04-23 09:17:24 +0000608 "//build/bazel/platforms/arch:arm": [
Jingwen Chene32e9e02021-04-23 09:17:24 +0000609 "not-for-x86.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400610 "for-arm.c",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000611 ],
612 "//build/bazel/platforms/arch:x86": [
Jingwen Chene32e9e02021-04-23 09:17:24 +0000613 "not-for-arm.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400614 "for-x86.c",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000615 ],
616 "//conditions:default": [
617 "not-for-arm.c",
618 "not-for-x86.c",
619 ],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500620 })`,
621 }),
622 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200623 })
624}
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500625
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200626func TestCcLibraryStaticFourArchExcludeSrcs(t *testing.T) {
627 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500628 description: "cc_library_static arch specific exclude_srcs for 4 architectures",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200629 filesystem: map[string]string{
630 "common.c": "",
631 "for-arm.c": "",
632 "for-arm64.c": "",
633 "for-x86.c": "",
634 "for-x86_64.c": "",
635 "not-for-arm.c": "",
636 "not-for-arm64.c": "",
637 "not-for-x86.c": "",
638 "not-for-x86_64.c": "",
639 "not-for-everything.c": "",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000640 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200641 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chene32e9e02021-04-23 09:17:24 +0000642cc_library_static {
643 name: "foo_static",
644 srcs: ["common.c", "not-for-*.c"],
645 exclude_srcs: ["not-for-everything.c"],
646 arch: {
647 arm: { srcs: ["for-arm.c"], exclude_srcs: ["not-for-arm.c"] },
648 arm64: { srcs: ["for-arm64.c"], exclude_srcs: ["not-for-arm64.c"] },
649 x86: { srcs: ["for-x86.c"], exclude_srcs: ["not-for-x86.c"] },
650 x86_64: { srcs: ["for-x86_64.c"], exclude_srcs: ["not-for-x86_64.c"] },
Liz Kammer8337ea42021-09-10 10:06:32 -0400651 },
652 include_build_directory: false,
Jingwen Chene32e9e02021-04-23 09:17:24 +0000653} `,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500654 expectedBazelTargets: []string{
655 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
656 "srcs_c": `["common.c"] + select({
Jingwen Chene32e9e02021-04-23 09:17:24 +0000657 "//build/bazel/platforms/arch:arm": [
Jingwen Chene32e9e02021-04-23 09:17:24 +0000658 "not-for-arm64.c",
659 "not-for-x86.c",
660 "not-for-x86_64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400661 "for-arm.c",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000662 ],
663 "//build/bazel/platforms/arch:arm64": [
Jingwen Chene32e9e02021-04-23 09:17:24 +0000664 "not-for-arm.c",
665 "not-for-x86.c",
666 "not-for-x86_64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400667 "for-arm64.c",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000668 ],
669 "//build/bazel/platforms/arch:x86": [
Jingwen Chene32e9e02021-04-23 09:17:24 +0000670 "not-for-arm.c",
671 "not-for-arm64.c",
672 "not-for-x86_64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400673 "for-x86.c",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000674 ],
675 "//build/bazel/platforms/arch:x86_64": [
Jingwen Chene32e9e02021-04-23 09:17:24 +0000676 "not-for-arm.c",
677 "not-for-arm64.c",
678 "not-for-x86.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400679 "for-x86_64.c",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000680 ],
681 "//conditions:default": [
682 "not-for-arm.c",
683 "not-for-arm64.c",
684 "not-for-x86.c",
685 "not-for-x86_64.c",
686 ],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500687 })`,
688 }),
689 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200690 })
691}
692
Liz Kammer2b07ec72021-05-26 15:08:27 -0400693func TestCcLibraryStaticOneArchEmpty(t *testing.T) {
694 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500695 description: "cc_library_static one arch empty",
Liz Kammer2b07ec72021-05-26 15:08:27 -0400696 filesystem: map[string]string{
697 "common.cc": "",
698 "foo-no-arm.cc": "",
699 "foo-excluded.cc": "",
700 },
701 blueprint: soongCcLibraryStaticPreamble + `
702cc_library_static {
703 name: "foo_static",
704 srcs: ["common.cc", "foo-*.cc"],
705 exclude_srcs: ["foo-excluded.cc"],
706 arch: {
707 arm: { exclude_srcs: ["foo-no-arm.cc"] },
708 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400709 include_build_directory: false,
Liz Kammer2b07ec72021-05-26 15:08:27 -0400710}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500711 expectedBazelTargets: []string{
712 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
713 "srcs": `["common.cc"] + select({
Liz Kammer2b07ec72021-05-26 15:08:27 -0400714 "//build/bazel/platforms/arch:arm": [],
715 "//conditions:default": ["foo-no-arm.cc"],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500716 })`,
717 }),
718 },
Liz Kammer2b07ec72021-05-26 15:08:27 -0400719 })
720}
721
722func TestCcLibraryStaticOneArchEmptyOtherSet(t *testing.T) {
723 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500724 description: "cc_library_static one arch empty other set",
Liz Kammer2b07ec72021-05-26 15:08:27 -0400725 filesystem: map[string]string{
726 "common.cc": "",
727 "foo-no-arm.cc": "",
728 "x86-only.cc": "",
729 "foo-excluded.cc": "",
730 },
731 blueprint: soongCcLibraryStaticPreamble + `
732cc_library_static {
733 name: "foo_static",
734 srcs: ["common.cc", "foo-*.cc"],
735 exclude_srcs: ["foo-excluded.cc"],
736 arch: {
737 arm: { exclude_srcs: ["foo-no-arm.cc"] },
738 x86: { srcs: ["x86-only.cc"] },
739 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400740 include_build_directory: false,
Liz Kammer2b07ec72021-05-26 15:08:27 -0400741}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500742 expectedBazelTargets: []string{
743 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
744 "srcs": `["common.cc"] + select({
Liz Kammer2b07ec72021-05-26 15:08:27 -0400745 "//build/bazel/platforms/arch:arm": [],
746 "//build/bazel/platforms/arch:x86": [
747 "foo-no-arm.cc",
748 "x86-only.cc",
749 ],
750 "//conditions:default": ["foo-no-arm.cc"],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500751 })`,
752 }),
753 },
Liz Kammer2b07ec72021-05-26 15:08:27 -0400754 })
755}
756
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200757func TestCcLibraryStaticMultipleDepSameName(t *testing.T) {
758 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500759 description: "cc_library_static multiple dep same name panic",
760 filesystem: map[string]string{},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200761 blueprint: soongCcLibraryStaticPreamble + `
Liz Kammer8337ea42021-09-10 10:06:32 -0400762cc_library_static {
763 name: "static_dep",
764 bazel_module: { bp2build_available: false },
765}
Liz Kammer2b50ce62021-04-26 15:47:28 -0400766cc_library_static {
767 name: "foo_static",
Chris Parsons08648312021-05-06 16:23:19 -0400768 static_libs: ["static_dep", "static_dep"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400769 include_build_directory: false,
Liz Kammer2b50ce62021-04-26 15:47:28 -0400770}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500771 expectedBazelTargets: []string{
772 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
773 "implementation_deps": `[":static_dep"]`,
774 }),
775 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200776 })
777}
778
779func TestCcLibraryStaticOneMultilibSrcsExcludeSrcs(t *testing.T) {
780 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500781 description: "cc_library_static 1 multilib srcs and exclude_srcs",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200782 filesystem: map[string]string{
783 "common.c": "",
784 "for-lib32.c": "",
785 "not-for-lib32.c": "",
Liz Kammer2b50ce62021-04-26 15:47:28 -0400786 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200787 blueprint: soongCcLibraryStaticPreamble + `
Chris Parsonsc424b762021-04-29 18:06:50 -0400788cc_library_static {
789 name: "foo_static",
790 srcs: ["common.c", "not-for-*.c"],
791 multilib: {
792 lib32: { srcs: ["for-lib32.c"], exclude_srcs: ["not-for-lib32.c"] },
793 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400794 include_build_directory: false,
Chris Parsonsc424b762021-04-29 18:06:50 -0400795} `,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500796 expectedBazelTargets: []string{
797 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
798 "srcs_c": `["common.c"] + select({
Chris Parsonsc424b762021-04-29 18:06:50 -0400799 "//build/bazel/platforms/arch:arm": ["for-lib32.c"],
800 "//build/bazel/platforms/arch:x86": ["for-lib32.c"],
801 "//conditions:default": ["not-for-lib32.c"],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500802 })`,
803 }),
804 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200805 })
806}
807
808func TestCcLibraryStaticTwoMultilibSrcsExcludeSrcs(t *testing.T) {
809 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500810 description: "cc_library_static 2 multilib srcs and exclude_srcs",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200811 filesystem: map[string]string{
812 "common.c": "",
813 "for-lib32.c": "",
814 "for-lib64.c": "",
815 "not-for-lib32.c": "",
816 "not-for-lib64.c": "",
Chris Parsonsc424b762021-04-29 18:06:50 -0400817 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200818 blueprint: soongCcLibraryStaticPreamble + `
Chris Parsonsc424b762021-04-29 18:06:50 -0400819cc_library_static {
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500820 name: "foo_static",
Chris Parsonsc424b762021-04-29 18:06:50 -0400821 srcs: ["common.c", "not-for-*.c"],
822 multilib: {
823 lib32: { srcs: ["for-lib32.c"], exclude_srcs: ["not-for-lib32.c"] },
824 lib64: { srcs: ["for-lib64.c"], exclude_srcs: ["not-for-lib64.c"] },
825 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400826 include_build_directory: false,
Chris Parsonsc424b762021-04-29 18:06:50 -0400827} `,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500828 expectedBazelTargets: []string{
829 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
830 "srcs_c": `["common.c"] + select({
Chris Parsonsc424b762021-04-29 18:06:50 -0400831 "//build/bazel/platforms/arch:arm": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400832 "not-for-lib64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400833 "for-lib32.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400834 ],
835 "//build/bazel/platforms/arch:arm64": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400836 "not-for-lib32.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400837 "for-lib64.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400838 ],
839 "//build/bazel/platforms/arch:x86": [
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:x86_64": [
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 "//conditions:default": [
848 "not-for-lib32.c",
849 "not-for-lib64.c",
850 ],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500851 })`,
852 }),
853 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200854 })
855}
856
857func TestCcLibrarySTaticArchMultilibSrcsExcludeSrcs(t *testing.T) {
858 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500859 description: "cc_library_static arch and multilib srcs and exclude_srcs",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200860 filesystem: map[string]string{
861 "common.c": "",
862 "for-arm.c": "",
863 "for-arm64.c": "",
864 "for-x86.c": "",
865 "for-x86_64.c": "",
866 "for-lib32.c": "",
867 "for-lib64.c": "",
868 "not-for-arm.c": "",
869 "not-for-arm64.c": "",
870 "not-for-x86.c": "",
871 "not-for-x86_64.c": "",
872 "not-for-lib32.c": "",
873 "not-for-lib64.c": "",
874 "not-for-everything.c": "",
Chris Parsonsc424b762021-04-29 18:06:50 -0400875 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200876 blueprint: soongCcLibraryStaticPreamble + `
Chris Parsonsc424b762021-04-29 18:06:50 -0400877cc_library_static {
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500878 name: "foo_static",
Chris Parsonsc424b762021-04-29 18:06:50 -0400879 srcs: ["common.c", "not-for-*.c"],
880 exclude_srcs: ["not-for-everything.c"],
881 arch: {
882 arm: { srcs: ["for-arm.c"], exclude_srcs: ["not-for-arm.c"] },
883 arm64: { srcs: ["for-arm64.c"], exclude_srcs: ["not-for-arm64.c"] },
884 x86: { srcs: ["for-x86.c"], exclude_srcs: ["not-for-x86.c"] },
885 x86_64: { srcs: ["for-x86_64.c"], exclude_srcs: ["not-for-x86_64.c"] },
886 },
887 multilib: {
888 lib32: { srcs: ["for-lib32.c"], exclude_srcs: ["not-for-lib32.c"] },
889 lib64: { srcs: ["for-lib64.c"], exclude_srcs: ["not-for-lib64.c"] },
890 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400891 include_build_directory: false,
Chris Parsonsc424b762021-04-29 18:06:50 -0400892}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500893 expectedBazelTargets: []string{
894 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
895 "srcs_c": `["common.c"] + select({
Chris Parsonsc424b762021-04-29 18:06:50 -0400896 "//build/bazel/platforms/arch:arm": [
Liz Kammer9bad9d62021-10-11 15:40:35 -0400897 "not-for-arm64.c",
898 "not-for-lib64.c",
899 "not-for-x86.c",
900 "not-for-x86_64.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400901 "for-arm.c",
902 "for-lib32.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400903 ],
904 "//build/bazel/platforms/arch:arm64": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400905 "not-for-arm.c",
906 "not-for-lib32.c",
907 "not-for-x86.c",
908 "not-for-x86_64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400909 "for-arm64.c",
910 "for-lib64.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400911 ],
912 "//build/bazel/platforms/arch:x86": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400913 "not-for-arm.c",
914 "not-for-arm64.c",
915 "not-for-lib64.c",
916 "not-for-x86_64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400917 "for-x86.c",
918 "for-lib32.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400919 ],
920 "//build/bazel/platforms/arch:x86_64": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400921 "not-for-arm.c",
922 "not-for-arm64.c",
923 "not-for-lib32.c",
924 "not-for-x86.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400925 "for-x86_64.c",
926 "for-lib64.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400927 ],
928 "//conditions:default": [
929 "not-for-arm.c",
930 "not-for-arm64.c",
931 "not-for-lib32.c",
932 "not-for-lib64.c",
933 "not-for-x86.c",
934 "not-for-x86_64.c",
935 ],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500936 })`,
937 }),
938 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200939 })
940}
941
Liz Kammerae3994e2021-10-19 09:45:48 -0400942func TestCcLibraryStaticGeneratedHeadersAllPartitions(t *testing.T) {
943 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammerae3994e2021-10-19 09:45:48 -0400944 blueprint: soongCcLibraryStaticPreamble + `
945genrule {
946 name: "generated_hdr",
947 cmd: "nothing to see here",
Liz Kammerbe46fcc2021-11-01 15:32:43 -0400948 bazel_module: { bp2build_available: false },
Liz Kammerae3994e2021-10-19 09:45:48 -0400949}
950
Liz Kammere6583482021-10-19 13:56:10 -0400951genrule {
952 name: "export_generated_hdr",
953 cmd: "nothing to see here",
Liz Kammerbe46fcc2021-11-01 15:32:43 -0400954 bazel_module: { bp2build_available: false },
Liz Kammere6583482021-10-19 13:56:10 -0400955}
956
Liz Kammerae3994e2021-10-19 09:45:48 -0400957cc_library_static {
958 name: "foo_static",
959 srcs: ["cpp_src.cpp", "as_src.S", "c_src.c"],
Liz Kammere6583482021-10-19 13:56:10 -0400960 generated_headers: ["generated_hdr", "export_generated_hdr"],
961 export_generated_headers: ["export_generated_hdr"],
Liz Kammerae3994e2021-10-19 09:45:48 -0400962 include_build_directory: false,
963}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500964 expectedBazelTargets: []string{
965 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
Liz Kammer1263d9b2021-12-10 14:28:20 -0500966 "export_includes": `["."]`,
967 "local_includes": `["."]`,
968 "hdrs": `[":export_generated_hdr"]`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500969 "srcs": `[
Liz Kammerae3994e2021-10-19 09:45:48 -0400970 "cpp_src.cpp",
971 ":generated_hdr",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500972 ]`,
973 "srcs_as": `[
Liz Kammerae3994e2021-10-19 09:45:48 -0400974 "as_src.S",
975 ":generated_hdr",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500976 ]`,
977 "srcs_c": `[
Liz Kammerae3994e2021-10-19 09:45:48 -0400978 "c_src.c",
979 ":generated_hdr",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500980 ]`,
981 }),
982 },
Liz Kammerae3994e2021-10-19 09:45:48 -0400983 })
984}
985
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200986func TestCcLibraryStaticArchSrcsExcludeSrcsGeneratedFiles(t *testing.T) {
987 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500988 description: "cc_library_static arch srcs/exclude_srcs with generated files",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200989 filesystem: map[string]string{
Chris Parsons990c4f42021-05-25 12:10:58 -0400990 "common.cpp": "",
991 "for-x86.cpp": "",
992 "not-for-x86.cpp": "",
993 "not-for-everything.cpp": "",
Liz Kammerbe46fcc2021-11-01 15:32:43 -0400994 "dep/Android.bp": simpleModuleDoNotConvertBp2build("genrule", "generated_src_other_pkg") +
995 simpleModuleDoNotConvertBp2build("genrule", "generated_hdr_other_pkg") +
996 simpleModuleDoNotConvertBp2build("genrule", "generated_src_other_pkg_x86") +
997 simpleModuleDoNotConvertBp2build("genrule", "generated_hdr_other_pkg_x86") +
998 simpleModuleDoNotConvertBp2build("genrule", "generated_hdr_other_pkg_android"),
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200999 },
Liz Kammerbe46fcc2021-11-01 15:32:43 -04001000 blueprint: soongCcLibraryStaticPreamble +
1001 simpleModuleDoNotConvertBp2build("genrule", "generated_src") +
1002 simpleModuleDoNotConvertBp2build("genrule", "generated_src_not_x86") +
1003 simpleModuleDoNotConvertBp2build("genrule", "generated_src_android") +
1004 simpleModuleDoNotConvertBp2build("genrule", "generated_hdr") + `
Chris Parsons484e50a2021-05-13 15:13:04 -04001005cc_library_static {
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001006 name: "foo_static",
Liz Kammer222bdcf2021-10-11 14:15:51 -04001007 srcs: ["common.cpp", "not-for-*.cpp"],
1008 exclude_srcs: ["not-for-everything.cpp"],
1009 generated_sources: ["generated_src", "generated_src_other_pkg", "generated_src_not_x86"],
1010 generated_headers: ["generated_hdr", "generated_hdr_other_pkg"],
Liz Kammer1263d9b2021-12-10 14:28:20 -05001011 export_generated_headers: ["generated_hdr_other_pkg"],
Liz Kammer222bdcf2021-10-11 14:15:51 -04001012 arch: {
1013 x86: {
1014 srcs: ["for-x86.cpp"],
1015 exclude_srcs: ["not-for-x86.cpp"],
1016 generated_headers: ["generated_hdr_other_pkg_x86"],
1017 exclude_generated_sources: ["generated_src_not_x86"],
Liz Kammer1263d9b2021-12-10 14:28:20 -05001018 export_generated_headers: ["generated_hdr_other_pkg_x86"],
Liz Kammer222bdcf2021-10-11 14:15:51 -04001019 },
1020 },
1021 target: {
1022 android: {
1023 generated_sources: ["generated_src_android"],
1024 generated_headers: ["generated_hdr_other_pkg_android"],
Liz Kammer1263d9b2021-12-10 14:28:20 -05001025 export_generated_headers: ["generated_hdr_other_pkg_android"],
Liz Kammer222bdcf2021-10-11 14:15:51 -04001026 },
1027 },
1028
Liz Kammer8337ea42021-09-10 10:06:32 -04001029 include_build_directory: false,
Chris Parsons484e50a2021-05-13 15:13:04 -04001030}
1031`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001032 expectedBazelTargets: []string{
1033 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
1034 "srcs": `[
Chris Parsons990c4f42021-05-25 12:10:58 -04001035 "common.cpp",
Liz Kammer9bad9d62021-10-11 15:40:35 -04001036 ":generated_src",
1037 "//dep:generated_src_other_pkg",
Liz Kammerae3994e2021-10-19 09:45:48 -04001038 ":generated_hdr",
Chris Parsons484e50a2021-05-13 15:13:04 -04001039 ] + select({
Liz Kammer1263d9b2021-12-10 14:28:20 -05001040 "//build/bazel/platforms/arch:x86": ["for-x86.cpp"],
Liz Kammer222bdcf2021-10-11 14:15:51 -04001041 "//conditions:default": [
Liz Kammer222bdcf2021-10-11 14:15:51 -04001042 "not-for-x86.cpp",
Liz Kammer9bad9d62021-10-11 15:40:35 -04001043 ":generated_src_not_x86",
Liz Kammer222bdcf2021-10-11 14:15:51 -04001044 ],
1045 }) + select({
Liz Kammer1263d9b2021-12-10 14:28:20 -05001046 "//build/bazel/platforms/os:android": [":generated_src_android"],
Liz Kammer222bdcf2021-10-11 14:15:51 -04001047 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001048 })`,
Liz Kammer1263d9b2021-12-10 14:28:20 -05001049 "hdrs": `["//dep:generated_hdr_other_pkg"] + select({
1050 "//build/bazel/platforms/arch:x86": ["//dep:generated_hdr_other_pkg_x86"],
1051 "//conditions:default": [],
1052 }) + select({
1053 "//build/bazel/platforms/os:android": ["//dep:generated_hdr_other_pkg_android"],
1054 "//conditions:default": [],
1055 })`,
1056 "local_includes": `["."]`,
1057 "export_absolute_includes": `["dep"]`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001058 }),
1059 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +02001060 })
Rupert Shuttleworth095081c2021-03-25 09:06:03 +00001061}
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001062
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001063func TestCcLibraryStaticGetTargetProperties(t *testing.T) {
1064 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1065
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001066 description: "cc_library_static complex GetTargetProperties",
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001067 blueprint: soongCcLibraryStaticPreamble + `
1068cc_library_static {
1069 name: "foo_static",
1070 target: {
1071 android: {
1072 srcs: ["android_src.c"],
1073 },
1074 android_arm: {
1075 srcs: ["android_arm_src.c"],
1076 },
1077 android_arm64: {
1078 srcs: ["android_arm64_src.c"],
1079 },
1080 android_x86: {
1081 srcs: ["android_x86_src.c"],
1082 },
1083 android_x86_64: {
1084 srcs: ["android_x86_64_src.c"],
1085 },
1086 linux_bionic_arm64: {
1087 srcs: ["linux_bionic_arm64_src.c"],
1088 },
1089 linux_bionic_x86_64: {
1090 srcs: ["linux_bionic_x86_64_src.c"],
1091 },
1092 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001093 include_build_directory: false,
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001094}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001095 expectedBazelTargets: []string{
1096 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
1097 "srcs_c": `select({
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001098 "//build/bazel/platforms/os:android": ["android_src.c"],
1099 "//conditions:default": [],
1100 }) + select({
Rupert Shuttleworthffd45822021-05-14 03:02:34 -04001101 "//build/bazel/platforms/os_arch:android_arm": ["android_arm_src.c"],
1102 "//build/bazel/platforms/os_arch:android_arm64": ["android_arm64_src.c"],
1103 "//build/bazel/platforms/os_arch:android_x86": ["android_x86_src.c"],
1104 "//build/bazel/platforms/os_arch:android_x86_64": ["android_x86_64_src.c"],
Rupert Shuttleworthffd45822021-05-14 03:02:34 -04001105 "//build/bazel/platforms/os_arch:linux_bionic_arm64": ["linux_bionic_arm64_src.c"],
1106 "//build/bazel/platforms/os_arch:linux_bionic_x86_64": ["linux_bionic_x86_64_src.c"],
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001107 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001108 })`,
1109 }),
1110 },
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001111 })
1112}
1113
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001114func TestCcLibraryStaticProductVariableSelects(t *testing.T) {
1115 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001116 description: "cc_library_static product variable selects",
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001117 blueprint: soongCcLibraryStaticPreamble + `
1118cc_library_static {
1119 name: "foo_static",
1120 srcs: ["common.c"],
1121 product_variables: {
1122 malloc_not_svelte: {
1123 cflags: ["-Wmalloc_not_svelte"],
1124 },
1125 malloc_zero_contents: {
1126 cflags: ["-Wmalloc_zero_contents"],
1127 },
1128 binder32bit: {
1129 cflags: ["-Wbinder32bit"],
1130 },
1131 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001132 include_build_directory: false,
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001133} `,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001134 expectedBazelTargets: []string{
1135 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
1136 "copts": `select({
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001137 "//build/bazel/product_variables:binder32bit": ["-Wbinder32bit"],
1138 "//conditions:default": [],
1139 }) + select({
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001140 "//build/bazel/product_variables:malloc_not_svelte": ["-Wmalloc_not_svelte"],
1141 "//conditions:default": [],
1142 }) + select({
1143 "//build/bazel/product_variables:malloc_zero_contents": ["-Wmalloc_zero_contents"],
1144 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001145 })`,
1146 "srcs_c": `["common.c"]`,
1147 }),
1148 },
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001149 })
1150}
1151
1152func TestCcLibraryStaticProductVariableArchSpecificSelects(t *testing.T) {
1153 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001154 description: "cc_library_static arch-specific product variable selects",
1155 filesystem: map[string]string{},
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001156 blueprint: soongCcLibraryStaticPreamble + `
1157cc_library_static {
1158 name: "foo_static",
1159 srcs: ["common.c"],
1160 product_variables: {
1161 malloc_not_svelte: {
1162 cflags: ["-Wmalloc_not_svelte"],
1163 },
1164 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001165 arch: {
1166 arm64: {
1167 product_variables: {
1168 malloc_not_svelte: {
1169 cflags: ["-Warm64_malloc_not_svelte"],
1170 },
1171 },
1172 },
1173 },
1174 multilib: {
1175 lib32: {
1176 product_variables: {
1177 malloc_not_svelte: {
1178 cflags: ["-Wlib32_malloc_not_svelte"],
1179 },
1180 },
1181 },
1182 },
1183 target: {
1184 android: {
1185 product_variables: {
1186 malloc_not_svelte: {
1187 cflags: ["-Wandroid_malloc_not_svelte"],
1188 },
1189 },
1190 }
1191 },
1192 include_build_directory: false,
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001193} `,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001194 expectedBazelTargets: []string{
1195 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
1196 "copts": `select({
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001197 "//build/bazel/product_variables:malloc_not_svelte": ["-Wmalloc_not_svelte"],
1198 "//conditions:default": [],
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001199 }) + select({
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001200 "//build/bazel/product_variables:malloc_not_svelte-android": ["-Wandroid_malloc_not_svelte"],
1201 "//conditions:default": [],
1202 }) + select({
1203 "//build/bazel/product_variables:malloc_not_svelte-arm": ["-Wlib32_malloc_not_svelte"],
1204 "//conditions:default": [],
1205 }) + select({
1206 "//build/bazel/product_variables:malloc_not_svelte-arm64": ["-Warm64_malloc_not_svelte"],
1207 "//conditions:default": [],
1208 }) + select({
1209 "//build/bazel/product_variables:malloc_not_svelte-x86": ["-Wlib32_malloc_not_svelte"],
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001210 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001211 })`,
1212 "srcs_c": `["common.c"]`,
1213 }),
1214 },
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001215 })
1216}
Liz Kammerba7a9c52021-05-26 08:45:30 -04001217
1218func TestCcLibraryStaticProductVariableStringReplacement(t *testing.T) {
1219 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001220 description: "cc_library_static product variable string replacement",
1221 filesystem: map[string]string{},
Liz Kammerba7a9c52021-05-26 08:45:30 -04001222 blueprint: soongCcLibraryStaticPreamble + `
1223cc_library_static {
1224 name: "foo_static",
Chris Parsons69fa9f92021-07-13 11:47:44 -04001225 srcs: ["common.S"],
Liz Kammerba7a9c52021-05-26 08:45:30 -04001226 product_variables: {
1227 platform_sdk_version: {
1228 asflags: ["-DPLATFORM_SDK_VERSION=%d"],
1229 },
1230 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001231 include_build_directory: false,
Liz Kammerba7a9c52021-05-26 08:45:30 -04001232} `,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001233 expectedBazelTargets: []string{
1234 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
1235 "asflags": `select({
Liz Kammerba7a9c52021-05-26 08:45:30 -04001236 "//build/bazel/product_variables:platform_sdk_version": ["-DPLATFORM_SDK_VERSION=$(Platform_sdk_version)"],
1237 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001238 })`,
1239 "srcs_as": `["common.S"]`,
1240 }),
1241 },
Liz Kammerba7a9c52021-05-26 08:45:30 -04001242 })
1243}
Chris Parsons51f8c392021-08-03 21:01:05 -04001244
1245func TestStaticLibrary_SystemSharedLibsRootEmpty(t *testing.T) {
1246 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001247 description: "cc_library_static system_shared_lib empty root",
Chris Parsons51f8c392021-08-03 21:01:05 -04001248 blueprint: soongCcLibraryStaticPreamble + `
1249cc_library_static {
1250 name: "root_empty",
Liz Kammer8337ea42021-09-10 10:06:32 -04001251 system_shared_libs: [],
1252 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001253}
1254`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001255 expectedBazelTargets: []string{
1256 makeBazelTarget("cc_library_static", "root_empty", attrNameToString{
1257 "system_dynamic_deps": `[]`,
1258 }),
1259 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001260 })
1261}
1262
1263func TestStaticLibrary_SystemSharedLibsStaticEmpty(t *testing.T) {
1264 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001265 description: "cc_library_static system_shared_lib empty static default",
Chris Parsons51f8c392021-08-03 21:01:05 -04001266 blueprint: soongCcLibraryStaticPreamble + `
1267cc_defaults {
1268 name: "static_empty_defaults",
1269 static: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001270 system_shared_libs: [],
1271 },
1272 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001273}
1274cc_library_static {
1275 name: "static_empty",
Liz Kammer8337ea42021-09-10 10:06:32 -04001276 defaults: ["static_empty_defaults"],
Chris Parsons51f8c392021-08-03 21:01:05 -04001277}
1278`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001279 expectedBazelTargets: []string{
1280 makeBazelTarget("cc_library_static", "static_empty", attrNameToString{
1281 "system_dynamic_deps": `[]`,
1282 }),
1283 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001284 })
1285}
1286
1287func TestStaticLibrary_SystemSharedLibsBionicEmpty(t *testing.T) {
1288 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001289 description: "cc_library_static system_shared_lib empty for bionic variant",
Chris Parsons51f8c392021-08-03 21:01:05 -04001290 blueprint: soongCcLibraryStaticPreamble + `
1291cc_library_static {
1292 name: "target_bionic_empty",
1293 target: {
1294 bionic: {
1295 system_shared_libs: [],
1296 },
1297 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001298 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001299}
1300`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001301 expectedBazelTargets: []string{
1302 makeBazelTarget("cc_library_static", "target_bionic_empty", attrNameToString{
1303 "system_dynamic_deps": `[]`,
1304 }),
1305 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001306 })
1307}
1308
1309func TestStaticLibrary_SystemSharedLibsLinuxBionicEmpty(t *testing.T) {
1310 // Note that this behavior is technically incorrect (it's a simplification).
1311 // The correct behavior would be if bp2build wrote `system_dynamic_deps = []`
1312 // only for linux_bionic, but `android` had `["libc", "libdl", "libm"].
1313 // b/195791252 tracks the fix.
1314 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001315 description: "cc_library_static system_shared_lib empty for linux_bionic variant",
Chris Parsons51f8c392021-08-03 21:01:05 -04001316 blueprint: soongCcLibraryStaticPreamble + `
1317cc_library_static {
1318 name: "target_linux_bionic_empty",
1319 target: {
1320 linux_bionic: {
1321 system_shared_libs: [],
1322 },
1323 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001324 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001325}
1326`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001327 expectedBazelTargets: []string{
1328 makeBazelTarget("cc_library_static", "target_linux_bionic_empty", attrNameToString{
1329 "system_dynamic_deps": `[]`,
1330 }),
1331 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001332 })
1333}
1334
1335func TestStaticLibrary_SystemSharedLibsBionic(t *testing.T) {
1336 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001337 description: "cc_library_static system_shared_libs set for bionic variant",
Liz Kammerbe46fcc2021-11-01 15:32:43 -04001338 blueprint: soongCcLibraryStaticPreamble +
1339 simpleModuleDoNotConvertBp2build("cc_library", "libc") + `
Chris Parsons51f8c392021-08-03 21:01:05 -04001340cc_library_static {
1341 name: "target_bionic",
1342 target: {
1343 bionic: {
1344 system_shared_libs: ["libc"],
1345 },
1346 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001347 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001348}
1349`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001350 expectedBazelTargets: []string{
1351 makeBazelTarget("cc_library_static", "target_bionic", attrNameToString{
1352 "system_dynamic_deps": `select({
Chris Parsons2dde0cb2021-10-01 14:45:30 -04001353 "//build/bazel/platforms/os:android": [":libc"],
1354 "//build/bazel/platforms/os:linux_bionic": [":libc"],
Chris Parsons51f8c392021-08-03 21:01:05 -04001355 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001356 })`,
1357 }),
1358 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001359 })
1360}
1361
1362func TestStaticLibrary_SystemSharedLibsLinuxRootAndLinuxBionic(t *testing.T) {
1363 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001364 description: "cc_library_static system_shared_libs set for root and linux_bionic variant",
Liz Kammerbe46fcc2021-11-01 15:32:43 -04001365 blueprint: soongCcLibraryStaticPreamble +
1366 simpleModuleDoNotConvertBp2build("cc_library", "libc") +
1367 simpleModuleDoNotConvertBp2build("cc_library", "libm") + `
Chris Parsons51f8c392021-08-03 21:01:05 -04001368cc_library_static {
1369 name: "target_linux_bionic",
Liz Kammer8337ea42021-09-10 10:06:32 -04001370 system_shared_libs: ["libc"],
Chris Parsons51f8c392021-08-03 21:01:05 -04001371 target: {
1372 linux_bionic: {
1373 system_shared_libs: ["libm"],
1374 },
1375 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001376 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001377}
1378`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001379 expectedBazelTargets: []string{
1380 makeBazelTarget("cc_library_static", "target_linux_bionic", attrNameToString{
1381 "system_dynamic_deps": `[":libc"] + select({
Chris Parsons51f8c392021-08-03 21:01:05 -04001382 "//build/bazel/platforms/os:linux_bionic": [":libm"],
1383 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001384 })`,
1385 }),
1386 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001387 })
1388}
Liz Kammer12615db2021-09-28 09:19:17 -04001389
Liz Kammer54309532021-12-14 12:21:22 -05001390func TestCcLibrarystatic_SystemSharedLibUsedAsDep(t *testing.T) {
1391 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1392 description: "cc_library_static system_shared_lib empty for linux_bionic variant",
1393 blueprint: soongCcLibraryStaticPreamble +
1394 simpleModuleDoNotConvertBp2build("cc_library", "libc") + `
1395cc_library_static {
1396 name: "used_in_bionic_oses",
1397 target: {
1398 android: {
1399 shared_libs: ["libc"],
1400 },
1401 linux_bionic: {
1402 shared_libs: ["libc"],
1403 },
1404 },
1405 include_build_directory: false,
1406}
1407
1408cc_library_static {
1409 name: "all",
1410 shared_libs: ["libc"],
1411 include_build_directory: false,
1412}
1413
1414cc_library_static {
1415 name: "keep_for_empty_system_shared_libs",
1416 shared_libs: ["libc"],
1417 system_shared_libs: [],
1418 include_build_directory: false,
1419}
1420`,
1421 expectedBazelTargets: []string{
1422 makeBazelTarget("cc_library_static", "all", attrNameToString{
1423 "implementation_dynamic_deps": `select({
1424 "//build/bazel/platforms/os:android": [],
1425 "//build/bazel/platforms/os:linux_bionic": [],
1426 "//conditions:default": [":libc"],
1427 })`,
1428 }),
1429 makeBazelTarget("cc_library_static", "keep_for_empty_system_shared_libs", attrNameToString{
1430 "implementation_dynamic_deps": `[":libc"]`,
1431 "system_dynamic_deps": `[]`,
1432 }),
1433 makeBazelTarget("cc_library_static", "used_in_bionic_oses", attrNameToString{}),
1434 },
1435 })
1436}
1437
Liz Kammer12615db2021-09-28 09:19:17 -04001438func TestCcLibraryStaticProto(t *testing.T) {
1439 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1440 blueprint: soongCcProtoPreamble + `cc_library_static {
1441 name: "foo",
1442 srcs: ["foo.proto"],
1443 proto: {
Liz Kammer12615db2021-09-28 09:19:17 -04001444 export_proto_headers: true,
1445 },
1446 include_build_directory: false,
1447}`,
1448 expectedBazelTargets: []string{
1449 makeBazelTarget("proto_library", "foo_proto", attrNameToString{
1450 "srcs": `["foo.proto"]`,
1451 }), makeBazelTarget("cc_lite_proto_library", "foo_cc_proto_lite", attrNameToString{
1452 "deps": `[":foo_proto"]`,
1453 }), makeBazelTarget("cc_library_static", "foo", attrNameToString{
1454 "deps": `[":libprotobuf-cpp-lite"]`,
1455 "whole_archive_deps": `[":foo_cc_proto_lite"]`,
1456 }),
1457 },
1458 })
1459}
Rupert Shuttleworth484aa252021-12-10 07:22:53 -05001460
1461func TestCcLibraryStaticUseVersionLib(t *testing.T) {
1462 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1463 blueprint: soongCcProtoPreamble + `cc_library_static {
1464 name: "foo",
1465 use_version_lib: true,
1466 include_build_directory: false,
1467}`,
1468 expectedBazelTargets: []string{
1469 makeBazelTarget("cc_library_static", "foo", attrNameToString{
1470 "use_version_lib": "True",
1471 }),
1472 },
1473 })
1474}
Liz Kammercac7f692021-12-16 14:19:32 -05001475
1476func TestCcLibraryStaticStdInFlags(t *testing.T) {
1477 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1478 blueprint: soongCcProtoPreamble + `cc_library_static {
1479 name: "foo",
1480 cflags: ["-std=candcpp"],
1481 conlyflags: ["-std=conly"],
1482 cppflags: ["-std=cpp"],
1483 include_build_directory: false,
1484}`,
1485 expectedBazelTargets: []string{
1486 makeBazelTarget("cc_library_static", "foo", attrNameToString{
1487 "conlyflags": `["-std=conly"]`,
1488 "cppflags": `["-std=cpp"]`,
1489 }),
1490 },
1491 })
1492}
Liz Kammer7128d382022-05-12 11:42:33 -04001493
1494func TestCcLibraryStaticStl(t *testing.T) {
1495 testCases := []struct {
1496 desc string
1497 prop string
1498 attr attrNameToString
1499 }{
1500 {
1501 desc: "c++_shared deduped to libc++",
1502 prop: `stl: "c++_shared",`,
1503 attr: attrNameToString{
1504 "stl": `"libc++"`,
1505 },
1506 },
1507 {
1508 desc: "libc++ to libc++",
1509 prop: `stl: "libc++",`,
1510 attr: attrNameToString{
1511 "stl": `"libc++"`,
1512 },
1513 },
1514 {
1515 desc: "c++_static to libc++_static",
1516 prop: `stl: "c++_static",`,
1517 attr: attrNameToString{
1518 "stl": `"libc++_static"`,
1519 },
1520 },
1521 {
1522 desc: "libc++_static to libc++_static",
1523 prop: `stl: "libc++_static",`,
1524 attr: attrNameToString{
1525 "stl": `"libc++_static"`,
1526 },
1527 },
1528 {
1529 desc: "system to system",
1530 prop: `stl: "system",`,
1531 attr: attrNameToString{
1532 "stl": `"system"`,
1533 },
1534 },
1535 {
1536 desc: "none to none",
1537 prop: `stl: "none",`,
1538 attr: attrNameToString{
1539 "stl": `"none"`,
1540 },
1541 },
1542 {
1543 desc: "empty to empty",
1544 attr: attrNameToString{},
1545 },
1546 }
1547 for _, tc := range testCases {
1548 t.Run(tc.desc, func(*testing.T) {
1549 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1550 blueprint: fmt.Sprintf(`cc_library_static {
1551 name: "foo",
1552 include_build_directory: false,
1553 %s
1554}`, tc.prop),
1555 expectedBazelTargets: []string{
1556 makeBazelTarget("cc_library_static", "foo", tc.attr),
1557 },
1558 })
1559 })
1560 }
1561}