blob: fac741cf83dc9f3dbe1645b664b4d0589ba998de [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 }
Rupert Shuttleworth095081c2021-03-25 09:06:03 +000068}
69
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020070func registerCcLibraryStaticModuleTypes(ctx android.RegistrationContext) {
71 cc.RegisterCCBuildComponents(ctx)
72 ctx.RegisterModuleType("toolchain_library", cc.ToolchainLibraryFactory)
73 ctx.RegisterModuleType("cc_library_headers", cc.LibraryHeaderFactory)
74 ctx.RegisterModuleType("genrule", genrule.GenRuleFactory)
Chris Parsons51f8c392021-08-03 21:01:05 -040075 // Required for system_shared_libs dependencies.
76 ctx.RegisterModuleType("cc_library", cc.LibraryFactory)
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020077}
78
79func runCcLibraryStaticTestCase(t *testing.T, tc bp2buildTestCase) {
Liz Kammere4982e82021-05-25 10:39:35 -040080 t.Helper()
Liz Kammer78cfdaa2021-11-08 12:56:31 -050081
82 (&tc).moduleTypeUnderTest = "cc_library_static"
83 (&tc).moduleTypeUnderTestFactory = cc.LibraryStaticFactory
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020084 runBp2BuildTestCase(t, registerCcLibraryStaticModuleTypes, tc)
85}
86
87func TestCcLibraryStaticSimple(t *testing.T) {
88 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -050089 description: "cc_library_static test",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020090 filesystem: map[string]string{
91 // NOTE: include_dir headers *should not* appear in Bazel hdrs later (?)
92 "include_dir_1/include_dir_1_a.h": "",
93 "include_dir_1/include_dir_1_b.h": "",
94 "include_dir_2/include_dir_2_a.h": "",
95 "include_dir_2/include_dir_2_b.h": "",
96 // NOTE: local_include_dir headers *should not* appear in Bazel hdrs later (?)
97 "local_include_dir_1/local_include_dir_1_a.h": "",
98 "local_include_dir_1/local_include_dir_1_b.h": "",
99 "local_include_dir_2/local_include_dir_2_a.h": "",
100 "local_include_dir_2/local_include_dir_2_b.h": "",
101 // NOTE: export_include_dir headers *should* appear in Bazel hdrs later
102 "export_include_dir_1/export_include_dir_1_a.h": "",
103 "export_include_dir_1/export_include_dir_1_b.h": "",
104 "export_include_dir_2/export_include_dir_2_a.h": "",
105 "export_include_dir_2/export_include_dir_2_b.h": "",
106 // NOTE: Soong implicitly includes headers in the current directory
107 "implicit_include_1.h": "",
108 "implicit_include_2.h": "",
109 },
110 blueprint: soongCcLibraryStaticPreamble + `
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000111cc_library_headers {
112 name: "header_lib_1",
113 export_include_dirs: ["header_lib_1"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400114 bazel_module: { bp2build_available: false },
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000115}
116
117cc_library_headers {
118 name: "header_lib_2",
119 export_include_dirs: ["header_lib_2"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400120 bazel_module: { bp2build_available: false },
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000121}
122
123cc_library_static {
124 name: "static_lib_1",
125 srcs: ["static_lib_1.cc"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400126 bazel_module: { bp2build_available: false },
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000127}
128
129cc_library_static {
130 name: "static_lib_2",
131 srcs: ["static_lib_2.cc"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400132 bazel_module: { bp2build_available: false },
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000133}
134
135cc_library_static {
136 name: "whole_static_lib_1",
137 srcs: ["whole_static_lib_1.cc"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400138 bazel_module: { bp2build_available: false },
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000139}
140
141cc_library_static {
142 name: "whole_static_lib_2",
143 srcs: ["whole_static_lib_2.cc"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400144 bazel_module: { bp2build_available: false },
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000145}
146
147cc_library_static {
148 name: "foo_static",
149 srcs: [
150 "foo_static1.cc",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000151 "foo_static2.cc",
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000152 ],
153 cflags: [
154 "-Dflag1",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000155 "-Dflag2"
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000156 ],
157 static_libs: [
158 "static_lib_1",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000159 "static_lib_2"
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000160 ],
161 whole_static_libs: [
162 "whole_static_lib_1",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000163 "whole_static_lib_2"
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000164 ],
165 include_dirs: [
Jingwen Chened9c17d2021-04-13 07:14:55 +0000166 "include_dir_1",
167 "include_dir_2",
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000168 ],
169 local_include_dirs: [
170 "local_include_dir_1",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000171 "local_include_dir_2",
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000172 ],
173 export_include_dirs: [
Chris Parsonsd6358772021-05-18 18:35:24 -0400174 "export_include_dir_1",
175 "export_include_dir_2"
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000176 ],
177 header_libs: [
178 "header_lib_1",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000179 "header_lib_2"
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000180 ],
181
182 // TODO: Also support export_header_lib_headers
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000183}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500184 expectedBazelTargets: []string{
185 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
186 "absolute_includes": `[
Liz Kammer35687bc2021-09-10 10:07:07 -0400187 "include_dir_1",
188 "include_dir_2",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500189 ]`,
190 "copts": `[
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000191 "-Dflag1",
192 "-Dflag2",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500193 ]`,
194 "export_includes": `[
Liz Kammer5fad5012021-09-09 14:08:21 -0400195 "export_include_dir_1",
196 "export_include_dir_2",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500197 ]`,
198 "implementation_deps": `[
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000199 ":header_lib_1",
200 ":header_lib_2",
201 ":static_lib_1",
202 ":static_lib_2",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500203 ]`,
204 "local_includes": `[
Liz Kammer35687bc2021-09-10 10:07:07 -0400205 "local_include_dir_1",
206 "local_include_dir_2",
207 ".",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500208 ]`,
209 "srcs": `[
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000210 "foo_static1.cc",
211 "foo_static2.cc",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500212 ]`,
213 "whole_archive_deps": `[
Chris Parsons08648312021-05-06 16:23:19 -0400214 ":whole_static_lib_1",
215 ":whole_static_lib_2",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500216 ]`,
217 }),
218 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200219 })
220}
221
222func TestCcLibraryStaticSubpackage(t *testing.T) {
223 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500224 description: "cc_library_static subpackage test",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200225 filesystem: map[string]string{
226 // subpackage with subdirectory
227 "subpackage/Android.bp": "",
228 "subpackage/subpackage_header.h": "",
229 "subpackage/subdirectory/subdirectory_header.h": "",
230 // subsubpackage with subdirectory
231 "subpackage/subsubpackage/Android.bp": "",
232 "subpackage/subsubpackage/subsubpackage_header.h": "",
233 "subpackage/subsubpackage/subdirectory/subdirectory_header.h": "",
234 // subsubsubpackage with subdirectory
235 "subpackage/subsubpackage/subsubsubpackage/Android.bp": "",
236 "subpackage/subsubpackage/subsubsubpackage/subsubsubpackage_header.h": "",
237 "subpackage/subsubpackage/subsubsubpackage/subdirectory/subdirectory_header.h": "",
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000238 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200239 blueprint: soongCcLibraryStaticPreamble + `
Rupert Shuttleworthc143cc52021-04-13 13:08:04 -0400240cc_library_static {
241 name: "foo_static",
Liz Kammer35687bc2021-09-10 10:07:07 -0400242 srcs: [],
Rupert Shuttleworthc143cc52021-04-13 13:08:04 -0400243 include_dirs: [
Liz Kammer35687bc2021-09-10 10:07:07 -0400244 "subpackage",
Rupert Shuttleworthc143cc52021-04-13 13:08:04 -0400245 ],
Rupert Shuttleworthc143cc52021-04-13 13:08:04 -0400246}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500247 expectedBazelTargets: []string{
248 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
249 "absolute_includes": `["subpackage"]`,
250 "local_includes": `["."]`,
251 }),
252 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200253 })
254}
255
256func TestCcLibraryStaticExportIncludeDir(t *testing.T) {
257 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500258 description: "cc_library_static export include dir",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200259 filesystem: map[string]string{
260 // subpackage with subdirectory
261 "subpackage/Android.bp": "",
262 "subpackage/subpackage_header.h": "",
263 "subpackage/subdirectory/subdirectory_header.h": "",
Rupert Shuttleworthc143cc52021-04-13 13:08:04 -0400264 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200265 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chened9c17d2021-04-13 07:14:55 +0000266cc_library_static {
267 name: "foo_static",
268 export_include_dirs: ["subpackage"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400269 include_build_directory: false,
Jingwen Chened9c17d2021-04-13 07:14:55 +0000270}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500271 expectedBazelTargets: []string{
272 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
273 "export_includes": `["subpackage"]`,
274 }),
275 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200276 })
277}
278
279func TestCcLibraryStaticExportSystemIncludeDir(t *testing.T) {
280 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500281 description: "cc_library_static export system include dir",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200282 filesystem: map[string]string{
283 // subpackage with subdirectory
284 "subpackage/Android.bp": "",
285 "subpackage/subpackage_header.h": "",
286 "subpackage/subdirectory/subdirectory_header.h": "",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000287 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200288 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chened9c17d2021-04-13 07:14:55 +0000289cc_library_static {
290 name: "foo_static",
291 export_system_include_dirs: ["subpackage"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400292 include_build_directory: false,
Jingwen Chened9c17d2021-04-13 07:14:55 +0000293}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500294 expectedBazelTargets: []string{
295 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
296 "export_system_includes": `["subpackage"]`,
297 }),
298 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200299 })
300}
301
302func TestCcLibraryStaticManyIncludeDirs(t *testing.T) {
303 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500304 description: "cc_library_static include_dirs, local_include_dirs, export_include_dirs (b/183742505)",
305 dir: "subpackage",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200306 filesystem: map[string]string{
307 // subpackage with subdirectory
308 "subpackage/Android.bp": `
Jingwen Chened9c17d2021-04-13 07:14:55 +0000309cc_library_static {
310 name: "foo_static",
311 // include_dirs are workspace/root relative
312 include_dirs: [
313 "subpackage/subsubpackage",
314 "subpackage2",
315 "subpackage3/subsubpackage"
316 ],
317 local_include_dirs: ["subsubpackage2"], // module dir relative
318 export_include_dirs: ["./exported_subsubpackage"], // module dir relative
319 include_build_directory: true,
320 bazel_module: { bp2build_available: true },
321}`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200322 "subpackage/subsubpackage/header.h": "",
323 "subpackage/subsubpackage2/header.h": "",
324 "subpackage/exported_subsubpackage/header.h": "",
325 "subpackage2/header.h": "",
326 "subpackage3/subsubpackage/header.h": "",
327 },
328 blueprint: soongCcLibraryStaticPreamble,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500329 expectedBazelTargets: []string{
330 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
331 "absolute_includes": `[
Liz Kammer35687bc2021-09-10 10:07:07 -0400332 "subpackage/subsubpackage",
333 "subpackage2",
334 "subpackage3/subsubpackage",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500335 ]`,
336 "export_includes": `["./exported_subsubpackage"]`,
337 "local_includes": `[
Liz Kammer35687bc2021-09-10 10:07:07 -0400338 "subsubpackage2",
339 ".",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500340 ]`,
341 })},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200342 })
343}
344
345func TestCcLibraryStaticIncludeBuildDirectoryDisabled(t *testing.T) {
346 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500347 description: "cc_library_static include_build_directory disabled",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200348 filesystem: map[string]string{
349 // subpackage with subdirectory
350 "subpackage/Android.bp": "",
351 "subpackage/subpackage_header.h": "",
352 "subpackage/subdirectory/subdirectory_header.h": "",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000353 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200354 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chened9c17d2021-04-13 07:14:55 +0000355cc_library_static {
356 name: "foo_static",
357 include_dirs: ["subpackage"], // still used, but local_include_dirs is recommended
358 local_include_dirs: ["subpackage2"],
359 include_build_directory: false,
360}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500361 expectedBazelTargets: []string{
362 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
363 "absolute_includes": `["subpackage"]`,
364 "local_includes": `["subpackage2"]`,
365 }),
366 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200367 })
368}
369
370func TestCcLibraryStaticIncludeBuildDirectoryEnabled(t *testing.T) {
371 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500372 description: "cc_library_static include_build_directory enabled",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200373 filesystem: map[string]string{
374 // subpackage with subdirectory
375 "subpackage/Android.bp": "",
376 "subpackage/subpackage_header.h": "",
377 "subpackage2/Android.bp": "",
378 "subpackage2/subpackage2_header.h": "",
379 "subpackage/subdirectory/subdirectory_header.h": "",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000380 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200381 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chened9c17d2021-04-13 07:14:55 +0000382cc_library_static {
383 name: "foo_static",
384 include_dirs: ["subpackage"], // still used, but local_include_dirs is recommended
385 local_include_dirs: ["subpackage2"],
386 include_build_directory: true,
387}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500388 expectedBazelTargets: []string{
389 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
390 "absolute_includes": `["subpackage"]`,
391 "local_includes": `[
Liz Kammer35687bc2021-09-10 10:07:07 -0400392 "subpackage2",
393 ".",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500394 ]`,
395 }),
396 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200397 })
398}
399
400func TestCcLibraryStaticArchSpecificStaticLib(t *testing.T) {
401 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500402 description: "cc_library_static arch-specific static_libs",
403 filesystem: map[string]string{},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200404 blueprint: soongCcLibraryStaticPreamble + `
Liz Kammer8337ea42021-09-10 10:06:32 -0400405cc_library_static {
406 name: "static_dep",
407 bazel_module: { bp2build_available: false },
408}
409cc_library_static {
410 name: "static_dep2",
411 bazel_module: { bp2build_available: false },
412}
Jingwen Chened9c17d2021-04-13 07:14:55 +0000413cc_library_static {
414 name: "foo_static",
415 arch: { arm64: { static_libs: ["static_dep"], whole_static_libs: ["static_dep2"] } },
Liz Kammer8337ea42021-09-10 10:06:32 -0400416 include_build_directory: false,
Jingwen Chened9c17d2021-04-13 07:14:55 +0000417}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500418 expectedBazelTargets: []string{
419 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
420 "implementation_deps": `select({
Chris Parsons08648312021-05-06 16:23:19 -0400421 "//build/bazel/platforms/arch:arm64": [":static_dep"],
Jingwen Chened9c17d2021-04-13 07:14:55 +0000422 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500423 })`,
424 "whole_archive_deps": `select({
Chris Parsons08648312021-05-06 16:23:19 -0400425 "//build/bazel/platforms/arch:arm64": [":static_dep2"],
426 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500427 })`,
428 }),
429 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200430 })
431}
432
433func TestCcLibraryStaticOsSpecificStaticLib(t *testing.T) {
434 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500435 description: "cc_library_static os-specific static_libs",
436 filesystem: map[string]string{},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200437 blueprint: soongCcLibraryStaticPreamble + `
Liz Kammer8337ea42021-09-10 10:06:32 -0400438cc_library_static {
439 name: "static_dep",
440 bazel_module: { bp2build_available: false },
441}
442cc_library_static {
443 name: "static_dep2",
444 bazel_module: { bp2build_available: false },
445}
Jingwen Chened9c17d2021-04-13 07:14:55 +0000446cc_library_static {
447 name: "foo_static",
448 target: { android: { static_libs: ["static_dep"], whole_static_libs: ["static_dep2"] } },
Liz Kammer8337ea42021-09-10 10:06:32 -0400449 include_build_directory: false,
Jingwen Chened9c17d2021-04-13 07:14:55 +0000450}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500451 expectedBazelTargets: []string{
452 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
453 "implementation_deps": `select({
Chris Parsons08648312021-05-06 16:23:19 -0400454 "//build/bazel/platforms/os:android": [":static_dep"],
Jingwen Chened9c17d2021-04-13 07:14:55 +0000455 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500456 })`,
457 "whole_archive_deps": `select({
Chris Parsons08648312021-05-06 16:23:19 -0400458 "//build/bazel/platforms/os:android": [":static_dep2"],
459 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500460 })`,
461 }),
462 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200463 })
464}
465
466func TestCcLibraryStaticBaseArchOsSpecificStaticLib(t *testing.T) {
467 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500468 description: "cc_library_static base, arch and os-specific static_libs",
469 filesystem: map[string]string{},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200470 blueprint: soongCcLibraryStaticPreamble + `
Liz Kammer8337ea42021-09-10 10:06:32 -0400471cc_library_static {
472 name: "static_dep",
473 bazel_module: { bp2build_available: false },
474}
475cc_library_static {
476 name: "static_dep2",
477 bazel_module: { bp2build_available: false },
478}
479cc_library_static {
480 name: "static_dep3",
481 bazel_module: { bp2build_available: false },
482}
483cc_library_static {
484 name: "static_dep4",
485 bazel_module: { bp2build_available: false },
486}
Jingwen Chened9c17d2021-04-13 07:14:55 +0000487cc_library_static {
488 name: "foo_static",
489 static_libs: ["static_dep"],
490 whole_static_libs: ["static_dep2"],
491 target: { android: { static_libs: ["static_dep3"] } },
492 arch: { arm64: { static_libs: ["static_dep4"] } },
Liz Kammer8337ea42021-09-10 10:06:32 -0400493 include_build_directory: false,
Jingwen Chened9c17d2021-04-13 07:14:55 +0000494}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500495 expectedBazelTargets: []string{
496 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
497 "implementation_deps": `[":static_dep"] + select({
Jingwen Chened9c17d2021-04-13 07:14:55 +0000498 "//build/bazel/platforms/arch:arm64": [":static_dep4"],
499 "//conditions:default": [],
500 }) + select({
501 "//build/bazel/platforms/os:android": [":static_dep3"],
502 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500503 })`,
504 "whole_archive_deps": `[":static_dep2"]`,
505 }),
506 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200507 })
508}
509
510func TestCcLibraryStaticSimpleExcludeSrcs(t *testing.T) {
511 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500512 description: "cc_library_static simple exclude_srcs",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200513 filesystem: map[string]string{
514 "common.c": "",
515 "foo-a.c": "",
516 "foo-excluded.c": "",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000517 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200518 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chene32e9e02021-04-23 09:17:24 +0000519cc_library_static {
520 name: "foo_static",
521 srcs: ["common.c", "foo-*.c"],
522 exclude_srcs: ["foo-excluded.c"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400523 include_build_directory: false,
Jingwen Chene32e9e02021-04-23 09:17:24 +0000524}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500525 expectedBazelTargets: []string{
526 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
527 "srcs_c": `[
Jingwen Chene32e9e02021-04-23 09:17:24 +0000528 "common.c",
529 "foo-a.c",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500530 ]`,
531 }),
532 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200533 })
534}
535
536func TestCcLibraryStaticOneArchSrcs(t *testing.T) {
537 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500538 description: "cc_library_static one arch specific srcs",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200539 filesystem: map[string]string{
540 "common.c": "",
541 "foo-arm.c": "",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000542 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200543 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chene32e9e02021-04-23 09:17:24 +0000544cc_library_static {
545 name: "foo_static",
546 srcs: ["common.c"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400547 arch: { arm: { srcs: ["foo-arm.c"] } },
548 include_build_directory: false,
Jingwen Chene32e9e02021-04-23 09:17:24 +0000549}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500550 expectedBazelTargets: []string{
551 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
552 "srcs_c": `["common.c"] + select({
Jingwen Chene32e9e02021-04-23 09:17:24 +0000553 "//build/bazel/platforms/arch:arm": ["foo-arm.c"],
554 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500555 })`,
556 }),
557 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200558 })
559}
560
561func TestCcLibraryStaticOneArchSrcsExcludeSrcs(t *testing.T) {
562 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500563 description: "cc_library_static one arch specific srcs and exclude_srcs",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200564 filesystem: map[string]string{
565 "common.c": "",
566 "for-arm.c": "",
567 "not-for-arm.c": "",
568 "not-for-anything.c": "",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000569 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200570 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chene32e9e02021-04-23 09:17:24 +0000571cc_library_static {
572 name: "foo_static",
573 srcs: ["common.c", "not-for-*.c"],
574 exclude_srcs: ["not-for-anything.c"],
575 arch: {
576 arm: { srcs: ["for-arm.c"], exclude_srcs: ["not-for-arm.c"] },
577 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400578 include_build_directory: false,
Jingwen Chene32e9e02021-04-23 09:17:24 +0000579}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500580 expectedBazelTargets: []string{
581 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
582 "srcs_c": `["common.c"] + select({
Jingwen Chene32e9e02021-04-23 09:17:24 +0000583 "//build/bazel/platforms/arch:arm": ["for-arm.c"],
584 "//conditions:default": ["not-for-arm.c"],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500585 })`,
586 }),
587 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200588 })
589}
590
591func TestCcLibraryStaticTwoArchExcludeSrcs(t *testing.T) {
592 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500593 description: "cc_library_static arch specific exclude_srcs for 2 architectures",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200594 filesystem: map[string]string{
595 "common.c": "",
596 "for-arm.c": "",
597 "for-x86.c": "",
598 "not-for-arm.c": "",
599 "not-for-x86.c": "",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000600 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200601 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chene32e9e02021-04-23 09:17:24 +0000602cc_library_static {
603 name: "foo_static",
604 srcs: ["common.c", "not-for-*.c"],
605 exclude_srcs: ["not-for-everything.c"],
606 arch: {
607 arm: { srcs: ["for-arm.c"], exclude_srcs: ["not-for-arm.c"] },
608 x86: { srcs: ["for-x86.c"], exclude_srcs: ["not-for-x86.c"] },
609 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400610 include_build_directory: false,
Jingwen Chene32e9e02021-04-23 09:17:24 +0000611} `,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500612 expectedBazelTargets: []string{
613 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
614 "srcs_c": `["common.c"] + select({
Jingwen Chene32e9e02021-04-23 09:17:24 +0000615 "//build/bazel/platforms/arch:arm": [
Jingwen Chene32e9e02021-04-23 09:17:24 +0000616 "not-for-x86.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400617 "for-arm.c",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000618 ],
619 "//build/bazel/platforms/arch:x86": [
Jingwen Chene32e9e02021-04-23 09:17:24 +0000620 "not-for-arm.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400621 "for-x86.c",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000622 ],
623 "//conditions:default": [
624 "not-for-arm.c",
625 "not-for-x86.c",
626 ],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500627 })`,
628 }),
629 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200630 })
631}
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500632
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200633func TestCcLibraryStaticFourArchExcludeSrcs(t *testing.T) {
634 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500635 description: "cc_library_static arch specific exclude_srcs for 4 architectures",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200636 filesystem: map[string]string{
637 "common.c": "",
638 "for-arm.c": "",
639 "for-arm64.c": "",
640 "for-x86.c": "",
641 "for-x86_64.c": "",
642 "not-for-arm.c": "",
643 "not-for-arm64.c": "",
644 "not-for-x86.c": "",
645 "not-for-x86_64.c": "",
646 "not-for-everything.c": "",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000647 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200648 blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chene32e9e02021-04-23 09:17:24 +0000649cc_library_static {
650 name: "foo_static",
651 srcs: ["common.c", "not-for-*.c"],
652 exclude_srcs: ["not-for-everything.c"],
653 arch: {
654 arm: { srcs: ["for-arm.c"], exclude_srcs: ["not-for-arm.c"] },
655 arm64: { srcs: ["for-arm64.c"], exclude_srcs: ["not-for-arm64.c"] },
656 x86: { srcs: ["for-x86.c"], exclude_srcs: ["not-for-x86.c"] },
657 x86_64: { srcs: ["for-x86_64.c"], exclude_srcs: ["not-for-x86_64.c"] },
Liz Kammer8337ea42021-09-10 10:06:32 -0400658 },
659 include_build_directory: false,
Jingwen Chene32e9e02021-04-23 09:17:24 +0000660} `,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500661 expectedBazelTargets: []string{
662 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
663 "srcs_c": `["common.c"] + select({
Jingwen Chene32e9e02021-04-23 09:17:24 +0000664 "//build/bazel/platforms/arch:arm": [
Jingwen Chene32e9e02021-04-23 09:17:24 +0000665 "not-for-arm64.c",
666 "not-for-x86.c",
667 "not-for-x86_64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400668 "for-arm.c",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000669 ],
670 "//build/bazel/platforms/arch:arm64": [
Jingwen Chene32e9e02021-04-23 09:17:24 +0000671 "not-for-arm.c",
672 "not-for-x86.c",
673 "not-for-x86_64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400674 "for-arm64.c",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000675 ],
676 "//build/bazel/platforms/arch:x86": [
Jingwen Chene32e9e02021-04-23 09:17:24 +0000677 "not-for-arm.c",
678 "not-for-arm64.c",
679 "not-for-x86_64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400680 "for-x86.c",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000681 ],
682 "//build/bazel/platforms/arch:x86_64": [
Jingwen Chene32e9e02021-04-23 09:17:24 +0000683 "not-for-arm.c",
684 "not-for-arm64.c",
685 "not-for-x86.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400686 "for-x86_64.c",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000687 ],
688 "//conditions:default": [
689 "not-for-arm.c",
690 "not-for-arm64.c",
691 "not-for-x86.c",
692 "not-for-x86_64.c",
693 ],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500694 })`,
695 }),
696 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200697 })
698}
699
Liz Kammer2b07ec72021-05-26 15:08:27 -0400700func TestCcLibraryStaticOneArchEmpty(t *testing.T) {
701 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500702 description: "cc_library_static one arch empty",
Liz Kammer2b07ec72021-05-26 15:08:27 -0400703 filesystem: map[string]string{
704 "common.cc": "",
705 "foo-no-arm.cc": "",
706 "foo-excluded.cc": "",
707 },
708 blueprint: soongCcLibraryStaticPreamble + `
709cc_library_static {
710 name: "foo_static",
711 srcs: ["common.cc", "foo-*.cc"],
712 exclude_srcs: ["foo-excluded.cc"],
713 arch: {
714 arm: { exclude_srcs: ["foo-no-arm.cc"] },
715 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400716 include_build_directory: false,
Liz Kammer2b07ec72021-05-26 15:08:27 -0400717}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500718 expectedBazelTargets: []string{
719 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
720 "srcs": `["common.cc"] + select({
Liz Kammer2b07ec72021-05-26 15:08:27 -0400721 "//build/bazel/platforms/arch:arm": [],
722 "//conditions:default": ["foo-no-arm.cc"],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500723 })`,
724 }),
725 },
Liz Kammer2b07ec72021-05-26 15:08:27 -0400726 })
727}
728
729func TestCcLibraryStaticOneArchEmptyOtherSet(t *testing.T) {
730 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500731 description: "cc_library_static one arch empty other set",
Liz Kammer2b07ec72021-05-26 15:08:27 -0400732 filesystem: map[string]string{
733 "common.cc": "",
734 "foo-no-arm.cc": "",
735 "x86-only.cc": "",
736 "foo-excluded.cc": "",
737 },
738 blueprint: soongCcLibraryStaticPreamble + `
739cc_library_static {
740 name: "foo_static",
741 srcs: ["common.cc", "foo-*.cc"],
742 exclude_srcs: ["foo-excluded.cc"],
743 arch: {
744 arm: { exclude_srcs: ["foo-no-arm.cc"] },
745 x86: { srcs: ["x86-only.cc"] },
746 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400747 include_build_directory: false,
Liz Kammer2b07ec72021-05-26 15:08:27 -0400748}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500749 expectedBazelTargets: []string{
750 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
751 "srcs": `["common.cc"] + select({
Liz Kammer2b07ec72021-05-26 15:08:27 -0400752 "//build/bazel/platforms/arch:arm": [],
753 "//build/bazel/platforms/arch:x86": [
754 "foo-no-arm.cc",
755 "x86-only.cc",
756 ],
757 "//conditions:default": ["foo-no-arm.cc"],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500758 })`,
759 }),
760 },
Liz Kammer2b07ec72021-05-26 15:08:27 -0400761 })
762}
763
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200764func TestCcLibraryStaticMultipleDepSameName(t *testing.T) {
765 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500766 description: "cc_library_static multiple dep same name panic",
767 filesystem: map[string]string{},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200768 blueprint: soongCcLibraryStaticPreamble + `
Liz Kammer8337ea42021-09-10 10:06:32 -0400769cc_library_static {
770 name: "static_dep",
771 bazel_module: { bp2build_available: false },
772}
Liz Kammer2b50ce62021-04-26 15:47:28 -0400773cc_library_static {
774 name: "foo_static",
Chris Parsons08648312021-05-06 16:23:19 -0400775 static_libs: ["static_dep", "static_dep"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400776 include_build_directory: false,
Liz Kammer2b50ce62021-04-26 15:47:28 -0400777}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500778 expectedBazelTargets: []string{
779 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
780 "implementation_deps": `[":static_dep"]`,
781 }),
782 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200783 })
784}
785
786func TestCcLibraryStaticOneMultilibSrcsExcludeSrcs(t *testing.T) {
787 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500788 description: "cc_library_static 1 multilib srcs and exclude_srcs",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200789 filesystem: map[string]string{
790 "common.c": "",
791 "for-lib32.c": "",
792 "not-for-lib32.c": "",
Liz Kammer2b50ce62021-04-26 15:47:28 -0400793 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200794 blueprint: soongCcLibraryStaticPreamble + `
Chris Parsonsc424b762021-04-29 18:06:50 -0400795cc_library_static {
796 name: "foo_static",
797 srcs: ["common.c", "not-for-*.c"],
798 multilib: {
799 lib32: { srcs: ["for-lib32.c"], exclude_srcs: ["not-for-lib32.c"] },
800 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400801 include_build_directory: false,
Chris Parsonsc424b762021-04-29 18:06:50 -0400802} `,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500803 expectedBazelTargets: []string{
804 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
805 "srcs_c": `["common.c"] + select({
Chris Parsonsc424b762021-04-29 18:06:50 -0400806 "//build/bazel/platforms/arch:arm": ["for-lib32.c"],
807 "//build/bazel/platforms/arch:x86": ["for-lib32.c"],
808 "//conditions:default": ["not-for-lib32.c"],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500809 })`,
810 }),
811 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200812 })
813}
814
815func TestCcLibraryStaticTwoMultilibSrcsExcludeSrcs(t *testing.T) {
816 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500817 description: "cc_library_static 2 multilib srcs and exclude_srcs",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200818 filesystem: map[string]string{
819 "common.c": "",
820 "for-lib32.c": "",
821 "for-lib64.c": "",
822 "not-for-lib32.c": "",
823 "not-for-lib64.c": "",
Chris Parsonsc424b762021-04-29 18:06:50 -0400824 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200825 blueprint: soongCcLibraryStaticPreamble + `
Chris Parsonsc424b762021-04-29 18:06:50 -0400826cc_library_static {
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500827 name: "foo_static",
Chris Parsonsc424b762021-04-29 18:06:50 -0400828 srcs: ["common.c", "not-for-*.c"],
829 multilib: {
830 lib32: { srcs: ["for-lib32.c"], exclude_srcs: ["not-for-lib32.c"] },
831 lib64: { srcs: ["for-lib64.c"], exclude_srcs: ["not-for-lib64.c"] },
832 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400833 include_build_directory: false,
Chris Parsonsc424b762021-04-29 18:06:50 -0400834} `,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500835 expectedBazelTargets: []string{
836 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
837 "srcs_c": `["common.c"] + select({
Chris Parsonsc424b762021-04-29 18:06:50 -0400838 "//build/bazel/platforms/arch:arm": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400839 "not-for-lib64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400840 "for-lib32.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400841 ],
842 "//build/bazel/platforms/arch:arm64": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400843 "not-for-lib32.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400844 "for-lib64.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400845 ],
846 "//build/bazel/platforms/arch:x86": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400847 "not-for-lib64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400848 "for-lib32.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400849 ],
850 "//build/bazel/platforms/arch:x86_64": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400851 "not-for-lib32.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400852 "for-lib64.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400853 ],
854 "//conditions:default": [
855 "not-for-lib32.c",
856 "not-for-lib64.c",
857 ],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500858 })`,
859 }),
860 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200861 })
862}
863
864func TestCcLibrarySTaticArchMultilibSrcsExcludeSrcs(t *testing.T) {
865 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500866 description: "cc_library_static arch and multilib srcs and exclude_srcs",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200867 filesystem: map[string]string{
868 "common.c": "",
869 "for-arm.c": "",
870 "for-arm64.c": "",
871 "for-x86.c": "",
872 "for-x86_64.c": "",
873 "for-lib32.c": "",
874 "for-lib64.c": "",
875 "not-for-arm.c": "",
876 "not-for-arm64.c": "",
877 "not-for-x86.c": "",
878 "not-for-x86_64.c": "",
879 "not-for-lib32.c": "",
880 "not-for-lib64.c": "",
881 "not-for-everything.c": "",
Chris Parsonsc424b762021-04-29 18:06:50 -0400882 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200883 blueprint: soongCcLibraryStaticPreamble + `
Chris Parsonsc424b762021-04-29 18:06:50 -0400884cc_library_static {
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500885 name: "foo_static",
Chris Parsonsc424b762021-04-29 18:06:50 -0400886 srcs: ["common.c", "not-for-*.c"],
887 exclude_srcs: ["not-for-everything.c"],
888 arch: {
889 arm: { srcs: ["for-arm.c"], exclude_srcs: ["not-for-arm.c"] },
890 arm64: { srcs: ["for-arm64.c"], exclude_srcs: ["not-for-arm64.c"] },
891 x86: { srcs: ["for-x86.c"], exclude_srcs: ["not-for-x86.c"] },
892 x86_64: { srcs: ["for-x86_64.c"], exclude_srcs: ["not-for-x86_64.c"] },
893 },
894 multilib: {
895 lib32: { srcs: ["for-lib32.c"], exclude_srcs: ["not-for-lib32.c"] },
896 lib64: { srcs: ["for-lib64.c"], exclude_srcs: ["not-for-lib64.c"] },
897 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400898 include_build_directory: false,
Chris Parsonsc424b762021-04-29 18:06:50 -0400899}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500900 expectedBazelTargets: []string{
901 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
902 "srcs_c": `["common.c"] + select({
Chris Parsonsc424b762021-04-29 18:06:50 -0400903 "//build/bazel/platforms/arch:arm": [
Liz Kammer9bad9d62021-10-11 15:40:35 -0400904 "not-for-arm64.c",
905 "not-for-lib64.c",
906 "not-for-x86.c",
907 "not-for-x86_64.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400908 "for-arm.c",
909 "for-lib32.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400910 ],
911 "//build/bazel/platforms/arch:arm64": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400912 "not-for-arm.c",
913 "not-for-lib32.c",
914 "not-for-x86.c",
915 "not-for-x86_64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400916 "for-arm64.c",
917 "for-lib64.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400918 ],
919 "//build/bazel/platforms/arch:x86": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400920 "not-for-arm.c",
921 "not-for-arm64.c",
922 "not-for-lib64.c",
923 "not-for-x86_64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400924 "for-x86.c",
925 "for-lib32.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400926 ],
927 "//build/bazel/platforms/arch:x86_64": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400928 "not-for-arm.c",
929 "not-for-arm64.c",
930 "not-for-lib32.c",
931 "not-for-x86.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400932 "for-x86_64.c",
933 "for-lib64.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400934 ],
935 "//conditions:default": [
936 "not-for-arm.c",
937 "not-for-arm64.c",
938 "not-for-lib32.c",
939 "not-for-lib64.c",
940 "not-for-x86.c",
941 "not-for-x86_64.c",
942 ],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500943 })`,
944 }),
945 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200946 })
947}
948
Liz Kammerae3994e2021-10-19 09:45:48 -0400949func TestCcLibraryStaticGeneratedHeadersAllPartitions(t *testing.T) {
950 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammerae3994e2021-10-19 09:45:48 -0400951 blueprint: soongCcLibraryStaticPreamble + `
952genrule {
953 name: "generated_hdr",
954 cmd: "nothing to see here",
Liz Kammerbe46fcc2021-11-01 15:32:43 -0400955 bazel_module: { bp2build_available: false },
Liz Kammerae3994e2021-10-19 09:45:48 -0400956}
957
Liz Kammere6583482021-10-19 13:56:10 -0400958genrule {
959 name: "export_generated_hdr",
960 cmd: "nothing to see here",
Liz Kammerbe46fcc2021-11-01 15:32:43 -0400961 bazel_module: { bp2build_available: false },
Liz Kammere6583482021-10-19 13:56:10 -0400962}
963
Liz Kammerae3994e2021-10-19 09:45:48 -0400964cc_library_static {
965 name: "foo_static",
966 srcs: ["cpp_src.cpp", "as_src.S", "c_src.c"],
Liz Kammere6583482021-10-19 13:56:10 -0400967 generated_headers: ["generated_hdr", "export_generated_hdr"],
968 export_generated_headers: ["export_generated_hdr"],
Liz Kammerae3994e2021-10-19 09:45:48 -0400969 include_build_directory: false,
970}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500971 expectedBazelTargets: []string{
972 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
Liz Kammer1263d9b2021-12-10 14:28:20 -0500973 "export_includes": `["."]`,
974 "local_includes": `["."]`,
975 "hdrs": `[":export_generated_hdr"]`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500976 "srcs": `[
Liz Kammerae3994e2021-10-19 09:45:48 -0400977 "cpp_src.cpp",
978 ":generated_hdr",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500979 ]`,
980 "srcs_as": `[
Liz Kammerae3994e2021-10-19 09:45:48 -0400981 "as_src.S",
982 ":generated_hdr",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500983 ]`,
984 "srcs_c": `[
Liz Kammerae3994e2021-10-19 09:45:48 -0400985 "c_src.c",
986 ":generated_hdr",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500987 ]`,
988 }),
989 },
Liz Kammerae3994e2021-10-19 09:45:48 -0400990 })
991}
992
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200993func TestCcLibraryStaticArchSrcsExcludeSrcsGeneratedFiles(t *testing.T) {
994 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500995 description: "cc_library_static arch srcs/exclude_srcs with generated files",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200996 filesystem: map[string]string{
Chris Parsons990c4f42021-05-25 12:10:58 -0400997 "common.cpp": "",
998 "for-x86.cpp": "",
999 "not-for-x86.cpp": "",
1000 "not-for-everything.cpp": "",
Liz Kammerbe46fcc2021-11-01 15:32:43 -04001001 "dep/Android.bp": simpleModuleDoNotConvertBp2build("genrule", "generated_src_other_pkg") +
1002 simpleModuleDoNotConvertBp2build("genrule", "generated_hdr_other_pkg") +
1003 simpleModuleDoNotConvertBp2build("genrule", "generated_src_other_pkg_x86") +
1004 simpleModuleDoNotConvertBp2build("genrule", "generated_hdr_other_pkg_x86") +
1005 simpleModuleDoNotConvertBp2build("genrule", "generated_hdr_other_pkg_android"),
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +02001006 },
Liz Kammerbe46fcc2021-11-01 15:32:43 -04001007 blueprint: soongCcLibraryStaticPreamble +
1008 simpleModuleDoNotConvertBp2build("genrule", "generated_src") +
1009 simpleModuleDoNotConvertBp2build("genrule", "generated_src_not_x86") +
1010 simpleModuleDoNotConvertBp2build("genrule", "generated_src_android") +
1011 simpleModuleDoNotConvertBp2build("genrule", "generated_hdr") + `
Chris Parsons484e50a2021-05-13 15:13:04 -04001012cc_library_static {
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001013 name: "foo_static",
Liz Kammer222bdcf2021-10-11 14:15:51 -04001014 srcs: ["common.cpp", "not-for-*.cpp"],
1015 exclude_srcs: ["not-for-everything.cpp"],
1016 generated_sources: ["generated_src", "generated_src_other_pkg", "generated_src_not_x86"],
1017 generated_headers: ["generated_hdr", "generated_hdr_other_pkg"],
Liz Kammer1263d9b2021-12-10 14:28:20 -05001018 export_generated_headers: ["generated_hdr_other_pkg"],
Liz Kammer222bdcf2021-10-11 14:15:51 -04001019 arch: {
1020 x86: {
1021 srcs: ["for-x86.cpp"],
1022 exclude_srcs: ["not-for-x86.cpp"],
1023 generated_headers: ["generated_hdr_other_pkg_x86"],
1024 exclude_generated_sources: ["generated_src_not_x86"],
Liz Kammer1263d9b2021-12-10 14:28:20 -05001025 export_generated_headers: ["generated_hdr_other_pkg_x86"],
Liz Kammer222bdcf2021-10-11 14:15:51 -04001026 },
1027 },
1028 target: {
1029 android: {
1030 generated_sources: ["generated_src_android"],
1031 generated_headers: ["generated_hdr_other_pkg_android"],
Liz Kammer1263d9b2021-12-10 14:28:20 -05001032 export_generated_headers: ["generated_hdr_other_pkg_android"],
Liz Kammer222bdcf2021-10-11 14:15:51 -04001033 },
1034 },
1035
Liz Kammer8337ea42021-09-10 10:06:32 -04001036 include_build_directory: false,
Chris Parsons484e50a2021-05-13 15:13:04 -04001037}
1038`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001039 expectedBazelTargets: []string{
1040 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
1041 "srcs": `[
Chris Parsons990c4f42021-05-25 12:10:58 -04001042 "common.cpp",
Liz Kammer9bad9d62021-10-11 15:40:35 -04001043 ":generated_src",
1044 "//dep:generated_src_other_pkg",
Liz Kammerae3994e2021-10-19 09:45:48 -04001045 ":generated_hdr",
Chris Parsons484e50a2021-05-13 15:13:04 -04001046 ] + select({
Liz Kammer1263d9b2021-12-10 14:28:20 -05001047 "//build/bazel/platforms/arch:x86": ["for-x86.cpp"],
Liz Kammer222bdcf2021-10-11 14:15:51 -04001048 "//conditions:default": [
Liz Kammer222bdcf2021-10-11 14:15:51 -04001049 "not-for-x86.cpp",
Liz Kammer9bad9d62021-10-11 15:40:35 -04001050 ":generated_src_not_x86",
Liz Kammer222bdcf2021-10-11 14:15:51 -04001051 ],
1052 }) + select({
Liz Kammer1263d9b2021-12-10 14:28:20 -05001053 "//build/bazel/platforms/os:android": [":generated_src_android"],
Liz Kammer222bdcf2021-10-11 14:15:51 -04001054 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001055 })`,
Liz Kammer1263d9b2021-12-10 14:28:20 -05001056 "hdrs": `["//dep:generated_hdr_other_pkg"] + select({
1057 "//build/bazel/platforms/arch:x86": ["//dep:generated_hdr_other_pkg_x86"],
1058 "//conditions:default": [],
1059 }) + select({
1060 "//build/bazel/platforms/os:android": ["//dep:generated_hdr_other_pkg_android"],
1061 "//conditions:default": [],
1062 })`,
1063 "local_includes": `["."]`,
1064 "export_absolute_includes": `["dep"]`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001065 }),
1066 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +02001067 })
Rupert Shuttleworth095081c2021-03-25 09:06:03 +00001068}
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001069
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001070func TestCcLibraryStaticGetTargetProperties(t *testing.T) {
1071 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1072
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001073 description: "cc_library_static complex GetTargetProperties",
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001074 blueprint: soongCcLibraryStaticPreamble + `
1075cc_library_static {
1076 name: "foo_static",
1077 target: {
1078 android: {
1079 srcs: ["android_src.c"],
1080 },
1081 android_arm: {
1082 srcs: ["android_arm_src.c"],
1083 },
1084 android_arm64: {
1085 srcs: ["android_arm64_src.c"],
1086 },
1087 android_x86: {
1088 srcs: ["android_x86_src.c"],
1089 },
1090 android_x86_64: {
1091 srcs: ["android_x86_64_src.c"],
1092 },
1093 linux_bionic_arm64: {
1094 srcs: ["linux_bionic_arm64_src.c"],
1095 },
1096 linux_bionic_x86_64: {
1097 srcs: ["linux_bionic_x86_64_src.c"],
1098 },
1099 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001100 include_build_directory: false,
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001101}`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001102 expectedBazelTargets: []string{
1103 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
1104 "srcs_c": `select({
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001105 "//build/bazel/platforms/os:android": ["android_src.c"],
1106 "//conditions:default": [],
1107 }) + select({
Rupert Shuttleworthffd45822021-05-14 03:02:34 -04001108 "//build/bazel/platforms/os_arch:android_arm": ["android_arm_src.c"],
1109 "//build/bazel/platforms/os_arch:android_arm64": ["android_arm64_src.c"],
1110 "//build/bazel/platforms/os_arch:android_x86": ["android_x86_src.c"],
1111 "//build/bazel/platforms/os_arch:android_x86_64": ["android_x86_64_src.c"],
Rupert Shuttleworthffd45822021-05-14 03:02:34 -04001112 "//build/bazel/platforms/os_arch:linux_bionic_arm64": ["linux_bionic_arm64_src.c"],
1113 "//build/bazel/platforms/os_arch:linux_bionic_x86_64": ["linux_bionic_x86_64_src.c"],
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001114 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001115 })`,
1116 }),
1117 },
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001118 })
1119}
1120
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001121func TestCcLibraryStaticProductVariableSelects(t *testing.T) {
1122 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001123 description: "cc_library_static product variable selects",
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001124 blueprint: soongCcLibraryStaticPreamble + `
1125cc_library_static {
1126 name: "foo_static",
1127 srcs: ["common.c"],
1128 product_variables: {
1129 malloc_not_svelte: {
1130 cflags: ["-Wmalloc_not_svelte"],
1131 },
1132 malloc_zero_contents: {
1133 cflags: ["-Wmalloc_zero_contents"],
1134 },
1135 binder32bit: {
1136 cflags: ["-Wbinder32bit"],
1137 },
1138 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001139 include_build_directory: false,
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001140} `,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001141 expectedBazelTargets: []string{
1142 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
1143 "copts": `select({
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001144 "//build/bazel/product_variables:binder32bit": ["-Wbinder32bit"],
1145 "//conditions:default": [],
1146 }) + select({
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001147 "//build/bazel/product_variables:malloc_not_svelte": ["-Wmalloc_not_svelte"],
1148 "//conditions:default": [],
1149 }) + select({
1150 "//build/bazel/product_variables:malloc_zero_contents": ["-Wmalloc_zero_contents"],
1151 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001152 })`,
1153 "srcs_c": `["common.c"]`,
1154 }),
1155 },
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001156 })
1157}
1158
1159func TestCcLibraryStaticProductVariableArchSpecificSelects(t *testing.T) {
1160 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001161 description: "cc_library_static arch-specific product variable selects",
1162 filesystem: map[string]string{},
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001163 blueprint: soongCcLibraryStaticPreamble + `
1164cc_library_static {
1165 name: "foo_static",
1166 srcs: ["common.c"],
1167 product_variables: {
1168 malloc_not_svelte: {
1169 cflags: ["-Wmalloc_not_svelte"],
1170 },
1171 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001172 arch: {
1173 arm64: {
1174 product_variables: {
1175 malloc_not_svelte: {
1176 cflags: ["-Warm64_malloc_not_svelte"],
1177 },
1178 },
1179 },
1180 },
1181 multilib: {
1182 lib32: {
1183 product_variables: {
1184 malloc_not_svelte: {
1185 cflags: ["-Wlib32_malloc_not_svelte"],
1186 },
1187 },
1188 },
1189 },
1190 target: {
1191 android: {
1192 product_variables: {
1193 malloc_not_svelte: {
1194 cflags: ["-Wandroid_malloc_not_svelte"],
1195 },
1196 },
1197 }
1198 },
1199 include_build_directory: false,
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001200} `,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001201 expectedBazelTargets: []string{
1202 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
1203 "copts": `select({
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001204 "//build/bazel/product_variables:malloc_not_svelte": ["-Wmalloc_not_svelte"],
1205 "//conditions:default": [],
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001206 }) + select({
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001207 "//build/bazel/product_variables:malloc_not_svelte-android": ["-Wandroid_malloc_not_svelte"],
1208 "//conditions:default": [],
1209 }) + select({
1210 "//build/bazel/product_variables:malloc_not_svelte-arm": ["-Wlib32_malloc_not_svelte"],
1211 "//conditions:default": [],
1212 }) + select({
1213 "//build/bazel/product_variables:malloc_not_svelte-arm64": ["-Warm64_malloc_not_svelte"],
1214 "//conditions:default": [],
1215 }) + select({
1216 "//build/bazel/product_variables:malloc_not_svelte-x86": ["-Wlib32_malloc_not_svelte"],
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001217 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001218 })`,
1219 "srcs_c": `["common.c"]`,
1220 }),
1221 },
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001222 })
1223}
Liz Kammerba7a9c52021-05-26 08:45:30 -04001224
1225func TestCcLibraryStaticProductVariableStringReplacement(t *testing.T) {
1226 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001227 description: "cc_library_static product variable string replacement",
1228 filesystem: map[string]string{},
Liz Kammerba7a9c52021-05-26 08:45:30 -04001229 blueprint: soongCcLibraryStaticPreamble + `
1230cc_library_static {
1231 name: "foo_static",
Chris Parsons69fa9f92021-07-13 11:47:44 -04001232 srcs: ["common.S"],
Liz Kammerba7a9c52021-05-26 08:45:30 -04001233 product_variables: {
1234 platform_sdk_version: {
1235 asflags: ["-DPLATFORM_SDK_VERSION=%d"],
1236 },
1237 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001238 include_build_directory: false,
Liz Kammerba7a9c52021-05-26 08:45:30 -04001239} `,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001240 expectedBazelTargets: []string{
1241 makeBazelTarget("cc_library_static", "foo_static", attrNameToString{
1242 "asflags": `select({
Liz Kammerba7a9c52021-05-26 08:45:30 -04001243 "//build/bazel/product_variables:platform_sdk_version": ["-DPLATFORM_SDK_VERSION=$(Platform_sdk_version)"],
1244 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001245 })`,
1246 "srcs_as": `["common.S"]`,
1247 }),
1248 },
Liz Kammerba7a9c52021-05-26 08:45:30 -04001249 })
1250}
Chris Parsons51f8c392021-08-03 21:01:05 -04001251
1252func TestStaticLibrary_SystemSharedLibsRootEmpty(t *testing.T) {
1253 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001254 description: "cc_library_static system_shared_lib empty root",
Chris Parsons51f8c392021-08-03 21:01:05 -04001255 blueprint: soongCcLibraryStaticPreamble + `
1256cc_library_static {
1257 name: "root_empty",
Liz Kammer8337ea42021-09-10 10:06:32 -04001258 system_shared_libs: [],
1259 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001260}
1261`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001262 expectedBazelTargets: []string{
1263 makeBazelTarget("cc_library_static", "root_empty", attrNameToString{
1264 "system_dynamic_deps": `[]`,
1265 }),
1266 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001267 })
1268}
1269
1270func TestStaticLibrary_SystemSharedLibsStaticEmpty(t *testing.T) {
1271 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001272 description: "cc_library_static system_shared_lib empty static default",
Chris Parsons51f8c392021-08-03 21:01:05 -04001273 blueprint: soongCcLibraryStaticPreamble + `
1274cc_defaults {
1275 name: "static_empty_defaults",
1276 static: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001277 system_shared_libs: [],
1278 },
1279 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001280}
1281cc_library_static {
1282 name: "static_empty",
Liz Kammer8337ea42021-09-10 10:06:32 -04001283 defaults: ["static_empty_defaults"],
Chris Parsons51f8c392021-08-03 21:01:05 -04001284}
1285`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001286 expectedBazelTargets: []string{
1287 makeBazelTarget("cc_library_static", "static_empty", attrNameToString{
1288 "system_dynamic_deps": `[]`,
1289 }),
1290 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001291 })
1292}
1293
1294func TestStaticLibrary_SystemSharedLibsBionicEmpty(t *testing.T) {
1295 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001296 description: "cc_library_static system_shared_lib empty for bionic variant",
Chris Parsons51f8c392021-08-03 21:01:05 -04001297 blueprint: soongCcLibraryStaticPreamble + `
1298cc_library_static {
1299 name: "target_bionic_empty",
1300 target: {
1301 bionic: {
1302 system_shared_libs: [],
1303 },
1304 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001305 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001306}
1307`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001308 expectedBazelTargets: []string{
1309 makeBazelTarget("cc_library_static", "target_bionic_empty", attrNameToString{
1310 "system_dynamic_deps": `[]`,
1311 }),
1312 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001313 })
1314}
1315
1316func TestStaticLibrary_SystemSharedLibsLinuxBionicEmpty(t *testing.T) {
1317 // Note that this behavior is technically incorrect (it's a simplification).
1318 // The correct behavior would be if bp2build wrote `system_dynamic_deps = []`
1319 // only for linux_bionic, but `android` had `["libc", "libdl", "libm"].
1320 // b/195791252 tracks the fix.
1321 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001322 description: "cc_library_static system_shared_lib empty for linux_bionic variant",
Chris Parsons51f8c392021-08-03 21:01:05 -04001323 blueprint: soongCcLibraryStaticPreamble + `
1324cc_library_static {
1325 name: "target_linux_bionic_empty",
1326 target: {
1327 linux_bionic: {
1328 system_shared_libs: [],
1329 },
1330 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001331 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001332}
1333`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001334 expectedBazelTargets: []string{
1335 makeBazelTarget("cc_library_static", "target_linux_bionic_empty", attrNameToString{
1336 "system_dynamic_deps": `[]`,
1337 }),
1338 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001339 })
1340}
1341
1342func TestStaticLibrary_SystemSharedLibsBionic(t *testing.T) {
1343 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001344 description: "cc_library_static system_shared_libs set for bionic variant",
Liz Kammerbe46fcc2021-11-01 15:32:43 -04001345 blueprint: soongCcLibraryStaticPreamble +
1346 simpleModuleDoNotConvertBp2build("cc_library", "libc") + `
Chris Parsons51f8c392021-08-03 21:01:05 -04001347cc_library_static {
1348 name: "target_bionic",
1349 target: {
1350 bionic: {
1351 system_shared_libs: ["libc"],
1352 },
1353 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001354 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001355}
1356`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001357 expectedBazelTargets: []string{
1358 makeBazelTarget("cc_library_static", "target_bionic", attrNameToString{
1359 "system_dynamic_deps": `select({
Chris Parsons2dde0cb2021-10-01 14:45:30 -04001360 "//build/bazel/platforms/os:android": [":libc"],
1361 "//build/bazel/platforms/os:linux_bionic": [":libc"],
Chris Parsons51f8c392021-08-03 21:01:05 -04001362 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001363 })`,
1364 }),
1365 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001366 })
1367}
1368
1369func TestStaticLibrary_SystemSharedLibsLinuxRootAndLinuxBionic(t *testing.T) {
1370 runCcLibraryStaticTestCase(t, bp2buildTestCase{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001371 description: "cc_library_static system_shared_libs set for root and linux_bionic variant",
Liz Kammerbe46fcc2021-11-01 15:32:43 -04001372 blueprint: soongCcLibraryStaticPreamble +
1373 simpleModuleDoNotConvertBp2build("cc_library", "libc") +
1374 simpleModuleDoNotConvertBp2build("cc_library", "libm") + `
Chris Parsons51f8c392021-08-03 21:01:05 -04001375cc_library_static {
1376 name: "target_linux_bionic",
Liz Kammer8337ea42021-09-10 10:06:32 -04001377 system_shared_libs: ["libc"],
Chris Parsons51f8c392021-08-03 21:01:05 -04001378 target: {
1379 linux_bionic: {
1380 system_shared_libs: ["libm"],
1381 },
1382 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001383 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001384}
1385`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001386 expectedBazelTargets: []string{
1387 makeBazelTarget("cc_library_static", "target_linux_bionic", attrNameToString{
1388 "system_dynamic_deps": `[":libc"] + select({
Chris Parsons51f8c392021-08-03 21:01:05 -04001389 "//build/bazel/platforms/os:linux_bionic": [":libm"],
1390 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001391 })`,
1392 }),
1393 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001394 })
1395}
Liz Kammer12615db2021-09-28 09:19:17 -04001396
Liz Kammer54309532021-12-14 12:21:22 -05001397func TestCcLibrarystatic_SystemSharedLibUsedAsDep(t *testing.T) {
1398 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1399 description: "cc_library_static system_shared_lib empty for linux_bionic variant",
1400 blueprint: soongCcLibraryStaticPreamble +
1401 simpleModuleDoNotConvertBp2build("cc_library", "libc") + `
1402cc_library_static {
1403 name: "used_in_bionic_oses",
1404 target: {
1405 android: {
1406 shared_libs: ["libc"],
1407 },
1408 linux_bionic: {
1409 shared_libs: ["libc"],
1410 },
1411 },
1412 include_build_directory: false,
1413}
1414
1415cc_library_static {
1416 name: "all",
1417 shared_libs: ["libc"],
1418 include_build_directory: false,
1419}
1420
1421cc_library_static {
1422 name: "keep_for_empty_system_shared_libs",
1423 shared_libs: ["libc"],
1424 system_shared_libs: [],
1425 include_build_directory: false,
1426}
1427`,
1428 expectedBazelTargets: []string{
1429 makeBazelTarget("cc_library_static", "all", attrNameToString{
1430 "implementation_dynamic_deps": `select({
1431 "//build/bazel/platforms/os:android": [],
1432 "//build/bazel/platforms/os:linux_bionic": [],
1433 "//conditions:default": [":libc"],
1434 })`,
1435 }),
1436 makeBazelTarget("cc_library_static", "keep_for_empty_system_shared_libs", attrNameToString{
1437 "implementation_dynamic_deps": `[":libc"]`,
1438 "system_dynamic_deps": `[]`,
1439 }),
1440 makeBazelTarget("cc_library_static", "used_in_bionic_oses", attrNameToString{}),
1441 },
1442 })
1443}
1444
Liz Kammer12615db2021-09-28 09:19:17 -04001445func TestCcLibraryStaticProto(t *testing.T) {
1446 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1447 blueprint: soongCcProtoPreamble + `cc_library_static {
1448 name: "foo",
1449 srcs: ["foo.proto"],
1450 proto: {
1451 canonical_path_from_root: false,
1452 export_proto_headers: true,
1453 },
1454 include_build_directory: false,
1455}`,
1456 expectedBazelTargets: []string{
1457 makeBazelTarget("proto_library", "foo_proto", attrNameToString{
1458 "srcs": `["foo.proto"]`,
1459 }), makeBazelTarget("cc_lite_proto_library", "foo_cc_proto_lite", attrNameToString{
1460 "deps": `[":foo_proto"]`,
1461 }), makeBazelTarget("cc_library_static", "foo", attrNameToString{
1462 "deps": `[":libprotobuf-cpp-lite"]`,
1463 "whole_archive_deps": `[":foo_cc_proto_lite"]`,
1464 }),
1465 },
1466 })
1467}
Rupert Shuttleworth484aa252021-12-10 07:22:53 -05001468
1469func TestCcLibraryStaticUseVersionLib(t *testing.T) {
1470 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1471 blueprint: soongCcProtoPreamble + `cc_library_static {
1472 name: "foo",
1473 use_version_lib: true,
1474 include_build_directory: false,
1475}`,
1476 expectedBazelTargets: []string{
1477 makeBazelTarget("cc_library_static", "foo", attrNameToString{
1478 "use_version_lib": "True",
1479 }),
1480 },
1481 })
1482}
Liz Kammercac7f692021-12-16 14:19:32 -05001483
1484func TestCcLibraryStaticStdInFlags(t *testing.T) {
1485 runCcLibraryStaticTestCase(t, bp2buildTestCase{
1486 blueprint: soongCcProtoPreamble + `cc_library_static {
1487 name: "foo",
1488 cflags: ["-std=candcpp"],
1489 conlyflags: ["-std=conly"],
1490 cppflags: ["-std=cpp"],
1491 include_build_directory: false,
1492}`,
1493 expectedBazelTargets: []string{
1494 makeBazelTarget("cc_library_static", "foo", attrNameToString{
1495 "conlyflags": `["-std=conly"]`,
1496 "cppflags": `["-std=cpp"]`,
1497 }),
1498 },
1499 })
1500}