blob: ecfcb5a9363df8657c97e5fd21c4de6f5ac83de5 [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 Chenb4628eb2021-04-08 14:40:57 +0000235 "//build/bazel/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({
Chris Parsons69fa9f92021-07-13 11:47:44 -0400239 "//build/bazel/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 Chenb4628eb2021-04-08 14:40:57 +0000279 "//build/bazel/platforms/arch:arm": ["-Wall"],
280 "//build/bazel/platforms/arch:arm64": ["-Wall"],
281 "//build/bazel/platforms/arch:x86": ["-fPIC"],
282 "//build/bazel/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 Chenb4628eb2021-04-08 14:40:57 +0000286 "//build/bazel/platforms/arch:arm": ["arm.cpp"],
287 "//build/bazel/platforms/arch:arm64": ["arm64.cpp"],
288 "//build/bazel/platforms/arch:x86": ["x86.cpp"],
289 "//build/bazel/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{
320 Description: "cc_object setting deps and linker_script across archs",
321 Blueprint: `cc_object {
Chris Parsonsa37e1952021-09-28 16:47:36 -0400322 name: "foo",
323 srcs: ["base.cpp"],
324 arch: {
325 x86: {
326 objs: ["x86_obj"],
327 linker_script: "x86.lds",
328 },
329 x86_64: {
330 objs: ["x86_64_obj"],
331 linker_script: "x86_64.lds",
332 },
333 arm: {
334 objs: ["arm_obj"],
335 linker_script: "arm.lds",
336 },
337 },
338 include_build_directory: false,
339}
340
341cc_object {
342 name: "x86_obj",
Colin Cross6b8f4252021-07-22 11:39:44 -0700343 system_shared_libs: [],
Chris Parsonsa37e1952021-09-28 16:47:36 -0400344 srcs: ["x86.cpp"],
345 include_build_directory: false,
346 bazel_module: { bp2build_available: false },
347}
348
349cc_object {
350 name: "x86_64_obj",
351 system_shared_libs: [],
352 srcs: ["x86_64.cpp"],
353 include_build_directory: false,
354 bazel_module: { bp2build_available: false },
355}
356
357cc_object {
358 name: "arm_obj",
359 system_shared_libs: [],
360 srcs: ["arm.cpp"],
361 include_build_directory: false,
362 bazel_module: { bp2build_available: false },
363}
364`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000365 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000366 MakeBazelTarget("cc_object", "foo", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500367 "copts": `["-fno-addrsig"]`,
Colin Cross65ebc422022-12-05 21:18:13 -0800368 "objs": `select({
Chris Parsonsa37e1952021-09-28 16:47:36 -0400369 "//build/bazel/platforms/arch:arm": [":arm_obj"],
370 "//build/bazel/platforms/arch:x86": [":x86_obj"],
371 "//build/bazel/platforms/arch:x86_64": [":x86_64_obj"],
372 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500373 })`,
374 "linker_script": `select({
Chris Parsonsa37e1952021-09-28 16:47:36 -0400375 "//build/bazel/platforms/arch:arm": "arm.lds",
376 "//build/bazel/platforms/arch:x86": "x86.lds",
377 "//build/bazel/platforms/arch:x86_64": "x86_64.lds",
378 "//conditions:default": None,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500379 })`,
380 "srcs": `["base.cpp"]`,
381 }),
Chris Parsonsa37e1952021-09-28 16:47:36 -0400382 },
383 })
384}
385
386func TestCcObjectSelectOnLinuxAndBionicArchs(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000387 runCcObjectTestCase(t, Bp2buildTestCase{
388 Description: "cc_object setting srcs based on linux and bionic archs",
389 Blueprint: `cc_object {
Chris Parsonsa37e1952021-09-28 16:47:36 -0400390 name: "foo",
Jingwen Chenc1c26502021-04-05 10:35:13 +0000391 srcs: ["base.cpp"],
392 target: {
Chris Parsonsa37e1952021-09-28 16:47:36 -0400393 linux_arm64: {
394 srcs: ["linux_arm64.cpp",]
Jingwen Chenc1c26502021-04-05 10:35:13 +0000395 },
Chris Parsonsa37e1952021-09-28 16:47:36 -0400396 linux_x86: {
397 srcs: ["linux_x86.cpp",]
Jingwen Chenc1c26502021-04-05 10:35:13 +0000398 },
Chris Parsonsa37e1952021-09-28 16:47:36 -0400399 bionic_arm64: {
400 srcs: ["bionic_arm64.cpp",]
Jingwen Chenc1c26502021-04-05 10:35:13 +0000401 },
402 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400403 include_build_directory: false,
Jingwen Chenc1c26502021-04-05 10:35:13 +0000404}
405`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000406 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000407 MakeBazelTarget("cc_object", "foo", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500408 "copts": `["-fno-addrsig"]`,
409 "srcs": `["base.cpp"] + select({
Chris Parsonsa37e1952021-09-28 16:47:36 -0400410 "//build/bazel/platforms/os_arch:android_arm64": [
Chris Parsonsa37e1952021-09-28 16:47:36 -0400411 "linux_arm64.cpp",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400412 "bionic_arm64.cpp",
Chris Parsonsa37e1952021-09-28 16:47:36 -0400413 ],
414 "//build/bazel/platforms/os_arch:android_x86": ["linux_x86.cpp"],
415 "//build/bazel/platforms/os_arch:linux_bionic_arm64": [
Chris Parsonsa37e1952021-09-28 16:47:36 -0400416 "linux_arm64.cpp",
Liz Kammer9bad9d62021-10-11 15:40:35 -0400417 "bionic_arm64.cpp",
Chris Parsonsa37e1952021-09-28 16:47:36 -0400418 ],
419 "//build/bazel/platforms/os_arch:linux_glibc_x86": ["linux_x86.cpp"],
Colin Crossa9b2aac2022-06-15 17:25:51 -0700420 "//build/bazel/platforms/os_arch:linux_musl_arm64": ["linux_arm64.cpp"],
Chris Parsonsa37e1952021-09-28 16:47:36 -0400421 "//build/bazel/platforms/os_arch:linux_musl_x86": ["linux_x86.cpp"],
Jingwen Chenc1c26502021-04-05 10:35:13 +0000422 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500423 })`,
424 }),
Jingwen Chenc1c26502021-04-05 10:35:13 +0000425 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200426 })
Jingwen Chen5d864492021-02-24 07:20:12 -0500427}
Colin Cross65ebc422022-12-05 21:18:13 -0800428
429func TestCcObjectHeaderLib(t *testing.T) {
430 runCcObjectTestCase(t, Bp2buildTestCase{
431 Description: "simple cc_object generates cc_object with include header dep",
432 Filesystem: map[string]string{
433 "a/b/foo.h": "",
434 "a/b/bar.h": "",
435 "a/b/exclude.c": "",
436 "a/b/c.c": "",
437 },
438 Blueprint: `cc_object {
439 name: "foo",
440 header_libs: ["libheaders"],
441 system_shared_libs: [],
442 cflags: [
443 "-Wno-gcc-compat",
444 "-Wall",
445 "-Werror",
446 ],
447 srcs: [
448 "a/b/*.c"
449 ],
450 exclude_srcs: ["a/b/exclude.c"],
451 sdk_version: "current",
452 min_sdk_version: "29",
453}
454
455cc_library_headers {
456 name: "libheaders",
457 export_include_dirs: ["include"],
458}
459`,
460 ExpectedBazelTargets: []string{
461 MakeBazelTarget("cc_object", "foo", AttrNameToString{
462 "copts": `[
463 "-fno-addrsig",
464 "-Wno-gcc-compat",
465 "-Wall",
466 "-Werror",
467 ]`,
468 "deps": `[":libheaders"]`,
469 "local_includes": `["."]`,
470 "srcs": `["a/b/c.c"]`,
471 "system_dynamic_deps": `[]`,
472 "sdk_version": `"current"`,
473 "min_sdk_version": `"29"`,
474 }),
475 MakeBazelTarget("cc_library_headers", "libheaders", AttrNameToString{
476 "export_includes": `["include"]`,
477 }),
478 },
479 })
480}