blob: 1377c6b202b96f5f87b0f60dbc9e442536173e27 [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",
Jingwen Chen8c1b97e2021-02-18 03:21:34 -050061}
62`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +000063 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +000064 MakeBazelTarget("cc_object", "foo", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -050065 "copts": `[
Jingwen Chen8c1b97e2021-02-18 03:21:34 -050066 "-fno-addrsig",
67 "-Wno-gcc-compat",
68 "-Wall",
69 "-Werror",
Liz Kammer78cfdaa2021-11-08 12:56:31 -050070 ]`,
71 "local_includes": `[
Liz Kammer35687bc2021-09-10 10:07:07 -040072 "include",
73 ".",
Liz Kammer78cfdaa2021-11-08 12:56:31 -050074 ]`,
75 "srcs": `["a/b/c.c"]`,
76 "system_dynamic_deps": `[]`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +000077 "sdk_version": `"current"`,
78 "min_sdk_version": `"29"`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -050079 }),
Jingwen Chen8c1b97e2021-02-18 03:21:34 -050080 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +020081 })
82}
83
84func TestCcObjectDefaults(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +000085 runCcObjectTestCase(t, Bp2buildTestCase{
86 Blueprint: `cc_object {
Jingwen Chen8c1b97e2021-02-18 03:21:34 -050087 name: "foo",
Colin Cross6b8f4252021-07-22 11:39:44 -070088 system_shared_libs: [],
Jingwen Chen8c1b97e2021-02-18 03:21:34 -050089 srcs: [
90 "a/b/*.h",
91 "a/b/c.c"
92 ],
93
94 defaults: ["foo_defaults"],
Jingwen Chen8c1b97e2021-02-18 03:21:34 -050095}
96
97cc_defaults {
98 name: "foo_defaults",
99 defaults: ["foo_bar_defaults"],
Jingwen Chen8c1b97e2021-02-18 03:21:34 -0500100}
101
102cc_defaults {
103 name: "foo_bar_defaults",
104 cflags: [
Jingwen Chen8c1b97e2021-02-18 03:21:34 -0500105 "-Werror",
106 ],
107}
108`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000109 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000110 MakeBazelTarget("cc_object", "foo", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500111 "copts": `[
Jingwen Chen8c1b97e2021-02-18 03:21:34 -0500112 "-Werror",
113 "-fno-addrsig",
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500114 ]`,
115 "local_includes": `["."]`,
116 "srcs": `["a/b/c.c"]`,
117 "system_dynamic_deps": `[]`,
118 }),
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200119 }})
120}
121
122func TestCcObjectCcObjetDepsInObjs(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000123 runCcObjectTestCase(t, Bp2buildTestCase{
124 Description: "cc_object with cc_object deps in objs props",
125 Filesystem: map[string]string{
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200126 "a/b/c.c": "",
127 "x/y/z.c": "",
Jingwen Chen8c1b97e2021-02-18 03:21:34 -0500128 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000129 Blueprint: `cc_object {
Jingwen Chendb120242021-02-23 00:46:47 -0500130 name: "foo",
Colin Cross6b8f4252021-07-22 11:39:44 -0700131 system_shared_libs: [],
Jingwen Chendb120242021-02-23 00:46:47 -0500132 srcs: ["a/b/c.c"],
133 objs: ["bar"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400134 include_build_directory: false,
Jingwen Chendb120242021-02-23 00:46:47 -0500135}
136
137cc_object {
138 name: "bar",
Colin Cross6b8f4252021-07-22 11:39:44 -0700139 system_shared_libs: [],
Jingwen Chendb120242021-02-23 00:46:47 -0500140 srcs: ["x/y/z.c"],
Liz Kammer8337ea42021-09-10 10:06:32 -0400141 include_build_directory: false,
Jingwen Chendb120242021-02-23 00:46:47 -0500142}
143`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000144 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000145 MakeBazelTarget("cc_object", "bar", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500146 "copts": `["-fno-addrsig"]`,
147 "srcs": `["x/y/z.c"]`,
148 "system_dynamic_deps": `[]`,
Alixe06d75b2022-08-31 18:28:19 +0000149 }), MakeBazelTarget("cc_object", "foo", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500150 "copts": `["-fno-addrsig"]`,
Colin Cross65ebc422022-12-05 21:18:13 -0800151 "objs": `[":bar"]`,
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500152 "srcs": `["a/b/c.c"]`,
153 "system_dynamic_deps": `[]`,
154 }),
Liz Kammera4aa4302021-03-18 16:56:36 -0400155 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200156 })
157}
158
159func TestCcObjectIncludeBuildDirFalse(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000160 runCcObjectTestCase(t, Bp2buildTestCase{
161 Description: "cc_object with include_build_dir: false",
162 Filesystem: map[string]string{
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200163 "a/b/c.c": "",
164 "x/y/z.c": "",
165 },
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000166 Blueprint: `cc_object {
Liz Kammera4aa4302021-03-18 16:56:36 -0400167 name: "foo",
Colin Cross6b8f4252021-07-22 11:39:44 -0700168 system_shared_libs: [],
Liz Kammera4aa4302021-03-18 16:56:36 -0400169 srcs: ["a/b/c.c"],
170 include_build_directory: false,
Liz Kammera4aa4302021-03-18 16:56:36 -0400171}
172`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000173 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000174 MakeBazelTarget("cc_object", "foo", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500175 "copts": `["-fno-addrsig"]`,
176 "srcs": `["a/b/c.c"]`,
177 "system_dynamic_deps": `[]`,
178 }),
Jingwen Chendb120242021-02-23 00:46:47 -0500179 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200180 })
181}
182
183func TestCcObjectProductVariable(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000184 runCcObjectTestCase(t, Bp2buildTestCase{
185 Description: "cc_object with product variable",
186 Blueprint: `cc_object {
Liz Kammera060c452021-03-24 10:14:47 -0400187 name: "foo",
Colin Cross6b8f4252021-07-22 11:39:44 -0700188 system_shared_libs: [],
Liz Kammera060c452021-03-24 10:14:47 -0400189 include_build_directory: false,
190 product_variables: {
191 platform_sdk_version: {
192 asflags: ["-DPLATFORM_SDK_VERSION=%d"],
193 },
194 },
Chris Parsons69fa9f92021-07-13 11:47:44 -0400195 srcs: ["src.S"],
Liz Kammera060c452021-03-24 10:14:47 -0400196}
197`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000198 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000199 MakeBazelTarget("cc_object", "foo", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500200 "asflags": `select({
Liz Kammerba7a9c52021-05-26 08:45:30 -0400201 "//build/bazel/product_variables:platform_sdk_version": ["-DPLATFORM_SDK_VERSION=$(Platform_sdk_version)"],
Liz Kammer6fd7b3f2021-05-06 13:54:29 -0400202 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500203 })`,
204 "copts": `["-fno-addrsig"]`,
205 "srcs_as": `["src.S"]`,
206 "system_dynamic_deps": `[]`,
207 }),
Liz Kammera060c452021-03-24 10:14:47 -0400208 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200209 })
Jingwen Chen8c1b97e2021-02-18 03:21:34 -0500210}
Jingwen Chen5d864492021-02-24 07:20:12 -0500211
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200212func TestCcObjectCflagsOneArch(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000213 runCcObjectTestCase(t, Bp2buildTestCase{
214 Description: "cc_object setting cflags for one arch",
215 Blueprint: `cc_object {
Jingwen Chen5d864492021-02-24 07:20:12 -0500216 name: "foo",
Colin Cross6b8f4252021-07-22 11:39:44 -0700217 system_shared_libs: [],
Jingwen Chen07027912021-03-15 06:02:43 -0400218 srcs: ["a.cpp"],
Jingwen Chen5d864492021-02-24 07:20:12 -0500219 arch: {
220 x86: {
Jingwen Chen07027912021-03-15 06:02:43 -0400221 cflags: ["-fPIC"], // string list
222 },
223 arm: {
Chris Parsons69fa9f92021-07-13 11:47:44 -0400224 srcs: ["arch/arm/file.cpp"], // label list
Jingwen Chen5d864492021-02-24 07:20:12 -0500225 },
226 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400227 include_build_directory: false,
Jingwen Chen5d864492021-02-24 07:20:12 -0500228}
229`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000230 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000231 MakeBazelTarget("cc_object", "foo", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500232 "copts": `["-fno-addrsig"] + select({
Jingwen Chenb4628eb2021-04-08 14:40:57 +0000233 "//build/bazel/platforms/arch:x86": ["-fPIC"],
Jingwen Chen07027912021-03-15 06:02:43 -0400234 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500235 })`,
236 "srcs": `["a.cpp"] + select({
Chris Parsons69fa9f92021-07-13 11:47:44 -0400237 "//build/bazel/platforms/arch:arm": ["arch/arm/file.cpp"],
Jingwen Chen07027912021-03-15 06:02:43 -0400238 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500239 })`,
240 "system_dynamic_deps": `[]`,
241 }),
Jingwen Chen5d864492021-02-24 07:20:12 -0500242 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200243 })
244}
245
246func TestCcObjectCflagsFourArch(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000247 runCcObjectTestCase(t, Bp2buildTestCase{
248 Description: "cc_object setting cflags for 4 architectures",
249 Blueprint: `cc_object {
Jingwen Chen5d864492021-02-24 07:20:12 -0500250 name: "foo",
Colin Cross6b8f4252021-07-22 11:39:44 -0700251 system_shared_libs: [],
Jingwen Chen07027912021-03-15 06:02:43 -0400252 srcs: ["base.cpp"],
Jingwen Chen5d864492021-02-24 07:20:12 -0500253 arch: {
254 x86: {
Jingwen Chen07027912021-03-15 06:02:43 -0400255 srcs: ["x86.cpp"],
Jingwen Chen5d864492021-02-24 07:20:12 -0500256 cflags: ["-fPIC"],
257 },
258 x86_64: {
Jingwen Chen07027912021-03-15 06:02:43 -0400259 srcs: ["x86_64.cpp"],
Jingwen Chen5d864492021-02-24 07:20:12 -0500260 cflags: ["-fPIC"],
261 },
262 arm: {
Jingwen Chen07027912021-03-15 06:02:43 -0400263 srcs: ["arm.cpp"],
Jingwen Chen5d864492021-02-24 07:20:12 -0500264 cflags: ["-Wall"],
265 },
266 arm64: {
Jingwen Chen07027912021-03-15 06:02:43 -0400267 srcs: ["arm64.cpp"],
Jingwen Chen5d864492021-02-24 07:20:12 -0500268 cflags: ["-Wall"],
269 },
270 },
Liz Kammer8337ea42021-09-10 10:06:32 -0400271 include_build_directory: false,
Jingwen Chen5d864492021-02-24 07:20:12 -0500272}
273`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000274 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000275 MakeBazelTarget("cc_object", "foo", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500276 "copts": `["-fno-addrsig"] + select({
Jingwen Chenb4628eb2021-04-08 14:40:57 +0000277 "//build/bazel/platforms/arch:arm": ["-Wall"],
278 "//build/bazel/platforms/arch:arm64": ["-Wall"],
279 "//build/bazel/platforms/arch:x86": ["-fPIC"],
280 "//build/bazel/platforms/arch:x86_64": ["-fPIC"],
Jingwen Chen07027912021-03-15 06:02:43 -0400281 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500282 })`,
283 "srcs": `["base.cpp"] + select({
Jingwen Chenb4628eb2021-04-08 14:40:57 +0000284 "//build/bazel/platforms/arch:arm": ["arm.cpp"],
285 "//build/bazel/platforms/arch:arm64": ["arm64.cpp"],
286 "//build/bazel/platforms/arch:x86": ["x86.cpp"],
287 "//build/bazel/platforms/arch:x86_64": ["x86_64.cpp"],
Jingwen Chen07027912021-03-15 06:02:43 -0400288 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500289 })`,
290 "system_dynamic_deps": `[]`,
291 }),
Jingwen Chen5d864492021-02-24 07:20:12 -0500292 },
Lukacs T. Berkic1cc3b92021-05-21 09:37:00 +0200293 })
294}
295
Chris Parsonsa37e1952021-09-28 16:47:36 -0400296func TestCcObjectLinkerScript(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000297 runCcObjectTestCase(t, Bp2buildTestCase{
298 Description: "cc_object setting linker_script",
299 Blueprint: `cc_object {
Jingwen Chenc1c26502021-04-05 10:35:13 +0000300 name: "foo",
Chris Parsonsa37e1952021-09-28 16:47:36 -0400301 srcs: ["base.cpp"],
302 linker_script: "bunny.lds",
303 include_build_directory: false,
304}
305`,
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000306 ExpectedBazelTargets: []string{
Alixe06d75b2022-08-31 18:28:19 +0000307 MakeBazelTarget("cc_object", "foo", AttrNameToString{
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500308 "copts": `["-fno-addrsig"]`,
309 "linker_script": `"bunny.lds"`,
310 "srcs": `["base.cpp"]`,
311 }),
Chris Parsonsa37e1952021-09-28 16:47:36 -0400312 },
313 })
314}
315
316func TestCcObjectDepsAndLinkerScriptSelects(t *testing.T) {
Sam Delmerico3177a6e2022-06-21 19:28:33 +0000317 runCcObjectTestCase(t, Bp2buildTestCase{
318 Description: "cc_object setting deps and linker_script across archs",
319 Blueprint: `cc_object {
Chris Parsonsa37e1952021-09-28 16:47:36 -0400320 name: "foo",
321 srcs: ["base.cpp"],
322 arch: {
323 x86: {
324 objs: ["x86_obj"],
325 linker_script: "x86.lds",
326 },
327 x86_64: {
328 objs: ["x86_64_obj"],
329 linker_script: "x86_64.lds",
330 },
331 arm: {
332 objs: ["arm_obj"],
333 linker_script: "arm.lds",
334 },
335 },
336 include_build_directory: false,
337}
338
339cc_object {
340 name: "x86_obj",
Colin Cross6b8f4252021-07-22 11:39:44 -0700341 system_shared_libs: [],
Chris Parsonsa37e1952021-09-28 16:47:36 -0400342 srcs: ["x86.cpp"],
343 include_build_directory: false,
344 bazel_module: { bp2build_available: false },
345}
346
347cc_object {
348 name: "x86_64_obj",
349 system_shared_libs: [],
350 srcs: ["x86_64.cpp"],
351 include_build_directory: false,
352 bazel_module: { bp2build_available: false },
353}
354
355cc_object {
356 name: "arm_obj",
357 system_shared_libs: [],
358 srcs: ["arm.cpp"],
359 include_build_directory: false,
360 bazel_module: { bp2build_available: false },
361}
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({
Chris Parsonsa37e1952021-09-28 16:47:36 -0400367 "//build/bazel/platforms/arch:arm": [":arm_obj"],
368 "//build/bazel/platforms/arch:x86": [":x86_obj"],
369 "//build/bazel/platforms/arch:x86_64": [":x86_64_obj"],
370 "//conditions:default": [],
Liz Kammer78cfdaa2021-11-08 12:56:31 -0500371 })`,
372 "linker_script": `select({
Chris Parsonsa37e1952021-09-28 16:47:36 -0400373 "//build/bazel/platforms/arch:arm": "arm.lds",
374 "//build/bazel/platforms/arch:x86": "x86.lds",
375 "//build/bazel/platforms/arch:x86_64": "x86_64.lds",
376 "//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({
Chris Parsonsa37e1952021-09-28 16:47:36 -0400408 "//build/bazel/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 ],
412 "//build/bazel/platforms/os_arch:android_x86": ["linux_x86.cpp"],
413 "//build/bazel/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 ],
417 "//build/bazel/platforms/os_arch:linux_glibc_x86": ["linux_x86.cpp"],
Colin Crossa9b2aac2022-06-15 17:25:51 -0700418 "//build/bazel/platforms/os_arch:linux_musl_arm64": ["linux_arm64.cpp"],
Chris Parsonsa37e1952021-09-28 16:47:36 -0400419 "//build/bazel/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}