blob: c1eed968823b5f989c88403c92ef844756968735 [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 (
Cole Faust6b29f592022-08-09 09:50:56 -070018 "fmt"
19 "testing"
20
Rupert Shuttleworth095081c2021-03-25 09:06:03 +000021 "android/soong/android"
22 "android/soong/cc"
Chris Parsons484e50a2021-05-13 15:13:04 -040023 "android/soong/genrule"
Rupert Shuttleworth095081c2021-03-25 09:06:03 +000024)
25
26const (
27 // See cc/testing.go for more context
28 soongCcLibraryStaticPreamble = `
29cc_defaults {
Liz Kammer8337ea42021-09-10 10:06:32 -040030 name: "linux_bionic_supported",
Rupert Shuttleworth095081c2021-03-25 09:06:03 +000031}`
32)
33
34func TestCcLibraryStaticLoadStatement(t *testing.T) {
35 testCases := []struct {
36 bazelTargets BazelTargets
37 expectedLoadStatements string
38 }{
39 {
40 bazelTargets: BazelTargets{
41 BazelTarget{
42 name: "cc_library_static_target",
43 ruleClass: "cc_library_static",
44 // NOTE: No bzlLoadLocation for native rules
45 },
46 },
47 expectedLoadStatements: ``,
48 },
49 }
50
51 for _, testCase := range testCases {
52 actual := testCase.bazelTargets.LoadStatements()
53 expected := testCase.expectedLoadStatements
54 if actual != expected {
55 t.Fatalf("Expected load statements to be %s, got %s", expected, actual)
56 }
57 }
Rupert Shuttleworth095081c2021-03-25 09:06:03 +000058}
59
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020060func registerCcLibraryStaticModuleTypes(ctx android.RegistrationContext) {
61 cc.RegisterCCBuildComponents(ctx)
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020062 ctx.RegisterModuleType("cc_library_headers", cc.LibraryHeaderFactory)
63 ctx.RegisterModuleType("genrule", genrule.GenRuleFactory)
Chris Parsons51f8c392021-08-03 21:01:05 -040064 // Required for system_shared_libs dependencies.
65 ctx.RegisterModuleType("cc_library", cc.LibraryFactory)
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020066}
67
Sam Delmerico3177a6e2022-06-21 19:28:33 +000068func runCcLibraryStaticTestCase(t *testing.T, tc Bp2buildTestCase) {
Liz Kammere4982e82021-05-25 10:39:35 -040069 t.Helper()
Liz Kammer78cfdaa2021-11-08 12:56:31 -050070
Sam Delmerico3177a6e2022-06-21 19:28:33 +000071 (&tc).ModuleTypeUnderTest = "cc_library_static"
72 (&tc).ModuleTypeUnderTestFactory = cc.LibraryStaticFactory
73 RunBp2BuildTestCase(t, registerCcLibraryStaticModuleTypes, tc)
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020074}
75
76func TestCcLibraryStaticSimple(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +000077 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
78 Description: "cc_library_static test",
79 Filesystem: map[string]string{
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020080 // NOTE: include_dir headers *should not* appear in Bazel hdrs later (?)
81 "include_dir_1/include_dir_1_a.h": "",
82 "include_dir_1/include_dir_1_b.h": "",
83 "include_dir_2/include_dir_2_a.h": "",
84 "include_dir_2/include_dir_2_b.h": "",
85 // NOTE: local_include_dir headers *should not* appear in Bazel hdrs later (?)
86 "local_include_dir_1/local_include_dir_1_a.h": "",
87 "local_include_dir_1/local_include_dir_1_b.h": "",
88 "local_include_dir_2/local_include_dir_2_a.h": "",
89 "local_include_dir_2/local_include_dir_2_b.h": "",
90 // NOTE: export_include_dir headers *should* appear in Bazel hdrs later
91 "export_include_dir_1/export_include_dir_1_a.h": "",
92 "export_include_dir_1/export_include_dir_1_b.h": "",
93 "export_include_dir_2/export_include_dir_2_a.h": "",
94 "export_include_dir_2/export_include_dir_2_b.h": "",
95 // NOTE: Soong implicitly includes headers in the current directory
96 "implicit_include_1.h": "",
97 "implicit_include_2.h": "",
98 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +000099 Blueprint: soongCcLibraryStaticPreamble + `
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000100cc_library_headers {
101 name: "header_lib_1",
102 export_include_dirs: ["header_lib_1"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400103 bazel_module: { bp2build_available: false },
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000104}
105
106cc_library_headers {
107 name: "header_lib_2",
108 export_include_dirs: ["header_lib_2"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400109 bazel_module: { bp2build_available: false },
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000110}
111
112cc_library_static {
113 name: "static_lib_1",
114 srcs: ["static_lib_1.cc"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400115 bazel_module: { bp2build_available: false },
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000116}
117
118cc_library_static {
119 name: "static_lib_2",
120 srcs: ["static_lib_2.cc"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400121 bazel_module: { bp2build_available: false },
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000122}
123
124cc_library_static {
125 name: "whole_static_lib_1",
126 srcs: ["whole_static_lib_1.cc"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400127 bazel_module: { bp2build_available: false },
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000128}
129
130cc_library_static {
131 name: "whole_static_lib_2",
132 srcs: ["whole_static_lib_2.cc"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400133 bazel_module: { bp2build_available: false },
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000134}
135
136cc_library_static {
137 name: "foo_static",
138 srcs: [
139 "foo_static1.cc",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000140 "foo_static2.cc",
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000141 ],
142 cflags: [
143 "-Dflag1",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000144 "-Dflag2"
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000145 ],
146 static_libs: [
147 "static_lib_1",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000148 "static_lib_2"
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000149 ],
150 whole_static_libs: [
151 "whole_static_lib_1",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000152 "whole_static_lib_2"
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000153 ],
154 include_dirs: [
Jingwen Chened9c17d2021-04-13 07:14:55 +0000155 "include_dir_1",
156 "include_dir_2",
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000157 ],
158 local_include_dirs: [
159 "local_include_dir_1",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000160 "local_include_dir_2",
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000161 ],
162 export_include_dirs: [
Chris Parsonsd6358772021-05-18 18:35:24 -0400163 "export_include_dir_1",
164 "export_include_dir_2"
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000165 ],
166 header_libs: [
167 "header_lib_1",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000168 "header_lib_2"
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000169 ],
Yu Liufc603162022-03-01 15:44:08 -0800170 sdk_version: "current",
171 min_sdk_version: "29",
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000172
173 // TODO: Also support export_header_lib_headers
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000174}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000175 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000176 MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500177 "absolute_includes": `[
Liz Kammer35687bc2021-09-10 10:07:07 -0400178 "include_dir_1",
179 "include_dir_2",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500180 ]`,
181 "copts": `[
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000182 "-Dflag1",
183 "-Dflag2",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500184 ]`,
185 "export_includes": `[
Liz Kammer5fad5012021-09-09 14:08:21 -0400186 "export_include_dir_1",
187 "export_include_dir_2",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500188 ]`,
189 "implementation_deps": `[
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000190 ":header_lib_1",
191 ":header_lib_2",
192 ":static_lib_1",
193 ":static_lib_2",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500194 ]`,
195 "local_includes": `[
Liz Kammer35687bc2021-09-10 10:07:07 -0400196 "local_include_dir_1",
197 "local_include_dir_2",
198 ".",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500199 ]`,
200 "srcs": `[
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000201 "foo_static1.cc",
202 "foo_static2.cc",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500203 ]`,
204 "whole_archive_deps": `[
Chris Parsons08648312021-05-06 16:23:19 -0400205 ":whole_static_lib_1",
206 ":whole_static_lib_2",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500207 ]`,
Liz Kammer7128d382022-05-12 11:42:33 -0400208 "sdk_version": `"current"`,
209 "min_sdk_version": `"29"`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500210 }),
211 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200212 })
213}
214
215func TestCcLibraryStaticSubpackage(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000216 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
217 Description: "cc_library_static subpackage test",
218 Filesystem: map[string]string{
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200219 // subpackage with subdirectory
220 "subpackage/Android.bp": "",
221 "subpackage/subpackage_header.h": "",
222 "subpackage/subdirectory/subdirectory_header.h": "",
223 // subsubpackage with subdirectory
224 "subpackage/subsubpackage/Android.bp": "",
225 "subpackage/subsubpackage/subsubpackage_header.h": "",
226 "subpackage/subsubpackage/subdirectory/subdirectory_header.h": "",
227 // subsubsubpackage with subdirectory
228 "subpackage/subsubpackage/subsubsubpackage/Android.bp": "",
229 "subpackage/subsubpackage/subsubsubpackage/subsubsubpackage_header.h": "",
230 "subpackage/subsubpackage/subsubsubpackage/subdirectory/subdirectory_header.h": "",
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000231 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000232 Blueprint: soongCcLibraryStaticPreamble + `
Rupert Shuttleworthc143cc52021-04-13 13:08:04 -0400233cc_library_static {
234 name: "foo_static",
Liz Kammer35687bc2021-09-10 10:07:07 -0400235 srcs: [],
Rupert Shuttleworthc143cc52021-04-13 13:08:04 -0400236 include_dirs: [
Liz Kammer35687bc2021-09-10 10:07:07 -0400237 "subpackage",
Rupert Shuttleworthc143cc52021-04-13 13:08:04 -0400238 ],
Rupert Shuttleworthc143cc52021-04-13 13:08:04 -0400239}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000240 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000241 MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500242 "absolute_includes": `["subpackage"]`,
243 "local_includes": `["."]`,
244 }),
245 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200246 })
247}
248
249func TestCcLibraryStaticExportIncludeDir(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000250 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
251 Description: "cc_library_static export include dir",
252 Filesystem: map[string]string{
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200253 // subpackage with subdirectory
254 "subpackage/Android.bp": "",
255 "subpackage/subpackage_header.h": "",
256 "subpackage/subdirectory/subdirectory_header.h": "",
Rupert Shuttleworthc143cc52021-04-13 13:08:04 -0400257 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000258 Blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chened9c17d2021-04-13 07:14:55 +0000259cc_library_static {
260 name: "foo_static",
261 export_include_dirs: ["subpackage"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400262 include_build_directory: false,
Jingwen Chened9c17d2021-04-13 07:14:55 +0000263}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000264 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000265 MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500266 "export_includes": `["subpackage"]`,
267 }),
268 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200269 })
270}
271
272func TestCcLibraryStaticExportSystemIncludeDir(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000273 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
274 Description: "cc_library_static export system include dir",
275 Filesystem: map[string]string{
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200276 // subpackage with subdirectory
277 "subpackage/Android.bp": "",
278 "subpackage/subpackage_header.h": "",
279 "subpackage/subdirectory/subdirectory_header.h": "",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000280 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000281 Blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chened9c17d2021-04-13 07:14:55 +0000282cc_library_static {
283 name: "foo_static",
284 export_system_include_dirs: ["subpackage"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400285 include_build_directory: false,
Jingwen Chened9c17d2021-04-13 07:14:55 +0000286}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000287 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000288 MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500289 "export_system_includes": `["subpackage"]`,
290 }),
291 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200292 })
293}
294
295func TestCcLibraryStaticManyIncludeDirs(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000296 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
297 Description: "cc_library_static include_dirs, local_include_dirs, export_include_dirs (b/183742505)",
298 Dir: "subpackage",
299 Filesystem: map[string]string{
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200300 // subpackage with subdirectory
301 "subpackage/Android.bp": `
Jingwen Chened9c17d2021-04-13 07:14:55 +0000302cc_library_static {
303 name: "foo_static",
304 // include_dirs are workspace/root relative
305 include_dirs: [
306 "subpackage/subsubpackage",
307 "subpackage2",
308 "subpackage3/subsubpackage"
309 ],
310 local_include_dirs: ["subsubpackage2"], // module dir relative
311 export_include_dirs: ["./exported_subsubpackage"], // module dir relative
312 include_build_directory: true,
313 bazel_module: { bp2build_available: true },
314}`,
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200315 "subpackage/subsubpackage/header.h": "",
316 "subpackage/subsubpackage2/header.h": "",
317 "subpackage/exported_subsubpackage/header.h": "",
318 "subpackage2/header.h": "",
319 "subpackage3/subsubpackage/header.h": "",
320 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000321 Blueprint: soongCcLibraryStaticPreamble,
322 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000323 MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500324 "absolute_includes": `[
Liz Kammer35687bc2021-09-10 10:07:07 -0400325 "subpackage/subsubpackage",
326 "subpackage2",
327 "subpackage3/subsubpackage",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500328 ]`,
329 "export_includes": `["./exported_subsubpackage"]`,
330 "local_includes": `[
Liz Kammer35687bc2021-09-10 10:07:07 -0400331 "subsubpackage2",
332 ".",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500333 ]`,
334 })},
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200335 })
336}
337
338func TestCcLibraryStaticIncludeBuildDirectoryDisabled(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000339 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
340 Description: "cc_library_static include_build_directory disabled",
341 Filesystem: map[string]string{
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200342 // subpackage with subdirectory
343 "subpackage/Android.bp": "",
344 "subpackage/subpackage_header.h": "",
345 "subpackage/subdirectory/subdirectory_header.h": "",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000346 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000347 Blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chened9c17d2021-04-13 07:14:55 +0000348cc_library_static {
349 name: "foo_static",
350 include_dirs: ["subpackage"], // still used, but local_include_dirs is recommended
351 local_include_dirs: ["subpackage2"],
352 include_build_directory: false,
353}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000354 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000355 MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500356 "absolute_includes": `["subpackage"]`,
357 "local_includes": `["subpackage2"]`,
358 }),
359 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200360 })
361}
362
363func TestCcLibraryStaticIncludeBuildDirectoryEnabled(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000364 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
365 Description: "cc_library_static include_build_directory enabled",
366 Filesystem: map[string]string{
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200367 // subpackage with subdirectory
368 "subpackage/Android.bp": "",
369 "subpackage/subpackage_header.h": "",
370 "subpackage2/Android.bp": "",
371 "subpackage2/subpackage2_header.h": "",
372 "subpackage/subdirectory/subdirectory_header.h": "",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000373 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000374 Blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chened9c17d2021-04-13 07:14:55 +0000375cc_library_static {
376 name: "foo_static",
377 include_dirs: ["subpackage"], // still used, but local_include_dirs is recommended
378 local_include_dirs: ["subpackage2"],
379 include_build_directory: true,
380}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000381 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000382 MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500383 "absolute_includes": `["subpackage"]`,
384 "local_includes": `[
Liz Kammer35687bc2021-09-10 10:07:07 -0400385 "subpackage2",
386 ".",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500387 ]`,
388 }),
389 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200390 })
391}
392
393func TestCcLibraryStaticArchSpecificStaticLib(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000394 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
395 Description: "cc_library_static arch-specific static_libs",
396 Filesystem: map[string]string{},
397 Blueprint: soongCcLibraryStaticPreamble + `
Liz Kammer8337ea42021-09-10 10:06:32 -0400398cc_library_static {
399 name: "static_dep",
400 bazel_module: { bp2build_available: false },
401}
402cc_library_static {
403 name: "static_dep2",
404 bazel_module: { bp2build_available: false },
405}
Jingwen Chened9c17d2021-04-13 07:14:55 +0000406cc_library_static {
407 name: "foo_static",
408 arch: { arm64: { static_libs: ["static_dep"], whole_static_libs: ["static_dep2"] } },
Liz Kammer8337ea42021-09-10 10:06:32 -0400409 include_build_directory: false,
Jingwen Chened9c17d2021-04-13 07:14:55 +0000410}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000411 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000412 MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500413 "implementation_deps": `select({
Chris Parsons08648312021-05-06 16:23:19 -0400414 "//build/bazel/platforms/arch:arm64": [":static_dep"],
Jingwen Chened9c17d2021-04-13 07:14:55 +0000415 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500416 })`,
417 "whole_archive_deps": `select({
Chris Parsons08648312021-05-06 16:23:19 -0400418 "//build/bazel/platforms/arch:arm64": [":static_dep2"],
419 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500420 })`,
421 }),
422 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200423 })
424}
425
426func TestCcLibraryStaticOsSpecificStaticLib(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000427 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
428 Description: "cc_library_static os-specific static_libs",
429 Filesystem: map[string]string{},
430 Blueprint: soongCcLibraryStaticPreamble + `
Liz Kammer8337ea42021-09-10 10:06:32 -0400431cc_library_static {
432 name: "static_dep",
433 bazel_module: { bp2build_available: false },
434}
435cc_library_static {
436 name: "static_dep2",
437 bazel_module: { bp2build_available: false },
438}
Jingwen Chened9c17d2021-04-13 07:14:55 +0000439cc_library_static {
440 name: "foo_static",
441 target: { android: { static_libs: ["static_dep"], whole_static_libs: ["static_dep2"] } },
Liz Kammer8337ea42021-09-10 10:06:32 -0400442 include_build_directory: false,
Jingwen Chened9c17d2021-04-13 07:14:55 +0000443}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000444 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000445 MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500446 "implementation_deps": `select({
Chris Parsons08648312021-05-06 16:23:19 -0400447 "//build/bazel/platforms/os:android": [":static_dep"],
Jingwen Chened9c17d2021-04-13 07:14:55 +0000448 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500449 })`,
450 "whole_archive_deps": `select({
Chris Parsons08648312021-05-06 16:23:19 -0400451 "//build/bazel/platforms/os:android": [":static_dep2"],
452 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500453 })`,
454 }),
455 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200456 })
457}
458
459func TestCcLibraryStaticBaseArchOsSpecificStaticLib(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000460 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
461 Description: "cc_library_static base, arch and os-specific static_libs",
462 Filesystem: map[string]string{},
463 Blueprint: soongCcLibraryStaticPreamble + `
Liz Kammer8337ea42021-09-10 10:06:32 -0400464cc_library_static {
465 name: "static_dep",
466 bazel_module: { bp2build_available: false },
467}
468cc_library_static {
469 name: "static_dep2",
470 bazel_module: { bp2build_available: false },
471}
472cc_library_static {
473 name: "static_dep3",
474 bazel_module: { bp2build_available: false },
475}
476cc_library_static {
477 name: "static_dep4",
478 bazel_module: { bp2build_available: false },
479}
Jingwen Chened9c17d2021-04-13 07:14:55 +0000480cc_library_static {
481 name: "foo_static",
482 static_libs: ["static_dep"],
483 whole_static_libs: ["static_dep2"],
484 target: { android: { static_libs: ["static_dep3"] } },
485 arch: { arm64: { static_libs: ["static_dep4"] } },
Liz Kammer8337ea42021-09-10 10:06:32 -0400486 include_build_directory: false,
Jingwen Chened9c17d2021-04-13 07:14:55 +0000487}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000488 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000489 MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500490 "implementation_deps": `[":static_dep"] + select({
Jingwen Chened9c17d2021-04-13 07:14:55 +0000491 "//build/bazel/platforms/arch:arm64": [":static_dep4"],
492 "//conditions:default": [],
493 }) + select({
494 "//build/bazel/platforms/os:android": [":static_dep3"],
495 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500496 })`,
497 "whole_archive_deps": `[":static_dep2"]`,
498 }),
499 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200500 })
501}
502
503func TestCcLibraryStaticSimpleExcludeSrcs(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000504 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
505 Description: "cc_library_static simple exclude_srcs",
506 Filesystem: map[string]string{
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200507 "common.c": "",
508 "foo-a.c": "",
509 "foo-excluded.c": "",
Jingwen Chened9c17d2021-04-13 07:14:55 +0000510 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000511 Blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chene32e9e02021-04-23 09:17:24 +0000512cc_library_static {
513 name: "foo_static",
514 srcs: ["common.c", "foo-*.c"],
515 exclude_srcs: ["foo-excluded.c"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400516 include_build_directory: false,
Jingwen Chene32e9e02021-04-23 09:17:24 +0000517}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000518 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000519 MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500520 "srcs_c": `[
Jingwen Chene32e9e02021-04-23 09:17:24 +0000521 "common.c",
522 "foo-a.c",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500523 ]`,
524 }),
525 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200526 })
527}
528
529func TestCcLibraryStaticOneArchSrcs(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000530 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
531 Description: "cc_library_static one arch specific srcs",
532 Filesystem: map[string]string{
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200533 "common.c": "",
534 "foo-arm.c": "",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000535 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000536 Blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chene32e9e02021-04-23 09:17:24 +0000537cc_library_static {
538 name: "foo_static",
539 srcs: ["common.c"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400540 arch: { arm: { srcs: ["foo-arm.c"] } },
541 include_build_directory: false,
Jingwen Chene32e9e02021-04-23 09:17:24 +0000542}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000543 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000544 MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500545 "srcs_c": `["common.c"] + select({
Jingwen Chene32e9e02021-04-23 09:17:24 +0000546 "//build/bazel/platforms/arch:arm": ["foo-arm.c"],
547 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500548 })`,
549 }),
550 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200551 })
552}
553
554func TestCcLibraryStaticOneArchSrcsExcludeSrcs(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000555 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
556 Description: "cc_library_static one arch specific srcs and exclude_srcs",
557 Filesystem: map[string]string{
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200558 "common.c": "",
559 "for-arm.c": "",
560 "not-for-arm.c": "",
561 "not-for-anything.c": "",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000562 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000563 Blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chene32e9e02021-04-23 09:17:24 +0000564cc_library_static {
565 name: "foo_static",
566 srcs: ["common.c", "not-for-*.c"],
567 exclude_srcs: ["not-for-anything.c"],
568 arch: {
569 arm: { srcs: ["for-arm.c"], exclude_srcs: ["not-for-arm.c"] },
570 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400571 include_build_directory: false,
Jingwen Chene32e9e02021-04-23 09:17:24 +0000572}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000573 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000574 MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500575 "srcs_c": `["common.c"] + select({
Jingwen Chene32e9e02021-04-23 09:17:24 +0000576 "//build/bazel/platforms/arch:arm": ["for-arm.c"],
577 "//conditions:default": ["not-for-arm.c"],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500578 })`,
579 }),
580 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200581 })
582}
583
584func TestCcLibraryStaticTwoArchExcludeSrcs(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000585 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
586 Description: "cc_library_static arch specific exclude_srcs for 2 architectures",
587 Filesystem: map[string]string{
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200588 "common.c": "",
589 "for-arm.c": "",
590 "for-x86.c": "",
591 "not-for-arm.c": "",
592 "not-for-x86.c": "",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000593 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000594 Blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chene32e9e02021-04-23 09:17:24 +0000595cc_library_static {
596 name: "foo_static",
597 srcs: ["common.c", "not-for-*.c"],
598 exclude_srcs: ["not-for-everything.c"],
599 arch: {
600 arm: { srcs: ["for-arm.c"], exclude_srcs: ["not-for-arm.c"] },
601 x86: { srcs: ["for-x86.c"], exclude_srcs: ["not-for-x86.c"] },
602 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400603 include_build_directory: false,
Jingwen Chene32e9e02021-04-23 09:17:24 +0000604} `,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000605 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000606 MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500607 "srcs_c": `["common.c"] + select({
Jingwen Chene32e9e02021-04-23 09:17:24 +0000608 "//build/bazel/platforms/arch:arm": [
Jingwen Chene32e9e02021-04-23 09:17:24 +0000609 "not-for-x86.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400610 "for-arm.c",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000611 ],
612 "//build/bazel/platforms/arch:x86": [
Jingwen Chene32e9e02021-04-23 09:17:24 +0000613 "not-for-arm.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400614 "for-x86.c",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000615 ],
616 "//conditions:default": [
617 "not-for-arm.c",
618 "not-for-x86.c",
619 ],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500620 })`,
621 }),
622 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200623 })
624}
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500625
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200626func TestCcLibraryStaticFourArchExcludeSrcs(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000627 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
628 Description: "cc_library_static arch specific exclude_srcs for 4 architectures",
629 Filesystem: map[string]string{
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200630 "common.c": "",
631 "for-arm.c": "",
632 "for-arm64.c": "",
633 "for-x86.c": "",
634 "for-x86_64.c": "",
635 "not-for-arm.c": "",
636 "not-for-arm64.c": "",
637 "not-for-x86.c": "",
638 "not-for-x86_64.c": "",
639 "not-for-everything.c": "",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000640 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000641 Blueprint: soongCcLibraryStaticPreamble + `
Jingwen Chene32e9e02021-04-23 09:17:24 +0000642cc_library_static {
643 name: "foo_static",
644 srcs: ["common.c", "not-for-*.c"],
645 exclude_srcs: ["not-for-everything.c"],
646 arch: {
647 arm: { srcs: ["for-arm.c"], exclude_srcs: ["not-for-arm.c"] },
648 arm64: { srcs: ["for-arm64.c"], exclude_srcs: ["not-for-arm64.c"] },
649 x86: { srcs: ["for-x86.c"], exclude_srcs: ["not-for-x86.c"] },
650 x86_64: { srcs: ["for-x86_64.c"], exclude_srcs: ["not-for-x86_64.c"] },
Liz Kammer8337ea42021-09-10 10:06:32 -0400651 },
652 include_build_directory: false,
Jingwen Chene32e9e02021-04-23 09:17:24 +0000653} `,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000654 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000655 MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500656 "srcs_c": `["common.c"] + select({
Jingwen Chene32e9e02021-04-23 09:17:24 +0000657 "//build/bazel/platforms/arch:arm": [
Jingwen Chene32e9e02021-04-23 09:17:24 +0000658 "not-for-arm64.c",
659 "not-for-x86.c",
660 "not-for-x86_64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400661 "for-arm.c",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000662 ],
663 "//build/bazel/platforms/arch:arm64": [
Jingwen Chene32e9e02021-04-23 09:17:24 +0000664 "not-for-arm.c",
665 "not-for-x86.c",
666 "not-for-x86_64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400667 "for-arm64.c",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000668 ],
669 "//build/bazel/platforms/arch:x86": [
Jingwen Chene32e9e02021-04-23 09:17:24 +0000670 "not-for-arm.c",
671 "not-for-arm64.c",
672 "not-for-x86_64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400673 "for-x86.c",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000674 ],
675 "//build/bazel/platforms/arch:x86_64": [
Jingwen Chene32e9e02021-04-23 09:17:24 +0000676 "not-for-arm.c",
677 "not-for-arm64.c",
678 "not-for-x86.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400679 "for-x86_64.c",
Jingwen Chene32e9e02021-04-23 09:17:24 +0000680 ],
681 "//conditions:default": [
682 "not-for-arm.c",
683 "not-for-arm64.c",
684 "not-for-x86.c",
685 "not-for-x86_64.c",
686 ],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500687 })`,
688 }),
689 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200690 })
691}
692
Liz Kammer2b07ec72021-05-26 15:08:27 -0400693func TestCcLibraryStaticOneArchEmpty(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000694 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
695 Description: "cc_library_static one arch empty",
696 Filesystem: map[string]string{
Liz Kammer2b07ec72021-05-26 15:08:27 -0400697 "common.cc": "",
698 "foo-no-arm.cc": "",
699 "foo-excluded.cc": "",
700 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000701 Blueprint: soongCcLibraryStaticPreamble + `
Liz Kammer2b07ec72021-05-26 15:08:27 -0400702cc_library_static {
703 name: "foo_static",
704 srcs: ["common.cc", "foo-*.cc"],
705 exclude_srcs: ["foo-excluded.cc"],
706 arch: {
707 arm: { exclude_srcs: ["foo-no-arm.cc"] },
708 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400709 include_build_directory: false,
Liz Kammer2b07ec72021-05-26 15:08:27 -0400710}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000711 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000712 MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500713 "srcs": `["common.cc"] + select({
Liz Kammer2b07ec72021-05-26 15:08:27 -0400714 "//build/bazel/platforms/arch:arm": [],
715 "//conditions:default": ["foo-no-arm.cc"],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500716 })`,
717 }),
718 },
Liz Kammer2b07ec72021-05-26 15:08:27 -0400719 })
720}
721
722func TestCcLibraryStaticOneArchEmptyOtherSet(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000723 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
724 Description: "cc_library_static one arch empty other set",
725 Filesystem: map[string]string{
Liz Kammer2b07ec72021-05-26 15:08:27 -0400726 "common.cc": "",
727 "foo-no-arm.cc": "",
728 "x86-only.cc": "",
729 "foo-excluded.cc": "",
730 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000731 Blueprint: soongCcLibraryStaticPreamble + `
Liz Kammer2b07ec72021-05-26 15:08:27 -0400732cc_library_static {
733 name: "foo_static",
734 srcs: ["common.cc", "foo-*.cc"],
735 exclude_srcs: ["foo-excluded.cc"],
736 arch: {
737 arm: { exclude_srcs: ["foo-no-arm.cc"] },
738 x86: { srcs: ["x86-only.cc"] },
739 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400740 include_build_directory: false,
Liz Kammer2b07ec72021-05-26 15:08:27 -0400741}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000742 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000743 MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500744 "srcs": `["common.cc"] + select({
Liz Kammer2b07ec72021-05-26 15:08:27 -0400745 "//build/bazel/platforms/arch:arm": [],
746 "//build/bazel/platforms/arch:x86": [
747 "foo-no-arm.cc",
748 "x86-only.cc",
749 ],
750 "//conditions:default": ["foo-no-arm.cc"],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500751 })`,
752 }),
753 },
Liz Kammer2b07ec72021-05-26 15:08:27 -0400754 })
755}
756
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200757func TestCcLibraryStaticMultipleDepSameName(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000758 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
759 Description: "cc_library_static multiple dep same name panic",
760 Filesystem: map[string]string{},
761 Blueprint: soongCcLibraryStaticPreamble + `
Liz Kammer8337ea42021-09-10 10:06:32 -0400762cc_library_static {
763 name: "static_dep",
764 bazel_module: { bp2build_available: false },
765}
Liz Kammer2b50ce62021-04-26 15:47:28 -0400766cc_library_static {
767 name: "foo_static",
Chris Parsons08648312021-05-06 16:23:19 -0400768 static_libs: ["static_dep", "static_dep"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400769 include_build_directory: false,
Liz Kammer2b50ce62021-04-26 15:47:28 -0400770}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000771 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000772 MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500773 "implementation_deps": `[":static_dep"]`,
774 }),
775 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200776 })
777}
778
779func TestCcLibraryStaticOneMultilibSrcsExcludeSrcs(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000780 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
781 Description: "cc_library_static 1 multilib srcs and exclude_srcs",
782 Filesystem: map[string]string{
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200783 "common.c": "",
784 "for-lib32.c": "",
785 "not-for-lib32.c": "",
Liz Kammer2b50ce62021-04-26 15:47:28 -0400786 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000787 Blueprint: soongCcLibraryStaticPreamble + `
Chris Parsonsc424b762021-04-29 18:06:50 -0400788cc_library_static {
789 name: "foo_static",
790 srcs: ["common.c", "not-for-*.c"],
791 multilib: {
792 lib32: { srcs: ["for-lib32.c"], exclude_srcs: ["not-for-lib32.c"] },
793 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400794 include_build_directory: false,
Chris Parsonsc424b762021-04-29 18:06:50 -0400795} `,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000796 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000797 MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500798 "srcs_c": `["common.c"] + select({
Chris Parsonsc424b762021-04-29 18:06:50 -0400799 "//build/bazel/platforms/arch:arm": ["for-lib32.c"],
800 "//build/bazel/platforms/arch:x86": ["for-lib32.c"],
801 "//conditions:default": ["not-for-lib32.c"],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500802 })`,
803 }),
804 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200805 })
806}
807
808func TestCcLibraryStaticTwoMultilibSrcsExcludeSrcs(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000809 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
810 Description: "cc_library_static 2 multilib srcs and exclude_srcs",
811 Filesystem: map[string]string{
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200812 "common.c": "",
813 "for-lib32.c": "",
814 "for-lib64.c": "",
815 "not-for-lib32.c": "",
816 "not-for-lib64.c": "",
Chris Parsonsc424b762021-04-29 18:06:50 -0400817 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000818 Blueprint: soongCcLibraryStaticPreamble + `
Chris Parsonsc424b762021-04-29 18:06:50 -0400819cc_library_static {
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500820 name: "foo_static",
Chris Parsonsc424b762021-04-29 18:06:50 -0400821 srcs: ["common.c", "not-for-*.c"],
822 multilib: {
823 lib32: { srcs: ["for-lib32.c"], exclude_srcs: ["not-for-lib32.c"] },
824 lib64: { srcs: ["for-lib64.c"], exclude_srcs: ["not-for-lib64.c"] },
825 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400826 include_build_directory: false,
Chris Parsonsc424b762021-04-29 18:06:50 -0400827} `,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000828 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000829 MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500830 "srcs_c": `["common.c"] + select({
Chris Parsonsc424b762021-04-29 18:06:50 -0400831 "//build/bazel/platforms/arch:arm": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400832 "not-for-lib64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400833 "for-lib32.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400834 ],
835 "//build/bazel/platforms/arch:arm64": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400836 "not-for-lib32.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400837 "for-lib64.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400838 ],
Colin Crossf05b0d32022-07-14 18:10:34 -0700839 "//build/bazel/platforms/arch:riscv64": [
840 "not-for-lib32.c",
841 "for-lib64.c",
842 ],
Chris Parsonsc424b762021-04-29 18:06:50 -0400843 "//build/bazel/platforms/arch:x86": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400844 "not-for-lib64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400845 "for-lib32.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400846 ],
847 "//build/bazel/platforms/arch:x86_64": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400848 "not-for-lib32.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400849 "for-lib64.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400850 ],
851 "//conditions:default": [
852 "not-for-lib32.c",
853 "not-for-lib64.c",
854 ],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500855 })`,
856 }),
857 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200858 })
859}
860
861func TestCcLibrarySTaticArchMultilibSrcsExcludeSrcs(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000862 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
863 Description: "cc_library_static arch and multilib srcs and exclude_srcs",
864 Filesystem: map[string]string{
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200865 "common.c": "",
866 "for-arm.c": "",
867 "for-arm64.c": "",
868 "for-x86.c": "",
869 "for-x86_64.c": "",
870 "for-lib32.c": "",
871 "for-lib64.c": "",
872 "not-for-arm.c": "",
873 "not-for-arm64.c": "",
Colin Crossf05b0d32022-07-14 18:10:34 -0700874 "not-for-riscv64.c": "",
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200875 "not-for-x86.c": "",
876 "not-for-x86_64.c": "",
877 "not-for-lib32.c": "",
878 "not-for-lib64.c": "",
879 "not-for-everything.c": "",
Chris Parsonsc424b762021-04-29 18:06:50 -0400880 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000881 Blueprint: soongCcLibraryStaticPreamble + `
Chris Parsonsc424b762021-04-29 18:06:50 -0400882cc_library_static {
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500883 name: "foo_static",
Chris Parsonsc424b762021-04-29 18:06:50 -0400884 srcs: ["common.c", "not-for-*.c"],
885 exclude_srcs: ["not-for-everything.c"],
886 arch: {
887 arm: { srcs: ["for-arm.c"], exclude_srcs: ["not-for-arm.c"] },
888 arm64: { srcs: ["for-arm64.c"], exclude_srcs: ["not-for-arm64.c"] },
Colin Crossf05b0d32022-07-14 18:10:34 -0700889 riscv64: { srcs: ["for-riscv64.c"], exclude_srcs: ["not-for-riscv64.c"] },
Chris Parsonsc424b762021-04-29 18:06:50 -0400890 x86: { srcs: ["for-x86.c"], exclude_srcs: ["not-for-x86.c"] },
891 x86_64: { srcs: ["for-x86_64.c"], exclude_srcs: ["not-for-x86_64.c"] },
892 },
893 multilib: {
894 lib32: { srcs: ["for-lib32.c"], exclude_srcs: ["not-for-lib32.c"] },
895 lib64: { srcs: ["for-lib64.c"], exclude_srcs: ["not-for-lib64.c"] },
896 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400897 include_build_directory: false,
Chris Parsonsc424b762021-04-29 18:06:50 -0400898}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000899 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000900 MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500901 "srcs_c": `["common.c"] + select({
Chris Parsonsc424b762021-04-29 18:06:50 -0400902 "//build/bazel/platforms/arch:arm": [
Liz Kammer9bad9d62021-10-11 15:40:35 -0400903 "not-for-arm64.c",
904 "not-for-lib64.c",
Colin Crossf05b0d32022-07-14 18:10:34 -0700905 "not-for-riscv64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400906 "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",
Colin Crossf05b0d32022-07-14 18:10:34 -0700914 "not-for-riscv64.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400915 "not-for-x86.c",
916 "not-for-x86_64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400917 "for-arm64.c",
918 "for-lib64.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400919 ],
Colin Crossf05b0d32022-07-14 18:10:34 -0700920 "//build/bazel/platforms/arch:riscv64": [
921 "not-for-arm.c",
922 "not-for-arm64.c",
923 "not-for-lib32.c",
924 "not-for-x86.c",
925 "not-for-x86_64.c",
926 "for-riscv64.c",
927 "for-lib64.c",
928 ],
Chris Parsonsc424b762021-04-29 18:06:50 -0400929 "//build/bazel/platforms/arch:x86": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400930 "not-for-arm.c",
931 "not-for-arm64.c",
932 "not-for-lib64.c",
Colin Crossf05b0d32022-07-14 18:10:34 -0700933 "not-for-riscv64.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400934 "not-for-x86_64.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400935 "for-x86.c",
936 "for-lib32.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400937 ],
938 "//build/bazel/platforms/arch:x86_64": [
Chris Parsonsc424b762021-04-29 18:06:50 -0400939 "not-for-arm.c",
940 "not-for-arm64.c",
941 "not-for-lib32.c",
Colin Crossf05b0d32022-07-14 18:10:34 -0700942 "not-for-riscv64.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400943 "not-for-x86.c",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400944 "for-x86_64.c",
945 "for-lib64.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400946 ],
947 "//conditions:default": [
948 "not-for-arm.c",
949 "not-for-arm64.c",
950 "not-for-lib32.c",
951 "not-for-lib64.c",
Colin Crossf05b0d32022-07-14 18:10:34 -0700952 "not-for-riscv64.c",
Chris Parsonsc424b762021-04-29 18:06:50 -0400953 "not-for-x86.c",
954 "not-for-x86_64.c",
955 ],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500956 })`,
957 }),
958 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200959 })
960}
961
Liz Kammerae3994e2021-10-19 09:45:48 -0400962func TestCcLibraryStaticGeneratedHeadersAllPartitions(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000963 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
964 Blueprint: soongCcLibraryStaticPreamble + `
Liz Kammerae3994e2021-10-19 09:45:48 -0400965genrule {
966 name: "generated_hdr",
967 cmd: "nothing to see here",
Liz Kammerbe46fcc2021-11-01 15:32:43 -0400968 bazel_module: { bp2build_available: false },
Liz Kammerae3994e2021-10-19 09:45:48 -0400969}
970
Liz Kammere6583482021-10-19 13:56:10 -0400971genrule {
972 name: "export_generated_hdr",
973 cmd: "nothing to see here",
Liz Kammerbe46fcc2021-11-01 15:32:43 -0400974 bazel_module: { bp2build_available: false },
Liz Kammere6583482021-10-19 13:56:10 -0400975}
976
Liz Kammerae3994e2021-10-19 09:45:48 -0400977cc_library_static {
978 name: "foo_static",
979 srcs: ["cpp_src.cpp", "as_src.S", "c_src.c"],
Liz Kammere6583482021-10-19 13:56:10 -0400980 generated_headers: ["generated_hdr", "export_generated_hdr"],
981 export_generated_headers: ["export_generated_hdr"],
Liz Kammerae3994e2021-10-19 09:45:48 -0400982 include_build_directory: false,
983}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000984 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000985 MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
Liz Kammer1263d9b2021-12-10 14:28:20 -0500986 "export_includes": `["."]`,
987 "local_includes": `["."]`,
988 "hdrs": `[":export_generated_hdr"]`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500989 "srcs": `[
Liz Kammerae3994e2021-10-19 09:45:48 -0400990 "cpp_src.cpp",
991 ":generated_hdr",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500992 ]`,
993 "srcs_as": `[
Liz Kammerae3994e2021-10-19 09:45:48 -0400994 "as_src.S",
995 ":generated_hdr",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500996 ]`,
997 "srcs_c": `[
Liz Kammerae3994e2021-10-19 09:45:48 -0400998 "c_src.c",
999 ":generated_hdr",
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001000 ]`,
1001 }),
1002 },
Liz Kammerae3994e2021-10-19 09:45:48 -04001003 })
1004}
1005
Liz Kammer0db0e342023-07-18 11:39:30 -04001006func TestCcLibraryStaticGeneratedHeadersMultipleExports(t *testing.T) {
1007 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
1008 Blueprint: soongCcLibraryStaticPreamble + `
1009genrule {
1010 name: "generated_hdr",
1011 cmd: "nothing to see here",
1012 export_include_dirs: ["foo", "bar"],
1013 bazel_module: { bp2build_available: false },
1014}
1015
1016genrule {
1017 name: "export_generated_hdr",
1018 cmd: "nothing to see here",
1019 export_include_dirs: ["a", "b"],
1020 bazel_module: { bp2build_available: false },
1021}
1022
1023cc_library_static {
1024 name: "foo_static",
1025 generated_headers: ["generated_hdr", "export_generated_hdr"],
1026 export_generated_headers: ["export_generated_hdr"],
1027 include_build_directory: false,
1028}`,
1029 ExpectedBazelTargets: []string{
1030 MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
1031 "deps": `[":export_generated_hdr__header_library"]`,
1032 "implementation_deps": `[":generated_hdr__header_library"]`,
1033 }),
1034 },
1035 })
1036}
1037
Zi Wang9f609db2023-01-04 11:06:54 -08001038// generated_headers has "variant_prepend" tag. In bp2build output,
1039// variant info(select) should go before general info.
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +02001040func TestCcLibraryStaticArchSrcsExcludeSrcsGeneratedFiles(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +00001041 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
1042 Description: "cc_library_static arch srcs/exclude_srcs with generated files",
1043 Filesystem: map[string]string{
Chris Parsons990c4f42021-05-25 12:10:58 -04001044 "common.cpp": "",
1045 "for-x86.cpp": "",
1046 "not-for-x86.cpp": "",
1047 "not-for-everything.cpp": "",
Liz Kammerbe46fcc2021-11-01 15:32:43 -04001048 "dep/Android.bp": simpleModuleDoNotConvertBp2build("genrule", "generated_src_other_pkg") +
1049 simpleModuleDoNotConvertBp2build("genrule", "generated_hdr_other_pkg") +
1050 simpleModuleDoNotConvertBp2build("genrule", "generated_src_other_pkg_x86") +
1051 simpleModuleDoNotConvertBp2build("genrule", "generated_hdr_other_pkg_x86") +
1052 simpleModuleDoNotConvertBp2build("genrule", "generated_hdr_other_pkg_android"),
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +02001053 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +00001054 Blueprint: soongCcLibraryStaticPreamble +
Liz Kammerbe46fcc2021-11-01 15:32:43 -04001055 simpleModuleDoNotConvertBp2build("genrule", "generated_src") +
1056 simpleModuleDoNotConvertBp2build("genrule", "generated_src_not_x86") +
1057 simpleModuleDoNotConvertBp2build("genrule", "generated_src_android") +
1058 simpleModuleDoNotConvertBp2build("genrule", "generated_hdr") + `
Chris Parsons484e50a2021-05-13 15:13:04 -04001059cc_library_static {
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001060 name: "foo_static",
Liz Kammer222bdcf2021-10-11 14:15:51 -04001061 srcs: ["common.cpp", "not-for-*.cpp"],
1062 exclude_srcs: ["not-for-everything.cpp"],
1063 generated_sources: ["generated_src", "generated_src_other_pkg", "generated_src_not_x86"],
1064 generated_headers: ["generated_hdr", "generated_hdr_other_pkg"],
Liz Kammer1263d9b2021-12-10 14:28:20 -05001065 export_generated_headers: ["generated_hdr_other_pkg"],
Liz Kammer222bdcf2021-10-11 14:15:51 -04001066 arch: {
1067 x86: {
1068 srcs: ["for-x86.cpp"],
1069 exclude_srcs: ["not-for-x86.cpp"],
1070 generated_headers: ["generated_hdr_other_pkg_x86"],
1071 exclude_generated_sources: ["generated_src_not_x86"],
Liz Kammer1263d9b2021-12-10 14:28:20 -05001072 export_generated_headers: ["generated_hdr_other_pkg_x86"],
Liz Kammer222bdcf2021-10-11 14:15:51 -04001073 },
1074 },
1075 target: {
1076 android: {
1077 generated_sources: ["generated_src_android"],
1078 generated_headers: ["generated_hdr_other_pkg_android"],
Liz Kammer1263d9b2021-12-10 14:28:20 -05001079 export_generated_headers: ["generated_hdr_other_pkg_android"],
Liz Kammer222bdcf2021-10-11 14:15:51 -04001080 },
1081 },
1082
Liz Kammer8337ea42021-09-10 10:06:32 -04001083 include_build_directory: false,
Chris Parsons484e50a2021-05-13 15:13:04 -04001084}
1085`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +00001086 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +00001087 MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001088 "srcs": `[
Chris Parsons990c4f42021-05-25 12:10:58 -04001089 "common.cpp",
Liz Kammer9bad9d62021-10-11 15:40:35 -04001090 ":generated_src",
1091 "//dep:generated_src_other_pkg",
Liz Kammerae3994e2021-10-19 09:45:48 -04001092 ":generated_hdr",
Chris Parsons484e50a2021-05-13 15:13:04 -04001093 ] + select({
Liz Kammer1263d9b2021-12-10 14:28:20 -05001094 "//build/bazel/platforms/arch:x86": ["for-x86.cpp"],
Liz Kammer222bdcf2021-10-11 14:15:51 -04001095 "//conditions:default": [
Liz Kammer222bdcf2021-10-11 14:15:51 -04001096 "not-for-x86.cpp",
Liz Kammer9bad9d62021-10-11 15:40:35 -04001097 ":generated_src_not_x86",
Liz Kammer222bdcf2021-10-11 14:15:51 -04001098 ],
1099 }) + select({
Liz Kammer1263d9b2021-12-10 14:28:20 -05001100 "//build/bazel/platforms/os:android": [":generated_src_android"],
Liz Kammer222bdcf2021-10-11 14:15:51 -04001101 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001102 })`,
Zi Wang9f609db2023-01-04 11:06:54 -08001103 "hdrs": `select({
Liz Kammer1263d9b2021-12-10 14:28:20 -05001104 "//build/bazel/platforms/os:android": ["//dep:generated_hdr_other_pkg_android"],
1105 "//conditions:default": [],
Zi Wang9f609db2023-01-04 11:06:54 -08001106 }) + select({
1107 "//build/bazel/platforms/arch:x86": ["//dep:generated_hdr_other_pkg_x86"],
1108 "//conditions:default": [],
1109 }) + ["//dep:generated_hdr_other_pkg"]`,
Liz Kammer1263d9b2021-12-10 14:28:20 -05001110 "local_includes": `["."]`,
1111 "export_absolute_includes": `["dep"]`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001112 }),
1113 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +02001114 })
Rupert Shuttleworth095081c2021-03-25 09:06:03 +00001115}
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001116
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001117func TestCcLibraryStaticGetTargetProperties(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +00001118 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001119
Sam Delmerico3177a6e2022-06-21 19:28:33 +00001120 Description: "cc_library_static complex GetTargetProperties",
1121 Blueprint: soongCcLibraryStaticPreamble + `
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001122cc_library_static {
1123 name: "foo_static",
1124 target: {
1125 android: {
1126 srcs: ["android_src.c"],
1127 },
1128 android_arm: {
1129 srcs: ["android_arm_src.c"],
1130 },
1131 android_arm64: {
1132 srcs: ["android_arm64_src.c"],
1133 },
1134 android_x86: {
1135 srcs: ["android_x86_src.c"],
1136 },
1137 android_x86_64: {
1138 srcs: ["android_x86_64_src.c"],
1139 },
1140 linux_bionic_arm64: {
1141 srcs: ["linux_bionic_arm64_src.c"],
1142 },
1143 linux_bionic_x86_64: {
1144 srcs: ["linux_bionic_x86_64_src.c"],
1145 },
1146 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001147 include_build_directory: false,
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001148}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +00001149 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +00001150 MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001151 "srcs_c": `select({
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001152 "//build/bazel/platforms/os:android": ["android_src.c"],
1153 "//conditions:default": [],
1154 }) + select({
Rupert Shuttleworthffd45822021-05-14 03:02:34 -04001155 "//build/bazel/platforms/os_arch:android_arm": ["android_arm_src.c"],
1156 "//build/bazel/platforms/os_arch:android_arm64": ["android_arm64_src.c"],
1157 "//build/bazel/platforms/os_arch:android_x86": ["android_x86_src.c"],
1158 "//build/bazel/platforms/os_arch:android_x86_64": ["android_x86_64_src.c"],
Rupert Shuttleworthffd45822021-05-14 03:02:34 -04001159 "//build/bazel/platforms/os_arch:linux_bionic_arm64": ["linux_bionic_arm64_src.c"],
1160 "//build/bazel/platforms/os_arch:linux_bionic_x86_64": ["linux_bionic_x86_64_src.c"],
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001161 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001162 })`,
1163 }),
1164 },
Rupert Shuttleworthc194ffb2021-05-19 06:49:02 -04001165 })
1166}
1167
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001168func TestCcLibraryStaticProductVariableSelects(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +00001169 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
1170 Description: "cc_library_static product variable selects",
1171 Blueprint: soongCcLibraryStaticPreamble + `
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001172cc_library_static {
1173 name: "foo_static",
1174 srcs: ["common.c"],
1175 product_variables: {
1176 malloc_not_svelte: {
1177 cflags: ["-Wmalloc_not_svelte"],
1178 },
1179 malloc_zero_contents: {
1180 cflags: ["-Wmalloc_zero_contents"],
1181 },
1182 binder32bit: {
1183 cflags: ["-Wbinder32bit"],
1184 },
1185 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001186 include_build_directory: false,
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001187} `,
Sam Delmerico3177a6e2022-06-21 19:28:33 +00001188 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +00001189 MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001190 "copts": `select({
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001191 "//build/bazel/product_variables:binder32bit": ["-Wbinder32bit"],
1192 "//conditions:default": [],
1193 }) + select({
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001194 "//build/bazel/product_variables:malloc_not_svelte": ["-Wmalloc_not_svelte"],
1195 "//conditions:default": [],
1196 }) + select({
1197 "//build/bazel/product_variables:malloc_zero_contents": ["-Wmalloc_zero_contents"],
1198 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001199 })`,
1200 "srcs_c": `["common.c"]`,
1201 }),
1202 },
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001203 })
1204}
1205
1206func TestCcLibraryStaticProductVariableArchSpecificSelects(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +00001207 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
1208 Description: "cc_library_static arch-specific product variable selects",
1209 Filesystem: map[string]string{},
1210 Blueprint: soongCcLibraryStaticPreamble + `
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001211cc_library_static {
1212 name: "foo_static",
1213 srcs: ["common.c"],
1214 product_variables: {
1215 malloc_not_svelte: {
1216 cflags: ["-Wmalloc_not_svelte"],
1217 },
1218 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001219 arch: {
1220 arm64: {
1221 product_variables: {
1222 malloc_not_svelte: {
1223 cflags: ["-Warm64_malloc_not_svelte"],
1224 },
1225 },
1226 },
1227 },
1228 multilib: {
1229 lib32: {
1230 product_variables: {
1231 malloc_not_svelte: {
1232 cflags: ["-Wlib32_malloc_not_svelte"],
1233 },
1234 },
1235 },
1236 },
1237 target: {
1238 android: {
1239 product_variables: {
1240 malloc_not_svelte: {
1241 cflags: ["-Wandroid_malloc_not_svelte"],
1242 },
1243 },
1244 }
1245 },
1246 include_build_directory: false,
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001247} `,
Sam Delmerico3177a6e2022-06-21 19:28:33 +00001248 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +00001249 MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001250 "copts": `select({
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001251 "//build/bazel/product_variables:malloc_not_svelte": ["-Wmalloc_not_svelte"],
1252 "//conditions:default": [],
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001253 }) + select({
Liz Kammere3e4a5f2021-05-10 11:39:53 -04001254 "//build/bazel/product_variables:malloc_not_svelte-android": ["-Wandroid_malloc_not_svelte"],
1255 "//conditions:default": [],
1256 }) + select({
1257 "//build/bazel/product_variables:malloc_not_svelte-arm": ["-Wlib32_malloc_not_svelte"],
1258 "//conditions:default": [],
1259 }) + select({
1260 "//build/bazel/product_variables:malloc_not_svelte-arm64": ["-Warm64_malloc_not_svelte"],
1261 "//conditions:default": [],
1262 }) + select({
1263 "//build/bazel/product_variables:malloc_not_svelte-x86": ["-Wlib32_malloc_not_svelte"],
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001264 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001265 })`,
1266 "srcs_c": `["common.c"]`,
1267 }),
1268 },
Liz Kammer6fd7b3f2021-05-06 13:54:29 -04001269 })
1270}
Liz Kammerba7a9c52021-05-26 08:45:30 -04001271
1272func TestCcLibraryStaticProductVariableStringReplacement(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +00001273 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
1274 Description: "cc_library_static product variable string replacement",
1275 Filesystem: map[string]string{},
1276 Blueprint: soongCcLibraryStaticPreamble + `
Liz Kammerba7a9c52021-05-26 08:45:30 -04001277cc_library_static {
1278 name: "foo_static",
Chris Parsons69fa9f92021-07-13 11:47:44 -04001279 srcs: ["common.S"],
Liz Kammerba7a9c52021-05-26 08:45:30 -04001280 product_variables: {
1281 platform_sdk_version: {
1282 asflags: ["-DPLATFORM_SDK_VERSION=%d"],
1283 },
1284 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001285 include_build_directory: false,
Liz Kammerba7a9c52021-05-26 08:45:30 -04001286} `,
Sam Delmerico3177a6e2022-06-21 19:28:33 +00001287 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +00001288 MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001289 "asflags": `select({
Liz Kammerba7a9c52021-05-26 08:45:30 -04001290 "//build/bazel/product_variables:platform_sdk_version": ["-DPLATFORM_SDK_VERSION=$(Platform_sdk_version)"],
1291 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001292 })`,
1293 "srcs_as": `["common.S"]`,
1294 }),
1295 },
Liz Kammerba7a9c52021-05-26 08:45:30 -04001296 })
1297}
Chris Parsons51f8c392021-08-03 21:01:05 -04001298
1299func TestStaticLibrary_SystemSharedLibsRootEmpty(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +00001300 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
1301 Description: "cc_library_static system_shared_lib empty root",
1302 Blueprint: soongCcLibraryStaticPreamble + `
Chris Parsons51f8c392021-08-03 21:01:05 -04001303cc_library_static {
1304 name: "root_empty",
Liz Kammer8337ea42021-09-10 10:06:32 -04001305 system_shared_libs: [],
1306 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001307}
1308`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +00001309 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +00001310 MakeBazelTarget("cc_library_static", "root_empty", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001311 "system_dynamic_deps": `[]`,
1312 }),
1313 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001314 })
1315}
1316
1317func TestStaticLibrary_SystemSharedLibsStaticEmpty(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +00001318 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
1319 Description: "cc_library_static system_shared_lib empty static default",
1320 Blueprint: soongCcLibraryStaticPreamble + `
Chris Parsons51f8c392021-08-03 21:01:05 -04001321cc_defaults {
1322 name: "static_empty_defaults",
1323 static: {
Liz Kammer8337ea42021-09-10 10:06:32 -04001324 system_shared_libs: [],
1325 },
1326 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001327}
1328cc_library_static {
1329 name: "static_empty",
Liz Kammer8337ea42021-09-10 10:06:32 -04001330 defaults: ["static_empty_defaults"],
Chris Parsons51f8c392021-08-03 21:01:05 -04001331}
1332`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +00001333 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +00001334 MakeBazelTarget("cc_library_static", "static_empty", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001335 "system_dynamic_deps": `[]`,
1336 }),
1337 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001338 })
1339}
1340
1341func TestStaticLibrary_SystemSharedLibsBionicEmpty(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +00001342 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
1343 Description: "cc_library_static system_shared_lib empty for bionic variant",
1344 Blueprint: soongCcLibraryStaticPreamble + `
Trevor Radcliffe0d1b4022022-12-12 22:26:34 +00001345cc_library {
1346 name: "libc_musl",
1347 bazel_module: { bp2build_available: false },
1348}
1349
Chris Parsons51f8c392021-08-03 21:01:05 -04001350cc_library_static {
1351 name: "target_bionic_empty",
1352 target: {
1353 bionic: {
1354 system_shared_libs: [],
1355 },
1356 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001357 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001358}
1359`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +00001360 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +00001361 MakeBazelTarget("cc_library_static", "target_bionic_empty", AttrNameToString{
Trevor Radcliffe0d1b4022022-12-12 22:26:34 +00001362 "system_dynamic_deps": `select({
1363 "//build/bazel/platforms/os:linux_musl": [":libc_musl"],
1364 "//conditions:default": [],
1365 })`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001366 }),
1367 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001368 })
1369}
1370
1371func TestStaticLibrary_SystemSharedLibsLinuxBionicEmpty(t *testing.T) {
1372 // Note that this behavior is technically incorrect (it's a simplification).
1373 // The correct behavior would be if bp2build wrote `system_dynamic_deps = []`
1374 // only for linux_bionic, but `android` had `["libc", "libdl", "libm"].
1375 // b/195791252 tracks the fix.
Sam Delmerico3177a6e2022-06-21 19:28:33 +00001376 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
1377 Description: "cc_library_static system_shared_lib empty for linux_bionic variant",
1378 Blueprint: soongCcLibraryStaticPreamble + `
Trevor Radcliffe0d1b4022022-12-12 22:26:34 +00001379cc_library {
1380 name: "libc_musl",
1381 bazel_module: { bp2build_available: false },
1382}
1383
Chris Parsons51f8c392021-08-03 21:01:05 -04001384cc_library_static {
1385 name: "target_linux_bionic_empty",
1386 target: {
1387 linux_bionic: {
1388 system_shared_libs: [],
1389 },
1390 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001391 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001392}
1393`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +00001394 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +00001395 MakeBazelTarget("cc_library_static", "target_linux_bionic_empty", AttrNameToString{
Trevor Radcliffe0d1b4022022-12-12 22:26:34 +00001396 "system_dynamic_deps": `select({
1397 "//build/bazel/platforms/os:linux_musl": [":libc_musl"],
1398 "//conditions:default": [],
1399 })`,
1400 }),
1401 },
1402 })
1403}
1404
1405func TestStaticLibrary_SystemSharedLibsMuslEmpty(t *testing.T) {
1406 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
1407 Description: "cc_library_static system_shared_lib empty for musl variant",
1408 Blueprint: soongCcLibraryStaticPreamble + `
1409cc_library {
1410 name: "libc_musl",
1411 bazel_module: { bp2build_available: false },
1412}
1413
1414cc_library_static {
1415 name: "target_musl_empty",
1416 target: {
1417 musl: {
1418 system_shared_libs: [],
1419 },
1420 },
1421 include_build_directory: false,
1422}
1423`,
1424 ExpectedBazelTargets: []string{
1425 MakeBazelTarget("cc_library_static", "target_musl_empty", AttrNameToString{
1426 "system_dynamic_deps": `[]`,
1427 }),
1428 },
1429 })
1430}
1431
1432func TestStaticLibrary_SystemSharedLibsLinuxMuslEmpty(t *testing.T) {
1433 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
1434 Description: "cc_library_static system_shared_lib empty for linux_musl variant",
1435 Blueprint: soongCcLibraryStaticPreamble + `
1436cc_library {
1437 name: "libc_musl",
1438 bazel_module: { bp2build_available: false },
1439}
1440
1441cc_library_static {
1442 name: "target_linux_musl_empty",
1443 target: {
1444 linux_musl: {
1445 system_shared_libs: [],
1446 },
1447 },
1448 include_build_directory: false,
1449}
1450`,
1451 ExpectedBazelTargets: []string{
1452 MakeBazelTarget("cc_library_static", "target_linux_musl_empty", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001453 "system_dynamic_deps": `[]`,
1454 }),
1455 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001456 })
1457}
1458
1459func TestStaticLibrary_SystemSharedLibsBionic(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +00001460 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
1461 Description: "cc_library_static system_shared_libs set for bionic variant",
1462 Blueprint: soongCcLibraryStaticPreamble +
Liz Kammerbe46fcc2021-11-01 15:32:43 -04001463 simpleModuleDoNotConvertBp2build("cc_library", "libc") + `
Trevor Radcliffe0d1b4022022-12-12 22:26:34 +00001464cc_library {
1465 name: "libc_musl",
1466 bazel_module: { bp2build_available: false },
1467}
1468
Chris Parsons51f8c392021-08-03 21:01:05 -04001469cc_library_static {
1470 name: "target_bionic",
1471 target: {
1472 bionic: {
1473 system_shared_libs: ["libc"],
1474 },
1475 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001476 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001477}
1478`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +00001479 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +00001480 MakeBazelTarget("cc_library_static", "target_bionic", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001481 "system_dynamic_deps": `select({
Chris Parsons2dde0cb2021-10-01 14:45:30 -04001482 "//build/bazel/platforms/os:android": [":libc"],
1483 "//build/bazel/platforms/os:linux_bionic": [":libc"],
Trevor Radcliffe0d1b4022022-12-12 22:26:34 +00001484 "//build/bazel/platforms/os:linux_musl": [":libc_musl"],
Chris Parsons51f8c392021-08-03 21:01:05 -04001485 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001486 })`,
1487 }),
1488 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001489 })
1490}
1491
1492func TestStaticLibrary_SystemSharedLibsLinuxRootAndLinuxBionic(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +00001493 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
1494 Description: "cc_library_static system_shared_libs set for root and linux_bionic variant",
1495 Blueprint: soongCcLibraryStaticPreamble +
Liz Kammerbe46fcc2021-11-01 15:32:43 -04001496 simpleModuleDoNotConvertBp2build("cc_library", "libc") +
1497 simpleModuleDoNotConvertBp2build("cc_library", "libm") + `
Trevor Radcliffe0d1b4022022-12-12 22:26:34 +00001498cc_library {
1499 name: "libc_musl",
1500 bazel_module: { bp2build_available: false },
1501}
1502
Chris Parsons51f8c392021-08-03 21:01:05 -04001503cc_library_static {
1504 name: "target_linux_bionic",
Liz Kammer8337ea42021-09-10 10:06:32 -04001505 system_shared_libs: ["libc"],
Chris Parsons51f8c392021-08-03 21:01:05 -04001506 target: {
1507 linux_bionic: {
1508 system_shared_libs: ["libm"],
1509 },
1510 },
Liz Kammer8337ea42021-09-10 10:06:32 -04001511 include_build_directory: false,
Chris Parsons51f8c392021-08-03 21:01:05 -04001512}
1513`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +00001514 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +00001515 MakeBazelTarget("cc_library_static", "target_linux_bionic", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001516 "system_dynamic_deps": `[":libc"] + select({
Chris Parsons51f8c392021-08-03 21:01:05 -04001517 "//build/bazel/platforms/os:linux_bionic": [":libm"],
Trevor Radcliffe0d1b4022022-12-12 22:26:34 +00001518 "//build/bazel/platforms/os:linux_musl": [":libc_musl"],
Chris Parsons51f8c392021-08-03 21:01:05 -04001519 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -05001520 })`,
1521 }),
1522 },
Chris Parsons51f8c392021-08-03 21:01:05 -04001523 })
1524}
Liz Kammer12615db2021-09-28 09:19:17 -04001525
Liz Kammer54309532021-12-14 12:21:22 -05001526func TestCcLibrarystatic_SystemSharedLibUsedAsDep(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +00001527 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
1528 Description: "cc_library_static system_shared_lib empty for linux_bionic variant",
1529 Blueprint: soongCcLibraryStaticPreamble +
Liz Kammer54309532021-12-14 12:21:22 -05001530 simpleModuleDoNotConvertBp2build("cc_library", "libc") + `
Liz Kammer91487d42022-09-13 11:27:11 -04001531
1532cc_library {
1533 name: "libm",
1534 stubs: {
1535 symbol_file: "libm.map.txt",
1536 versions: ["current"],
1537 },
1538 bazel_module: { bp2build_available: false },
Spandan Das6d4d9da2023-04-18 06:20:40 +00001539 apex_available: ["com.android.runtime"],
Liz Kammer91487d42022-09-13 11:27:11 -04001540}
1541
Liz Kammer54309532021-12-14 12:21:22 -05001542cc_library_static {
1543 name: "used_in_bionic_oses",
1544 target: {
1545 android: {
1546 shared_libs: ["libc"],
1547 },
1548 linux_bionic: {
1549 shared_libs: ["libc"],
1550 },
1551 },
1552 include_build_directory: false,
Liz Kammer48cdbeb2023-03-17 10:17:50 -04001553 apex_available: ["foo"],
Liz Kammer54309532021-12-14 12:21:22 -05001554}
1555
1556cc_library_static {
1557 name: "all",
1558 shared_libs: ["libc"],
1559 include_build_directory: false,
Liz Kammer48cdbeb2023-03-17 10:17:50 -04001560 apex_available: ["foo"],
Liz Kammer54309532021-12-14 12:21:22 -05001561}
1562
1563cc_library_static {
1564 name: "keep_for_empty_system_shared_libs",
1565 shared_libs: ["libc"],
Liz Kammer91487d42022-09-13 11:27:11 -04001566 system_shared_libs: [],
1567 include_build_directory: false,
Liz Kammer48cdbeb2023-03-17 10:17:50 -04001568 apex_available: ["foo"],
Liz Kammer91487d42022-09-13 11:27:11 -04001569}
1570
1571cc_library_static {
1572 name: "used_with_stubs",
1573 shared_libs: ["libm"],
1574 include_build_directory: false,
Liz Kammer48cdbeb2023-03-17 10:17:50 -04001575 apex_available: ["foo"],
Liz Kammer91487d42022-09-13 11:27:11 -04001576}
1577
1578cc_library_static {
1579 name: "keep_with_stubs",
1580 shared_libs: ["libm"],
1581 system_shared_libs: [],
Liz Kammer54309532021-12-14 12:21:22 -05001582 include_build_directory: false,
Liz Kammer48cdbeb2023-03-17 10:17:50 -04001583 apex_available: ["foo"],
Liz Kammer54309532021-12-14 12:21:22 -05001584}
1585`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +00001586 ExpectedBazelTargets: []string{
Liz Kammer48cdbeb2023-03-17 10:17:50 -04001587 MakeBazelTarget("cc_library_static", "all", AttrNameToString{
1588 "tags": `["apex_available=foo"]`,
1589 }),
Alixe06d75b2022-08-31 18:28:19 +00001590 MakeBazelTarget("cc_library_static", "keep_for_empty_system_shared_libs", AttrNameToString{
Liz Kammer54309532021-12-14 12:21:22 -05001591 "implementation_dynamic_deps": `[":libc"]`,
1592 "system_dynamic_deps": `[]`,
Liz Kammer48cdbeb2023-03-17 10:17:50 -04001593 "tags": `["apex_available=foo"]`,
Liz Kammer54309532021-12-14 12:21:22 -05001594 }),
Liz Kammer91487d42022-09-13 11:27:11 -04001595 MakeBazelTarget("cc_library_static", "keep_with_stubs", AttrNameToString{
1596 "implementation_dynamic_deps": `select({
Spandan Das6d4d9da2023-04-18 06:20:40 +00001597 "//build/bazel/rules/apex:foo": ["@api_surfaces//module-libapi/current:libm"],
1598 "//build/bazel/rules/apex:system": ["@api_surfaces//module-libapi/current:libm"],
Liz Kammer91487d42022-09-13 11:27:11 -04001599 "//conditions:default": [":libm"],
1600 })`,
1601 "system_dynamic_deps": `[]`,
Liz Kammer48cdbeb2023-03-17 10:17:50 -04001602 "tags": `["apex_available=foo"]`,
Liz Kammer91487d42022-09-13 11:27:11 -04001603 }),
Liz Kammer48cdbeb2023-03-17 10:17:50 -04001604 MakeBazelTarget("cc_library_static", "used_in_bionic_oses", AttrNameToString{
1605 "tags": `["apex_available=foo"]`,
1606 }),
1607 MakeBazelTarget("cc_library_static", "used_with_stubs", AttrNameToString{
1608 "tags": `["apex_available=foo"]`,
1609 }),
Liz Kammer54309532021-12-14 12:21:22 -05001610 },
1611 })
1612}
1613
Liz Kammer12615db2021-09-28 09:19:17 -04001614func TestCcLibraryStaticProto(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +00001615 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
1616 Blueprint: soongCcProtoPreamble + `cc_library_static {
Liz Kammer12615db2021-09-28 09:19:17 -04001617 name: "foo",
1618 srcs: ["foo.proto"],
1619 proto: {
Liz Kammer12615db2021-09-28 09:19:17 -04001620 export_proto_headers: true,
1621 },
1622 include_build_directory: false,
1623}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +00001624 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +00001625 MakeBazelTarget("proto_library", "foo_proto", AttrNameToString{
Liz Kammer12615db2021-09-28 09:19:17 -04001626 "srcs": `["foo.proto"]`,
Alixe06d75b2022-08-31 18:28:19 +00001627 }), MakeBazelTarget("cc_lite_proto_library", "foo_cc_proto_lite", AttrNameToString{
Liz Kammer12615db2021-09-28 09:19:17 -04001628 "deps": `[":foo_proto"]`,
Alixe06d75b2022-08-31 18:28:19 +00001629 }), MakeBazelTarget("cc_library_static", "foo", AttrNameToString{
Liz Kammer12615db2021-09-28 09:19:17 -04001630 "deps": `[":libprotobuf-cpp-lite"]`,
1631 "whole_archive_deps": `[":foo_cc_proto_lite"]`,
1632 }),
1633 },
1634 })
1635}
Rupert Shuttleworth484aa252021-12-10 07:22:53 -05001636
1637func TestCcLibraryStaticUseVersionLib(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +00001638 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
Liz Kammerbaced712022-09-16 09:01:29 -04001639 Filesystem: map[string]string{
1640 soongCcVersionLibBpPath: soongCcVersionLibBp,
1641 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +00001642 Blueprint: soongCcProtoPreamble + `cc_library_static {
Rupert Shuttleworth484aa252021-12-10 07:22:53 -05001643 name: "foo",
1644 use_version_lib: true,
Liz Kammerbaced712022-09-16 09:01:29 -04001645 static_libs: ["libbuildversion"],
Rupert Shuttleworth484aa252021-12-10 07:22:53 -05001646 include_build_directory: false,
1647}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +00001648 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +00001649 MakeBazelTarget("cc_library_static", "foo", AttrNameToString{
Yu Liufe978fd2023-04-24 16:37:18 -07001650 "whole_archive_deps": `["//build/soong/cc/libbuildversion:libbuildversion"]`,
Liz Kammerbaced712022-09-16 09:01:29 -04001651 }),
1652 },
1653 })
1654}
1655
1656func TestCcLibraryStaticUseVersionLibHasDep(t *testing.T) {
1657 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
1658 Filesystem: map[string]string{
1659 soongCcVersionLibBpPath: soongCcVersionLibBp,
1660 },
1661 Blueprint: soongCcProtoPreamble + `cc_library_static {
1662 name: "foo",
1663 use_version_lib: true,
1664 whole_static_libs: ["libbuildversion"],
1665 include_build_directory: false,
1666}`,
1667 ExpectedBazelTargets: []string{
1668 MakeBazelTarget("cc_library_static", "foo", AttrNameToString{
1669 "whole_archive_deps": `["//build/soong/cc/libbuildversion:libbuildversion"]`,
Rupert Shuttleworth484aa252021-12-10 07:22:53 -05001670 }),
1671 },
1672 })
1673}
Liz Kammercac7f692021-12-16 14:19:32 -05001674
1675func TestCcLibraryStaticStdInFlags(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +00001676 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
1677 Blueprint: soongCcProtoPreamble + `cc_library_static {
Liz Kammercac7f692021-12-16 14:19:32 -05001678 name: "foo",
1679 cflags: ["-std=candcpp"],
1680 conlyflags: ["-std=conly"],
1681 cppflags: ["-std=cpp"],
1682 include_build_directory: false,
1683}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +00001684 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +00001685 MakeBazelTarget("cc_library_static", "foo", AttrNameToString{
Liz Kammercac7f692021-12-16 14:19:32 -05001686 "conlyflags": `["-std=conly"]`,
1687 "cppflags": `["-std=cpp"]`,
1688 }),
1689 },
1690 })
1691}
Liz Kammer7128d382022-05-12 11:42:33 -04001692
1693func TestCcLibraryStaticStl(t *testing.T) {
1694 testCases := []struct {
1695 desc string
1696 prop string
Sam Delmerico3177a6e2022-06-21 19:28:33 +00001697 attr AttrNameToString
Liz Kammer7128d382022-05-12 11:42:33 -04001698 }{
1699 {
1700 desc: "c++_shared deduped to libc++",
1701 prop: `stl: "c++_shared",`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +00001702 attr: AttrNameToString{
Liz Kammer7128d382022-05-12 11:42:33 -04001703 "stl": `"libc++"`,
1704 },
1705 },
1706 {
1707 desc: "libc++ to libc++",
1708 prop: `stl: "libc++",`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +00001709 attr: AttrNameToString{
Liz Kammer7128d382022-05-12 11:42:33 -04001710 "stl": `"libc++"`,
1711 },
1712 },
1713 {
1714 desc: "c++_static to libc++_static",
1715 prop: `stl: "c++_static",`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +00001716 attr: AttrNameToString{
Liz Kammer7128d382022-05-12 11:42:33 -04001717 "stl": `"libc++_static"`,
1718 },
1719 },
1720 {
1721 desc: "libc++_static to libc++_static",
1722 prop: `stl: "libc++_static",`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +00001723 attr: AttrNameToString{
Liz Kammer7128d382022-05-12 11:42:33 -04001724 "stl": `"libc++_static"`,
1725 },
1726 },
1727 {
1728 desc: "system to system",
1729 prop: `stl: "system",`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +00001730 attr: AttrNameToString{
Liz Kammer7128d382022-05-12 11:42:33 -04001731 "stl": `"system"`,
1732 },
1733 },
1734 {
1735 desc: "none to none",
1736 prop: `stl: "none",`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +00001737 attr: AttrNameToString{
Liz Kammer7128d382022-05-12 11:42:33 -04001738 "stl": `"none"`,
1739 },
1740 },
1741 {
1742 desc: "empty to empty",
Sam Delmerico3177a6e2022-06-21 19:28:33 +00001743 attr: AttrNameToString{},
Liz Kammer7128d382022-05-12 11:42:33 -04001744 },
1745 }
1746 for _, tc := range testCases {
1747 t.Run(tc.desc, func(*testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +00001748 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
1749 Blueprint: fmt.Sprintf(`cc_library_static {
Liz Kammer7128d382022-05-12 11:42:33 -04001750 name: "foo",
1751 include_build_directory: false,
1752 %s
1753}`, tc.prop),
Sam Delmerico3177a6e2022-06-21 19:28:33 +00001754 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +00001755 MakeBazelTarget("cc_library_static", "foo", tc.attr),
Liz Kammer7128d382022-05-12 11:42:33 -04001756 },
1757 })
1758 })
1759 }
1760}
Cole Faust6b29f592022-08-09 09:50:56 -07001761
1762func TestCCLibraryStaticRuntimeDeps(t *testing.T) {
1763 runCcLibrarySharedTestCase(t, Bp2buildTestCase{
1764 Blueprint: `cc_library_shared {
1765 name: "bar",
1766}
1767
1768cc_library_static {
1769 name: "foo",
1770 runtime_libs: ["foo"],
1771}`,
1772 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +00001773 MakeBazelTarget("cc_library_shared", "bar", AttrNameToString{
Cole Faust6b29f592022-08-09 09:50:56 -07001774 "local_includes": `["."]`,
1775 }),
Alixe06d75b2022-08-31 18:28:19 +00001776 MakeBazelTarget("cc_library_static", "foo", AttrNameToString{
Cole Faust6b29f592022-08-09 09:50:56 -07001777 "runtime_deps": `[":foo"]`,
1778 "local_includes": `["."]`,
1779 }),
1780 },
1781 })
1782}
Trevor Radcliffecee4e052022-09-06 19:31:25 +00001783
1784func TestCcLibraryStaticWithSyspropSrcs(t *testing.T) {
1785 runCcLibraryTestCase(t, Bp2buildTestCase{
1786 Description: "cc_library_static with sysprop sources",
1787 Blueprint: `
1788cc_library_static {
1789 name: "foo",
1790 srcs: [
1791 "bar.sysprop",
1792 "baz.sysprop",
1793 "blah.cpp",
1794 ],
1795 min_sdk_version: "5",
1796}`,
1797 ExpectedBazelTargets: []string{
1798 MakeBazelTarget("sysprop_library", "foo_sysprop_library", AttrNameToString{
1799 "srcs": `[
1800 "bar.sysprop",
1801 "baz.sysprop",
1802 ]`,
1803 }),
1804 MakeBazelTarget("cc_sysprop_library_static", "foo_cc_sysprop_library_static", AttrNameToString{
1805 "dep": `":foo_sysprop_library"`,
1806 "min_sdk_version": `"5"`,
1807 }),
1808 MakeBazelTarget("cc_library_static", "foo", AttrNameToString{
1809 "srcs": `["blah.cpp"]`,
1810 "local_includes": `["."]`,
1811 "min_sdk_version": `"5"`,
1812 "whole_archive_deps": `[":foo_cc_sysprop_library_static"]`,
1813 }),
1814 },
1815 })
1816}
1817
1818func TestCcLibraryStaticWithSyspropSrcsSomeConfigs(t *testing.T) {
1819 runCcLibraryTestCase(t, Bp2buildTestCase{
1820 Description: "cc_library_static with sysprop sources in some configs but not others",
1821 Blueprint: `
1822cc_library_static {
1823 name: "foo",
1824 srcs: [
1825 "blah.cpp",
1826 ],
1827 target: {
1828 android: {
1829 srcs: ["bar.sysprop"],
1830 },
1831 },
1832 min_sdk_version: "5",
1833}`,
1834 ExpectedBazelTargets: []string{
1835 MakeBazelTarget("sysprop_library", "foo_sysprop_library", AttrNameToString{
1836 "srcs": `select({
1837 "//build/bazel/platforms/os:android": ["bar.sysprop"],
1838 "//conditions:default": [],
1839 })`,
1840 }),
1841 MakeBazelTarget("cc_sysprop_library_static", "foo_cc_sysprop_library_static", AttrNameToString{
1842 "dep": `":foo_sysprop_library"`,
1843 "min_sdk_version": `"5"`,
1844 }),
1845 MakeBazelTarget("cc_library_static", "foo", AttrNameToString{
1846 "srcs": `["blah.cpp"]`,
1847 "local_includes": `["."]`,
1848 "min_sdk_version": `"5"`,
1849 "whole_archive_deps": `select({
1850 "//build/bazel/platforms/os:android": [":foo_cc_sysprop_library_static"],
1851 "//conditions:default": [],
1852 })`,
1853 }),
1854 },
1855 })
1856}
Trevor Radcliffedb7e0262022-10-28 16:48:18 +00001857
1858func TestCcLibraryStaticWithIntegerOverflowProperty(t *testing.T) {
1859 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
1860 Description: "cc_library_static has correct features when integer_overflow property is provided",
1861 Blueprint: `
1862cc_library_static {
1863 name: "foo",
1864 sanitize: {
1865 integer_overflow: true,
1866 },
1867}
1868`,
1869 ExpectedBazelTargets: []string{
1870 MakeBazelTarget("cc_library_static", "foo", AttrNameToString{
1871 "features": `["ubsan_integer_overflow"]`,
1872 "local_includes": `["."]`,
1873 }),
1874 },
1875 })
1876}
1877
1878func TestCcLibraryStaticWithMiscUndefinedProperty(t *testing.T) {
1879 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
1880 Description: "cc_library_static has correct features when misc_undefined property is provided",
1881 Blueprint: `
1882cc_library_static {
1883 name: "foo",
1884 sanitize: {
1885 misc_undefined: ["undefined", "nullability"],
1886 },
1887}
1888`,
1889 ExpectedBazelTargets: []string{
1890 MakeBazelTarget("cc_library_static", "foo", AttrNameToString{
1891 "features": `[
1892 "ubsan_undefined",
1893 "ubsan_nullability",
1894 ]`,
1895 "local_includes": `["."]`,
1896 }),
1897 },
1898 })
1899}
1900
1901func TestCcLibraryStaticWithUBSanPropertiesArchSpecific(t *testing.T) {
1902 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
1903 Description: "cc_library_static has correct feature select when UBSan props are specified in arch specific blocks",
1904 Blueprint: `
1905cc_library_static {
1906 name: "foo",
1907 sanitize: {
1908 misc_undefined: ["undefined", "nullability"],
1909 },
1910 target: {
1911 android: {
1912 sanitize: {
1913 misc_undefined: ["alignment"],
1914 },
1915 },
1916 linux_glibc: {
1917 sanitize: {
1918 integer_overflow: true,
1919 },
1920 },
1921 },
1922}
1923`,
1924 ExpectedBazelTargets: []string{
1925 MakeBazelTarget("cc_library_static", "foo", AttrNameToString{
1926 "features": `[
1927 "ubsan_undefined",
1928 "ubsan_nullability",
1929 ] + select({
1930 "//build/bazel/platforms/os:android": ["ubsan_alignment"],
1931 "//build/bazel/platforms/os:linux_glibc": ["ubsan_integer_overflow"],
1932 "//conditions:default": [],
1933 })`,
1934 "local_includes": `["."]`,
1935 }),
1936 },
1937 })
1938}
Trevor Radcliffe56b1a2b2023-02-06 21:58:30 +00001939
Trevor Radcliffeded095c2023-06-12 19:18:28 +00001940func TestCcLibraryStaticWithSanitizerBlocklist(t *testing.T) {
1941 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
1942 Description: "cc_library_static has correct features when sanitize.blocklist is provided",
1943 Blueprint: `
1944cc_library_static {
1945 name: "foo",
1946 sanitize: {
1947 blocklist: "foo_blocklist.txt",
1948 },
1949}
1950`,
1951 ExpectedBazelTargets: []string{
1952 MakeBazelTarget("cc_library_static", "foo", AttrNameToString{
Trevor Radcliffed7148712023-07-10 18:50:47 +00001953 "features": `["sanitizer_blocklist_foo_blocklist_txt"]`,
Trevor Radcliffeded095c2023-06-12 19:18:28 +00001954 "local_includes": `["."]`,
1955 }),
1956 },
1957 })
1958}
1959
Trevor Radcliffe56b1a2b2023-02-06 21:58:30 +00001960func TestCcLibraryStaticWithThinLto(t *testing.T) {
1961 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
1962 Description: "cc_library_static has correct features when thin lto is enabled",
1963 Blueprint: `
1964cc_library_static {
1965 name: "foo",
1966 lto: {
1967 thin: true,
1968 },
1969}
1970`,
1971 ExpectedBazelTargets: []string{
1972 MakeBazelTarget("cc_library_static", "foo", AttrNameToString{
1973 "features": `["android_thin_lto"]`,
1974 "local_includes": `["."]`,
1975 }),
1976 },
1977 })
1978}
1979
1980func TestCcLibraryStaticWithLtoNever(t *testing.T) {
1981 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
1982 Description: "cc_library_static has correct features when thin lto is enabled",
1983 Blueprint: `
1984cc_library_static {
1985 name: "foo",
1986 lto: {
1987 never: true,
1988 },
1989}
1990`,
1991 ExpectedBazelTargets: []string{
1992 MakeBazelTarget("cc_library_static", "foo", AttrNameToString{
1993 "features": `["-android_thin_lto"]`,
1994 "local_includes": `["."]`,
1995 }),
1996 },
1997 })
1998}
1999
2000func TestCcLibraryStaticWithThinLtoArchSpecific(t *testing.T) {
2001 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
2002 Description: "cc_library_static has correct features when LTO differs across arch and os variants",
2003 Blueprint: `
2004cc_library_static {
2005 name: "foo",
2006 target: {
2007 android: {
2008 lto: {
2009 thin: true,
2010 },
2011 },
2012 },
2013 arch: {
2014 riscv64: {
2015 lto: {
2016 thin: false,
2017 },
2018 },
2019 },
2020}`,
2021 ExpectedBazelTargets: []string{
2022 MakeBazelTarget("cc_library_static", "foo", AttrNameToString{
2023 "local_includes": `["."]`,
2024 "features": `select({
2025 "//build/bazel/platforms/os_arch:android_arm": ["android_thin_lto"],
2026 "//build/bazel/platforms/os_arch:android_arm64": ["android_thin_lto"],
2027 "//build/bazel/platforms/os_arch:android_riscv64": ["-android_thin_lto"],
2028 "//build/bazel/platforms/os_arch:android_x86": ["android_thin_lto"],
2029 "//build/bazel/platforms/os_arch:android_x86_64": ["android_thin_lto"],
2030 "//conditions:default": [],
2031 })`}),
2032 },
2033 })
2034}
2035
2036func TestCcLibraryStaticWithThinLtoDisabledDefaultEnabledVariant(t *testing.T) {
2037 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
2038 Description: "cc_library_static has correct features when LTO disabled by default but enabled on a particular variant",
2039 Blueprint: `
2040cc_library_static {
2041 name: "foo",
2042 lto: {
2043 never: true,
2044 },
2045 target: {
2046 android: {
2047 lto: {
2048 thin: true,
2049 never: false,
2050 },
2051 },
2052 },
2053}`,
2054 ExpectedBazelTargets: []string{
2055 MakeBazelTarget("cc_library_static", "foo", AttrNameToString{
2056 "local_includes": `["."]`,
2057 "features": `select({
2058 "//build/bazel/platforms/os:android": ["android_thin_lto"],
2059 "//conditions:default": ["-android_thin_lto"],
2060 })`,
2061 }),
2062 },
2063 })
2064}
2065
2066func TestCcLibraryStaticWithThinLtoAndWholeProgramVtables(t *testing.T) {
2067 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
2068 Description: "cc_library_static has correct features when thin lto is enabled with whole_program_vtables",
2069 Blueprint: `
2070cc_library_static {
2071 name: "foo",
2072 lto: {
2073 thin: true,
2074 },
2075 whole_program_vtables: true,
2076}
2077`,
2078 ExpectedBazelTargets: []string{
2079 MakeBazelTarget("cc_library_static", "foo", AttrNameToString{
2080 "features": `[
2081 "android_thin_lto",
2082 "android_thin_lto_whole_program_vtables",
2083 ]`,
2084 "local_includes": `["."]`,
2085 }),
2086 },
2087 })
2088}
Trevor Radcliffea8b44162023-04-14 18:25:24 +00002089
2090func TestCcLibraryStaticHiddenVisibilityConvertedToFeature(t *testing.T) {
2091 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
2092 Description: "cc_library_static changes hidden visibility flag to feature",
2093 Blueprint: `
2094cc_library_static {
2095 name: "foo",
2096 cflags: ["-fvisibility=hidden"],
2097}`,
2098 ExpectedBazelTargets: []string{
2099 MakeBazelTarget("cc_library_static", "foo", AttrNameToString{
2100 "features": `["visibility_hidden"]`,
2101 "local_includes": `["."]`,
2102 }),
2103 },
2104 })
2105}
2106
2107func TestCcLibraryStaticHiddenVisibilityConvertedToFeatureOsSpecific(t *testing.T) {
2108 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
2109 Description: "cc_library_static changes hidden visibility flag to feature for specific os",
2110 Blueprint: `
2111cc_library_static {
2112 name: "foo",
2113 target: {
2114 android: {
2115 cflags: ["-fvisibility=hidden"],
2116 },
2117 },
2118}`,
2119 ExpectedBazelTargets: []string{
2120 MakeBazelTarget("cc_library_static", "foo", AttrNameToString{
2121 "features": `select({
2122 "//build/bazel/platforms/os:android": ["visibility_hidden"],
2123 "//conditions:default": [],
2124 })`,
2125 "local_includes": `["."]`,
2126 }),
2127 },
2128 })
2129}
Trevor Radcliffe27669c02023-03-28 20:47:10 +00002130
2131func TestCcLibraryStaticWithCfi(t *testing.T) {
2132 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
2133 Description: "cc_library_static has correct features when cfi is enabled",
2134 Blueprint: `
2135cc_library_static {
2136 name: "foo",
2137 sanitize: {
2138 cfi: true,
2139 },
2140}`,
2141 ExpectedBazelTargets: []string{
2142 MakeBazelTarget("cc_library_static", "foo", AttrNameToString{
2143 "features": `["android_cfi"]`,
2144 "local_includes": `["."]`,
2145 }),
2146 },
2147 })
2148}
2149
2150func TestCcLibraryStaticWithCfiOsSpecific(t *testing.T) {
2151 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
2152 Description: "cc_library_static has correct features when cfi is enabled for specific variants",
2153 Blueprint: `
2154cc_library_static {
2155 name: "foo",
2156 target: {
2157 android: {
2158 sanitize: {
2159 cfi: true,
2160 },
2161 },
2162 },
2163}`,
2164 ExpectedBazelTargets: []string{
2165 MakeBazelTarget("cc_library_static", "foo", AttrNameToString{
2166 "features": `select({
2167 "//build/bazel/platforms/os:android": ["android_cfi"],
2168 "//conditions:default": [],
2169 })`,
2170 "local_includes": `["."]`,
2171 }),
2172 },
2173 })
2174}
2175
2176func TestCcLibraryStaticWithCfiAndCfiAssemblySupport(t *testing.T) {
2177 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
2178 Description: "cc_library_static has correct features when cfi is enabled with cfi_assembly_support",
2179 Blueprint: `
2180cc_library_static {
2181 name: "foo",
2182 sanitize: {
2183 cfi: true,
2184 config: {
2185 cfi_assembly_support: true,
2186 },
2187 },
2188}`,
2189 ExpectedBazelTargets: []string{
2190 MakeBazelTarget("cc_library_static", "foo", AttrNameToString{
2191 "features": `[
2192 "android_cfi",
2193 "android_cfi_assembly_support",
2194 ]`,
2195 "local_includes": `["."]`,
2196 }),
2197 },
2198 })
2199}
Trevor Radcliffe523c5c62023-06-16 20:15:45 +00002200
2201func TestCcLibraryStaticExplicitlyDisablesCfiWhenFalse(t *testing.T) {
2202 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
2203 Description: "cc_library_static disables cfi when explciitly set to false in the bp",
2204 Blueprint: `
2205cc_library_static {
2206 name: "foo",
2207 sanitize: {
2208 cfi: false,
2209 },
2210}
2211`,
2212 ExpectedBazelTargets: []string{
2213 MakeBazelTarget("cc_library_static", "foo", AttrNameToString{
2214 "features": `["-android_cfi"]`,
2215 "local_includes": `["."]`,
2216 }),
2217 },
2218 })
2219}
Alixe2667872023-04-24 14:57:32 +00002220
2221func TestCCLibraryStaticRscriptSrc(t *testing.T) {
2222 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
2223 Description: `cc_library_static with rscript files in sources`,
2224 Blueprint: `
2225cc_library_static{
2226 name : "foo",
2227 srcs : [
2228 "ccSrc.cc",
2229 "rsSrc.rscript",
2230 ],
2231 include_build_directory: false,
2232}
2233`,
2234 ExpectedBazelTargets: []string{
2235 MakeBazelTarget("rscript_to_cpp", "foo_renderscript", AttrNameToString{
2236 "srcs": `["rsSrc.rscript"]`,
2237 }),
2238 MakeBazelTarget("cc_library_static", "foo", AttrNameToString{
2239 "absolute_includes": `[
2240 "frameworks/rs",
2241 "frameworks/rs/cpp",
2242 ]`,
2243 "local_includes": `["."]`,
2244 "srcs": `[
2245 "ccSrc.cc",
2246 "foo_renderscript",
2247 ]`,
2248 })}})
2249}
Spandan Dasa99348d2023-08-01 23:10:05 +00002250
2251func TestCcLibraryWithProtoInGeneratedSrcs(t *testing.T) {
2252 runCcLibraryStaticTestCase(t, Bp2buildTestCase{
2253 Description: "cc_library with a .proto file generated from a genrule",
2254 ModuleTypeUnderTest: "cc_library_static",
2255 ModuleTypeUnderTestFactory: cc.LibraryStaticFactory,
2256 Blueprint: soongCcLibraryPreamble + `
2257cc_library_static {
2258 name: "mylib",
2259 generated_sources: ["myprotogen"],
2260}
2261genrule {
2262 name: "myprotogen",
2263 out: ["myproto.proto"],
2264}
2265` + simpleModuleDoNotConvertBp2build("cc_library", "libprotobuf-cpp-lite"),
2266 ExpectedBazelTargets: []string{
2267 MakeBazelTarget("cc_library_static", "mylib", AttrNameToString{
2268 "local_includes": `["."]`,
2269 "deps": `[":libprotobuf-cpp-lite"]`,
2270 "implementation_whole_archive_deps": `[":mylib_cc_proto_lite"]`,
2271 }),
2272 MakeBazelTarget("cc_lite_proto_library", "mylib_cc_proto_lite", AttrNameToString{
2273 "deps": `[":mylib_proto"]`,
2274 }),
2275 MakeBazelTarget("proto_library", "mylib_proto", AttrNameToString{
2276 "srcs": `[":myprotogen"]`,
2277 }),
2278 MakeBazelTargetNoRestrictions("genrule", "myprotogen", AttrNameToString{
2279 "cmd": `""`,
2280 "outs": `["myproto.proto"]`,
2281 }),
2282 },
2283 })
2284}