blob: ef2ec32f3828b45fd18a95fed9f48be79c18cf8f [file] [log] [blame]
Rupert Shuttleworth095081c2021-03-25 09:06:03 +00001// Copyright 2021 Google Inc. All rights reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package bp2build
16
17import (
18 "android/soong/android"
19 "android/soong/cc"
Chris Parsons484e50a2021-05-13 15:13:04 -040020 "android/soong/genrule"
21
Rupert Shuttleworth095081c2021-03-25 09:06:03 +000022 "testing"
23)
24
25const (
26 // See cc/testing.go for more context
27 soongCcLibraryStaticPreamble = `
28cc_defaults {
Liz Kammer8337ea42021-09-10 10:06:32 -040029 name: "linux_bionic_supported",
Rupert Shuttleworth095081c2021-03-25 09:06:03 +000030}
31
32toolchain_library {
Liz Kammer8337ea42021-09-10 10:06:32 -040033 name: "libclang_rt.builtins-x86_64-android",
34 defaults: ["linux_bionic_supported"],
35 vendor_available: true,
36 vendor_ramdisk_available: true,
37 product_available: true,
38 recovery_available: true,
39 native_bridge_supported: true,
40 src: "",
Rupert Shuttleworth095081c2021-03-25 09:06:03 +000041}`
42)
43
44func TestCcLibraryStaticLoadStatement(t *testing.T) {
45 testCases := []struct {
46 bazelTargets BazelTargets
47 expectedLoadStatements string
48 }{
49 {
50 bazelTargets: BazelTargets{
51 BazelTarget{
52 name: "cc_library_static_target",
53 ruleClass: "cc_library_static",
54 // NOTE: No bzlLoadLocation for native rules
55 },
56 },
57 expectedLoadStatements: ``,
58 },
59 }
60
61 for _, testCase := range testCases {
62 actual := testCase.bazelTargets.LoadStatements()
63 expected := testCase.expectedLoadStatements
64 if actual != expected {
65 t.Fatalf("Expected load statements to be %s, got %s", expected, actual)
66 }
67 }
68
69}
70
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020071func registerCcLibraryStaticModuleTypes(ctx android.RegistrationContext) {
72 cc.RegisterCCBuildComponents(ctx)
73 ctx.RegisterModuleType("toolchain_library", cc.ToolchainLibraryFactory)
74 ctx.RegisterModuleType("cc_library_headers", cc.LibraryHeaderFactory)
75 ctx.RegisterModuleType("genrule", genrule.GenRuleFactory)
Chris Parsons51f8c392021-08-03 21:01:05 -040076 // Required for system_shared_libs dependencies.
77 ctx.RegisterModuleType("cc_library", cc.LibraryFactory)
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020078}
79
80func runCcLibraryStaticTestCase(t *testing.T, tc bp2buildTestCase) {
Liz Kammere4982e82021-05-25 10:39:35 -040081 t.Helper()
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020082 runBp2BuildTestCase(t, registerCcLibraryStaticModuleTypes, tc)
83}
84
85func TestCcLibraryStaticSimple(t *testing.T) {
86 runCcLibraryStaticTestCase(t, bp2buildTestCase{
87 description: "cc_library_static test",
88 moduleTypeUnderTest: "cc_library_static",
89 moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
90 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
91 filesystem: map[string]string{
92 // NOTE: include_dir headers *should not* appear in Bazel hdrs later (?)
93 "include_dir_1/include_dir_1_a.h": "",
94 "include_dir_1/include_dir_1_b.h": "",
95 "include_dir_2/include_dir_2_a.h": "",
96 "include_dir_2/include_dir_2_b.h": "",
97 // NOTE: local_include_dir headers *should not* appear in Bazel hdrs later (?)
98 "local_include_dir_1/local_include_dir_1_a.h": "",
99 "local_include_dir_1/local_include_dir_1_b.h": "",
100 "local_include_dir_2/local_include_dir_2_a.h": "",
101 "local_include_dir_2/local_include_dir_2_b.h": "",
102 // NOTE: export_include_dir headers *should* appear in Bazel hdrs later
103 "export_include_dir_1/export_include_dir_1_a.h": "",
104 "export_include_dir_1/export_include_dir_1_b.h": "",
105 "export_include_dir_2/export_include_dir_2_a.h": "",
106 "export_include_dir_2/export_include_dir_2_b.h": "",
107 // NOTE: Soong implicitly includes headers in the current directory
108 "implicit_include_1.h": "",
109 "implicit_include_2.h": "",
110 },
111 blueprint: soongCcLibraryStaticPreamble + `
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000112cc_library_headers {
113 name: "header_lib_1",
114 export_include_dirs: ["header_lib_1"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400115 bazel_module: { bp2build_available: false },
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000116}
117
118cc_library_headers {
119 name: "header_lib_2",
120 export_include_dirs: ["header_lib_2"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400121 bazel_module: { bp2build_available: false },
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000122}
123
124cc_library_static {
125 name: "static_lib_1",
126 srcs: ["static_lib_1.cc"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400127 bazel_module: { bp2build_available: false },
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000128}
129
130cc_library_static {
131 name: "static_lib_2",
132 srcs: ["static_lib_2.cc"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400133 bazel_module: { bp2build_available: false },
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000134}
135
136cc_library_static {
137 name: "whole_static_lib_1",
138 srcs: ["whole_static_lib_1.cc"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400139 bazel_module: { bp2build_available: false },
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000140}
141
142cc_library_static {
143 name: "whole_static_lib_2",
144 srcs: ["whole_static_lib_2.cc"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400145 bazel_module: { bp2build_available: false },
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000146}
147
148cc_library_static {
149 name: "foo_static",
150 srcs: [
151 "foo_static1.cc",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000152 "foo_static2.cc",
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000153 ],
154 cflags: [
155 "-Dflag1",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000156 "-Dflag2"
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000157 ],
158 static_libs: [
159 "static_lib_1",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000160 "static_lib_2"
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000161 ],
162 whole_static_libs: [
163 "whole_static_lib_1",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000164 "whole_static_lib_2"
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000165 ],
166 include_dirs: [
Jingwen Chened9c17d2021-04-13 07:14:55 +0000167 "include_dir_1",
168 "include_dir_2",
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000169 ],
170 local_include_dirs: [
171 "local_include_dir_1",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000172 "local_include_dir_2",
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000173 ],
174 export_include_dirs: [
Chris Parsonsd6358772021-05-18 18:35:24 -0400175 "export_include_dir_1",
176 "export_include_dir_2"
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000177 ],
178 header_libs: [
179 "header_lib_1",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000180 "header_lib_2"
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000181 ],
182
183 // TODO: Also support export_header_lib_headers
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000184}`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200185 expectedBazelTargets: []string{`cc_library_static(
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000186 name = "foo_static",
Liz Kammer35687bc2021-09-10 10:07:07 -0400187 absolute_includes = [
188 "include_dir_1",
189 "include_dir_2",
190 ],
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000191 copts = [
192 "-Dflag1",
193 "-Dflag2",
194 ],
Liz Kammer5fad5012021-09-09 14:08:21 -0400195 export_includes = [
196 "export_include_dir_1",
197 "export_include_dir_2",
198 ],
Chris Parsonsd6358772021-05-18 18:35:24 -0400199 implementation_deps = [
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000200 ":header_lib_1",
201 ":header_lib_2",
202 ":static_lib_1",
203 ":static_lib_2",
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000204 ],
Liz Kammer35687bc2021-09-10 10:07:07 -0400205 local_includes = [
206 "local_include_dir_1",
207 "local_include_dir_2",
208 ".",
209 ],
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000210 srcs = [
211 "foo_static1.cc",
212 "foo_static2.cc",
213 ],
Chris Parsons08648312021-05-06 16:23:19 -0400214 whole_archive_deps = [
215 ":whole_static_lib_1",
216 ":whole_static_lib_2",
217 ],
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000218)`},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200219 })
220}
221
222func TestCcLibraryStaticSubpackage(t *testing.T) {
223 runCcLibraryStaticTestCase(t, bp2buildTestCase{
224 description: "cc_library_static subpackage test",
225 moduleTypeUnderTest: "cc_library_static",
226 moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
227 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
228 filesystem: map[string]string{
229 // subpackage with subdirectory
230 "subpackage/Android.bp": "",
231 "subpackage/subpackage_header.h": "",
232 "subpackage/subdirectory/subdirectory_header.h": "",
233 // subsubpackage with subdirectory
234 "subpackage/subsubpackage/Android.bp": "",
235 "subpackage/subsubpackage/subsubpackage_header.h": "",
236 "subpackage/subsubpackage/subdirectory/subdirectory_header.h": "",
237 // subsubsubpackage with subdirectory
238 "subpackage/subsubpackage/subsubsubpackage/Android.bp": "",
239 "subpackage/subsubpackage/subsubsubpackage/subsubsubpackage_header.h": "",
240 "subpackage/subsubpackage/subsubsubpackage/subdirectory/subdirectory_header.h": "",
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000241 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200242 blueprint: soongCcLibraryStaticPreamble + `
Rupert Shuttleworthc143cc52021-04-13 13:08:04 -0400243cc_library_static {
244 name: "foo_static",
Liz Kammer35687bc2021-09-10 10:07:07 -0400245 srcs: [],
Rupert Shuttleworthc143cc52021-04-13 13:08:04 -0400246 include_dirs: [
Liz Kammer35687bc2021-09-10 10:07:07 -0400247 "subpackage",
Rupert Shuttleworthc143cc52021-04-13 13:08:04 -0400248 ],
Rupert Shuttleworthc143cc52021-04-13 13:08:04 -0400249}`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200250 expectedBazelTargets: []string{`cc_library_static(
Rupert Shuttleworthc143cc52021-04-13 13:08:04 -0400251 name = "foo_static",
Liz Kammer35687bc2021-09-10 10:07:07 -0400252 absolute_includes = ["subpackage"],
Liz Kammer35687bc2021-09-10 10:07:07 -0400253 local_includes = ["."],
Rupert Shuttleworthc143cc52021-04-13 13:08:04 -0400254)`},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200255 })
256}
257
258func TestCcLibraryStaticExportIncludeDir(t *testing.T) {
259 runCcLibraryStaticTestCase(t, bp2buildTestCase{
260 description: "cc_library_static export include dir",
261 moduleTypeUnderTest: "cc_library_static",
262 moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
263 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
264 filesystem: map[string]string{
265 // subpackage with subdirectory
266 "subpackage/Android.bp": "",
267 "subpackage/subpackage_header.h": "",
268 "subpackage/subdirectory/subdirectory_header.h": "",
Rupert Shuttleworthc143cc52021-04-13 13:08:04 -0400269 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200270 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chened9c17d2021-04-13 07:14:55 +0000271cc_library_static {
272 name: "foo_static",
273 export_include_dirs: ["subpackage"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400274 include_build_directory: false,
Jingwen Chened9c17d2021-04-13 07:14:55 +0000275}`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200276 expectedBazelTargets: []string{`cc_library_static(
Jingwen Chened9c17d2021-04-13 07:14:55 +0000277 name = "foo_static",
Liz Kammer5fad5012021-09-09 14:08:21 -0400278 export_includes = ["subpackage"],
Jingwen Chened9c17d2021-04-13 07:14:55 +0000279)`},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200280 })
281}
282
283func TestCcLibraryStaticExportSystemIncludeDir(t *testing.T) {
284 runCcLibraryStaticTestCase(t, bp2buildTestCase{
285 description: "cc_library_static export system include dir",
286 moduleTypeUnderTest: "cc_library_static",
287 moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
288 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
289 filesystem: map[string]string{
290 // subpackage with subdirectory
291 "subpackage/Android.bp": "",
292 "subpackage/subpackage_header.h": "",
293 "subpackage/subdirectory/subdirectory_header.h": "",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000294 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200295 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chened9c17d2021-04-13 07:14:55 +0000296cc_library_static {
297 name: "foo_static",
298 export_system_include_dirs: ["subpackage"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400299 include_build_directory: false,
Jingwen Chened9c17d2021-04-13 07:14:55 +0000300}`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200301 expectedBazelTargets: []string{`cc_library_static(
Jingwen Chened9c17d2021-04-13 07:14:55 +0000302 name = "foo_static",
Liz Kammer5fad5012021-09-09 14:08:21 -0400303 export_system_includes = ["subpackage"],
Jingwen Chened9c17d2021-04-13 07:14:55 +0000304)`},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200305 })
306}
307
308func TestCcLibraryStaticManyIncludeDirs(t *testing.T) {
309 runCcLibraryStaticTestCase(t, bp2buildTestCase{
310 description: "cc_library_static include_dirs, local_include_dirs, export_include_dirs (b/183742505)",
311 moduleTypeUnderTest: "cc_library_static",
312 moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
313 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
314 dir: "subpackage",
315 filesystem: map[string]string{
316 // subpackage with subdirectory
317 "subpackage/Android.bp": `
Jingwen Chened9c17d2021-04-13 07:14:55 +0000318cc_library_static {
319 name: "foo_static",
320 // include_dirs are workspace/root relative
321 include_dirs: [
322 "subpackage/subsubpackage",
323 "subpackage2",
324 "subpackage3/subsubpackage"
325 ],
326 local_include_dirs: ["subsubpackage2"], // module dir relative
327 export_include_dirs: ["./exported_subsubpackage"], // module dir relative
328 include_build_directory: true,
329 bazel_module: { bp2build_available: true },
330}`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200331 "subpackage/subsubpackage/header.h": "",
332 "subpackage/subsubpackage2/header.h": "",
333 "subpackage/exported_subsubpackage/header.h": "",
334 "subpackage2/header.h": "",
335 "subpackage3/subsubpackage/header.h": "",
336 },
337 blueprint: soongCcLibraryStaticPreamble,
338 expectedBazelTargets: []string{`cc_library_static(
Jingwen Chened9c17d2021-04-13 07:14:55 +0000339 name = "foo_static",
Liz Kammer35687bc2021-09-10 10:07:07 -0400340 absolute_includes = [
341 "subpackage/subsubpackage",
342 "subpackage2",
343 "subpackage3/subsubpackage",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000344 ],
Liz Kammer5fad5012021-09-09 14:08:21 -0400345 export_includes = ["./exported_subsubpackage"],
Liz Kammer35687bc2021-09-10 10:07:07 -0400346 local_includes = [
347 "subsubpackage2",
348 ".",
349 ],
Jingwen Chened9c17d2021-04-13 07:14:55 +0000350)`},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200351 })
352}
353
354func TestCcLibraryStaticIncludeBuildDirectoryDisabled(t *testing.T) {
355 runCcLibraryStaticTestCase(t, bp2buildTestCase{
356 description: "cc_library_static include_build_directory disabled",
357 moduleTypeUnderTest: "cc_library_static",
358 moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
359 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
360 filesystem: map[string]string{
361 // subpackage with subdirectory
362 "subpackage/Android.bp": "",
363 "subpackage/subpackage_header.h": "",
364 "subpackage/subdirectory/subdirectory_header.h": "",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000365 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200366 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chened9c17d2021-04-13 07:14:55 +0000367cc_library_static {
368 name: "foo_static",
369 include_dirs: ["subpackage"], // still used, but local_include_dirs is recommended
370 local_include_dirs: ["subpackage2"],
371 include_build_directory: false,
372}`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200373 expectedBazelTargets: []string{`cc_library_static(
Jingwen Chened9c17d2021-04-13 07:14:55 +0000374 name = "foo_static",
Liz Kammer35687bc2021-09-10 10:07:07 -0400375 absolute_includes = ["subpackage"],
Liz Kammer35687bc2021-09-10 10:07:07 -0400376 local_includes = ["subpackage2"],
Jingwen Chened9c17d2021-04-13 07:14:55 +0000377)`},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200378 })
379}
380
381func TestCcLibraryStaticIncludeBuildDirectoryEnabled(t *testing.T) {
382 runCcLibraryStaticTestCase(t, bp2buildTestCase{
383 description: "cc_library_static include_build_directory enabled",
384 moduleTypeUnderTest: "cc_library_static",
385 moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
386 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
387 filesystem: map[string]string{
388 // subpackage with subdirectory
389 "subpackage/Android.bp": "",
390 "subpackage/subpackage_header.h": "",
391 "subpackage2/Android.bp": "",
392 "subpackage2/subpackage2_header.h": "",
393 "subpackage/subdirectory/subdirectory_header.h": "",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000394 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200395 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chened9c17d2021-04-13 07:14:55 +0000396cc_library_static {
397 name: "foo_static",
398 include_dirs: ["subpackage"], // still used, but local_include_dirs is recommended
399 local_include_dirs: ["subpackage2"],
400 include_build_directory: true,
401}`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200402 expectedBazelTargets: []string{`cc_library_static(
Jingwen Chened9c17d2021-04-13 07:14:55 +0000403 name = "foo_static",
Liz Kammer35687bc2021-09-10 10:07:07 -0400404 absolute_includes = ["subpackage"],
Liz Kammer35687bc2021-09-10 10:07:07 -0400405 local_includes = [
406 "subpackage2",
407 ".",
408 ],
Jingwen Chened9c17d2021-04-13 07:14:55 +0000409)`},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200410 })
411}
412
413func TestCcLibraryStaticArchSpecificStaticLib(t *testing.T) {
414 runCcLibraryStaticTestCase(t, bp2buildTestCase{
415 description: "cc_library_static arch-specific static_libs",
416 moduleTypeUnderTest: "cc_library_static",
417 moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
418 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200419 filesystem: map[string]string{},
420 blueprint: soongCcLibraryStaticPreamble + `
Liz Kammer8337ea42021-09-10 10:06:32 -0400421cc_library_static {
422 name: "static_dep",
423 bazel_module: { bp2build_available: false },
424}
425cc_library_static {
426 name: "static_dep2",
427 bazel_module: { bp2build_available: false },
428}
Jingwen Chened9c17d2021-04-13 07:14:55 +0000429cc_library_static {
430 name: "foo_static",
431 arch: { arm64: { static_libs: ["static_dep"], whole_static_libs: ["static_dep2"] } },
Liz Kammer8337ea42021-09-10 10:06:32 -0400432 include_build_directory: false,
Jingwen Chened9c17d2021-04-13 07:14:55 +0000433}`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200434 expectedBazelTargets: []string{`cc_library_static(
Jingwen Chened9c17d2021-04-13 07:14:55 +0000435 name = "foo_static",
Chris Parsonsd6358772021-05-18 18:35:24 -0400436 implementation_deps = select({
Chris Parsons08648312021-05-06 16:23:19 -0400437 "//build/bazel/platforms/arch:arm64": [":static_dep"],
Jingwen Chened9c17d2021-04-13 07:14:55 +0000438 "//conditions:default": [],
439 }),
Chris Parsons08648312021-05-06 16:23:19 -0400440 whole_archive_deps = select({
441 "//build/bazel/platforms/arch:arm64": [":static_dep2"],
442 "//conditions:default": [],
443 }),
Jingwen Chened9c17d2021-04-13 07:14:55 +0000444)`},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200445 })
446}
447
448func TestCcLibraryStaticOsSpecificStaticLib(t *testing.T) {
449 runCcLibraryStaticTestCase(t, bp2buildTestCase{
450 description: "cc_library_static os-specific static_libs",
451 moduleTypeUnderTest: "cc_library_static",
452 moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
453 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200454 filesystem: map[string]string{},
455 blueprint: soongCcLibraryStaticPreamble + `
Liz Kammer8337ea42021-09-10 10:06:32 -0400456cc_library_static {
457 name: "static_dep",
458 bazel_module: { bp2build_available: false },
459}
460cc_library_static {
461 name: "static_dep2",
462 bazel_module: { bp2build_available: false },
463}
Jingwen Chened9c17d2021-04-13 07:14:55 +0000464cc_library_static {
465 name: "foo_static",
466 target: { android: { static_libs: ["static_dep"], whole_static_libs: ["static_dep2"] } },
Liz Kammer8337ea42021-09-10 10:06:32 -0400467 include_build_directory: false,
Jingwen Chened9c17d2021-04-13 07:14:55 +0000468}`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200469 expectedBazelTargets: []string{`cc_library_static(
Jingwen Chened9c17d2021-04-13 07:14:55 +0000470 name = "foo_static",
Chris Parsonsd6358772021-05-18 18:35:24 -0400471 implementation_deps = select({
Chris Parsons08648312021-05-06 16:23:19 -0400472 "//build/bazel/platforms/os:android": [":static_dep"],
Jingwen Chened9c17d2021-04-13 07:14:55 +0000473 "//conditions:default": [],
474 }),
Chris Parsons08648312021-05-06 16:23:19 -0400475 whole_archive_deps = select({
476 "//build/bazel/platforms/os:android": [":static_dep2"],
477 "//conditions:default": [],
478 }),
Jingwen Chened9c17d2021-04-13 07:14:55 +0000479)`},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200480 })
481}
482
483func TestCcLibraryStaticBaseArchOsSpecificStaticLib(t *testing.T) {
484 runCcLibraryStaticTestCase(t, bp2buildTestCase{
485 description: "cc_library_static base, arch and os-specific static_libs",
486 moduleTypeUnderTest: "cc_library_static",
487 moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
488 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200489 filesystem: map[string]string{},
490 blueprint: soongCcLibraryStaticPreamble + `
Liz Kammer8337ea42021-09-10 10:06:32 -0400491cc_library_static {
492 name: "static_dep",
493 bazel_module: { bp2build_available: false },
494}
495cc_library_static {
496 name: "static_dep2",
497 bazel_module: { bp2build_available: false },
498}
499cc_library_static {
500 name: "static_dep3",
501 bazel_module: { bp2build_available: false },
502}
503cc_library_static {
504 name: "static_dep4",
505 bazel_module: { bp2build_available: false },
506}
Jingwen Chened9c17d2021-04-13 07:14:55 +0000507cc_library_static {
508 name: "foo_static",
509 static_libs: ["static_dep"],
510 whole_static_libs: ["static_dep2"],
511 target: { android: { static_libs: ["static_dep3"] } },
512 arch: { arm64: { static_libs: ["static_dep4"] } },
Liz Kammer8337ea42021-09-10 10:06:32 -0400513 include_build_directory: false,
Jingwen Chened9c17d2021-04-13 07:14:55 +0000514}`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200515 expectedBazelTargets: []string{`cc_library_static(
Jingwen Chened9c17d2021-04-13 07:14:55 +0000516 name = "foo_static",
Chris Parsonsd6358772021-05-18 18:35:24 -0400517 implementation_deps = [":static_dep"] + select({
Jingwen Chened9c17d2021-04-13 07:14:55 +0000518 "//build/bazel/platforms/arch:arm64": [":static_dep4"],
519 "//conditions:default": [],
520 }) + select({
521 "//build/bazel/platforms/os:android": [":static_dep3"],
522 "//conditions:default": [],
523 }),
Chris Parsons08648312021-05-06 16:23:19 -0400524 whole_archive_deps = [":static_dep2"],
Jingwen Chened9c17d2021-04-13 07:14:55 +0000525)`},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200526 })
527}
528
529func TestCcLibraryStaticSimpleExcludeSrcs(t *testing.T) {
530 runCcLibraryStaticTestCase(t, bp2buildTestCase{
531 description: "cc_library_static simple exclude_srcs",
532 moduleTypeUnderTest: "cc_library_static",
533 moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
534 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200535 filesystem: map[string]string{
536 "common.c": "",
537 "foo-a.c": "",
538 "foo-excluded.c": "",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000539 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200540 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chene32e9e02021-04-23 09:17:24 +0000541cc_library_static {
542 name: "foo_static",
543 srcs: ["common.c", "foo-*.c"],
544 exclude_srcs: ["foo-excluded.c"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400545 include_build_directory: false,
Jingwen Chene32e9e02021-04-23 09:17:24 +0000546}`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200547 expectedBazelTargets: []string{`cc_library_static(
Jingwen Chene32e9e02021-04-23 09:17:24 +0000548 name = "foo_static",
Chris Parsons990c4f42021-05-25 12:10:58 -0400549 srcs_c = [
Jingwen Chene32e9e02021-04-23 09:17:24 +0000550 "common.c",
551 "foo-a.c",
552 ],
553)`},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200554 })
555}
556
557func TestCcLibraryStaticOneArchSrcs(t *testing.T) {
558 runCcLibraryStaticTestCase(t, bp2buildTestCase{
559 description: "cc_library_static one arch specific srcs",
560 moduleTypeUnderTest: "cc_library_static",
561 moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
562 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200563 filesystem: map[string]string{
564 "common.c": "",
565 "foo-arm.c": "",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000566 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200567 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chene32e9e02021-04-23 09:17:24 +0000568cc_library_static {
569 name: "foo_static",
570 srcs: ["common.c"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400571 arch: { arm: { srcs: ["foo-arm.c"] } },
572 include_build_directory: false,
Jingwen Chene32e9e02021-04-23 09:17:24 +0000573}`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200574 expectedBazelTargets: []string{`cc_library_static(
Jingwen Chene32e9e02021-04-23 09:17:24 +0000575 name = "foo_static",
Chris Parsons990c4f42021-05-25 12:10:58 -0400576 srcs_c = ["common.c"] + select({
Jingwen Chene32e9e02021-04-23 09:17:24 +0000577 "//build/bazel/platforms/arch:arm": ["foo-arm.c"],
578 "//conditions:default": [],
579 }),
580)`},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200581 })
582}
583
584func TestCcLibraryStaticOneArchSrcsExcludeSrcs(t *testing.T) {
585 runCcLibraryStaticTestCase(t, bp2buildTestCase{
586 description: "cc_library_static one arch specific srcs and exclude_srcs",
587 moduleTypeUnderTest: "cc_library_static",
588 moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
589 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200590 filesystem: map[string]string{
591 "common.c": "",
592 "for-arm.c": "",
593 "not-for-arm.c": "",
594 "not-for-anything.c": "",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000595 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200596 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chene32e9e02021-04-23 09:17:24 +0000597cc_library_static {
598 name: "foo_static",
599 srcs: ["common.c", "not-for-*.c"],
600 exclude_srcs: ["not-for-anything.c"],
601 arch: {
602 arm: { srcs: ["for-arm.c"], exclude_srcs: ["not-for-arm.c"] },
603 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400604 include_build_directory: false,
Jingwen Chene32e9e02021-04-23 09:17:24 +0000605}`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200606 expectedBazelTargets: []string{`cc_library_static(
Jingwen Chene32e9e02021-04-23 09:17:24 +0000607 name = "foo_static",
Chris Parsons990c4f42021-05-25 12:10:58 -0400608 srcs_c = ["common.c"] + select({
Jingwen Chene32e9e02021-04-23 09:17:24 +0000609 "//build/bazel/platforms/arch:arm": ["for-arm.c"],
610 "//conditions:default": ["not-for-arm.c"],
611 }),
612)`},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200613 })
614}
615
616func TestCcLibraryStaticTwoArchExcludeSrcs(t *testing.T) {
617 runCcLibraryStaticTestCase(t, bp2buildTestCase{
618 description: "cc_library_static arch specific exclude_srcs for 2 architectures",
619 moduleTypeUnderTest: "cc_library_static",
620 moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
621 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200622 filesystem: map[string]string{
623 "common.c": "",
624 "for-arm.c": "",
625 "for-x86.c": "",
626 "not-for-arm.c": "",
627 "not-for-x86.c": "",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000628 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200629 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chene32e9e02021-04-23 09:17:24 +0000630cc_library_static {
631 name: "foo_static",
632 srcs: ["common.c", "not-for-*.c"],
633 exclude_srcs: ["not-for-everything.c"],
634 arch: {
635 arm: { srcs: ["for-arm.c"], exclude_srcs: ["not-for-arm.c"] },
636 x86: { srcs: ["for-x86.c"], exclude_srcs: ["not-for-x86.c"] },
637 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400638 include_build_directory: false,
Jingwen Chene32e9e02021-04-23 09:17:24 +0000639} `,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200640 expectedBazelTargets: []string{`cc_library_static(
Jingwen Chene32e9e02021-04-23 09:17:24 +0000641 name = "foo_static",
Chris Parsons990c4f42021-05-25 12:10:58 -0400642 srcs_c = ["common.c"] + select({
Jingwen Chene32e9e02021-04-23 09:17:24 +0000643 "//build/bazel/platforms/arch:arm": [
Jingwen Chene32e9e02021-04-23 09:17:24 +0000644 "not-for-x86.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400645 "for-arm.c",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000646 ],
647 "//build/bazel/platforms/arch:x86": [
Jingwen Chene32e9e02021-04-23 09:17:24 +0000648 "not-for-arm.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400649 "for-x86.c",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000650 ],
651 "//conditions:default": [
652 "not-for-arm.c",
653 "not-for-x86.c",
654 ],
655 }),
656)`},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200657 })
658}
659func TestCcLibraryStaticFourArchExcludeSrcs(t *testing.T) {
660 runCcLibraryStaticTestCase(t, bp2buildTestCase{
661 description: "cc_library_static arch specific exclude_srcs for 4 architectures",
662 moduleTypeUnderTest: "cc_library_static",
663 moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
664 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200665 filesystem: map[string]string{
666 "common.c": "",
667 "for-arm.c": "",
668 "for-arm64.c": "",
669 "for-x86.c": "",
670 "for-x86_64.c": "",
671 "not-for-arm.c": "",
672 "not-for-arm64.c": "",
673 "not-for-x86.c": "",
674 "not-for-x86_64.c": "",
675 "not-for-everything.c": "",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000676 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200677 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chene32e9e02021-04-23 09:17:24 +0000678cc_library_static {
679 name: "foo_static",
680 srcs: ["common.c", "not-for-*.c"],
681 exclude_srcs: ["not-for-everything.c"],
682 arch: {
683 arm: { srcs: ["for-arm.c"], exclude_srcs: ["not-for-arm.c"] },
684 arm64: { srcs: ["for-arm64.c"], exclude_srcs: ["not-for-arm64.c"] },
685 x86: { srcs: ["for-x86.c"], exclude_srcs: ["not-for-x86.c"] },
686 x86_64: { srcs: ["for-x86_64.c"], exclude_srcs: ["not-for-x86_64.c"] },
Liz Kammer8337ea42021-09-10 10:06:32 -0400687 },
688 include_build_directory: false,
Jingwen Chene32e9e02021-04-23 09:17:24 +0000689} `,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200690 expectedBazelTargets: []string{`cc_library_static(
Jingwen Chene32e9e02021-04-23 09:17:24 +0000691 name = "foo_static",
Chris Parsons990c4f42021-05-25 12:10:58 -0400692 srcs_c = ["common.c"] + select({
Jingwen Chene32e9e02021-04-23 09:17:24 +0000693 "//build/bazel/platforms/arch:arm": [
Jingwen Chene32e9e02021-04-23 09:17:24 +0000694 "not-for-arm64.c",
695 "not-for-x86.c",
696 "not-for-x86_64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400697 "for-arm.c",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000698 ],
699 "//build/bazel/platforms/arch:arm64": [
Jingwen Chene32e9e02021-04-23 09:17:24 +0000700 "not-for-arm.c",
701 "not-for-x86.c",
702 "not-for-x86_64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400703 "for-arm64.c",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000704 ],
705 "//build/bazel/platforms/arch:x86": [
Jingwen Chene32e9e02021-04-23 09:17:24 +0000706 "not-for-arm.c",
707 "not-for-arm64.c",
708 "not-for-x86_64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400709 "for-x86.c",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000710 ],
711 "//build/bazel/platforms/arch:x86_64": [
Jingwen Chene32e9e02021-04-23 09:17:24 +0000712 "not-for-arm.c",
713 "not-for-arm64.c",
714 "not-for-x86.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400715 "for-x86_64.c",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000716 ],
717 "//conditions:default": [
718 "not-for-arm.c",
719 "not-for-arm64.c",
720 "not-for-x86.c",
721 "not-for-x86_64.c",
722 ],
723 }),
724)`},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200725 })
726}
727
Liz Kammer2b07ec72021-05-26 15:08:27 -0400728func TestCcLibraryStaticOneArchEmpty(t *testing.T) {
729 runCcLibraryStaticTestCase(t, bp2buildTestCase{
730 description: "cc_library_static one arch empty",
731 moduleTypeUnderTest: "cc_library_static",
732 moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
733 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
Liz Kammer2b07ec72021-05-26 15:08:27 -0400734 filesystem: map[string]string{
735 "common.cc": "",
736 "foo-no-arm.cc": "",
737 "foo-excluded.cc": "",
738 },
739 blueprint: soongCcLibraryStaticPreamble + `
740cc_library_static {
741 name: "foo_static",
742 srcs: ["common.cc", "foo-*.cc"],
743 exclude_srcs: ["foo-excluded.cc"],
744 arch: {
745 arm: { exclude_srcs: ["foo-no-arm.cc"] },
746 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400747 include_build_directory: false,
Liz Kammer2b07ec72021-05-26 15:08:27 -0400748}`,
749 expectedBazelTargets: []string{`cc_library_static(
750 name = "foo_static",
Liz Kammer2b07ec72021-05-26 15:08:27 -0400751 srcs = ["common.cc"] + select({
752 "//build/bazel/platforms/arch:arm": [],
753 "//conditions:default": ["foo-no-arm.cc"],
754 }),
755)`},
756 })
757}
758
759func TestCcLibraryStaticOneArchEmptyOtherSet(t *testing.T) {
760 runCcLibraryStaticTestCase(t, bp2buildTestCase{
761 description: "cc_library_static one arch empty other set",
762 moduleTypeUnderTest: "cc_library_static",
763 moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
764 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
Liz Kammer2b07ec72021-05-26 15:08:27 -0400765 filesystem: map[string]string{
766 "common.cc": "",
767 "foo-no-arm.cc": "",
768 "x86-only.cc": "",
769 "foo-excluded.cc": "",
770 },
771 blueprint: soongCcLibraryStaticPreamble + `
772cc_library_static {
773 name: "foo_static",
774 srcs: ["common.cc", "foo-*.cc"],
775 exclude_srcs: ["foo-excluded.cc"],
776 arch: {
777 arm: { exclude_srcs: ["foo-no-arm.cc"] },
778 x86: { srcs: ["x86-only.cc"] },
779 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400780 include_build_directory: false,
Liz Kammer2b07ec72021-05-26 15:08:27 -0400781}`,
782 expectedBazelTargets: []string{`cc_library_static(
783 name = "foo_static",
Liz Kammer2b07ec72021-05-26 15:08:27 -0400784 srcs = ["common.cc"] + select({
785 "//build/bazel/platforms/arch:arm": [],
786 "//build/bazel/platforms/arch:x86": [
787 "foo-no-arm.cc",
788 "x86-only.cc",
789 ],
790 "//conditions:default": ["foo-no-arm.cc"],
791 }),
792)`},
793 })
794}
795
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200796func TestCcLibraryStaticMultipleDepSameName(t *testing.T) {
797 runCcLibraryStaticTestCase(t, bp2buildTestCase{
798 description: "cc_library_static multiple dep same name panic",
799 moduleTypeUnderTest: "cc_library_static",
800 moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
801 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200802 filesystem: map[string]string{},
803 blueprint: soongCcLibraryStaticPreamble + `
Liz Kammer8337ea42021-09-10 10:06:32 -0400804cc_library_static {
805 name: "static_dep",
806 bazel_module: { bp2build_available: false },
807}
Liz Kammer2b50ce62021-04-26 15:47:28 -0400808cc_library_static {
809 name: "foo_static",
Chris Parsons08648312021-05-06 16:23:19 -0400810 static_libs: ["static_dep", "static_dep"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400811 include_build_directory: false,
Liz Kammer2b50ce62021-04-26 15:47:28 -0400812}`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200813 expectedBazelTargets: []string{`cc_library_static(
Liz Kammer2b50ce62021-04-26 15:47:28 -0400814 name = "foo_static",
Chris Parsonsd6358772021-05-18 18:35:24 -0400815 implementation_deps = [":static_dep"],
Liz Kammer2b50ce62021-04-26 15:47:28 -0400816)`},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200817 })
818}
819
820func TestCcLibraryStaticOneMultilibSrcsExcludeSrcs(t *testing.T) {
821 runCcLibraryStaticTestCase(t, bp2buildTestCase{
822 description: "cc_library_static 1 multilib srcs and exclude_srcs",
823 moduleTypeUnderTest: "cc_library_static",
824 moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
825 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200826 filesystem: map[string]string{
827 "common.c": "",
828 "for-lib32.c": "",
829 "not-for-lib32.c": "",
Liz Kammer2b50ce62021-04-26 15:47:28 -0400830 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200831 blueprint: soongCcLibraryStaticPreamble + `
Chris Parsonsc424b762021-04-29 18:06:50 -0400832cc_library_static {
833 name: "foo_static",
834 srcs: ["common.c", "not-for-*.c"],
835 multilib: {
836 lib32: { srcs: ["for-lib32.c"], exclude_srcs: ["not-for-lib32.c"] },
837 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400838 include_build_directory: false,
Chris Parsonsc424b762021-04-29 18:06:50 -0400839} `,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200840 expectedBazelTargets: []string{`cc_library_static(
Chris Parsonsc424b762021-04-29 18:06:50 -0400841 name = "foo_static",
Chris Parsons990c4f42021-05-25 12:10:58 -0400842 srcs_c = ["common.c"] + select({
Chris Parsonsc424b762021-04-29 18:06:50 -0400843 "//build/bazel/platforms/arch:arm": ["for-lib32.c"],
844 "//build/bazel/platforms/arch:x86": ["for-lib32.c"],
845 "//conditions:default": ["not-for-lib32.c"],
846 }),
847)`},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200848 })
849}
850
851func TestCcLibraryStaticTwoMultilibSrcsExcludeSrcs(t *testing.T) {
852 runCcLibraryStaticTestCase(t, bp2buildTestCase{
853 description: "cc_library_static 2 multilib srcs and exclude_srcs",
854 moduleTypeUnderTest: "cc_library_static",
855 moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
856 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200857 filesystem: map[string]string{
858 "common.c": "",
859 "for-lib32.c": "",
860 "for-lib64.c": "",
861 "not-for-lib32.c": "",
862 "not-for-lib64.c": "",
Chris Parsonsc424b762021-04-29 18:06:50 -0400863 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200864 blueprint: soongCcLibraryStaticPreamble + `
Chris Parsonsc424b762021-04-29 18:06:50 -0400865cc_library_static {
866 name: "foo_static2",
867 srcs: ["common.c", "not-for-*.c"],
868 multilib: {
869 lib32: { srcs: ["for-lib32.c"], exclude_srcs: ["not-for-lib32.c"] },
870 lib64: { srcs: ["for-lib64.c"], exclude_srcs: ["not-for-lib64.c"] },
871 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400872 include_build_directory: false,
Chris Parsonsc424b762021-04-29 18:06:50 -0400873} `,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200874 expectedBazelTargets: []string{`cc_library_static(
Chris Parsonsc424b762021-04-29 18:06:50 -0400875 name = "foo_static2",
Chris Parsons990c4f42021-05-25 12:10:58 -0400876 srcs_c = ["common.c"] + select({
Chris Parsonsc424b762021-04-29 18:06:50 -0400877 "//build/bazel/platforms/arch:arm": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400878 "not-for-lib64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400879 "for-lib32.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400880 ],
881 "//build/bazel/platforms/arch:arm64": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400882 "not-for-lib32.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400883 "for-lib64.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400884 ],
885 "//build/bazel/platforms/arch:x86": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400886 "not-for-lib64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400887 "for-lib32.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400888 ],
889 "//build/bazel/platforms/arch:x86_64": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400890 "not-for-lib32.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400891 "for-lib64.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400892 ],
893 "//conditions:default": [
894 "not-for-lib32.c",
895 "not-for-lib64.c",
896 ],
897 }),
898)`},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200899 })
900}
901
902func TestCcLibrarySTaticArchMultilibSrcsExcludeSrcs(t *testing.T) {
903 runCcLibraryStaticTestCase(t, bp2buildTestCase{
904 description: "cc_library_static arch and multilib srcs and exclude_srcs",
905 moduleTypeUnderTest: "cc_library_static",
906 moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
907 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200908 filesystem: map[string]string{
909 "common.c": "",
910 "for-arm.c": "",
911 "for-arm64.c": "",
912 "for-x86.c": "",
913 "for-x86_64.c": "",
914 "for-lib32.c": "",
915 "for-lib64.c": "",
916 "not-for-arm.c": "",
917 "not-for-arm64.c": "",
918 "not-for-x86.c": "",
919 "not-for-x86_64.c": "",
920 "not-for-lib32.c": "",
921 "not-for-lib64.c": "",
922 "not-for-everything.c": "",
Chris Parsonsc424b762021-04-29 18:06:50 -0400923 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200924 blueprint: soongCcLibraryStaticPreamble + `
Chris Parsonsc424b762021-04-29 18:06:50 -0400925cc_library_static {
926 name: "foo_static3",
927 srcs: ["common.c", "not-for-*.c"],
928 exclude_srcs: ["not-for-everything.c"],
929 arch: {
930 arm: { srcs: ["for-arm.c"], exclude_srcs: ["not-for-arm.c"] },
931 arm64: { srcs: ["for-arm64.c"], exclude_srcs: ["not-for-arm64.c"] },
932 x86: { srcs: ["for-x86.c"], exclude_srcs: ["not-for-x86.c"] },
933 x86_64: { srcs: ["for-x86_64.c"], exclude_srcs: ["not-for-x86_64.c"] },
934 },
935 multilib: {
936 lib32: { srcs: ["for-lib32.c"], exclude_srcs: ["not-for-lib32.c"] },
937 lib64: { srcs: ["for-lib64.c"], exclude_srcs: ["not-for-lib64.c"] },
938 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400939 include_build_directory: false,
Chris Parsonsc424b762021-04-29 18:06:50 -0400940}`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200941 expectedBazelTargets: []string{`cc_library_static(
Chris Parsonsc424b762021-04-29 18:06:50 -0400942 name = "foo_static3",
Chris Parsons990c4f42021-05-25 12:10:58 -0400943 srcs_c = ["common.c"] + select({
Chris Parsonsc424b762021-04-29 18:06:50 -0400944 "//build/bazel/platforms/arch:arm": [
Liz Kammer9bad9d62021-10-11 15:40:35 -0400945 "not-for-arm64.c",
946 "not-for-lib64.c",
947 "not-for-x86.c",
948 "not-for-x86_64.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400949 "for-arm.c",
950 "for-lib32.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400951 ],
952 "//build/bazel/platforms/arch:arm64": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400953 "not-for-arm.c",
954 "not-for-lib32.c",
955 "not-for-x86.c",
956 "not-for-x86_64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400957 "for-arm64.c",
958 "for-lib64.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400959 ],
960 "//build/bazel/platforms/arch:x86": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400961 "not-for-arm.c",
962 "not-for-arm64.c",
963 "not-for-lib64.c",
964 "not-for-x86_64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400965 "for-x86.c",
966 "for-lib32.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400967 ],
968 "//build/bazel/platforms/arch:x86_64": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400969 "not-for-arm.c",
970 "not-for-arm64.c",
971 "not-for-lib32.c",
972 "not-for-x86.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400973 "for-x86_64.c",
974 "for-lib64.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400975 ],
976 "//conditions:default": [
977 "not-for-arm.c",
978 "not-for-arm64.c",
979 "not-for-lib32.c",
980 "not-for-lib64.c",
981 "not-for-x86.c",
982 "not-for-x86_64.c",
983 ],
984 }),
985)`},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200986 })
987}
988
Liz Kammerae3994e2021-10-19 09:45:48 -0400989func TestCcLibraryStaticGeneratedHeadersAllPartitions(t *testing.T) {
990 runCcLibraryStaticTestCase(t, bp2buildTestCase{
991 moduleTypeUnderTest: "cc_library_static",
992 moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
993 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
994 blueprint: soongCcLibraryStaticPreamble + `
995genrule {
996 name: "generated_hdr",
997 cmd: "nothing to see here",
998}
999
1000cc_library_static {
1001 name: "foo_static",
1002 srcs: ["cpp_src.cpp", "as_src.S", "c_src.c"],
1003 generated_headers: ["generated_hdr"],
1004 include_build_directory: false,
1005}`,
1006 expectedBazelTargets: []string{`cc_library_static(
1007 name = "foo_static",
1008 srcs = [
1009 "cpp_src.cpp",
1010 ":generated_hdr",
1011 ],
1012 srcs_as = [
1013 "as_src.S",
1014 ":generated_hdr",
1015 ],
1016 srcs_c = [
1017 "c_src.c",
1018 ":generated_hdr",
1019 ],
1020)`},
1021 })
1022}
1023
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +02001024func TestCcLibraryStaticArchSrcsExcludeSrcsGeneratedFiles(t *testing.T) {
1025 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1026 description: "cc_library_static arch srcs/exclude_srcs with generated files",
1027 moduleTypeUnderTest: "cc_library_static",
1028 moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
1029 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +02001030 filesystem: map[string]string{
Chris Parsons990c4f42021-05-25 12:10:58 -04001031 "common.cpp": "",
1032 "for-x86.cpp": "",
1033 "not-for-x86.cpp": "",
1034 "not-for-everything.cpp": "",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +02001035 "dep/Android.bp": `
Chris Parsons484e50a2021-05-13 15:13:04 -04001036genrule {
Liz Kammer8337ea42021-09-10 10:06:32 -04001037 name: "generated_src_other_pkg",
Liz Kammer8337ea42021-09-10 10:06:32 -04001038 cmd: "nothing to see here",
Chris Parsons484e50a2021-05-13 15:13:04 -04001039}
1040
1041genrule {
Liz Kammer8337ea42021-09-10 10:06:32 -04001042 name: "generated_hdr_other_pkg",
Liz Kammer8337ea42021-09-10 10:06:32 -04001043 cmd: "nothing to see here",
Chris Parsons484e50a2021-05-13 15:13:04 -04001044}
1045
1046genrule {
Liz Kammer8337ea42021-09-10 10:06:32 -04001047 name: "generated_hdr_other_pkg_x86",
Liz Kammer222bdcf2021-10-11 14:15:51 -04001048 cmd: "nothing to see here",
1049}
1050
1051genrule {
1052 name: "generated_hdr_other_pkg_android",
Liz Kammer8337ea42021-09-10 10:06:32 -04001053 cmd: "nothing to see here",
Chris Parsons484e50a2021-05-13 15:13:04 -04001054}`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +02001055 },
1056 blueprint: soongCcLibraryStaticPreamble + `
Chris Parsons484e50a2021-05-13 15:13:04 -04001057genrule {
1058 name: "generated_src",
Chris Parsons484e50a2021-05-13 15:13:04 -04001059 cmd: "nothing to see here",
1060}
1061
1062genrule {
Liz Kammer222bdcf2021-10-11 14:15:51 -04001063 name: "generated_src_not_x86",
1064 cmd: "nothing to see here",
1065}
1066
1067genrule {
1068 name: "generated_src_android",
Chris Parsons484e50a2021-05-13 15:13:04 -04001069 cmd: "nothing to see here",
1070}
1071
1072genrule {
1073 name: "generated_hdr",
Chris Parsons484e50a2021-05-13 15:13:04 -04001074 cmd: "nothing to see here",
1075}
1076
1077cc_library_static {
Liz Kammer222bdcf2021-10-11 14:15:51 -04001078 name: "foo_static3",
1079 srcs: ["common.cpp", "not-for-*.cpp"],
1080 exclude_srcs: ["not-for-everything.cpp"],
1081 generated_sources: ["generated_src", "generated_src_other_pkg", "generated_src_not_x86"],
1082 generated_headers: ["generated_hdr", "generated_hdr_other_pkg"],
1083 arch: {
1084 x86: {
1085 srcs: ["for-x86.cpp"],
1086 exclude_srcs: ["not-for-x86.cpp"],
1087 generated_headers: ["generated_hdr_other_pkg_x86"],
1088 exclude_generated_sources: ["generated_src_not_x86"],
1089 },
1090 },
1091 target: {
1092 android: {
1093 generated_sources: ["generated_src_android"],
1094 generated_headers: ["generated_hdr_other_pkg_android"],
1095 },
1096 },
1097
Liz Kammer8337ea42021-09-10 10:06:32 -04001098 include_build_directory: false,
Chris Parsons484e50a2021-05-13 15:13:04 -04001099}
1100`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +02001101 expectedBazelTargets: []string{`cc_library_static(
Chris Parsons484e50a2021-05-13 15:13:04 -04001102 name = "foo_static3",
Chris Parsons484e50a2021-05-13 15:13:04 -04001103 srcs = [
Chris Parsons990c4f42021-05-25 12:10:58 -04001104 "common.cpp",
Liz Kammer9bad9d62021-10-11 15:40:35 -04001105 ":generated_src",
1106 "//dep:generated_src_other_pkg",
Liz Kammerae3994e2021-10-19 09:45:48 -04001107 ":generated_hdr",
1108 "//dep:generated_hdr_other_pkg",
Chris Parsons484e50a2021-05-13 15:13:04 -04001109 ] + select({
1110 "//build/bazel/platforms/arch:x86": [
Chris Parsons990c4f42021-05-25 12:10:58 -04001111 "for-x86.cpp",
Liz Kammer9bad9d62021-10-11 15:40:35 -04001112 "//dep:generated_hdr_other_pkg_x86",
Chris Parsons484e50a2021-05-13 15:13:04 -04001113 ],
Liz Kammer222bdcf2021-10-11 14:15:51 -04001114 "//conditions:default": [
Liz Kammer222bdcf2021-10-11 14:15:51 -04001115 "not-for-x86.cpp",
Liz Kammer9bad9d62021-10-11 15:40:35 -04001116 ":generated_src_not_x86",
Liz Kammer222bdcf2021-10-11 14:15:51 -04001117 ],
1118 }) + select({
1119 "//build/bazel/platforms/os:android": [
Liz Kammer222bdcf2021-10-11 14:15:51 -04001120 ":generated_src_android",
Liz Kammerae3994e2021-10-19 09:45:48 -04001121 "//dep:generated_hdr_other_pkg_android",
Liz Kammer222bdcf2021-10-11 14:15:51 -04001122 ],
1123 "//conditions:default": [],
Chris Parsons484e50a2021-05-13 15:13:04 -04001124 }),
1125)`},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +02001126 })
Rupert Shuttleworth095081c2021-03-25 09:06:03 +00001127}
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001128
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001129func TestCcLibraryStaticGetTargetProperties(t *testing.T) {
1130 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1131
1132 description: "cc_library_static complex GetTargetProperties",
1133 moduleTypeUnderTest: "cc_library_static",
1134 moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
1135 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001136 blueprint: soongCcLibraryStaticPreamble + `
1137cc_library_static {
1138 name: "foo_static",
1139 target: {
1140 android: {
1141 srcs: ["android_src.c"],
1142 },
1143 android_arm: {
1144 srcs: ["android_arm_src.c"],
1145 },
1146 android_arm64: {
1147 srcs: ["android_arm64_src.c"],
1148 },
1149 android_x86: {
1150 srcs: ["android_x86_src.c"],
1151 },
1152 android_x86_64: {
1153 srcs: ["android_x86_64_src.c"],
1154 },
1155 linux_bionic_arm64: {
1156 srcs: ["linux_bionic_arm64_src.c"],
1157 },
1158 linux_bionic_x86_64: {
1159 srcs: ["linux_bionic_x86_64_src.c"],
1160 },
1161 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001162 include_build_directory: false,
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001163}`,
1164 expectedBazelTargets: []string{`cc_library_static(
1165 name = "foo_static",
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001166 srcs_c = select({
1167 "//build/bazel/platforms/os:android": ["android_src.c"],
1168 "//conditions:default": [],
1169 }) + select({
Rupert Shuttleworthffd45822021-05-14 03:02:34 -04001170 "//build/bazel/platforms/os_arch:android_arm": ["android_arm_src.c"],
1171 "//build/bazel/platforms/os_arch:android_arm64": ["android_arm64_src.c"],
1172 "//build/bazel/platforms/os_arch:android_x86": ["android_x86_src.c"],
1173 "//build/bazel/platforms/os_arch:android_x86_64": ["android_x86_64_src.c"],
Rupert Shuttleworthffd45822021-05-14 03:02:34 -04001174 "//build/bazel/platforms/os_arch:linux_bionic_arm64": ["linux_bionic_arm64_src.c"],
1175 "//build/bazel/platforms/os_arch:linux_bionic_x86_64": ["linux_bionic_x86_64_src.c"],
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001176 "//conditions:default": [],
1177 }),
1178)`},
1179 })
1180}
1181
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001182func TestCcLibraryStaticProductVariableSelects(t *testing.T) {
1183 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1184 description: "cc_library_static product variable selects",
1185 moduleTypeUnderTest: "cc_library_static",
1186 moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
1187 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001188 blueprint: soongCcLibraryStaticPreamble + `
1189cc_library_static {
1190 name: "foo_static",
1191 srcs: ["common.c"],
1192 product_variables: {
1193 malloc_not_svelte: {
1194 cflags: ["-Wmalloc_not_svelte"],
1195 },
1196 malloc_zero_contents: {
1197 cflags: ["-Wmalloc_zero_contents"],
1198 },
1199 binder32bit: {
1200 cflags: ["-Wbinder32bit"],
1201 },
1202 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001203 include_build_directory: false,
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001204} `,
1205 expectedBazelTargets: []string{`cc_library_static(
1206 name = "foo_static",
Liz Kammer8337ea42021-09-10 10:06:32 -04001207 copts = select({
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001208 "//build/bazel/product_variables:binder32bit": ["-Wbinder32bit"],
1209 "//conditions:default": [],
1210 }) + select({
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001211 "//build/bazel/product_variables:malloc_not_svelte": ["-Wmalloc_not_svelte"],
1212 "//conditions:default": [],
1213 }) + select({
1214 "//build/bazel/product_variables:malloc_zero_contents": ["-Wmalloc_zero_contents"],
1215 "//conditions:default": [],
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001216 }),
Chris Parsons990c4f42021-05-25 12:10:58 -04001217 srcs_c = ["common.c"],
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001218)`},
1219 })
1220}
1221
1222func TestCcLibraryStaticProductVariableArchSpecificSelects(t *testing.T) {
1223 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1224 description: "cc_library_static arch-specific product variable selects",
1225 moduleTypeUnderTest: "cc_library_static",
1226 moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
1227 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001228 filesystem: map[string]string{},
1229 blueprint: soongCcLibraryStaticPreamble + `
1230cc_library_static {
1231 name: "foo_static",
1232 srcs: ["common.c"],
1233 product_variables: {
1234 malloc_not_svelte: {
1235 cflags: ["-Wmalloc_not_svelte"],
1236 },
1237 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001238 arch: {
1239 arm64: {
1240 product_variables: {
1241 malloc_not_svelte: {
1242 cflags: ["-Warm64_malloc_not_svelte"],
1243 },
1244 },
1245 },
1246 },
1247 multilib: {
1248 lib32: {
1249 product_variables: {
1250 malloc_not_svelte: {
1251 cflags: ["-Wlib32_malloc_not_svelte"],
1252 },
1253 },
1254 },
1255 },
1256 target: {
1257 android: {
1258 product_variables: {
1259 malloc_not_svelte: {
1260 cflags: ["-Wandroid_malloc_not_svelte"],
1261 },
1262 },
1263 }
1264 },
1265 include_build_directory: false,
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001266} `,
1267 expectedBazelTargets: []string{`cc_library_static(
1268 name = "foo_static",
Liz Kammer8337ea42021-09-10 10:06:32 -04001269 copts = select({
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001270 "//build/bazel/product_variables:malloc_not_svelte": ["-Wmalloc_not_svelte"],
1271 "//conditions:default": [],
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001272 }) + select({
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001273 "//build/bazel/product_variables:malloc_not_svelte-android": ["-Wandroid_malloc_not_svelte"],
1274 "//conditions:default": [],
1275 }) + select({
1276 "//build/bazel/product_variables:malloc_not_svelte-arm": ["-Wlib32_malloc_not_svelte"],
1277 "//conditions:default": [],
1278 }) + select({
1279 "//build/bazel/product_variables:malloc_not_svelte-arm64": ["-Warm64_malloc_not_svelte"],
1280 "//conditions:default": [],
1281 }) + select({
1282 "//build/bazel/product_variables:malloc_not_svelte-x86": ["-Wlib32_malloc_not_svelte"],
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001283 "//conditions:default": [],
1284 }),
Chris Parsons990c4f42021-05-25 12:10:58 -04001285 srcs_c = ["common.c"],
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001286)`},
1287 })
1288}
Liz Kammerba7a9c52021-05-26 08:45:30 -04001289
1290func TestCcLibraryStaticProductVariableStringReplacement(t *testing.T) {
1291 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Chris Parsons69fa9f92021-07-13 11:47:44 -04001292 description: "cc_library_static product variable string replacement",
Liz Kammerba7a9c52021-05-26 08:45:30 -04001293 moduleTypeUnderTest: "cc_library_static",
1294 moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
1295 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
Liz Kammerba7a9c52021-05-26 08:45:30 -04001296 filesystem: map[string]string{},
1297 blueprint: soongCcLibraryStaticPreamble + `
1298cc_library_static {
1299 name: "foo_static",
Chris Parsons69fa9f92021-07-13 11:47:44 -04001300 srcs: ["common.S"],
Liz Kammerba7a9c52021-05-26 08:45:30 -04001301 product_variables: {
1302 platform_sdk_version: {
1303 asflags: ["-DPLATFORM_SDK_VERSION=%d"],
1304 },
1305 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001306 include_build_directory: false,
Liz Kammerba7a9c52021-05-26 08:45:30 -04001307} `,
1308 expectedBazelTargets: []string{`cc_library_static(
1309 name = "foo_static",
Liz Kammer8337ea42021-09-10 10:06:32 -04001310 asflags = select({
Liz Kammerba7a9c52021-05-26 08:45:30 -04001311 "//build/bazel/product_variables:platform_sdk_version": ["-DPLATFORM_SDK_VERSION=$(Platform_sdk_version)"],
1312 "//conditions:default": [],
1313 }),
Chris Parsons69fa9f92021-07-13 11:47:44 -04001314 srcs_as = ["common.S"],
Liz Kammerba7a9c52021-05-26 08:45:30 -04001315)`},
1316 })
1317}
Chris Parsons51f8c392021-08-03 21:01:05 -04001318
1319func TestStaticLibrary_SystemSharedLibsRootEmpty(t *testing.T) {
1320 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1321 description: "cc_library_static system_shared_lib empty root",
1322 moduleTypeUnderTest: "cc_library_static",
1323 moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
1324 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
1325 blueprint: soongCcLibraryStaticPreamble + `
1326cc_library_static {
1327 name: "root_empty",
Liz Kammer8337ea42021-09-10 10:06:32 -04001328 system_shared_libs: [],
1329 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001330}
1331`,
1332 expectedBazelTargets: []string{`cc_library_static(
1333 name = "root_empty",
Chris Parsons51f8c392021-08-03 21:01:05 -04001334 system_dynamic_deps = [],
1335)`},
1336 })
1337}
1338
1339func TestStaticLibrary_SystemSharedLibsStaticEmpty(t *testing.T) {
1340 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1341 description: "cc_library_static system_shared_lib empty static default",
1342 moduleTypeUnderTest: "cc_library_static",
1343 moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
1344 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
1345 blueprint: soongCcLibraryStaticPreamble + `
1346cc_defaults {
1347 name: "static_empty_defaults",
1348 static: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001349 system_shared_libs: [],
1350 },
1351 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001352}
1353cc_library_static {
1354 name: "static_empty",
Liz Kammer8337ea42021-09-10 10:06:32 -04001355 defaults: ["static_empty_defaults"],
Chris Parsons51f8c392021-08-03 21:01:05 -04001356}
1357`,
1358 expectedBazelTargets: []string{`cc_library_static(
1359 name = "static_empty",
Chris Parsons51f8c392021-08-03 21:01:05 -04001360 system_dynamic_deps = [],
1361)`},
1362 })
1363}
1364
1365func TestStaticLibrary_SystemSharedLibsBionicEmpty(t *testing.T) {
1366 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1367 description: "cc_library_static system_shared_lib empty for bionic variant",
1368 moduleTypeUnderTest: "cc_library_static",
1369 moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
1370 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
1371 blueprint: soongCcLibraryStaticPreamble + `
1372cc_library_static {
1373 name: "target_bionic_empty",
1374 target: {
1375 bionic: {
1376 system_shared_libs: [],
1377 },
1378 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001379 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001380}
1381`,
1382 expectedBazelTargets: []string{`cc_library_static(
1383 name = "target_bionic_empty",
Chris Parsons51f8c392021-08-03 21:01:05 -04001384 system_dynamic_deps = [],
1385)`},
1386 })
1387}
1388
1389func TestStaticLibrary_SystemSharedLibsLinuxBionicEmpty(t *testing.T) {
1390 // Note that this behavior is technically incorrect (it's a simplification).
1391 // The correct behavior would be if bp2build wrote `system_dynamic_deps = []`
1392 // only for linux_bionic, but `android` had `["libc", "libdl", "libm"].
1393 // b/195791252 tracks the fix.
1394 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1395 description: "cc_library_static system_shared_lib empty for linux_bionic variant",
1396 moduleTypeUnderTest: "cc_library_static",
1397 moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
1398 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
1399 blueprint: soongCcLibraryStaticPreamble + `
1400cc_library_static {
1401 name: "target_linux_bionic_empty",
1402 target: {
1403 linux_bionic: {
1404 system_shared_libs: [],
1405 },
1406 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001407 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001408}
1409`,
1410 expectedBazelTargets: []string{`cc_library_static(
1411 name = "target_linux_bionic_empty",
Chris Parsons51f8c392021-08-03 21:01:05 -04001412 system_dynamic_deps = [],
1413)`},
1414 })
1415}
1416
1417func TestStaticLibrary_SystemSharedLibsBionic(t *testing.T) {
1418 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1419 description: "cc_library_static system_shared_libs set for bionic variant",
1420 moduleTypeUnderTest: "cc_library_static",
1421 moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
1422 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
1423 blueprint: soongCcLibraryStaticPreamble + `
1424cc_library{name: "libc"}
1425
1426cc_library_static {
1427 name: "target_bionic",
1428 target: {
1429 bionic: {
1430 system_shared_libs: ["libc"],
1431 },
1432 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001433 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001434}
1435`,
1436 expectedBazelTargets: []string{`cc_library_static(
1437 name = "target_bionic",
Chris Parsons51f8c392021-08-03 21:01:05 -04001438 system_dynamic_deps = select({
Chris Parsons2dde0cb2021-10-01 14:45:30 -04001439 "//build/bazel/platforms/os:android": [":libc"],
1440 "//build/bazel/platforms/os:linux_bionic": [":libc"],
Chris Parsons51f8c392021-08-03 21:01:05 -04001441 "//conditions:default": [],
1442 }),
1443)`},
1444 })
1445}
1446
1447func TestStaticLibrary_SystemSharedLibsLinuxRootAndLinuxBionic(t *testing.T) {
1448 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1449 description: "cc_library_static system_shared_libs set for root and linux_bionic variant",
1450 moduleTypeUnderTest: "cc_library_static",
1451 moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
1452 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
1453 blueprint: soongCcLibraryStaticPreamble + `
1454cc_library{name: "libc"}
1455cc_library{name: "libm"}
1456
1457cc_library_static {
1458 name: "target_linux_bionic",
Liz Kammer8337ea42021-09-10 10:06:32 -04001459 system_shared_libs: ["libc"],
Chris Parsons51f8c392021-08-03 21:01:05 -04001460 target: {
1461 linux_bionic: {
1462 system_shared_libs: ["libm"],
1463 },
1464 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001465 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001466}
1467`,
1468 expectedBazelTargets: []string{`cc_library_static(
1469 name = "target_linux_bionic",
Chris Parsons51f8c392021-08-03 21:01:05 -04001470 system_dynamic_deps = [":libc"] + select({
1471 "//build/bazel/platforms/os:linux_bionic": [":libm"],
1472 "//conditions:default": [],
1473 }),
1474)`},
1475 })
1476}