blob: 4d44db76a6ab0d0d8d9bc00452fbeb81bc2c9460 [file] [log] [blame]
Jingwen Chen8c1b97e2021-02-18 03:21:34 -05001// 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
Jingwen Chen8c1b97e2021-02-18 03:21:34 -050020 "android/soong/android"
21 "android/soong/cc"
Jingwen Chen8c1b97e2021-02-18 03:21:34 -050022)
23
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020024func registerCcObjectModuleTypes(ctx android.RegistrationContext) {
25 // Always register cc_defaults module factory
26 ctx.RegisterModuleType("cc_defaults", func() android.Module { return cc.DefaultsFactory() })
Colin Cross65ebc422022-12-05 21:18:13 -080027 ctx.RegisterModuleType("cc_library_headers", cc.LibraryHeaderFactory)
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020028}
29
Sam Delmerico3177a6e2022-06-21 19:28:33 +000030func runCcObjectTestCase(t *testing.T, tc Bp2buildTestCase) {
Liz Kammere4982e82021-05-25 10:39:35 -040031 t.Helper()
Sam Delmerico3177a6e2022-06-21 19:28:33 +000032 (&tc).ModuleTypeUnderTest = "cc_object"
33 (&tc).ModuleTypeUnderTestFactory = cc.ObjectFactory
34 RunBp2BuildTestCase(t, registerCcObjectModuleTypes, tc)
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020035}
36
37func TestCcObjectSimple(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +000038 runCcObjectTestCase(t, Bp2buildTestCase{
39 Description: "simple cc_object generates cc_object with include header dep",
40 Filesystem: map[string]string{
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020041 "a/b/foo.h": "",
42 "a/b/bar.h": "",
43 "a/b/exclude.c": "",
44 "a/b/c.c": "",
45 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +000046 Blueprint: `cc_object {
Jingwen Chen8c1b97e2021-02-18 03:21:34 -050047 name: "foo",
48 local_include_dirs: ["include"],
Colin Cross6b8f4252021-07-22 11:39:44 -070049 system_shared_libs: [],
Jingwen Chen8c1b97e2021-02-18 03:21:34 -050050 cflags: [
51 "-Wno-gcc-compat",
52 "-Wall",
53 "-Werror",
54 ],
55 srcs: [
Jingwen Chendb120242021-02-23 00:46:47 -050056 "a/b/*.c"
Jingwen Chen8c1b97e2021-02-18 03:21:34 -050057 ],
Jingwen Chendb120242021-02-23 00:46:47 -050058 exclude_srcs: ["a/b/exclude.c"],
Yu Liufc603162022-03-01 15:44:08 -080059 sdk_version: "current",
60 min_sdk_version: "29",
Sam Delmerico3fad8ed2023-01-25 16:52:36 -050061 crt: true,
Jingwen Chen8c1b97e2021-02-18 03:21:34 -050062}
63`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +000064 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +000065 MakeBazelTarget("cc_object", "foo", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -050066 "copts": `[
Jingwen Chen8c1b97e2021-02-18 03:21:34 -050067 "-fno-addrsig",
68 "-Wno-gcc-compat",
69 "-Wall",
70 "-Werror",
Liz Kammer78cfdaa2021-11-08 12:56:31 -050071 ]`,
72 "local_includes": `[
Liz Kammer35687bc2021-09-10 10:07:07 -040073 "include",
74 ".",
Liz Kammer78cfdaa2021-11-08 12:56:31 -050075 ]`,
76 "srcs": `["a/b/c.c"]`,
77 "system_dynamic_deps": `[]`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +000078 "sdk_version": `"current"`,
79 "min_sdk_version": `"29"`,
Sam Delmerico3fad8ed2023-01-25 16:52:36 -050080 "crt": "True",
Liz Kammer78cfdaa2021-11-08 12:56:31 -050081 }),
Jingwen Chen8c1b97e2021-02-18 03:21:34 -050082 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020083 })
84}
85
86func TestCcObjectDefaults(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +000087 runCcObjectTestCase(t, Bp2buildTestCase{
88 Blueprint: `cc_object {
Jingwen Chen8c1b97e2021-02-18 03:21:34 -050089 name: "foo",
Colin Cross6b8f4252021-07-22 11:39:44 -070090 system_shared_libs: [],
Jingwen Chen8c1b97e2021-02-18 03:21:34 -050091 srcs: [
92 "a/b/*.h",
93 "a/b/c.c"
94 ],
95
96 defaults: ["foo_defaults"],
Jingwen Chen8c1b97e2021-02-18 03:21:34 -050097}
98
99cc_defaults {
100 name: "foo_defaults",
101 defaults: ["foo_bar_defaults"],
Jingwen Chen8c1b97e2021-02-18 03:21:34 -0500102}
103
104cc_defaults {
105 name: "foo_bar_defaults",
106 cflags: [
Jingwen Chen8c1b97e2021-02-18 03:21:34 -0500107 "-Werror",
108 ],
109}
110`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000111 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000112 MakeBazelTarget("cc_object", "foo", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500113 "copts": `[
Jingwen Chen8c1b97e2021-02-18 03:21:34 -0500114 "-Werror",
115 "-fno-addrsig",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500116 ]`,
117 "local_includes": `["."]`,
118 "srcs": `["a/b/c.c"]`,
119 "system_dynamic_deps": `[]`,
120 }),
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200121 }})
122}
123
124func TestCcObjectCcObjetDepsInObjs(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000125 runCcObjectTestCase(t, Bp2buildTestCase{
126 Description: "cc_object with cc_object deps in objs props",
127 Filesystem: map[string]string{
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200128 "a/b/c.c": "",
129 "x/y/z.c": "",
Jingwen Chen8c1b97e2021-02-18 03:21:34 -0500130 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000131 Blueprint: `cc_object {
Jingwen Chendb120242021-02-23 00:46:47 -0500132 name: "foo",
Colin Cross6b8f4252021-07-22 11:39:44 -0700133 system_shared_libs: [],
Jingwen Chendb120242021-02-23 00:46:47 -0500134 srcs: ["a/b/c.c"],
135 objs: ["bar"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400136 include_build_directory: false,
Jingwen Chendb120242021-02-23 00:46:47 -0500137}
138
139cc_object {
140 name: "bar",
Colin Cross6b8f4252021-07-22 11:39:44 -0700141 system_shared_libs: [],
Jingwen Chendb120242021-02-23 00:46:47 -0500142 srcs: ["x/y/z.c"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400143 include_build_directory: false,
Jingwen Chendb120242021-02-23 00:46:47 -0500144}
145`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000146 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000147 MakeBazelTarget("cc_object", "bar", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500148 "copts": `["-fno-addrsig"]`,
149 "srcs": `["x/y/z.c"]`,
150 "system_dynamic_deps": `[]`,
Alixe06d75b2022-08-31 18:28:19 +0000151 }), MakeBazelTarget("cc_object", "foo", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500152 "copts": `["-fno-addrsig"]`,
Colin Cross65ebc422022-12-05 21:18:13 -0800153 "objs": `[":bar"]`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500154 "srcs": `["a/b/c.c"]`,
155 "system_dynamic_deps": `[]`,
156 }),
Liz Kammera4aa4302021-03-18 16:56:36 -0400157 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200158 })
159}
160
161func TestCcObjectIncludeBuildDirFalse(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000162 runCcObjectTestCase(t, Bp2buildTestCase{
163 Description: "cc_object with include_build_dir: false",
164 Filesystem: map[string]string{
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200165 "a/b/c.c": "",
166 "x/y/z.c": "",
167 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000168 Blueprint: `cc_object {
Liz Kammera4aa4302021-03-18 16:56:36 -0400169 name: "foo",
Colin Cross6b8f4252021-07-22 11:39:44 -0700170 system_shared_libs: [],
Liz Kammera4aa4302021-03-18 16:56:36 -0400171 srcs: ["a/b/c.c"],
172 include_build_directory: false,
Liz Kammera4aa4302021-03-18 16:56:36 -0400173}
174`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000175 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000176 MakeBazelTarget("cc_object", "foo", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500177 "copts": `["-fno-addrsig"]`,
178 "srcs": `["a/b/c.c"]`,
179 "system_dynamic_deps": `[]`,
180 }),
Jingwen Chendb120242021-02-23 00:46:47 -0500181 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200182 })
183}
184
185func TestCcObjectProductVariable(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000186 runCcObjectTestCase(t, Bp2buildTestCase{
187 Description: "cc_object with product variable",
188 Blueprint: `cc_object {
Liz Kammera060c452021-03-24 10:14:47 -0400189 name: "foo",
Colin Cross6b8f4252021-07-22 11:39:44 -0700190 system_shared_libs: [],
Liz Kammera060c452021-03-24 10:14:47 -0400191 include_build_directory: false,
192 product_variables: {
193 platform_sdk_version: {
194 asflags: ["-DPLATFORM_SDK_VERSION=%d"],
195 },
196 },
Chris Parsons69fa9f92021-07-13 11:47:44 -0400197 srcs: ["src.S"],
Liz Kammera060c452021-03-24 10:14:47 -0400198}
199`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000200 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000201 MakeBazelTarget("cc_object", "foo", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500202 "asflags": `select({
Cole Faust87c0c332023-07-31 12:10:12 -0700203 "//build/bazel/product_config/config_settings:platform_sdk_version": ["-DPLATFORM_SDK_VERSION=$(Platform_sdk_version)"],
Liz Kammer6fd7b3f2021-05-06 13:54:29 -0400204 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500205 })`,
206 "copts": `["-fno-addrsig"]`,
207 "srcs_as": `["src.S"]`,
208 "system_dynamic_deps": `[]`,
209 }),
Liz Kammera060c452021-03-24 10:14:47 -0400210 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200211 })
Jingwen Chen8c1b97e2021-02-18 03:21:34 -0500212}
Jingwen Chen5d864492021-02-24 07:20:12 -0500213
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200214func TestCcObjectCflagsOneArch(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000215 runCcObjectTestCase(t, Bp2buildTestCase{
216 Description: "cc_object setting cflags for one arch",
217 Blueprint: `cc_object {
Jingwen Chen5d864492021-02-24 07:20:12 -0500218 name: "foo",
Colin Cross6b8f4252021-07-22 11:39:44 -0700219 system_shared_libs: [],
Jingwen Chen07027912021-03-15 06:02:43 -0400220 srcs: ["a.cpp"],
Jingwen Chen5d864492021-02-24 07:20:12 -0500221 arch: {
222 x86: {
Jingwen Chen07027912021-03-15 06:02:43 -0400223 cflags: ["-fPIC"], // string list
224 },
225 arm: {
Chris Parsons69fa9f92021-07-13 11:47:44 -0400226 srcs: ["arch/arm/file.cpp"], // label list
Jingwen Chen5d864492021-02-24 07:20:12 -0500227 },
228 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400229 include_build_directory: false,
Jingwen Chen5d864492021-02-24 07:20:12 -0500230}
231`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000232 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000233 MakeBazelTarget("cc_object", "foo", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500234 "copts": `["-fno-addrsig"] + select({
Jingwen Chen9c2e3ee2023-10-11 10:51:28 +0000235 "//build/bazel_common_rules/platforms/arch:x86": ["-fPIC"],
Jingwen Chen07027912021-03-15 06:02:43 -0400236 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500237 })`,
238 "srcs": `["a.cpp"] + select({
Jingwen Chen9c2e3ee2023-10-11 10:51:28 +0000239 "//build/bazel_common_rules/platforms/arch:arm": ["arch/arm/file.cpp"],
Jingwen Chen07027912021-03-15 06:02:43 -0400240 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500241 })`,
242 "system_dynamic_deps": `[]`,
243 }),
Jingwen Chen5d864492021-02-24 07:20:12 -0500244 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200245 })
246}
247
248func TestCcObjectCflagsFourArch(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000249 runCcObjectTestCase(t, Bp2buildTestCase{
250 Description: "cc_object setting cflags for 4 architectures",
251 Blueprint: `cc_object {
Jingwen Chen5d864492021-02-24 07:20:12 -0500252 name: "foo",
Colin Cross6b8f4252021-07-22 11:39:44 -0700253 system_shared_libs: [],
Jingwen Chen07027912021-03-15 06:02:43 -0400254 srcs: ["base.cpp"],
Jingwen Chen5d864492021-02-24 07:20:12 -0500255 arch: {
256 x86: {
Jingwen Chen07027912021-03-15 06:02:43 -0400257 srcs: ["x86.cpp"],
Jingwen Chen5d864492021-02-24 07:20:12 -0500258 cflags: ["-fPIC"],
259 },
260 x86_64: {
Jingwen Chen07027912021-03-15 06:02:43 -0400261 srcs: ["x86_64.cpp"],
Jingwen Chen5d864492021-02-24 07:20:12 -0500262 cflags: ["-fPIC"],
263 },
264 arm: {
Jingwen Chen07027912021-03-15 06:02:43 -0400265 srcs: ["arm.cpp"],
Jingwen Chen5d864492021-02-24 07:20:12 -0500266 cflags: ["-Wall"],
267 },
268 arm64: {
Jingwen Chen07027912021-03-15 06:02:43 -0400269 srcs: ["arm64.cpp"],
Jingwen Chen5d864492021-02-24 07:20:12 -0500270 cflags: ["-Wall"],
271 },
272 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400273 include_build_directory: false,
Jingwen Chen5d864492021-02-24 07:20:12 -0500274}
275`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000276 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000277 MakeBazelTarget("cc_object", "foo", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500278 "copts": `["-fno-addrsig"] + select({
Jingwen Chen9c2e3ee2023-10-11 10:51:28 +0000279 "//build/bazel_common_rules/platforms/arch:arm": ["-Wall"],
280 "//build/bazel_common_rules/platforms/arch:arm64": ["-Wall"],
281 "//build/bazel_common_rules/platforms/arch:x86": ["-fPIC"],
282 "//build/bazel_common_rules/platforms/arch:x86_64": ["-fPIC"],
Jingwen Chen07027912021-03-15 06:02:43 -0400283 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500284 })`,
285 "srcs": `["base.cpp"] + select({
Jingwen Chen9c2e3ee2023-10-11 10:51:28 +0000286 "//build/bazel_common_rules/platforms/arch:arm": ["arm.cpp"],
287 "//build/bazel_common_rules/platforms/arch:arm64": ["arm64.cpp"],
288 "//build/bazel_common_rules/platforms/arch:x86": ["x86.cpp"],
289 "//build/bazel_common_rules/platforms/arch:x86_64": ["x86_64.cpp"],
Jingwen Chen07027912021-03-15 06:02:43 -0400290 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500291 })`,
292 "system_dynamic_deps": `[]`,
293 }),
Jingwen Chen5d864492021-02-24 07:20:12 -0500294 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200295 })
296}
297
Chris Parsonsa37e1952021-09-28 16:47:36 -0400298func TestCcObjectLinkerScript(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000299 runCcObjectTestCase(t, Bp2buildTestCase{
300 Description: "cc_object setting linker_script",
301 Blueprint: `cc_object {
Jingwen Chenc1c26502021-04-05 10:35:13 +0000302 name: "foo",
Chris Parsonsa37e1952021-09-28 16:47:36 -0400303 srcs: ["base.cpp"],
304 linker_script: "bunny.lds",
305 include_build_directory: false,
306}
307`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000308 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000309 MakeBazelTarget("cc_object", "foo", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500310 "copts": `["-fno-addrsig"]`,
311 "linker_script": `"bunny.lds"`,
312 "srcs": `["base.cpp"]`,
313 }),
Chris Parsonsa37e1952021-09-28 16:47:36 -0400314 },
315 })
316}
317
318func TestCcObjectDepsAndLinkerScriptSelects(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000319 runCcObjectTestCase(t, Bp2buildTestCase{
Chris Parsonscd209032023-09-19 01:12:48 +0000320 Description: "cc_object setting deps and linker_script across archs",
321 StubbedBuildDefinitions: []string{"x86_obj", "x86_64_obj", "arm_obj"},
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000322 Blueprint: `cc_object {
Chris Parsonsa37e1952021-09-28 16:47:36 -0400323 name: "foo",
324 srcs: ["base.cpp"],
325 arch: {
326 x86: {
327 objs: ["x86_obj"],
328 linker_script: "x86.lds",
329 },
330 x86_64: {
331 objs: ["x86_64_obj"],
332 linker_script: "x86_64.lds",
333 },
334 arm: {
335 objs: ["arm_obj"],
336 linker_script: "arm.lds",
337 },
338 },
339 include_build_directory: false,
340}
341
342cc_object {
343 name: "x86_obj",
Colin Cross6b8f4252021-07-22 11:39:44 -0700344 system_shared_libs: [],
Chris Parsonsa37e1952021-09-28 16:47:36 -0400345 srcs: ["x86.cpp"],
346 include_build_directory: false,
Chris Parsonsa37e1952021-09-28 16:47:36 -0400347}
348
349cc_object {
350 name: "x86_64_obj",
351 system_shared_libs: [],
352 srcs: ["x86_64.cpp"],
353 include_build_directory: false,
Chris Parsonsa37e1952021-09-28 16:47:36 -0400354}
355
356cc_object {
357 name: "arm_obj",
358 system_shared_libs: [],
359 srcs: ["arm.cpp"],
360 include_build_directory: false,
Chris Parsonsa37e1952021-09-28 16:47:36 -0400361}
362`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000363 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000364 MakeBazelTarget("cc_object", "foo", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500365 "copts": `["-fno-addrsig"]`,
Colin Cross65ebc422022-12-05 21:18:13 -0800366 "objs": `select({
Jingwen Chen9c2e3ee2023-10-11 10:51:28 +0000367 "//build/bazel_common_rules/platforms/arch:arm": [":arm_obj"],
368 "//build/bazel_common_rules/platforms/arch:x86": [":x86_obj"],
369 "//build/bazel_common_rules/platforms/arch:x86_64": [":x86_64_obj"],
Chris Parsonsa37e1952021-09-28 16:47:36 -0400370 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500371 })`,
372 "linker_script": `select({
Jingwen Chen9c2e3ee2023-10-11 10:51:28 +0000373 "//build/bazel_common_rules/platforms/arch:arm": "arm.lds",
374 "//build/bazel_common_rules/platforms/arch:x86": "x86.lds",
375 "//build/bazel_common_rules/platforms/arch:x86_64": "x86_64.lds",
Chris Parsonsa37e1952021-09-28 16:47:36 -0400376 "//conditions:default": None,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500377 })`,
378 "srcs": `["base.cpp"]`,
379 }),
Chris Parsonsa37e1952021-09-28 16:47:36 -0400380 },
381 })
382}
383
384func TestCcObjectSelectOnLinuxAndBionicArchs(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000385 runCcObjectTestCase(t, Bp2buildTestCase{
386 Description: "cc_object setting srcs based on linux and bionic archs",
387 Blueprint: `cc_object {
Chris Parsonsa37e1952021-09-28 16:47:36 -0400388 name: "foo",
Jingwen Chenc1c26502021-04-05 10:35:13 +0000389 srcs: ["base.cpp"],
390 target: {
Chris Parsonsa37e1952021-09-28 16:47:36 -0400391 linux_arm64: {
392 srcs: ["linux_arm64.cpp",]
Jingwen Chenc1c26502021-04-05 10:35:13 +0000393 },
Chris Parsonsa37e1952021-09-28 16:47:36 -0400394 linux_x86: {
395 srcs: ["linux_x86.cpp",]
Jingwen Chenc1c26502021-04-05 10:35:13 +0000396 },
Chris Parsonsa37e1952021-09-28 16:47:36 -0400397 bionic_arm64: {
398 srcs: ["bionic_arm64.cpp",]
Jingwen Chenc1c26502021-04-05 10:35:13 +0000399 },
400 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400401 include_build_directory: false,
Jingwen Chenc1c26502021-04-05 10:35:13 +0000402}
403`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000404 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000405 MakeBazelTarget("cc_object", "foo", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500406 "copts": `["-fno-addrsig"]`,
407 "srcs": `["base.cpp"] + select({
Jingwen Chen9c2e3ee2023-10-11 10:51:28 +0000408 "//build/bazel_common_rules/platforms/os_arch:android_arm64": [
Chris Parsonsa37e1952021-09-28 16:47:36 -0400409 "linux_arm64.cpp",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400410 "bionic_arm64.cpp",
Chris Parsonsa37e1952021-09-28 16:47:36 -0400411 ],
Jingwen Chen9c2e3ee2023-10-11 10:51:28 +0000412 "//build/bazel_common_rules/platforms/os_arch:android_x86": ["linux_x86.cpp"],
413 "//build/bazel_common_rules/platforms/os_arch:linux_bionic_arm64": [
Chris Parsonsa37e1952021-09-28 16:47:36 -0400414 "linux_arm64.cpp",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400415 "bionic_arm64.cpp",
Chris Parsonsa37e1952021-09-28 16:47:36 -0400416 ],
Jingwen Chen9c2e3ee2023-10-11 10:51:28 +0000417 "//build/bazel_common_rules/platforms/os_arch:linux_glibc_x86": ["linux_x86.cpp"],
418 "//build/bazel_common_rules/platforms/os_arch:linux_musl_arm64": ["linux_arm64.cpp"],
419 "//build/bazel_common_rules/platforms/os_arch:linux_musl_x86": ["linux_x86.cpp"],
Jingwen Chenc1c26502021-04-05 10:35:13 +0000420 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500421 })`,
422 }),
Jingwen Chenc1c26502021-04-05 10:35:13 +0000423 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200424 })
Jingwen Chen5d864492021-02-24 07:20:12 -0500425}
Colin Cross65ebc422022-12-05 21:18:13 -0800426
427func TestCcObjectHeaderLib(t *testing.T) {
428 runCcObjectTestCase(t, Bp2buildTestCase{
429 Description: "simple cc_object generates cc_object with include header dep",
430 Filesystem: map[string]string{
431 "a/b/foo.h": "",
432 "a/b/bar.h": "",
433 "a/b/exclude.c": "",
434 "a/b/c.c": "",
435 },
436 Blueprint: `cc_object {
437 name: "foo",
438 header_libs: ["libheaders"],
439 system_shared_libs: [],
440 cflags: [
441 "-Wno-gcc-compat",
442 "-Wall",
443 "-Werror",
444 ],
445 srcs: [
446 "a/b/*.c"
447 ],
448 exclude_srcs: ["a/b/exclude.c"],
449 sdk_version: "current",
450 min_sdk_version: "29",
451}
452
453cc_library_headers {
454 name: "libheaders",
455 export_include_dirs: ["include"],
456}
457`,
458 ExpectedBazelTargets: []string{
459 MakeBazelTarget("cc_object", "foo", AttrNameToString{
460 "copts": `[
461 "-fno-addrsig",
462 "-Wno-gcc-compat",
463 "-Wall",
464 "-Werror",
465 ]`,
466 "deps": `[":libheaders"]`,
467 "local_includes": `["."]`,
468 "srcs": `["a/b/c.c"]`,
469 "system_dynamic_deps": `[]`,
470 "sdk_version": `"current"`,
471 "min_sdk_version": `"29"`,
472 }),
473 MakeBazelTarget("cc_library_headers", "libheaders", AttrNameToString{
474 "export_includes": `["include"]`,
475 }),
476 },
477 })
478}