blob: 205bf4d28ede8419b08bbd7dcb188f73077f71fb [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 ],
169
170 // TODO: Also support export_header_lib_headers
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000171}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500172 expectedBazelTargets: []string{
173 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
174 "absolute_includes": `[
Liz Kammer35687bc2021-09-10 10:07:07 -0400175 "include_dir_1",
176 "include_dir_2",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500177 ]`,
178 "copts": `[
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000179 "-Dflag1",
180 "-Dflag2",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500181 ]`,
182 "export_includes": `[
Liz Kammer5fad5012021-09-09 14:08:21 -0400183 "export_include_dir_1",
184 "export_include_dir_2",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500185 ]`,
186 "implementation_deps": `[
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000187 ":header_lib_1",
188 ":header_lib_2",
189 ":static_lib_1",
190 ":static_lib_2",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500191 ]`,
192 "local_includes": `[
Liz Kammer35687bc2021-09-10 10:07:07 -0400193 "local_include_dir_1",
194 "local_include_dir_2",
195 ".",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500196 ]`,
197 "srcs": `[
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000198 "foo_static1.cc",
199 "foo_static2.cc",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500200 ]`,
201 "whole_archive_deps": `[
Chris Parsons08648312021-05-06 16:23:19 -0400202 ":whole_static_lib_1",
203 ":whole_static_lib_2",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500204 ]`,
205 }),
206 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200207 })
208}
209
210func TestCcLibraryStaticSubpackage(t *testing.T) {
211 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500212 description: "cc_library_static subpackage test",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200213 filesystem: map[string]string{
214 // subpackage with subdirectory
215 "subpackage/Android.bp": "",
216 "subpackage/subpackage_header.h": "",
217 "subpackage/subdirectory/subdirectory_header.h": "",
218 // subsubpackage with subdirectory
219 "subpackage/subsubpackage/Android.bp": "",
220 "subpackage/subsubpackage/subsubpackage_header.h": "",
221 "subpackage/subsubpackage/subdirectory/subdirectory_header.h": "",
222 // subsubsubpackage with subdirectory
223 "subpackage/subsubpackage/subsubsubpackage/Android.bp": "",
224 "subpackage/subsubpackage/subsubsubpackage/subsubsubpackage_header.h": "",
225 "subpackage/subsubpackage/subsubsubpackage/subdirectory/subdirectory_header.h": "",
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000226 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200227 blueprint: soongCcLibraryStaticPreamble + `
Rupert Shuttleworthc143cc52021-04-13 13:08:04 -0400228cc_library_static {
229 name: "foo_static",
Liz Kammer35687bc2021-09-10 10:07:07 -0400230 srcs: [],
Rupert Shuttleworthc143cc52021-04-13 13:08:04 -0400231 include_dirs: [
Liz Kammer35687bc2021-09-10 10:07:07 -0400232 "subpackage",
Rupert Shuttleworthc143cc52021-04-13 13:08:04 -0400233 ],
Rupert Shuttleworthc143cc52021-04-13 13:08:04 -0400234}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500235 expectedBazelTargets: []string{
236 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
237 "absolute_includes": `["subpackage"]`,
238 "local_includes": `["."]`,
239 }),
240 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200241 })
242}
243
244func TestCcLibraryStaticExportIncludeDir(t *testing.T) {
245 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500246 description: "cc_library_static export include dir",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200247 filesystem: map[string]string{
248 // subpackage with subdirectory
249 "subpackage/Android.bp": "",
250 "subpackage/subpackage_header.h": "",
251 "subpackage/subdirectory/subdirectory_header.h": "",
Rupert Shuttleworthc143cc52021-04-13 13:08:04 -0400252 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200253 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chened9c17d2021-04-13 07:14:55 +0000254cc_library_static {
255 name: "foo_static",
256 export_include_dirs: ["subpackage"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400257 include_build_directory: false,
Jingwen Chened9c17d2021-04-13 07:14:55 +0000258}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500259 expectedBazelTargets: []string{
260 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
261 "export_includes": `["subpackage"]`,
262 }),
263 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200264 })
265}
266
267func TestCcLibraryStaticExportSystemIncludeDir(t *testing.T) {
268 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500269 description: "cc_library_static export system include dir",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200270 filesystem: map[string]string{
271 // subpackage with subdirectory
272 "subpackage/Android.bp": "",
273 "subpackage/subpackage_header.h": "",
274 "subpackage/subdirectory/subdirectory_header.h": "",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000275 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200276 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chened9c17d2021-04-13 07:14:55 +0000277cc_library_static {
278 name: "foo_static",
279 export_system_include_dirs: ["subpackage"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400280 include_build_directory: false,
Jingwen Chened9c17d2021-04-13 07:14:55 +0000281}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500282 expectedBazelTargets: []string{
283 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
284 "export_system_includes": `["subpackage"]`,
285 }),
286 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200287 })
288}
289
290func TestCcLibraryStaticManyIncludeDirs(t *testing.T) {
291 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500292 description: "cc_library_static include_dirs, local_include_dirs, export_include_dirs (b/183742505)",
293 dir: "subpackage",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200294 filesystem: map[string]string{
295 // subpackage with subdirectory
296 "subpackage/Android.bp": `
Jingwen Chened9c17d2021-04-13 07:14:55 +0000297cc_library_static {
298 name: "foo_static",
299 // include_dirs are workspace/root relative
300 include_dirs: [
301 "subpackage/subsubpackage",
302 "subpackage2",
303 "subpackage3/subsubpackage"
304 ],
305 local_include_dirs: ["subsubpackage2"], // module dir relative
306 export_include_dirs: ["./exported_subsubpackage"], // module dir relative
307 include_build_directory: true,
308 bazel_module: { bp2build_available: true },
309}`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200310 "subpackage/subsubpackage/header.h": "",
311 "subpackage/subsubpackage2/header.h": "",
312 "subpackage/exported_subsubpackage/header.h": "",
313 "subpackage2/header.h": "",
314 "subpackage3/subsubpackage/header.h": "",
315 },
316 blueprint: soongCcLibraryStaticPreamble,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500317 expectedBazelTargets: []string{
318 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
319 "absolute_includes": `[
Liz Kammer35687bc2021-09-10 10:07:07 -0400320 "subpackage/subsubpackage",
321 "subpackage2",
322 "subpackage3/subsubpackage",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500323 ]`,
324 "export_includes": `["./exported_subsubpackage"]`,
325 "local_includes": `[
Liz Kammer35687bc2021-09-10 10:07:07 -0400326 "subsubpackage2",
327 ".",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500328 ]`,
329 })},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200330 })
331}
332
333func TestCcLibraryStaticIncludeBuildDirectoryDisabled(t *testing.T) {
334 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500335 description: "cc_library_static include_build_directory disabled",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200336 filesystem: map[string]string{
337 // subpackage with subdirectory
338 "subpackage/Android.bp": "",
339 "subpackage/subpackage_header.h": "",
340 "subpackage/subdirectory/subdirectory_header.h": "",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000341 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200342 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chened9c17d2021-04-13 07:14:55 +0000343cc_library_static {
344 name: "foo_static",
345 include_dirs: ["subpackage"], // still used, but local_include_dirs is recommended
346 local_include_dirs: ["subpackage2"],
347 include_build_directory: false,
348}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500349 expectedBazelTargets: []string{
350 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
351 "absolute_includes": `["subpackage"]`,
352 "local_includes": `["subpackage2"]`,
353 }),
354 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200355 })
356}
357
358func TestCcLibraryStaticIncludeBuildDirectoryEnabled(t *testing.T) {
359 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500360 description: "cc_library_static include_build_directory enabled",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200361 filesystem: map[string]string{
362 // subpackage with subdirectory
363 "subpackage/Android.bp": "",
364 "subpackage/subpackage_header.h": "",
365 "subpackage2/Android.bp": "",
366 "subpackage2/subpackage2_header.h": "",
367 "subpackage/subdirectory/subdirectory_header.h": "",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000368 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200369 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chened9c17d2021-04-13 07:14:55 +0000370cc_library_static {
371 name: "foo_static",
372 include_dirs: ["subpackage"], // still used, but local_include_dirs is recommended
373 local_include_dirs: ["subpackage2"],
374 include_build_directory: true,
375}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500376 expectedBazelTargets: []string{
377 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
378 "absolute_includes": `["subpackage"]`,
379 "local_includes": `[
Liz Kammer35687bc2021-09-10 10:07:07 -0400380 "subpackage2",
381 ".",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500382 ]`,
383 }),
384 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200385 })
386}
387
388func TestCcLibraryStaticArchSpecificStaticLib(t *testing.T) {
389 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500390 description: "cc_library_static arch-specific static_libs",
391 filesystem: map[string]string{},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200392 blueprint: soongCcLibraryStaticPreamble + `
Liz Kammer8337ea42021-09-10 10:06:32 -0400393cc_library_static {
394 name: "static_dep",
395 bazel_module: { bp2build_available: false },
396}
397cc_library_static {
398 name: "static_dep2",
399 bazel_module: { bp2build_available: false },
400}
Jingwen Chened9c17d2021-04-13 07:14:55 +0000401cc_library_static {
402 name: "foo_static",
403 arch: { arm64: { static_libs: ["static_dep"], whole_static_libs: ["static_dep2"] } },
Liz Kammer8337ea42021-09-10 10:06:32 -0400404 include_build_directory: false,
Jingwen Chened9c17d2021-04-13 07:14:55 +0000405}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500406 expectedBazelTargets: []string{
407 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
408 "implementation_deps": `select({
Chris Parsons08648312021-05-06 16:23:19 -0400409 "//build/bazel/platforms/arch:arm64": [":static_dep"],
Jingwen Chened9c17d2021-04-13 07:14:55 +0000410 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500411 })`,
412 "whole_archive_deps": `select({
Chris Parsons08648312021-05-06 16:23:19 -0400413 "//build/bazel/platforms/arch:arm64": [":static_dep2"],
414 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500415 })`,
416 }),
417 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200418 })
419}
420
421func TestCcLibraryStaticOsSpecificStaticLib(t *testing.T) {
422 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500423 description: "cc_library_static os-specific static_libs",
424 filesystem: map[string]string{},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200425 blueprint: soongCcLibraryStaticPreamble + `
Liz Kammer8337ea42021-09-10 10:06:32 -0400426cc_library_static {
427 name: "static_dep",
428 bazel_module: { bp2build_available: false },
429}
430cc_library_static {
431 name: "static_dep2",
432 bazel_module: { bp2build_available: false },
433}
Jingwen Chened9c17d2021-04-13 07:14:55 +0000434cc_library_static {
435 name: "foo_static",
436 target: { android: { static_libs: ["static_dep"], whole_static_libs: ["static_dep2"] } },
Liz Kammer8337ea42021-09-10 10:06:32 -0400437 include_build_directory: false,
Jingwen Chened9c17d2021-04-13 07:14:55 +0000438}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500439 expectedBazelTargets: []string{
440 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
441 "implementation_deps": `select({
Chris Parsons08648312021-05-06 16:23:19 -0400442 "//build/bazel/platforms/os:android": [":static_dep"],
Jingwen Chened9c17d2021-04-13 07:14:55 +0000443 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500444 })`,
445 "whole_archive_deps": `select({
Chris Parsons08648312021-05-06 16:23:19 -0400446 "//build/bazel/platforms/os:android": [":static_dep2"],
447 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500448 })`,
449 }),
450 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200451 })
452}
453
454func TestCcLibraryStaticBaseArchOsSpecificStaticLib(t *testing.T) {
455 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500456 description: "cc_library_static base, arch and os-specific static_libs",
457 filesystem: map[string]string{},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200458 blueprint: soongCcLibraryStaticPreamble + `
Liz Kammer8337ea42021-09-10 10:06:32 -0400459cc_library_static {
460 name: "static_dep",
461 bazel_module: { bp2build_available: false },
462}
463cc_library_static {
464 name: "static_dep2",
465 bazel_module: { bp2build_available: false },
466}
467cc_library_static {
468 name: "static_dep3",
469 bazel_module: { bp2build_available: false },
470}
471cc_library_static {
472 name: "static_dep4",
473 bazel_module: { bp2build_available: false },
474}
Jingwen Chened9c17d2021-04-13 07:14:55 +0000475cc_library_static {
476 name: "foo_static",
477 static_libs: ["static_dep"],
478 whole_static_libs: ["static_dep2"],
479 target: { android: { static_libs: ["static_dep3"] } },
480 arch: { arm64: { static_libs: ["static_dep4"] } },
Liz Kammer8337ea42021-09-10 10:06:32 -0400481 include_build_directory: false,
Jingwen Chened9c17d2021-04-13 07:14:55 +0000482}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500483 expectedBazelTargets: []string{
484 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
485 "implementation_deps": `[":static_dep"] + select({
Jingwen Chened9c17d2021-04-13 07:14:55 +0000486 "//build/bazel/platforms/arch:arm64": [":static_dep4"],
487 "//conditions:default": [],
488 }) + select({
489 "//build/bazel/platforms/os:android": [":static_dep3"],
490 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500491 })`,
492 "whole_archive_deps": `[":static_dep2"]`,
493 }),
494 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200495 })
496}
497
498func TestCcLibraryStaticSimpleExcludeSrcs(t *testing.T) {
499 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500500 description: "cc_library_static simple exclude_srcs",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200501 filesystem: map[string]string{
502 "common.c": "",
503 "foo-a.c": "",
504 "foo-excluded.c": "",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000505 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200506 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chene32e9e02021-04-23 09:17:24 +0000507cc_library_static {
508 name: "foo_static",
509 srcs: ["common.c", "foo-*.c"],
510 exclude_srcs: ["foo-excluded.c"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400511 include_build_directory: false,
Jingwen Chene32e9e02021-04-23 09:17:24 +0000512}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500513 expectedBazelTargets: []string{
514 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
515 "srcs_c": `[
Jingwen Chene32e9e02021-04-23 09:17:24 +0000516 "common.c",
517 "foo-a.c",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500518 ]`,
519 }),
520 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200521 })
522}
523
524func TestCcLibraryStaticOneArchSrcs(t *testing.T) {
525 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500526 description: "cc_library_static one arch specific srcs",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200527 filesystem: map[string]string{
528 "common.c": "",
529 "foo-arm.c": "",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000530 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200531 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chene32e9e02021-04-23 09:17:24 +0000532cc_library_static {
533 name: "foo_static",
534 srcs: ["common.c"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400535 arch: { arm: { srcs: ["foo-arm.c"] } },
536 include_build_directory: false,
Jingwen Chene32e9e02021-04-23 09:17:24 +0000537}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500538 expectedBazelTargets: []string{
539 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
540 "srcs_c": `["common.c"] + select({
Jingwen Chene32e9e02021-04-23 09:17:24 +0000541 "//build/bazel/platforms/arch:arm": ["foo-arm.c"],
542 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500543 })`,
544 }),
545 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200546 })
547}
548
549func TestCcLibraryStaticOneArchSrcsExcludeSrcs(t *testing.T) {
550 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500551 description: "cc_library_static one arch specific srcs and exclude_srcs",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200552 filesystem: map[string]string{
553 "common.c": "",
554 "for-arm.c": "",
555 "not-for-arm.c": "",
556 "not-for-anything.c": "",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000557 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200558 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chene32e9e02021-04-23 09:17:24 +0000559cc_library_static {
560 name: "foo_static",
561 srcs: ["common.c", "not-for-*.c"],
562 exclude_srcs: ["not-for-anything.c"],
563 arch: {
564 arm: { srcs: ["for-arm.c"], exclude_srcs: ["not-for-arm.c"] },
565 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400566 include_build_directory: false,
Jingwen Chene32e9e02021-04-23 09:17:24 +0000567}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500568 expectedBazelTargets: []string{
569 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
570 "srcs_c": `["common.c"] + select({
Jingwen Chene32e9e02021-04-23 09:17:24 +0000571 "//build/bazel/platforms/arch:arm": ["for-arm.c"],
572 "//conditions:default": ["not-for-arm.c"],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500573 })`,
574 }),
575 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200576 })
577}
578
579func TestCcLibraryStaticTwoArchExcludeSrcs(t *testing.T) {
580 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500581 description: "cc_library_static arch specific exclude_srcs for 2 architectures",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200582 filesystem: map[string]string{
583 "common.c": "",
584 "for-arm.c": "",
585 "for-x86.c": "",
586 "not-for-arm.c": "",
587 "not-for-x86.c": "",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000588 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200589 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chene32e9e02021-04-23 09:17:24 +0000590cc_library_static {
591 name: "foo_static",
592 srcs: ["common.c", "not-for-*.c"],
593 exclude_srcs: ["not-for-everything.c"],
594 arch: {
595 arm: { srcs: ["for-arm.c"], exclude_srcs: ["not-for-arm.c"] },
596 x86: { srcs: ["for-x86.c"], exclude_srcs: ["not-for-x86.c"] },
597 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400598 include_build_directory: false,
Jingwen Chene32e9e02021-04-23 09:17:24 +0000599} `,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500600 expectedBazelTargets: []string{
601 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
602 "srcs_c": `["common.c"] + select({
Jingwen Chene32e9e02021-04-23 09:17:24 +0000603 "//build/bazel/platforms/arch:arm": [
Jingwen Chene32e9e02021-04-23 09:17:24 +0000604 "not-for-x86.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400605 "for-arm.c",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000606 ],
607 "//build/bazel/platforms/arch:x86": [
Jingwen Chene32e9e02021-04-23 09:17:24 +0000608 "not-for-arm.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400609 "for-x86.c",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000610 ],
611 "//conditions:default": [
612 "not-for-arm.c",
613 "not-for-x86.c",
614 ],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500615 })`,
616 }),
617 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200618 })
619}
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500620
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200621func TestCcLibraryStaticFourArchExcludeSrcs(t *testing.T) {
622 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500623 description: "cc_library_static arch specific exclude_srcs for 4 architectures",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200624 filesystem: map[string]string{
625 "common.c": "",
626 "for-arm.c": "",
627 "for-arm64.c": "",
628 "for-x86.c": "",
629 "for-x86_64.c": "",
630 "not-for-arm.c": "",
631 "not-for-arm64.c": "",
632 "not-for-x86.c": "",
633 "not-for-x86_64.c": "",
634 "not-for-everything.c": "",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000635 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200636 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chene32e9e02021-04-23 09:17:24 +0000637cc_library_static {
638 name: "foo_static",
639 srcs: ["common.c", "not-for-*.c"],
640 exclude_srcs: ["not-for-everything.c"],
641 arch: {
642 arm: { srcs: ["for-arm.c"], exclude_srcs: ["not-for-arm.c"] },
643 arm64: { srcs: ["for-arm64.c"], exclude_srcs: ["not-for-arm64.c"] },
644 x86: { srcs: ["for-x86.c"], exclude_srcs: ["not-for-x86.c"] },
645 x86_64: { srcs: ["for-x86_64.c"], exclude_srcs: ["not-for-x86_64.c"] },
Liz Kammer8337ea42021-09-10 10:06:32 -0400646 },
647 include_build_directory: false,
Jingwen Chene32e9e02021-04-23 09:17:24 +0000648} `,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500649 expectedBazelTargets: []string{
650 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
651 "srcs_c": `["common.c"] + select({
Jingwen Chene32e9e02021-04-23 09:17:24 +0000652 "//build/bazel/platforms/arch:arm": [
Jingwen Chene32e9e02021-04-23 09:17:24 +0000653 "not-for-arm64.c",
654 "not-for-x86.c",
655 "not-for-x86_64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400656 "for-arm.c",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000657 ],
658 "//build/bazel/platforms/arch:arm64": [
Jingwen Chene32e9e02021-04-23 09:17:24 +0000659 "not-for-arm.c",
660 "not-for-x86.c",
661 "not-for-x86_64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400662 "for-arm64.c",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000663 ],
664 "//build/bazel/platforms/arch:x86": [
Jingwen Chene32e9e02021-04-23 09:17:24 +0000665 "not-for-arm.c",
666 "not-for-arm64.c",
667 "not-for-x86_64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400668 "for-x86.c",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000669 ],
670 "//build/bazel/platforms/arch:x86_64": [
Jingwen Chene32e9e02021-04-23 09:17:24 +0000671 "not-for-arm.c",
672 "not-for-arm64.c",
673 "not-for-x86.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400674 "for-x86_64.c",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000675 ],
676 "//conditions:default": [
677 "not-for-arm.c",
678 "not-for-arm64.c",
679 "not-for-x86.c",
680 "not-for-x86_64.c",
681 ],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500682 })`,
683 }),
684 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200685 })
686}
687
Liz Kammer2b07ec72021-05-26 15:08:27 -0400688func TestCcLibraryStaticOneArchEmpty(t *testing.T) {
689 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500690 description: "cc_library_static one arch empty",
Liz Kammer2b07ec72021-05-26 15:08:27 -0400691 filesystem: map[string]string{
692 "common.cc": "",
693 "foo-no-arm.cc": "",
694 "foo-excluded.cc": "",
695 },
696 blueprint: soongCcLibraryStaticPreamble + `
697cc_library_static {
698 name: "foo_static",
699 srcs: ["common.cc", "foo-*.cc"],
700 exclude_srcs: ["foo-excluded.cc"],
701 arch: {
702 arm: { exclude_srcs: ["foo-no-arm.cc"] },
703 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400704 include_build_directory: false,
Liz Kammer2b07ec72021-05-26 15:08:27 -0400705}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500706 expectedBazelTargets: []string{
707 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
708 "srcs": `["common.cc"] + select({
Liz Kammer2b07ec72021-05-26 15:08:27 -0400709 "//build/bazel/platforms/arch:arm": [],
710 "//conditions:default": ["foo-no-arm.cc"],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500711 })`,
712 }),
713 },
Liz Kammer2b07ec72021-05-26 15:08:27 -0400714 })
715}
716
717func TestCcLibraryStaticOneArchEmptyOtherSet(t *testing.T) {
718 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500719 description: "cc_library_static one arch empty other set",
Liz Kammer2b07ec72021-05-26 15:08:27 -0400720 filesystem: map[string]string{
721 "common.cc": "",
722 "foo-no-arm.cc": "",
723 "x86-only.cc": "",
724 "foo-excluded.cc": "",
725 },
726 blueprint: soongCcLibraryStaticPreamble + `
727cc_library_static {
728 name: "foo_static",
729 srcs: ["common.cc", "foo-*.cc"],
730 exclude_srcs: ["foo-excluded.cc"],
731 arch: {
732 arm: { exclude_srcs: ["foo-no-arm.cc"] },
733 x86: { srcs: ["x86-only.cc"] },
734 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400735 include_build_directory: false,
Liz Kammer2b07ec72021-05-26 15:08:27 -0400736}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500737 expectedBazelTargets: []string{
738 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
739 "srcs": `["common.cc"] + select({
Liz Kammer2b07ec72021-05-26 15:08:27 -0400740 "//build/bazel/platforms/arch:arm": [],
741 "//build/bazel/platforms/arch:x86": [
742 "foo-no-arm.cc",
743 "x86-only.cc",
744 ],
745 "//conditions:default": ["foo-no-arm.cc"],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500746 })`,
747 }),
748 },
Liz Kammer2b07ec72021-05-26 15:08:27 -0400749 })
750}
751
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200752func TestCcLibraryStaticMultipleDepSameName(t *testing.T) {
753 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500754 description: "cc_library_static multiple dep same name panic",
755 filesystem: map[string]string{},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200756 blueprint: soongCcLibraryStaticPreamble + `
Liz Kammer8337ea42021-09-10 10:06:32 -0400757cc_library_static {
758 name: "static_dep",
759 bazel_module: { bp2build_available: false },
760}
Liz Kammer2b50ce62021-04-26 15:47:28 -0400761cc_library_static {
762 name: "foo_static",
Chris Parsons08648312021-05-06 16:23:19 -0400763 static_libs: ["static_dep", "static_dep"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400764 include_build_directory: false,
Liz Kammer2b50ce62021-04-26 15:47:28 -0400765}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500766 expectedBazelTargets: []string{
767 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
768 "implementation_deps": `[":static_dep"]`,
769 }),
770 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200771 })
772}
773
774func TestCcLibraryStaticOneMultilibSrcsExcludeSrcs(t *testing.T) {
775 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500776 description: "cc_library_static 1 multilib srcs and exclude_srcs",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200777 filesystem: map[string]string{
778 "common.c": "",
779 "for-lib32.c": "",
780 "not-for-lib32.c": "",
Liz Kammer2b50ce62021-04-26 15:47:28 -0400781 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200782 blueprint: soongCcLibraryStaticPreamble + `
Chris Parsonsc424b762021-04-29 18:06:50 -0400783cc_library_static {
784 name: "foo_static",
785 srcs: ["common.c", "not-for-*.c"],
786 multilib: {
787 lib32: { srcs: ["for-lib32.c"], exclude_srcs: ["not-for-lib32.c"] },
788 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400789 include_build_directory: false,
Chris Parsonsc424b762021-04-29 18:06:50 -0400790} `,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500791 expectedBazelTargets: []string{
792 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
793 "srcs_c": `["common.c"] + select({
Chris Parsonsc424b762021-04-29 18:06:50 -0400794 "//build/bazel/platforms/arch:arm": ["for-lib32.c"],
795 "//build/bazel/platforms/arch:x86": ["for-lib32.c"],
796 "//conditions:default": ["not-for-lib32.c"],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500797 })`,
798 }),
799 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200800 })
801}
802
803func TestCcLibraryStaticTwoMultilibSrcsExcludeSrcs(t *testing.T) {
804 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500805 description: "cc_library_static 2 multilib srcs and exclude_srcs",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200806 filesystem: map[string]string{
807 "common.c": "",
808 "for-lib32.c": "",
809 "for-lib64.c": "",
810 "not-for-lib32.c": "",
811 "not-for-lib64.c": "",
Chris Parsonsc424b762021-04-29 18:06:50 -0400812 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200813 blueprint: soongCcLibraryStaticPreamble + `
Chris Parsonsc424b762021-04-29 18:06:50 -0400814cc_library_static {
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500815 name: "foo_static",
Chris Parsonsc424b762021-04-29 18:06:50 -0400816 srcs: ["common.c", "not-for-*.c"],
817 multilib: {
818 lib32: { srcs: ["for-lib32.c"], exclude_srcs: ["not-for-lib32.c"] },
819 lib64: { srcs: ["for-lib64.c"], exclude_srcs: ["not-for-lib64.c"] },
820 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400821 include_build_directory: false,
Chris Parsonsc424b762021-04-29 18:06:50 -0400822} `,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500823 expectedBazelTargets: []string{
824 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
825 "srcs_c": `["common.c"] + select({
Chris Parsonsc424b762021-04-29 18:06:50 -0400826 "//build/bazel/platforms/arch:arm": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400827 "not-for-lib64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400828 "for-lib32.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400829 ],
830 "//build/bazel/platforms/arch:arm64": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400831 "not-for-lib32.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400832 "for-lib64.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400833 ],
834 "//build/bazel/platforms/arch:x86": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400835 "not-for-lib64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400836 "for-lib32.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400837 ],
838 "//build/bazel/platforms/arch:x86_64": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400839 "not-for-lib32.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400840 "for-lib64.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400841 ],
842 "//conditions:default": [
843 "not-for-lib32.c",
844 "not-for-lib64.c",
845 ],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500846 })`,
847 }),
848 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200849 })
850}
851
852func TestCcLibrarySTaticArchMultilibSrcsExcludeSrcs(t *testing.T) {
853 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500854 description: "cc_library_static arch and multilib srcs and exclude_srcs",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200855 filesystem: map[string]string{
856 "common.c": "",
857 "for-arm.c": "",
858 "for-arm64.c": "",
859 "for-x86.c": "",
860 "for-x86_64.c": "",
861 "for-lib32.c": "",
862 "for-lib64.c": "",
863 "not-for-arm.c": "",
864 "not-for-arm64.c": "",
865 "not-for-x86.c": "",
866 "not-for-x86_64.c": "",
867 "not-for-lib32.c": "",
868 "not-for-lib64.c": "",
869 "not-for-everything.c": "",
Chris Parsonsc424b762021-04-29 18:06:50 -0400870 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200871 blueprint: soongCcLibraryStaticPreamble + `
Chris Parsonsc424b762021-04-29 18:06:50 -0400872cc_library_static {
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500873 name: "foo_static",
Chris Parsonsc424b762021-04-29 18:06:50 -0400874 srcs: ["common.c", "not-for-*.c"],
875 exclude_srcs: ["not-for-everything.c"],
876 arch: {
877 arm: { srcs: ["for-arm.c"], exclude_srcs: ["not-for-arm.c"] },
878 arm64: { srcs: ["for-arm64.c"], exclude_srcs: ["not-for-arm64.c"] },
879 x86: { srcs: ["for-x86.c"], exclude_srcs: ["not-for-x86.c"] },
880 x86_64: { srcs: ["for-x86_64.c"], exclude_srcs: ["not-for-x86_64.c"] },
881 },
882 multilib: {
883 lib32: { srcs: ["for-lib32.c"], exclude_srcs: ["not-for-lib32.c"] },
884 lib64: { srcs: ["for-lib64.c"], exclude_srcs: ["not-for-lib64.c"] },
885 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400886 include_build_directory: false,
Chris Parsonsc424b762021-04-29 18:06:50 -0400887}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500888 expectedBazelTargets: []string{
889 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
890 "srcs_c": `["common.c"] + select({
Chris Parsonsc424b762021-04-29 18:06:50 -0400891 "//build/bazel/platforms/arch:arm": [
Liz Kammer9bad9d62021-10-11 15:40:35 -0400892 "not-for-arm64.c",
893 "not-for-lib64.c",
894 "not-for-x86.c",
895 "not-for-x86_64.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400896 "for-arm.c",
897 "for-lib32.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400898 ],
899 "//build/bazel/platforms/arch:arm64": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400900 "not-for-arm.c",
901 "not-for-lib32.c",
902 "not-for-x86.c",
903 "not-for-x86_64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400904 "for-arm64.c",
905 "for-lib64.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400906 ],
907 "//build/bazel/platforms/arch:x86": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400908 "not-for-arm.c",
909 "not-for-arm64.c",
910 "not-for-lib64.c",
911 "not-for-x86_64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400912 "for-x86.c",
913 "for-lib32.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400914 ],
915 "//build/bazel/platforms/arch:x86_64": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400916 "not-for-arm.c",
917 "not-for-arm64.c",
918 "not-for-lib32.c",
919 "not-for-x86.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400920 "for-x86_64.c",
921 "for-lib64.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400922 ],
923 "//conditions:default": [
924 "not-for-arm.c",
925 "not-for-arm64.c",
926 "not-for-lib32.c",
927 "not-for-lib64.c",
928 "not-for-x86.c",
929 "not-for-x86_64.c",
930 ],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500931 })`,
932 }),
933 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200934 })
935}
936
Liz Kammerae3994e2021-10-19 09:45:48 -0400937func TestCcLibraryStaticGeneratedHeadersAllPartitions(t *testing.T) {
938 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammerae3994e2021-10-19 09:45:48 -0400939 blueprint: soongCcLibraryStaticPreamble + `
940genrule {
941 name: "generated_hdr",
942 cmd: "nothing to see here",
Liz Kammerbe46fcc2021-11-01 15:32:43 -0400943 bazel_module: { bp2build_available: false },
Liz Kammerae3994e2021-10-19 09:45:48 -0400944}
945
Liz Kammere6583482021-10-19 13:56:10 -0400946genrule {
947 name: "export_generated_hdr",
948 cmd: "nothing to see here",
Liz Kammerbe46fcc2021-11-01 15:32:43 -0400949 bazel_module: { bp2build_available: false },
Liz Kammere6583482021-10-19 13:56:10 -0400950}
951
Liz Kammerae3994e2021-10-19 09:45:48 -0400952cc_library_static {
953 name: "foo_static",
954 srcs: ["cpp_src.cpp", "as_src.S", "c_src.c"],
Liz Kammere6583482021-10-19 13:56:10 -0400955 generated_headers: ["generated_hdr", "export_generated_hdr"],
956 export_generated_headers: ["export_generated_hdr"],
Liz Kammerae3994e2021-10-19 09:45:48 -0400957 include_build_directory: false,
958}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500959 expectedBazelTargets: []string{
960 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
Liz Kammer1263d9b2021-12-10 14:28:20 -0500961 "export_includes": `["."]`,
962 "local_includes": `["."]`,
963 "hdrs": `[":export_generated_hdr"]`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500964 "srcs": `[
Liz Kammerae3994e2021-10-19 09:45:48 -0400965 "cpp_src.cpp",
966 ":generated_hdr",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500967 ]`,
968 "srcs_as": `[
Liz Kammerae3994e2021-10-19 09:45:48 -0400969 "as_src.S",
970 ":generated_hdr",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500971 ]`,
972 "srcs_c": `[
Liz Kammerae3994e2021-10-19 09:45:48 -0400973 "c_src.c",
974 ":generated_hdr",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500975 ]`,
976 }),
977 },
Liz Kammerae3994e2021-10-19 09:45:48 -0400978 })
979}
980
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200981func TestCcLibraryStaticArchSrcsExcludeSrcsGeneratedFiles(t *testing.T) {
982 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500983 description: "cc_library_static arch srcs/exclude_srcs with generated files",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200984 filesystem: map[string]string{
Chris Parsons990c4f42021-05-25 12:10:58 -0400985 "common.cpp": "",
986 "for-x86.cpp": "",
987 "not-for-x86.cpp": "",
988 "not-for-everything.cpp": "",
Liz Kammerbe46fcc2021-11-01 15:32:43 -0400989 "dep/Android.bp": simpleModuleDoNotConvertBp2build("genrule", "generated_src_other_pkg") +
990 simpleModuleDoNotConvertBp2build("genrule", "generated_hdr_other_pkg") +
991 simpleModuleDoNotConvertBp2build("genrule", "generated_src_other_pkg_x86") +
992 simpleModuleDoNotConvertBp2build("genrule", "generated_hdr_other_pkg_x86") +
993 simpleModuleDoNotConvertBp2build("genrule", "generated_hdr_other_pkg_android"),
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200994 },
Liz Kammerbe46fcc2021-11-01 15:32:43 -0400995 blueprint: soongCcLibraryStaticPreamble +
996 simpleModuleDoNotConvertBp2build("genrule", "generated_src") +
997 simpleModuleDoNotConvertBp2build("genrule", "generated_src_not_x86") +
998 simpleModuleDoNotConvertBp2build("genrule", "generated_src_android") +
999 simpleModuleDoNotConvertBp2build("genrule", "generated_hdr") + `
Chris Parsons484e50a2021-05-13 15:13:04 -04001000cc_library_static {
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001001 name: "foo_static",
Liz Kammer222bdcf2021-10-11 14:15:51 -04001002 srcs: ["common.cpp", "not-for-*.cpp"],
1003 exclude_srcs: ["not-for-everything.cpp"],
1004 generated_sources: ["generated_src", "generated_src_other_pkg", "generated_src_not_x86"],
1005 generated_headers: ["generated_hdr", "generated_hdr_other_pkg"],
Liz Kammer1263d9b2021-12-10 14:28:20 -05001006 export_generated_headers: ["generated_hdr_other_pkg"],
Liz Kammer222bdcf2021-10-11 14:15:51 -04001007 arch: {
1008 x86: {
1009 srcs: ["for-x86.cpp"],
1010 exclude_srcs: ["not-for-x86.cpp"],
1011 generated_headers: ["generated_hdr_other_pkg_x86"],
1012 exclude_generated_sources: ["generated_src_not_x86"],
Liz Kammer1263d9b2021-12-10 14:28:20 -05001013 export_generated_headers: ["generated_hdr_other_pkg_x86"],
Liz Kammer222bdcf2021-10-11 14:15:51 -04001014 },
1015 },
1016 target: {
1017 android: {
1018 generated_sources: ["generated_src_android"],
1019 generated_headers: ["generated_hdr_other_pkg_android"],
Liz Kammer1263d9b2021-12-10 14:28:20 -05001020 export_generated_headers: ["generated_hdr_other_pkg_android"],
Liz Kammer222bdcf2021-10-11 14:15:51 -04001021 },
1022 },
1023
Liz Kammer8337ea42021-09-10 10:06:32 -04001024 include_build_directory: false,
Chris Parsons484e50a2021-05-13 15:13:04 -04001025}
1026`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001027 expectedBazelTargets: []string{
1028 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
1029 "srcs": `[
Chris Parsons990c4f42021-05-25 12:10:58 -04001030 "common.cpp",
Liz Kammer9bad9d62021-10-11 15:40:35 -04001031 ":generated_src",
1032 "//dep:generated_src_other_pkg",
Liz Kammerae3994e2021-10-19 09:45:48 -04001033 ":generated_hdr",
Chris Parsons484e50a2021-05-13 15:13:04 -04001034 ] + select({
Liz Kammer1263d9b2021-12-10 14:28:20 -05001035 "//build/bazel/platforms/arch:x86": ["for-x86.cpp"],
Liz Kammer222bdcf2021-10-11 14:15:51 -04001036 "//conditions:default": [
Liz Kammer222bdcf2021-10-11 14:15:51 -04001037 "not-for-x86.cpp",
Liz Kammer9bad9d62021-10-11 15:40:35 -04001038 ":generated_src_not_x86",
Liz Kammer222bdcf2021-10-11 14:15:51 -04001039 ],
1040 }) + select({
Liz Kammer1263d9b2021-12-10 14:28:20 -05001041 "//build/bazel/platforms/os:android": [":generated_src_android"],
Liz Kammer222bdcf2021-10-11 14:15:51 -04001042 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001043 })`,
Liz Kammer1263d9b2021-12-10 14:28:20 -05001044 "hdrs": `["//dep:generated_hdr_other_pkg"] + select({
1045 "//build/bazel/platforms/arch:x86": ["//dep:generated_hdr_other_pkg_x86"],
1046 "//conditions:default": [],
1047 }) + select({
1048 "//build/bazel/platforms/os:android": ["//dep:generated_hdr_other_pkg_android"],
1049 "//conditions:default": [],
1050 })`,
1051 "local_includes": `["."]`,
1052 "export_absolute_includes": `["dep"]`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001053 }),
1054 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +02001055 })
Rupert Shuttleworth095081c2021-03-25 09:06:03 +00001056}
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001057
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001058func TestCcLibraryStaticGetTargetProperties(t *testing.T) {
1059 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1060
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001061 description: "cc_library_static complex GetTargetProperties",
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001062 blueprint: soongCcLibraryStaticPreamble + `
1063cc_library_static {
1064 name: "foo_static",
1065 target: {
1066 android: {
1067 srcs: ["android_src.c"],
1068 },
1069 android_arm: {
1070 srcs: ["android_arm_src.c"],
1071 },
1072 android_arm64: {
1073 srcs: ["android_arm64_src.c"],
1074 },
1075 android_x86: {
1076 srcs: ["android_x86_src.c"],
1077 },
1078 android_x86_64: {
1079 srcs: ["android_x86_64_src.c"],
1080 },
1081 linux_bionic_arm64: {
1082 srcs: ["linux_bionic_arm64_src.c"],
1083 },
1084 linux_bionic_x86_64: {
1085 srcs: ["linux_bionic_x86_64_src.c"],
1086 },
1087 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001088 include_build_directory: false,
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001089}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001090 expectedBazelTargets: []string{
1091 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
1092 "srcs_c": `select({
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001093 "//build/bazel/platforms/os:android": ["android_src.c"],
1094 "//conditions:default": [],
1095 }) + select({
Rupert Shuttleworthffd45822021-05-14 03:02:34 -04001096 "//build/bazel/platforms/os_arch:android_arm": ["android_arm_src.c"],
1097 "//build/bazel/platforms/os_arch:android_arm64": ["android_arm64_src.c"],
1098 "//build/bazel/platforms/os_arch:android_x86": ["android_x86_src.c"],
1099 "//build/bazel/platforms/os_arch:android_x86_64": ["android_x86_64_src.c"],
Rupert Shuttleworthffd45822021-05-14 03:02:34 -04001100 "//build/bazel/platforms/os_arch:linux_bionic_arm64": ["linux_bionic_arm64_src.c"],
1101 "//build/bazel/platforms/os_arch:linux_bionic_x86_64": ["linux_bionic_x86_64_src.c"],
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001102 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001103 })`,
1104 }),
1105 },
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001106 })
1107}
1108
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001109func TestCcLibraryStaticProductVariableSelects(t *testing.T) {
1110 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001111 description: "cc_library_static product variable selects",
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001112 blueprint: soongCcLibraryStaticPreamble + `
1113cc_library_static {
1114 name: "foo_static",
1115 srcs: ["common.c"],
1116 product_variables: {
1117 malloc_not_svelte: {
1118 cflags: ["-Wmalloc_not_svelte"],
1119 },
1120 malloc_zero_contents: {
1121 cflags: ["-Wmalloc_zero_contents"],
1122 },
1123 binder32bit: {
1124 cflags: ["-Wbinder32bit"],
1125 },
1126 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001127 include_build_directory: false,
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001128} `,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001129 expectedBazelTargets: []string{
1130 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
1131 "copts": `select({
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001132 "//build/bazel/product_variables:binder32bit": ["-Wbinder32bit"],
1133 "//conditions:default": [],
1134 }) + select({
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001135 "//build/bazel/product_variables:malloc_not_svelte": ["-Wmalloc_not_svelte"],
1136 "//conditions:default": [],
1137 }) + select({
1138 "//build/bazel/product_variables:malloc_zero_contents": ["-Wmalloc_zero_contents"],
1139 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001140 })`,
1141 "srcs_c": `["common.c"]`,
1142 }),
1143 },
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001144 })
1145}
1146
1147func TestCcLibraryStaticProductVariableArchSpecificSelects(t *testing.T) {
1148 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001149 description: "cc_library_static arch-specific product variable selects",
1150 filesystem: map[string]string{},
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001151 blueprint: soongCcLibraryStaticPreamble + `
1152cc_library_static {
1153 name: "foo_static",
1154 srcs: ["common.c"],
1155 product_variables: {
1156 malloc_not_svelte: {
1157 cflags: ["-Wmalloc_not_svelte"],
1158 },
1159 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001160 arch: {
1161 arm64: {
1162 product_variables: {
1163 malloc_not_svelte: {
1164 cflags: ["-Warm64_malloc_not_svelte"],
1165 },
1166 },
1167 },
1168 },
1169 multilib: {
1170 lib32: {
1171 product_variables: {
1172 malloc_not_svelte: {
1173 cflags: ["-Wlib32_malloc_not_svelte"],
1174 },
1175 },
1176 },
1177 },
1178 target: {
1179 android: {
1180 product_variables: {
1181 malloc_not_svelte: {
1182 cflags: ["-Wandroid_malloc_not_svelte"],
1183 },
1184 },
1185 }
1186 },
1187 include_build_directory: false,
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001188} `,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001189 expectedBazelTargets: []string{
1190 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
1191 "copts": `select({
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001192 "//build/bazel/product_variables:malloc_not_svelte": ["-Wmalloc_not_svelte"],
1193 "//conditions:default": [],
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001194 }) + select({
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001195 "//build/bazel/product_variables:malloc_not_svelte-android": ["-Wandroid_malloc_not_svelte"],
1196 "//conditions:default": [],
1197 }) + select({
1198 "//build/bazel/product_variables:malloc_not_svelte-arm": ["-Wlib32_malloc_not_svelte"],
1199 "//conditions:default": [],
1200 }) + select({
1201 "//build/bazel/product_variables:malloc_not_svelte-arm64": ["-Warm64_malloc_not_svelte"],
1202 "//conditions:default": [],
1203 }) + select({
1204 "//build/bazel/product_variables:malloc_not_svelte-x86": ["-Wlib32_malloc_not_svelte"],
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001205 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001206 })`,
1207 "srcs_c": `["common.c"]`,
1208 }),
1209 },
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001210 })
1211}
Liz Kammerba7a9c52021-05-26 08:45:30 -04001212
1213func TestCcLibraryStaticProductVariableStringReplacement(t *testing.T) {
1214 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001215 description: "cc_library_static product variable string replacement",
1216 filesystem: map[string]string{},
Liz Kammerba7a9c52021-05-26 08:45:30 -04001217 blueprint: soongCcLibraryStaticPreamble + `
1218cc_library_static {
1219 name: "foo_static",
Chris Parsons69fa9f92021-07-13 11:47:44 -04001220 srcs: ["common.S"],
Liz Kammerba7a9c52021-05-26 08:45:30 -04001221 product_variables: {
1222 platform_sdk_version: {
1223 asflags: ["-DPLATFORM_SDK_VERSION=%d"],
1224 },
1225 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001226 include_build_directory: false,
Liz Kammerba7a9c52021-05-26 08:45:30 -04001227} `,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001228 expectedBazelTargets: []string{
1229 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
1230 "asflags": `select({
Liz Kammerba7a9c52021-05-26 08:45:30 -04001231 "//build/bazel/product_variables:platform_sdk_version": ["-DPLATFORM_SDK_VERSION=$(Platform_sdk_version)"],
1232 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001233 })`,
1234 "srcs_as": `["common.S"]`,
1235 }),
1236 },
Liz Kammerba7a9c52021-05-26 08:45:30 -04001237 })
1238}
Chris Parsons51f8c392021-08-03 21:01:05 -04001239
1240func TestStaticLibrary_SystemSharedLibsRootEmpty(t *testing.T) {
1241 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001242 description: "cc_library_static system_shared_lib empty root",
Chris Parsons51f8c392021-08-03 21:01:05 -04001243 blueprint: soongCcLibraryStaticPreamble + `
1244cc_library_static {
1245 name: "root_empty",
Liz Kammer8337ea42021-09-10 10:06:32 -04001246 system_shared_libs: [],
1247 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001248}
1249`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001250 expectedBazelTargets: []string{
1251 makeBazelTarget("cc_library_static", "root_empty", attrNameToString{
1252 "system_dynamic_deps": `[]`,
1253 }),
1254 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001255 })
1256}
1257
1258func TestStaticLibrary_SystemSharedLibsStaticEmpty(t *testing.T) {
1259 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001260 description: "cc_library_static system_shared_lib empty static default",
Chris Parsons51f8c392021-08-03 21:01:05 -04001261 blueprint: soongCcLibraryStaticPreamble + `
1262cc_defaults {
1263 name: "static_empty_defaults",
1264 static: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001265 system_shared_libs: [],
1266 },
1267 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001268}
1269cc_library_static {
1270 name: "static_empty",
Liz Kammer8337ea42021-09-10 10:06:32 -04001271 defaults: ["static_empty_defaults"],
Chris Parsons51f8c392021-08-03 21:01:05 -04001272}
1273`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001274 expectedBazelTargets: []string{
1275 makeBazelTarget("cc_library_static", "static_empty", attrNameToString{
1276 "system_dynamic_deps": `[]`,
1277 }),
1278 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001279 })
1280}
1281
1282func TestStaticLibrary_SystemSharedLibsBionicEmpty(t *testing.T) {
1283 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001284 description: "cc_library_static system_shared_lib empty for bionic variant",
Chris Parsons51f8c392021-08-03 21:01:05 -04001285 blueprint: soongCcLibraryStaticPreamble + `
1286cc_library_static {
1287 name: "target_bionic_empty",
1288 target: {
1289 bionic: {
1290 system_shared_libs: [],
1291 },
1292 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001293 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001294}
1295`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001296 expectedBazelTargets: []string{
1297 makeBazelTarget("cc_library_static", "target_bionic_empty", attrNameToString{
1298 "system_dynamic_deps": `[]`,
1299 }),
1300 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001301 })
1302}
1303
1304func TestStaticLibrary_SystemSharedLibsLinuxBionicEmpty(t *testing.T) {
1305 // Note that this behavior is technically incorrect (it's a simplification).
1306 // The correct behavior would be if bp2build wrote `system_dynamic_deps = []`
1307 // only for linux_bionic, but `android` had `["libc", "libdl", "libm"].
1308 // b/195791252 tracks the fix.
1309 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001310 description: "cc_library_static system_shared_lib empty for linux_bionic variant",
Chris Parsons51f8c392021-08-03 21:01:05 -04001311 blueprint: soongCcLibraryStaticPreamble + `
1312cc_library_static {
1313 name: "target_linux_bionic_empty",
1314 target: {
1315 linux_bionic: {
1316 system_shared_libs: [],
1317 },
1318 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001319 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001320}
1321`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001322 expectedBazelTargets: []string{
1323 makeBazelTarget("cc_library_static", "target_linux_bionic_empty", attrNameToString{
1324 "system_dynamic_deps": `[]`,
1325 }),
1326 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001327 })
1328}
1329
1330func TestStaticLibrary_SystemSharedLibsBionic(t *testing.T) {
1331 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001332 description: "cc_library_static system_shared_libs set for bionic variant",
Liz Kammerbe46fcc2021-11-01 15:32:43 -04001333 blueprint: soongCcLibraryStaticPreamble +
1334 simpleModuleDoNotConvertBp2build("cc_library", "libc") + `
Chris Parsons51f8c392021-08-03 21:01:05 -04001335cc_library_static {
1336 name: "target_bionic",
1337 target: {
1338 bionic: {
1339 system_shared_libs: ["libc"],
1340 },
1341 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001342 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001343}
1344`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001345 expectedBazelTargets: []string{
1346 makeBazelTarget("cc_library_static", "target_bionic", attrNameToString{
1347 "system_dynamic_deps": `select({
Chris Parsons2dde0cb2021-10-01 14:45:30 -04001348 "//build/bazel/platforms/os:android": [":libc"],
1349 "//build/bazel/platforms/os:linux_bionic": [":libc"],
Chris Parsons51f8c392021-08-03 21:01:05 -04001350 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001351 })`,
1352 }),
1353 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001354 })
1355}
1356
1357func TestStaticLibrary_SystemSharedLibsLinuxRootAndLinuxBionic(t *testing.T) {
1358 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001359 description: "cc_library_static system_shared_libs set for root and linux_bionic variant",
Liz Kammerbe46fcc2021-11-01 15:32:43 -04001360 blueprint: soongCcLibraryStaticPreamble +
1361 simpleModuleDoNotConvertBp2build("cc_library", "libc") +
1362 simpleModuleDoNotConvertBp2build("cc_library", "libm") + `
Chris Parsons51f8c392021-08-03 21:01:05 -04001363cc_library_static {
1364 name: "target_linux_bionic",
Liz Kammer8337ea42021-09-10 10:06:32 -04001365 system_shared_libs: ["libc"],
Chris Parsons51f8c392021-08-03 21:01:05 -04001366 target: {
1367 linux_bionic: {
1368 system_shared_libs: ["libm"],
1369 },
1370 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001371 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001372}
1373`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001374 expectedBazelTargets: []string{
1375 makeBazelTarget("cc_library_static", "target_linux_bionic", attrNameToString{
1376 "system_dynamic_deps": `[":libc"] + select({
Chris Parsons51f8c392021-08-03 21:01:05 -04001377 "//build/bazel/platforms/os:linux_bionic": [":libm"],
1378 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001379 })`,
1380 }),
1381 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001382 })
1383}
Liz Kammer12615db2021-09-28 09:19:17 -04001384
Liz Kammer54309532021-12-14 12:21:22 -05001385func TestCcLibrarystatic_SystemSharedLibUsedAsDep(t *testing.T) {
1386 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1387 description: "cc_library_static system_shared_lib empty for linux_bionic variant",
1388 blueprint: soongCcLibraryStaticPreamble +
1389 simpleModuleDoNotConvertBp2build("cc_library", "libc") + `
1390cc_library_static {
1391 name: "used_in_bionic_oses",
1392 target: {
1393 android: {
1394 shared_libs: ["libc"],
1395 },
1396 linux_bionic: {
1397 shared_libs: ["libc"],
1398 },
1399 },
1400 include_build_directory: false,
1401}
1402
1403cc_library_static {
1404 name: "all",
1405 shared_libs: ["libc"],
1406 include_build_directory: false,
1407}
1408
1409cc_library_static {
1410 name: "keep_for_empty_system_shared_libs",
1411 shared_libs: ["libc"],
1412 system_shared_libs: [],
1413 include_build_directory: false,
1414}
1415`,
1416 expectedBazelTargets: []string{
1417 makeBazelTarget("cc_library_static", "all", attrNameToString{
1418 "implementation_dynamic_deps": `select({
1419 "//build/bazel/platforms/os:android": [],
1420 "//build/bazel/platforms/os:linux_bionic": [],
1421 "//conditions:default": [":libc"],
1422 })`,
1423 }),
1424 makeBazelTarget("cc_library_static", "keep_for_empty_system_shared_libs", attrNameToString{
1425 "implementation_dynamic_deps": `[":libc"]`,
1426 "system_dynamic_deps": `[]`,
1427 }),
1428 makeBazelTarget("cc_library_static", "used_in_bionic_oses", attrNameToString{}),
1429 },
1430 })
1431}
1432
Liz Kammer12615db2021-09-28 09:19:17 -04001433func TestCcLibraryStaticProto(t *testing.T) {
1434 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1435 blueprint: soongCcProtoPreamble + `cc_library_static {
1436 name: "foo",
1437 srcs: ["foo.proto"],
1438 proto: {
Liz Kammer12615db2021-09-28 09:19:17 -04001439 export_proto_headers: true,
1440 },
1441 include_build_directory: false,
1442}`,
1443 expectedBazelTargets: []string{
1444 makeBazelTarget("proto_library", "foo_proto", attrNameToString{
1445 "srcs": `["foo.proto"]`,
1446 }), makeBazelTarget("cc_lite_proto_library", "foo_cc_proto_lite", attrNameToString{
1447 "deps": `[":foo_proto"]`,
1448 }), makeBazelTarget("cc_library_static", "foo", attrNameToString{
1449 "deps": `[":libprotobuf-cpp-lite"]`,
1450 "whole_archive_deps": `[":foo_cc_proto_lite"]`,
1451 }),
1452 },
1453 })
1454}
Rupert Shuttleworth484aa252021-12-10 07:22:53 -05001455
1456func TestCcLibraryStaticUseVersionLib(t *testing.T) {
1457 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1458 blueprint: soongCcProtoPreamble + `cc_library_static {
1459 name: "foo",
1460 use_version_lib: true,
1461 include_build_directory: false,
1462}`,
1463 expectedBazelTargets: []string{
1464 makeBazelTarget("cc_library_static", "foo", attrNameToString{
1465 "use_version_lib": "True",
1466 }),
1467 },
1468 })
1469}
Liz Kammercac7f692021-12-16 14:19:32 -05001470
1471func TestCcLibraryStaticStdInFlags(t *testing.T) {
1472 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1473 blueprint: soongCcProtoPreamble + `cc_library_static {
1474 name: "foo",
1475 cflags: ["-std=candcpp"],
1476 conlyflags: ["-std=conly"],
1477 cppflags: ["-std=cpp"],
1478 include_build_directory: false,
1479}`,
1480 expectedBazelTargets: []string{
1481 makeBazelTarget("cc_library_static", "foo", attrNameToString{
1482 "conlyflags": `["-std=conly"]`,
1483 "cppflags": `["-std=cpp"]`,
1484 }),
1485 },
1486 })
1487}