blob: e54f05162e6616da1a8101c7439dad3219f5d33e [file] [log] [blame]
Rupert Shuttleworth54e78412021-02-15 11:04:32 +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 (
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020018 "testing"
19
Rupert Shuttleworth54e78412021-02-15 11:04:32 +000020 "android/soong/android"
21 "android/soong/cc"
Rupert Shuttleworth54e78412021-02-15 11:04:32 +000022)
23
24const (
25 // See cc/testing.go for more context
Jingwen Chen63930982021-03-24 10:04:33 -040026 soongCcLibraryHeadersPreamble = `
Rupert Shuttleworth54e78412021-02-15 11:04:32 +000027cc_defaults {
Liz Kammer8337ea42021-09-10 10:06:32 -040028 name: "linux_bionic_supported",
Rupert Shuttleworth54e78412021-02-15 11:04:32 +000029}`
30)
31
32func TestCcLibraryHeadersLoadStatement(t *testing.T) {
33 testCases := []struct {
34 bazelTargets BazelTargets
35 expectedLoadStatements string
36 }{
37 {
38 bazelTargets: BazelTargets{
39 BazelTarget{
40 name: "cc_library_headers_target",
41 ruleClass: "cc_library_headers",
42 // Note: no bzlLoadLocation for native rules
43 },
44 },
45 expectedLoadStatements: ``,
46 },
47 }
48
49 for _, testCase := range testCases {
50 actual := testCase.bazelTargets.LoadStatements()
51 expected := testCase.expectedLoadStatements
52 if actual != expected {
53 t.Fatalf("Expected load statements to be %s, got %s", expected, actual)
54 }
55 }
Rupert Shuttleworth54e78412021-02-15 11:04:32 +000056}
57
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020058func registerCcLibraryHeadersModuleTypes(ctx android.RegistrationContext) {
59 cc.RegisterCCBuildComponents(ctx)
Liz Kammer86a407f2023-09-18 09:23:38 -040060 cc.RegisterLibraryHeadersBuildComponents(ctx)
Liz Kammere1b39a52023-09-18 14:32:18 -040061 ctx.RegisterModuleType("cc_library_shared", cc.LibrarySharedFactory)
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020062}
63
Sam Delmerico3177a6e2022-06-21 19:28:33 +000064func runCcLibraryHeadersTestCase(t *testing.T, tc Bp2buildTestCase) {
Liz Kammere4982e82021-05-25 10:39:35 -040065 t.Helper()
Sam Delmerico3177a6e2022-06-21 19:28:33 +000066 RunBp2BuildTestCase(t, registerCcLibraryHeadersModuleTypes, tc)
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020067}
68
69func TestCcLibraryHeadersSimple(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +000070 runCcLibraryHeadersTestCase(t, Bp2buildTestCase{
Liz Kammer86a407f2023-09-18 09:23:38 -040071 Description: "cc_library_headers test",
Sam Delmerico3177a6e2022-06-21 19:28:33 +000072 Filesystem: map[string]string{
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020073 "lib-1/lib1a.h": "",
74 "lib-1/lib1b.h": "",
75 "lib-2/lib2a.h": "",
76 "lib-2/lib2b.h": "",
77 "dir-1/dir1a.h": "",
78 "dir-1/dir1b.h": "",
79 "dir-2/dir2a.h": "",
80 "dir-2/dir2b.h": "",
81 "arch_arm64_exported_include_dir/a.h": "",
82 "arch_x86_exported_include_dir/b.h": "",
83 "arch_x86_64_exported_include_dir/c.h": "",
84 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +000085 Blueprint: soongCcLibraryHeadersPreamble + `
Rupert Shuttleworth54e78412021-02-15 11:04:32 +000086cc_library_headers {
Rupert Shuttleworth54e78412021-02-15 11:04:32 +000087 name: "foo_headers",
88 export_include_dirs: ["dir-1", "dir-2"],
89 header_libs: ["lib-1", "lib-2"],
Rupert Shuttleworth095081c2021-03-25 09:06:03 +000090
Rupert Shuttleworthb8151682021-04-06 20:06:21 +000091 arch: {
92 arm64: {
Liz Kammer8337ea42021-09-10 10:06:32 -040093 // We expect dir-1 headers to be dropped, because dir-1 is already in export_include_dirs
Rupert Shuttleworthb8151682021-04-06 20:06:21 +000094 export_include_dirs: ["arch_arm64_exported_include_dir", "dir-1"],
95 },
96 x86: {
97 export_include_dirs: ["arch_x86_exported_include_dir"],
98 },
99 x86_64: {
100 export_include_dirs: ["arch_x86_64_exported_include_dir"],
101 },
102 },
Yu Liufc603162022-03-01 15:44:08 -0800103 sdk_version: "current",
104 min_sdk_version: "29",
Rupert Shuttleworthb8151682021-04-06 20:06:21 +0000105
Rupert Shuttleworth095081c2021-03-25 09:06:03 +0000106 // TODO: Also support export_header_lib_headers
Rupert Shuttleworth54e78412021-02-15 11:04:32 +0000107}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000108 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000109 MakeBazelTarget("cc_library_headers", "foo_headers", AttrNameToString{
Zi Wang1cb11802022-12-09 16:08:54 -0800110 "export_includes": `select({
Jingwen Chenb4628eb2021-04-08 14:40:57 +0000111 "//build/bazel/platforms/arch:arm64": ["arch_arm64_exported_include_dir"],
112 "//build/bazel/platforms/arch:x86": ["arch_x86_exported_include_dir"],
113 "//build/bazel/platforms/arch:x86_64": ["arch_x86_64_exported_include_dir"],
Rupert Shuttleworthb8151682021-04-06 20:06:21 +0000114 "//conditions:default": [],
Zi Wang1cb11802022-12-09 16:08:54 -0800115 }) + [
116 "dir-1",
117 "dir-2",
118 ]`,
Trevor Radcliffefb6c5222022-06-17 19:42:28 +0000119 "sdk_version": `"current"`,
120 "min_sdk_version": `"29"`,
Spandan Dasaf725832023-09-19 19:51:52 +0000121 "deps": `select({
122 "//build/bazel/rules/apex:unbundled_app": ["//build/bazel/rules/cc:ndk_sysroot"],
123 "//conditions:default": [],
124 })`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500125 }),
126 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200127 })
128}
129
Zi Wang9f609db2023-01-04 11:06:54 -0800130// header_libs has "variant_prepend" tag. In bp2build output,
131// variant info(select) should go before general info.
Liz Kammer8337ea42021-09-10 10:06:32 -0400132func TestCcLibraryHeadersOsSpecificHeader(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000133 runCcLibraryHeadersTestCase(t, Bp2buildTestCase{
Liz Kammer86a407f2023-09-18 09:23:38 -0400134 Description: "cc_library_headers test with os-specific header_libs props",
135 Filesystem: map[string]string{},
Chris Parsonscd209032023-09-19 01:12:48 +0000136 StubbedBuildDefinitions: []string{"android-lib", "base-lib", "darwin-lib",
137 "linux-lib", "linux_bionic-lib", "windows-lib"},
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000138 Blueprint: soongCcLibraryPreamble + `
Liz Kammer8337ea42021-09-10 10:06:32 -0400139cc_library_headers {
140 name: "android-lib",
Liz Kammer8337ea42021-09-10 10:06:32 -0400141}
142cc_library_headers {
143 name: "base-lib",
Liz Kammer8337ea42021-09-10 10:06:32 -0400144}
145cc_library_headers {
146 name: "darwin-lib",
Liz Kammer8337ea42021-09-10 10:06:32 -0400147}
148cc_library_headers {
149 name: "linux-lib",
Liz Kammer8337ea42021-09-10 10:06:32 -0400150}
151cc_library_headers {
152 name: "linux_bionic-lib",
Liz Kammer8337ea42021-09-10 10:06:32 -0400153}
154cc_library_headers {
155 name: "windows-lib",
Liz Kammer8337ea42021-09-10 10:06:32 -0400156}
Jingwen Chen91220d72021-03-24 02:18:33 -0400157cc_library_headers {
158 name: "foo_headers",
159 header_libs: ["base-lib"],
Trevor Radcliffefb6c5222022-06-17 19:42:28 +0000160 export_header_lib_headers: ["base-lib"],
Jingwen Chen91220d72021-03-24 02:18:33 -0400161 target: {
Trevor Radcliffefb6c5222022-06-17 19:42:28 +0000162 android: {
163 header_libs: ["android-lib"],
164 export_header_lib_headers: ["android-lib"],
165 },
166 darwin: {
167 header_libs: ["darwin-lib"],
168 export_header_lib_headers: ["darwin-lib"],
169 },
170 linux_bionic: {
171 header_libs: ["linux_bionic-lib"],
172 export_header_lib_headers: ["linux_bionic-lib"],
173 },
174 linux_glibc: {
175 header_libs: ["linux-lib"],
176 export_header_lib_headers: ["linux-lib"],
177 },
178 windows: {
179 header_libs: ["windows-lib"],
180 export_header_lib_headers: ["windows-lib"],
181 },
Jingwen Chen91220d72021-03-24 02:18:33 -0400182 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400183 include_build_directory: false,
Jingwen Chen91220d72021-03-24 02:18:33 -0400184}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000185 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000186 MakeBazelTarget("cc_library_headers", "foo_headers", AttrNameToString{
Zi Wang9f609db2023-01-04 11:06:54 -0800187 "deps": `select({
Jingwen Chenb4628eb2021-04-08 14:40:57 +0000188 "//build/bazel/platforms/os:android": [":android-lib"],
189 "//build/bazel/platforms/os:darwin": [":darwin-lib"],
Jingwen Chenb4628eb2021-04-08 14:40:57 +0000190 "//build/bazel/platforms/os:linux_bionic": [":linux_bionic-lib"],
Colin Cross133782e2022-12-20 15:29:31 -0800191 "//build/bazel/platforms/os:linux_glibc": [":linux-lib"],
Jingwen Chenb4628eb2021-04-08 14:40:57 +0000192 "//build/bazel/platforms/os:windows": [":windows-lib"],
Jingwen Chen91220d72021-03-24 02:18:33 -0400193 "//conditions:default": [],
Zi Wang9f609db2023-01-04 11:06:54 -0800194 }) + [":base-lib"]`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500195 }),
196 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200197 })
198}
199
200func TestCcLibraryHeadersOsSpecficHeaderLibsExportHeaderLibHeaders(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000201 runCcLibraryHeadersTestCase(t, Bp2buildTestCase{
Liz Kammer86a407f2023-09-18 09:23:38 -0400202 Description: "cc_library_headers test with os-specific header_libs and export_header_lib_headers props",
203 Filesystem: map[string]string{},
204 StubbedBuildDefinitions: []string{"android-lib", "exported-lib"},
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000205 Blueprint: soongCcLibraryPreamble + `
Liz Kammer8337ea42021-09-10 10:06:32 -0400206cc_library_headers {
207 name: "android-lib",
Liz Kammer8337ea42021-09-10 10:06:32 -0400208 }
209cc_library_headers {
210 name: "exported-lib",
Liz Kammer8337ea42021-09-10 10:06:32 -0400211}
Jingwen Chen91220d72021-03-24 02:18:33 -0400212cc_library_headers {
213 name: "foo_headers",
214 target: {
Liz Kammer7a210ac2021-09-22 15:52:58 -0400215 android: {
216 header_libs: ["android-lib", "exported-lib"],
217 export_header_lib_headers: ["exported-lib"]
218 },
Jingwen Chen91220d72021-03-24 02:18:33 -0400219 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400220 include_build_directory: false,
Jingwen Chen91220d72021-03-24 02:18:33 -0400221}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000222 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000223 MakeBazelTarget("cc_library_headers", "foo_headers", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500224 "deps": `select({
Chris Parsonsd6358772021-05-18 18:35:24 -0400225 "//build/bazel/platforms/os:android": [":exported-lib"],
226 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500227 })`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500228 }),
229 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200230 })
231}
232
233func TestCcLibraryHeadersArchAndTargetExportSystemIncludes(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000234 runCcLibraryHeadersTestCase(t, Bp2buildTestCase{
Liz Kammer86a407f2023-09-18 09:23:38 -0400235 Description: "cc_library_headers test with arch-specific and target-specific export_system_include_dirs props",
236 Filesystem: map[string]string{},
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000237 Blueprint: soongCcLibraryPreamble + `cc_library_headers {
Rupert Shuttleworth375451e2021-04-26 07:49:08 -0400238 name: "foo_headers",
239 export_system_include_dirs: [
Liz Kammer8337ea42021-09-10 10:06:32 -0400240 "shared_include_dir",
Rupert Shuttleworth375451e2021-04-26 07:49:08 -0400241 ],
242 target: {
Liz Kammer8337ea42021-09-10 10:06:32 -0400243 android: {
244 export_system_include_dirs: [
245 "android_include_dir",
Rupert Shuttleworth375451e2021-04-26 07:49:08 -0400246 ],
Liz Kammer8337ea42021-09-10 10:06:32 -0400247 },
Rupert Shuttleworth375451e2021-04-26 07:49:08 -0400248 linux_glibc: {
249 export_system_include_dirs: [
250 "linux_include_dir",
251 ],
252 },
253 darwin: {
254 export_system_include_dirs: [
255 "darwin_include_dir",
256 ],
257 },
258 },
259 arch: {
260 arm: {
Liz Kammer8337ea42021-09-10 10:06:32 -0400261 export_system_include_dirs: [
262 "arm_include_dir",
Rupert Shuttleworth375451e2021-04-26 07:49:08 -0400263 ],
Liz Kammer8337ea42021-09-10 10:06:32 -0400264 },
Rupert Shuttleworth375451e2021-04-26 07:49:08 -0400265 x86_64: {
266 export_system_include_dirs: [
267 "x86_64_include_dir",
268 ],
269 },
270 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400271 include_build_directory: false,
Rupert Shuttleworth375451e2021-04-26 07:49:08 -0400272}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000273 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000274 MakeBazelTarget("cc_library_headers", "foo_headers", AttrNameToString{
Zi Wang1cb11802022-12-09 16:08:54 -0800275 "export_system_includes": `select({
Rupert Shuttleworth375451e2021-04-26 07:49:08 -0400276 "//build/bazel/platforms/os:android": ["android_include_dir"],
277 "//build/bazel/platforms/os:darwin": ["darwin_include_dir"],
Colin Cross133782e2022-12-20 15:29:31 -0800278 "//build/bazel/platforms/os:linux_glibc": ["linux_include_dir"],
Rupert Shuttleworth375451e2021-04-26 07:49:08 -0400279 "//conditions:default": [],
Zi Wang1cb11802022-12-09 16:08:54 -0800280 }) + select({
281 "//build/bazel/platforms/arch:arm": ["arm_include_dir"],
282 "//build/bazel/platforms/arch:x86_64": ["x86_64_include_dir"],
283 "//conditions:default": [],
284 }) + ["shared_include_dir"]`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500285 }),
286 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200287 })
Rupert Shuttleworth54e78412021-02-15 11:04:32 +0000288}
Liz Kammerd366c902021-06-03 13:43:01 -0400289
290func TestCcLibraryHeadersNoCrtIgnored(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000291 runCcLibraryHeadersTestCase(t, Bp2buildTestCase{
Liz Kammer86a407f2023-09-18 09:23:38 -0400292 Description: "cc_library_headers test",
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000293 Filesystem: map[string]string{
Liz Kammerd366c902021-06-03 13:43:01 -0400294 "lib-1/lib1a.h": "",
295 "lib-1/lib1b.h": "",
296 "lib-2/lib2a.h": "",
297 "lib-2/lib2b.h": "",
298 "dir-1/dir1a.h": "",
299 "dir-1/dir1b.h": "",
300 "dir-2/dir2a.h": "",
301 "dir-2/dir2b.h": "",
302 "arch_arm64_exported_include_dir/a.h": "",
303 "arch_x86_exported_include_dir/b.h": "",
304 "arch_x86_64_exported_include_dir/c.h": "",
305 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000306 Blueprint: soongCcLibraryHeadersPreamble + `
Liz Kammerd366c902021-06-03 13:43:01 -0400307cc_library_headers {
308 name: "lib-1",
309 export_include_dirs: ["lib-1"],
310 no_libcrt: true,
Liz Kammer8337ea42021-09-10 10:06:32 -0400311 include_build_directory: false,
Liz Kammerd366c902021-06-03 13:43:01 -0400312}`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000313 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000314 MakeBazelTarget("cc_library_headers", "lib-1", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500315 "export_includes": `["lib-1"]`,
316 }),
317 },
Liz Kammerd366c902021-06-03 13:43:01 -0400318 })
319}
Trevor Radcliffe2be7f542022-06-22 20:30:55 +0000320
321func TestCcLibraryHeadersExportedStaticLibHeadersReexported(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000322 runCcLibraryHeadersTestCase(t, Bp2buildTestCase{
Liz Kammer86a407f2023-09-18 09:23:38 -0400323 Description: "cc_library_headers exported_static_lib_headers is reexported",
324 Filesystem: map[string]string{},
325 StubbedBuildDefinitions: []string{"foo_export"},
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000326 Blueprint: soongCcLibraryHeadersPreamble + `
Trevor Radcliffe2be7f542022-06-22 20:30:55 +0000327cc_library_headers {
328 name: "foo_headers",
329 export_static_lib_headers: ["foo_export"],
330 static_libs: ["foo_export", "foo_no_reexport"],
331 bazel_module: { bp2build_available: true },
332}
Chris Parsonscd209032023-09-19 01:12:48 +0000333` + simpleModule("cc_library_headers", "foo_export"),
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000334 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000335 MakeBazelTarget("cc_library_headers", "foo_headers", AttrNameToString{
Trevor Radcliffe2be7f542022-06-22 20:30:55 +0000336 "deps": `[":foo_export"]`,
337 }),
338 },
339 })
340}
341
342func TestCcLibraryHeadersExportedSharedLibHeadersReexported(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000343 runCcLibraryHeadersTestCase(t, Bp2buildTestCase{
Liz Kammer86a407f2023-09-18 09:23:38 -0400344 Description: "cc_library_headers exported_shared_lib_headers is reexported",
345 Filesystem: map[string]string{},
346 StubbedBuildDefinitions: []string{"foo_export"},
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000347 Blueprint: soongCcLibraryHeadersPreamble + `
Trevor Radcliffe2be7f542022-06-22 20:30:55 +0000348cc_library_headers {
349 name: "foo_headers",
350 export_shared_lib_headers: ["foo_export"],
351 shared_libs: ["foo_export", "foo_no_reexport"],
352 bazel_module: { bp2build_available: true },
353}
Chris Parsonscd209032023-09-19 01:12:48 +0000354` + simpleModule("cc_library_headers", "foo_export"),
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000355 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000356 MakeBazelTarget("cc_library_headers", "foo_headers", AttrNameToString{
Trevor Radcliffe2be7f542022-06-22 20:30:55 +0000357 "deps": `[":foo_export"]`,
358 }),
359 },
360 })
361}
362
363func TestCcLibraryHeadersExportedHeaderLibHeadersReexported(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000364 runCcLibraryHeadersTestCase(t, Bp2buildTestCase{
Liz Kammer86a407f2023-09-18 09:23:38 -0400365 Description: "cc_library_headers exported_header_lib_headers is reexported",
366 Filesystem: map[string]string{},
367 StubbedBuildDefinitions: []string{"foo_export"},
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000368 Blueprint: soongCcLibraryHeadersPreamble + `
Trevor Radcliffe2be7f542022-06-22 20:30:55 +0000369cc_library_headers {
370 name: "foo_headers",
371 export_header_lib_headers: ["foo_export"],
372 header_libs: ["foo_export", "foo_no_reexport"],
373 bazel_module: { bp2build_available: true },
374}
Chris Parsonscd209032023-09-19 01:12:48 +0000375` + simpleModule("cc_library_headers", "foo_export"),
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000376 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000377 MakeBazelTarget("cc_library_headers", "foo_headers", AttrNameToString{
Trevor Radcliffe2be7f542022-06-22 20:30:55 +0000378 "deps": `[":foo_export"]`,
379 }),
380 },
381 })
382}
Trevor Radcliffe7f897fc2022-08-18 15:53:00 +0000383
384func TestCcLibraryHeadersWholeStaticLibsReexported(t *testing.T) {
385 runCcLibraryHeadersTestCase(t, Bp2buildTestCase{
Liz Kammer86a407f2023-09-18 09:23:38 -0400386 Description: "cc_library_headers whole_static_libs is reexported",
387 Filesystem: map[string]string{},
388 StubbedBuildDefinitions: []string{"foo_export"},
Trevor Radcliffe7f897fc2022-08-18 15:53:00 +0000389 Blueprint: soongCcLibraryHeadersPreamble + `
390cc_library_headers {
391 name: "foo_headers",
392 whole_static_libs: ["foo_export"],
393 bazel_module: { bp2build_available: true },
394}
Chris Parsonscd209032023-09-19 01:12:48 +0000395` + simpleModule("cc_library_headers", "foo_export"),
Trevor Radcliffe7f897fc2022-08-18 15:53:00 +0000396 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000397 MakeBazelTarget("cc_library_headers", "foo_headers", AttrNameToString{
Trevor Radcliffe7f897fc2022-08-18 15:53:00 +0000398 "deps": `[":foo_export"]`,
399 }),
400 },
401 })
402}
Liz Kammer86a407f2023-09-18 09:23:38 -0400403
404func TestPrebuiltCcLibraryHeadersWholeStaticLibsReexported(t *testing.T) {
405 runCcLibraryHeadersTestCase(t, Bp2buildTestCase{
406 Description: "cc_library_headers whole_static_libs is reexported",
407 Filesystem: map[string]string{
408 "foo/bar/Android.bp": simpleModule("cc_library_headers", "foo_headers"),
409 },
410 StubbedBuildDefinitions: []string{"foo_export"},
411 Blueprint: soongCcLibraryHeadersPreamble + `
412cc_prebuilt_library_headers {
413 name: "foo_headers",
414 whole_static_libs: ["foo_export"],
415 bazel_module: { bp2build_available: true },
416}
417` + simpleModule("cc_library_headers", "foo_export"),
418 ExpectedBazelTargets: []string{
419 MakeBazelTarget("cc_library_headers", "foo_headers", AttrNameToString{
420 "deps": `[":foo_export"]`,
421 }),
422 },
423 })
424}
Liz Kammere1b39a52023-09-18 14:32:18 -0400425
426func TestPrebuiltCcLibraryHeadersPreferredRdepUpdated(t *testing.T) {
427 runCcLibraryHeadersTestCase(t, Bp2buildTestCase{
428 Description: "cc_library_headers prebuilt preferred is used as rdep",
429 StubbedBuildDefinitions: []string{"foo_export"},
430 Filesystem: map[string]string{
431 "foo/bar/Android.bp": simpleModule("cc_library_headers", "foo_headers"),
432 },
433 Blueprint: soongCcLibraryHeadersPreamble + `
434cc_prebuilt_library_headers {
435 name: "foo_headers",
436 whole_static_libs: ["foo_export"],
437 bazel_module: { bp2build_available: true },
438 prefer: true,
439}
440
441cc_library_shared {
442 name: "foo",
443 header_libs: ["foo_headers"],
444 include_build_directory: false,
445}
446` + simpleModule("cc_library_headers", "foo_export"),
447 ExpectedBazelTargets: []string{
448 MakeBazelTarget("cc_library_headers", "foo_headers", AttrNameToString{
449 "deps": `[":foo_export"]`,
450 }),
451 MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{
452 "implementation_deps": `[":foo_headers"]`,
453 }),
454 },
455 })
456}
457
458func TestPrebuiltCcLibraryHeadersRdepUpdated(t *testing.T) {
459 runCcLibraryHeadersTestCase(t, Bp2buildTestCase{
460 Description: "cc_library_headers not preferred is not used for rdep",
461 StubbedBuildDefinitions: []string{"foo_export"},
462 Filesystem: map[string]string{
463 "foo/bar/Android.bp": simpleModule("cc_library_headers", "foo_headers"),
464 },
465 Blueprint: soongCcLibraryHeadersPreamble + `
466cc_prebuilt_library_headers {
467 name: "foo_headers",
468 whole_static_libs: ["foo_export"],
469 bazel_module: { bp2build_available: true },
470 prefer: false,
471}
472
473cc_library_shared {
474 name: "foo",
475 header_libs: ["foo_headers"],
476 include_build_directory: false,
477}
478` + simpleModule("cc_library_headers", "foo_export"),
479 ExpectedBazelTargets: []string{
480 MakeBazelTarget("cc_library_headers", "foo_headers", AttrNameToString{
481 "deps": `[":foo_export"]`,
482 }),
483 MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{
484 "implementation_deps": `["//foo/bar:foo_headers"]`,
485 }),
486 },
487 })
488}