blob: 9887811dfde62694b5097c399e3cf0c881b6923a [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
Liz Kammere6583482021-10-19 13:56:10 -04001000genrule {
1001 name: "export_generated_hdr",
1002 cmd: "nothing to see here",
1003}
1004
Liz Kammerae3994e2021-10-19 09:45:48 -04001005cc_library_static {
1006 name: "foo_static",
1007 srcs: ["cpp_src.cpp", "as_src.S", "c_src.c"],
Liz Kammere6583482021-10-19 13:56:10 -04001008 generated_headers: ["generated_hdr", "export_generated_hdr"],
1009 export_generated_headers: ["export_generated_hdr"],
Liz Kammerae3994e2021-10-19 09:45:48 -04001010 include_build_directory: false,
1011}`,
1012 expectedBazelTargets: []string{`cc_library_static(
1013 name = "foo_static",
Liz Kammere6583482021-10-19 13:56:10 -04001014 hdrs = [":export_generated_hdr"],
Liz Kammerae3994e2021-10-19 09:45:48 -04001015 srcs = [
1016 "cpp_src.cpp",
1017 ":generated_hdr",
1018 ],
1019 srcs_as = [
1020 "as_src.S",
1021 ":generated_hdr",
1022 ],
1023 srcs_c = [
1024 "c_src.c",
1025 ":generated_hdr",
1026 ],
1027)`},
1028 })
1029}
1030
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +02001031func TestCcLibraryStaticArchSrcsExcludeSrcsGeneratedFiles(t *testing.T) {
1032 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1033 description: "cc_library_static arch srcs/exclude_srcs with generated files",
1034 moduleTypeUnderTest: "cc_library_static",
1035 moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
1036 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +02001037 filesystem: map[string]string{
Chris Parsons990c4f42021-05-25 12:10:58 -04001038 "common.cpp": "",
1039 "for-x86.cpp": "",
1040 "not-for-x86.cpp": "",
1041 "not-for-everything.cpp": "",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +02001042 "dep/Android.bp": `
Chris Parsons484e50a2021-05-13 15:13:04 -04001043genrule {
Liz Kammer8337ea42021-09-10 10:06:32 -04001044 name: "generated_src_other_pkg",
Liz Kammer8337ea42021-09-10 10:06:32 -04001045 cmd: "nothing to see here",
Chris Parsons484e50a2021-05-13 15:13:04 -04001046}
1047
1048genrule {
Liz Kammer8337ea42021-09-10 10:06:32 -04001049 name: "generated_hdr_other_pkg",
Liz Kammer8337ea42021-09-10 10:06:32 -04001050 cmd: "nothing to see here",
Chris Parsons484e50a2021-05-13 15:13:04 -04001051}
1052
1053genrule {
Liz Kammer8337ea42021-09-10 10:06:32 -04001054 name: "generated_hdr_other_pkg_x86",
Liz Kammer222bdcf2021-10-11 14:15:51 -04001055 cmd: "nothing to see here",
1056}
1057
1058genrule {
1059 name: "generated_hdr_other_pkg_android",
Liz Kammer8337ea42021-09-10 10:06:32 -04001060 cmd: "nothing to see here",
Chris Parsons484e50a2021-05-13 15:13:04 -04001061}`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +02001062 },
1063 blueprint: soongCcLibraryStaticPreamble + `
Chris Parsons484e50a2021-05-13 15:13:04 -04001064genrule {
1065 name: "generated_src",
Chris Parsons484e50a2021-05-13 15:13:04 -04001066 cmd: "nothing to see here",
1067}
1068
1069genrule {
Liz Kammer222bdcf2021-10-11 14:15:51 -04001070 name: "generated_src_not_x86",
1071 cmd: "nothing to see here",
1072}
1073
1074genrule {
1075 name: "generated_src_android",
Chris Parsons484e50a2021-05-13 15:13:04 -04001076 cmd: "nothing to see here",
1077}
1078
1079genrule {
1080 name: "generated_hdr",
Chris Parsons484e50a2021-05-13 15:13:04 -04001081 cmd: "nothing to see here",
1082}
1083
1084cc_library_static {
Liz Kammer222bdcf2021-10-11 14:15:51 -04001085 name: "foo_static3",
1086 srcs: ["common.cpp", "not-for-*.cpp"],
1087 exclude_srcs: ["not-for-everything.cpp"],
1088 generated_sources: ["generated_src", "generated_src_other_pkg", "generated_src_not_x86"],
1089 generated_headers: ["generated_hdr", "generated_hdr_other_pkg"],
1090 arch: {
1091 x86: {
1092 srcs: ["for-x86.cpp"],
1093 exclude_srcs: ["not-for-x86.cpp"],
1094 generated_headers: ["generated_hdr_other_pkg_x86"],
1095 exclude_generated_sources: ["generated_src_not_x86"],
1096 },
1097 },
1098 target: {
1099 android: {
1100 generated_sources: ["generated_src_android"],
1101 generated_headers: ["generated_hdr_other_pkg_android"],
1102 },
1103 },
1104
Liz Kammer8337ea42021-09-10 10:06:32 -04001105 include_build_directory: false,
Chris Parsons484e50a2021-05-13 15:13:04 -04001106}
1107`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +02001108 expectedBazelTargets: []string{`cc_library_static(
Chris Parsons484e50a2021-05-13 15:13:04 -04001109 name = "foo_static3",
Chris Parsons484e50a2021-05-13 15:13:04 -04001110 srcs = [
Chris Parsons990c4f42021-05-25 12:10:58 -04001111 "common.cpp",
Liz Kammer9bad9d62021-10-11 15:40:35 -04001112 ":generated_src",
1113 "//dep:generated_src_other_pkg",
Liz Kammerae3994e2021-10-19 09:45:48 -04001114 ":generated_hdr",
1115 "//dep:generated_hdr_other_pkg",
Chris Parsons484e50a2021-05-13 15:13:04 -04001116 ] + select({
1117 "//build/bazel/platforms/arch:x86": [
Chris Parsons990c4f42021-05-25 12:10:58 -04001118 "for-x86.cpp",
Liz Kammer9bad9d62021-10-11 15:40:35 -04001119 "//dep:generated_hdr_other_pkg_x86",
Chris Parsons484e50a2021-05-13 15:13:04 -04001120 ],
Liz Kammer222bdcf2021-10-11 14:15:51 -04001121 "//conditions:default": [
Liz Kammer222bdcf2021-10-11 14:15:51 -04001122 "not-for-x86.cpp",
Liz Kammer9bad9d62021-10-11 15:40:35 -04001123 ":generated_src_not_x86",
Liz Kammer222bdcf2021-10-11 14:15:51 -04001124 ],
1125 }) + select({
1126 "//build/bazel/platforms/os:android": [
Liz Kammer222bdcf2021-10-11 14:15:51 -04001127 ":generated_src_android",
Liz Kammerae3994e2021-10-19 09:45:48 -04001128 "//dep:generated_hdr_other_pkg_android",
Liz Kammer222bdcf2021-10-11 14:15:51 -04001129 ],
1130 "//conditions:default": [],
Chris Parsons484e50a2021-05-13 15:13:04 -04001131 }),
1132)`},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +02001133 })
Rupert Shuttleworth095081c2021-03-25 09:06:03 +00001134}
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001135
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001136func TestCcLibraryStaticGetTargetProperties(t *testing.T) {
1137 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1138
1139 description: "cc_library_static complex GetTargetProperties",
1140 moduleTypeUnderTest: "cc_library_static",
1141 moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
1142 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001143 blueprint: soongCcLibraryStaticPreamble + `
1144cc_library_static {
1145 name: "foo_static",
1146 target: {
1147 android: {
1148 srcs: ["android_src.c"],
1149 },
1150 android_arm: {
1151 srcs: ["android_arm_src.c"],
1152 },
1153 android_arm64: {
1154 srcs: ["android_arm64_src.c"],
1155 },
1156 android_x86: {
1157 srcs: ["android_x86_src.c"],
1158 },
1159 android_x86_64: {
1160 srcs: ["android_x86_64_src.c"],
1161 },
1162 linux_bionic_arm64: {
1163 srcs: ["linux_bionic_arm64_src.c"],
1164 },
1165 linux_bionic_x86_64: {
1166 srcs: ["linux_bionic_x86_64_src.c"],
1167 },
1168 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001169 include_build_directory: false,
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001170}`,
1171 expectedBazelTargets: []string{`cc_library_static(
1172 name = "foo_static",
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001173 srcs_c = select({
1174 "//build/bazel/platforms/os:android": ["android_src.c"],
1175 "//conditions:default": [],
1176 }) + select({
Rupert Shuttleworthffd45822021-05-14 03:02:34 -04001177 "//build/bazel/platforms/os_arch:android_arm": ["android_arm_src.c"],
1178 "//build/bazel/platforms/os_arch:android_arm64": ["android_arm64_src.c"],
1179 "//build/bazel/platforms/os_arch:android_x86": ["android_x86_src.c"],
1180 "//build/bazel/platforms/os_arch:android_x86_64": ["android_x86_64_src.c"],
Rupert Shuttleworthffd45822021-05-14 03:02:34 -04001181 "//build/bazel/platforms/os_arch:linux_bionic_arm64": ["linux_bionic_arm64_src.c"],
1182 "//build/bazel/platforms/os_arch:linux_bionic_x86_64": ["linux_bionic_x86_64_src.c"],
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001183 "//conditions:default": [],
1184 }),
1185)`},
1186 })
1187}
1188
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001189func TestCcLibraryStaticProductVariableSelects(t *testing.T) {
1190 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1191 description: "cc_library_static product variable selects",
1192 moduleTypeUnderTest: "cc_library_static",
1193 moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
1194 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001195 blueprint: soongCcLibraryStaticPreamble + `
1196cc_library_static {
1197 name: "foo_static",
1198 srcs: ["common.c"],
1199 product_variables: {
1200 malloc_not_svelte: {
1201 cflags: ["-Wmalloc_not_svelte"],
1202 },
1203 malloc_zero_contents: {
1204 cflags: ["-Wmalloc_zero_contents"],
1205 },
1206 binder32bit: {
1207 cflags: ["-Wbinder32bit"],
1208 },
1209 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001210 include_build_directory: false,
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001211} `,
1212 expectedBazelTargets: []string{`cc_library_static(
1213 name = "foo_static",
Liz Kammer8337ea42021-09-10 10:06:32 -04001214 copts = select({
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001215 "//build/bazel/product_variables:binder32bit": ["-Wbinder32bit"],
1216 "//conditions:default": [],
1217 }) + select({
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001218 "//build/bazel/product_variables:malloc_not_svelte": ["-Wmalloc_not_svelte"],
1219 "//conditions:default": [],
1220 }) + select({
1221 "//build/bazel/product_variables:malloc_zero_contents": ["-Wmalloc_zero_contents"],
1222 "//conditions:default": [],
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001223 }),
Chris Parsons990c4f42021-05-25 12:10:58 -04001224 srcs_c = ["common.c"],
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001225)`},
1226 })
1227}
1228
1229func TestCcLibraryStaticProductVariableArchSpecificSelects(t *testing.T) {
1230 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1231 description: "cc_library_static arch-specific product variable selects",
1232 moduleTypeUnderTest: "cc_library_static",
1233 moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
1234 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001235 filesystem: map[string]string{},
1236 blueprint: soongCcLibraryStaticPreamble + `
1237cc_library_static {
1238 name: "foo_static",
1239 srcs: ["common.c"],
1240 product_variables: {
1241 malloc_not_svelte: {
1242 cflags: ["-Wmalloc_not_svelte"],
1243 },
1244 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001245 arch: {
1246 arm64: {
1247 product_variables: {
1248 malloc_not_svelte: {
1249 cflags: ["-Warm64_malloc_not_svelte"],
1250 },
1251 },
1252 },
1253 },
1254 multilib: {
1255 lib32: {
1256 product_variables: {
1257 malloc_not_svelte: {
1258 cflags: ["-Wlib32_malloc_not_svelte"],
1259 },
1260 },
1261 },
1262 },
1263 target: {
1264 android: {
1265 product_variables: {
1266 malloc_not_svelte: {
1267 cflags: ["-Wandroid_malloc_not_svelte"],
1268 },
1269 },
1270 }
1271 },
1272 include_build_directory: false,
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001273} `,
1274 expectedBazelTargets: []string{`cc_library_static(
1275 name = "foo_static",
Liz Kammer8337ea42021-09-10 10:06:32 -04001276 copts = select({
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001277 "//build/bazel/product_variables:malloc_not_svelte": ["-Wmalloc_not_svelte"],
1278 "//conditions:default": [],
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001279 }) + select({
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001280 "//build/bazel/product_variables:malloc_not_svelte-android": ["-Wandroid_malloc_not_svelte"],
1281 "//conditions:default": [],
1282 }) + select({
1283 "//build/bazel/product_variables:malloc_not_svelte-arm": ["-Wlib32_malloc_not_svelte"],
1284 "//conditions:default": [],
1285 }) + select({
1286 "//build/bazel/product_variables:malloc_not_svelte-arm64": ["-Warm64_malloc_not_svelte"],
1287 "//conditions:default": [],
1288 }) + select({
1289 "//build/bazel/product_variables:malloc_not_svelte-x86": ["-Wlib32_malloc_not_svelte"],
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001290 "//conditions:default": [],
1291 }),
Chris Parsons990c4f42021-05-25 12:10:58 -04001292 srcs_c = ["common.c"],
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001293)`},
1294 })
1295}
Liz Kammerba7a9c52021-05-26 08:45:30 -04001296
1297func TestCcLibraryStaticProductVariableStringReplacement(t *testing.T) {
1298 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Chris Parsons69fa9f92021-07-13 11:47:44 -04001299 description: "cc_library_static product variable string replacement",
Liz Kammerba7a9c52021-05-26 08:45:30 -04001300 moduleTypeUnderTest: "cc_library_static",
1301 moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
1302 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
Liz Kammerba7a9c52021-05-26 08:45:30 -04001303 filesystem: map[string]string{},
1304 blueprint: soongCcLibraryStaticPreamble + `
1305cc_library_static {
1306 name: "foo_static",
Chris Parsons69fa9f92021-07-13 11:47:44 -04001307 srcs: ["common.S"],
Liz Kammerba7a9c52021-05-26 08:45:30 -04001308 product_variables: {
1309 platform_sdk_version: {
1310 asflags: ["-DPLATFORM_SDK_VERSION=%d"],
1311 },
1312 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001313 include_build_directory: false,
Liz Kammerba7a9c52021-05-26 08:45:30 -04001314} `,
1315 expectedBazelTargets: []string{`cc_library_static(
1316 name = "foo_static",
Liz Kammer8337ea42021-09-10 10:06:32 -04001317 asflags = select({
Liz Kammerba7a9c52021-05-26 08:45:30 -04001318 "//build/bazel/product_variables:platform_sdk_version": ["-DPLATFORM_SDK_VERSION=$(Platform_sdk_version)"],
1319 "//conditions:default": [],
1320 }),
Chris Parsons69fa9f92021-07-13 11:47:44 -04001321 srcs_as = ["common.S"],
Liz Kammerba7a9c52021-05-26 08:45:30 -04001322)`},
1323 })
1324}
Chris Parsons51f8c392021-08-03 21:01:05 -04001325
1326func TestStaticLibrary_SystemSharedLibsRootEmpty(t *testing.T) {
1327 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1328 description: "cc_library_static system_shared_lib empty root",
1329 moduleTypeUnderTest: "cc_library_static",
1330 moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
1331 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
1332 blueprint: soongCcLibraryStaticPreamble + `
1333cc_library_static {
1334 name: "root_empty",
Liz Kammer8337ea42021-09-10 10:06:32 -04001335 system_shared_libs: [],
1336 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001337}
1338`,
1339 expectedBazelTargets: []string{`cc_library_static(
1340 name = "root_empty",
Chris Parsons51f8c392021-08-03 21:01:05 -04001341 system_dynamic_deps = [],
1342)`},
1343 })
1344}
1345
1346func TestStaticLibrary_SystemSharedLibsStaticEmpty(t *testing.T) {
1347 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1348 description: "cc_library_static system_shared_lib empty static default",
1349 moduleTypeUnderTest: "cc_library_static",
1350 moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
1351 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
1352 blueprint: soongCcLibraryStaticPreamble + `
1353cc_defaults {
1354 name: "static_empty_defaults",
1355 static: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001356 system_shared_libs: [],
1357 },
1358 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001359}
1360cc_library_static {
1361 name: "static_empty",
Liz Kammer8337ea42021-09-10 10:06:32 -04001362 defaults: ["static_empty_defaults"],
Chris Parsons51f8c392021-08-03 21:01:05 -04001363}
1364`,
1365 expectedBazelTargets: []string{`cc_library_static(
1366 name = "static_empty",
Chris Parsons51f8c392021-08-03 21:01:05 -04001367 system_dynamic_deps = [],
1368)`},
1369 })
1370}
1371
1372func TestStaticLibrary_SystemSharedLibsBionicEmpty(t *testing.T) {
1373 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1374 description: "cc_library_static system_shared_lib empty for bionic variant",
1375 moduleTypeUnderTest: "cc_library_static",
1376 moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
1377 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
1378 blueprint: soongCcLibraryStaticPreamble + `
1379cc_library_static {
1380 name: "target_bionic_empty",
1381 target: {
1382 bionic: {
1383 system_shared_libs: [],
1384 },
1385 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001386 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001387}
1388`,
1389 expectedBazelTargets: []string{`cc_library_static(
1390 name = "target_bionic_empty",
Chris Parsons51f8c392021-08-03 21:01:05 -04001391 system_dynamic_deps = [],
1392)`},
1393 })
1394}
1395
1396func TestStaticLibrary_SystemSharedLibsLinuxBionicEmpty(t *testing.T) {
1397 // Note that this behavior is technically incorrect (it's a simplification).
1398 // The correct behavior would be if bp2build wrote `system_dynamic_deps = []`
1399 // only for linux_bionic, but `android` had `["libc", "libdl", "libm"].
1400 // b/195791252 tracks the fix.
1401 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1402 description: "cc_library_static system_shared_lib empty for linux_bionic variant",
1403 moduleTypeUnderTest: "cc_library_static",
1404 moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
1405 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
1406 blueprint: soongCcLibraryStaticPreamble + `
1407cc_library_static {
1408 name: "target_linux_bionic_empty",
1409 target: {
1410 linux_bionic: {
1411 system_shared_libs: [],
1412 },
1413 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001414 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001415}
1416`,
1417 expectedBazelTargets: []string{`cc_library_static(
1418 name = "target_linux_bionic_empty",
Chris Parsons51f8c392021-08-03 21:01:05 -04001419 system_dynamic_deps = [],
1420)`},
1421 })
1422}
1423
1424func TestStaticLibrary_SystemSharedLibsBionic(t *testing.T) {
1425 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1426 description: "cc_library_static system_shared_libs set for bionic variant",
1427 moduleTypeUnderTest: "cc_library_static",
1428 moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
1429 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
1430 blueprint: soongCcLibraryStaticPreamble + `
1431cc_library{name: "libc"}
1432
1433cc_library_static {
1434 name: "target_bionic",
1435 target: {
1436 bionic: {
1437 system_shared_libs: ["libc"],
1438 },
1439 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001440 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001441}
1442`,
1443 expectedBazelTargets: []string{`cc_library_static(
1444 name = "target_bionic",
Chris Parsons51f8c392021-08-03 21:01:05 -04001445 system_dynamic_deps = select({
Chris Parsons2dde0cb2021-10-01 14:45:30 -04001446 "//build/bazel/platforms/os:android": [":libc"],
1447 "//build/bazel/platforms/os:linux_bionic": [":libc"],
Chris Parsons51f8c392021-08-03 21:01:05 -04001448 "//conditions:default": [],
1449 }),
1450)`},
1451 })
1452}
1453
1454func TestStaticLibrary_SystemSharedLibsLinuxRootAndLinuxBionic(t *testing.T) {
1455 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1456 description: "cc_library_static system_shared_libs set for root and linux_bionic variant",
1457 moduleTypeUnderTest: "cc_library_static",
1458 moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
1459 moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
1460 blueprint: soongCcLibraryStaticPreamble + `
1461cc_library{name: "libc"}
1462cc_library{name: "libm"}
1463
1464cc_library_static {
1465 name: "target_linux_bionic",
Liz Kammer8337ea42021-09-10 10:06:32 -04001466 system_shared_libs: ["libc"],
Chris Parsons51f8c392021-08-03 21:01:05 -04001467 target: {
1468 linux_bionic: {
1469 system_shared_libs: ["libm"],
1470 },
1471 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001472 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001473}
1474`,
1475 expectedBazelTargets: []string{`cc_library_static(
1476 name = "target_linux_bionic",
Chris Parsons51f8c392021-08-03 21:01:05 -04001477 system_dynamic_deps = [":libc"] + select({
1478 "//build/bazel/platforms/os:linux_bionic": [":libm"],
1479 "//conditions:default": [],
1480 }),
1481)`},
1482 })
1483}