blob: a03d147a0a27564b48d243f9146266ee29015eca [file] [log] [blame]
Inseob Kimc0907f12019-02-08 21:00:45 +09001// Copyright (C) 2019 The Android Open Source Project
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 cc
16
17import (
Ivan Lozanod67a6b02021-05-20 13:01:32 -040018 "path/filepath"
19 "testing"
20
Inseob Kimc0907f12019-02-08 21:00:45 +090021 "android/soong/android"
Colin Crosse9fe2942020-11-10 18:12:15 -080022 "android/soong/genrule"
Kiyoung Kim48f37782021-07-07 12:42:39 +090023 "android/soong/snapshot"
Inseob Kimc0907f12019-02-08 21:00:45 +090024)
25
Paul Duffin77980a82019-12-19 16:01:36 +000026func RegisterRequiredBuildComponentsForTest(ctx android.RegistrationContext) {
Paul Duffind6867912019-12-19 14:38:36 +000027 RegisterPrebuiltBuildComponents(ctx)
Paul Duffin036e7002019-12-19 19:16:28 +000028 RegisterCCBuildComponents(ctx)
Paul Duffin2ee69792020-01-16 12:14:42 +000029 RegisterBinaryBuildComponents(ctx)
Paul Duffin6c26dc72019-12-19 15:02:40 +000030 RegisterLibraryBuildComponents(ctx)
Paul Duffin1c6c1c72020-02-21 10:28:43 +000031 RegisterLibraryHeadersBuildComponents(ctx)
Paul Duffin6c26dc72019-12-19 15:02:40 +000032
Jiyong Park46a512f2020-12-04 18:02:13 +090033 ctx.RegisterModuleType("cc_benchmark", BenchmarkFactory)
Paul Duffin6c26dc72019-12-19 15:02:40 +000034 ctx.RegisterModuleType("cc_object", ObjectFactory)
Wei Libcd39942021-09-16 23:57:28 +000035 ctx.RegisterModuleType("cc_genrule", GenRuleFactory)
Colin Crossf28329d2020-02-15 11:00:10 -080036 ctx.RegisterModuleType("ndk_prebuilt_shared_stl", NdkPrebuiltSharedStlFactory)
Colin Crossae628182021-06-14 16:52:28 -070037 ctx.RegisterModuleType("ndk_prebuilt_static_stl", NdkPrebuiltStaticStlFactory)
Colin Crossf28329d2020-02-15 11:00:10 -080038 ctx.RegisterModuleType("ndk_prebuilt_object", NdkPrebuiltObjectFactory)
Dan Albertde5aade2020-06-30 12:32:51 -070039 ctx.RegisterModuleType("ndk_library", NdkLibraryFactory)
Paul Duffin77980a82019-12-19 16:01:36 +000040}
41
Paul Duffina04c1072020-03-02 10:16:35 +000042func GatherRequiredDepsForTest(oses ...android.OsType) string {
Paul Duffin02a3d652021-02-24 18:51:54 +000043 ret := commonDefaultModules()
44
45 supportLinuxBionic := false
46 for _, os := range oses {
Paul Duffin02a3d652021-02-24 18:51:54 +000047 if os == android.Windows {
48 ret += withWindowsModules()
49 }
50 if os == android.LinuxBionic {
51 supportLinuxBionic = true
52 ret += withLinuxBionic()
53 }
54 }
55
56 if !supportLinuxBionic {
57 ret += withoutLinuxBionic()
58 }
59
60 return ret
61}
62
63func commonDefaultModules() string {
64 return `
Liz Kammer718eb272022-01-07 10:53:37 -050065 cc_defaults {
66 name: "toolchain_libs_defaults",
Inseob Kimc0907f12019-02-08 21:00:45 +090067 vendor_available: true,
Justin Yun63e9ec72020-10-29 16:49:43 +090068 product_available: true,
Inseob Kimc0907f12019-02-08 21:00:45 +090069 recovery_available: true,
Liz Kammer718eb272022-01-07 10:53:37 -050070 no_libcrt: true,
71 sdk_version: "minimum",
Jooyung Han75568392020-03-20 04:29:24 +090072 nocrt: true,
Jooyung Han75568392020-03-20 04:29:24 +090073 system_shared_libs: [],
74 stl: "none",
75 srcs: [""],
76 check_elf_files: false,
77 sanitize: {
78 never: true,
79 },
80 }
81
Liz Kammer718eb272022-01-07 10:53:37 -050082 cc_prebuilt_library_static {
83 name: "libcompiler_rt-extras",
84 defaults: ["toolchain_libs_defaults"],
85 vendor_ramdisk_available: true,
86 }
87
88 cc_prebuilt_library_static {
89 name: "libclang_rt.builtins-arm-android",
90 defaults: ["toolchain_libs_defaults"],
91 native_bridge_supported: true,
92 vendor_ramdisk_available: true,
93 }
94
95 cc_prebuilt_library_static {
96 name: "libclang_rt.builtins-aarch64-android",
97 defaults: ["toolchain_libs_defaults"],
98 native_bridge_supported: true,
99 vendor_ramdisk_available: true,
100 }
101
Colin Cross06c80eb2022-02-10 10:34:19 -0800102 cc_prebuilt_library_static {
103 name: "libclang_rt.builtins-x86_64",
104 defaults: ["toolchain_libs_defaults"],
105 host_supported: true,
106 }
107
108 cc_prebuilt_library_static {
109 name: "libclang_rt.builtins-i386",
110 defaults: ["toolchain_libs_defaults"],
111 host_supported: true,
112 }
113
Liz Kammer718eb272022-01-07 10:53:37 -0500114 cc_prebuilt_library_shared {
115 name: "libclang_rt.hwasan-aarch64-android",
116 defaults: ["toolchain_libs_defaults"],
117 }
118
119 cc_prebuilt_library_static {
Inseob Kimc0907f12019-02-08 21:00:45 +0900120 name: "libclang_rt.builtins-i686-android",
Liz Kammer718eb272022-01-07 10:53:37 -0500121 defaults: ["toolchain_libs_defaults"],
Ivan Lozanoe6d30982021-02-05 10:57:43 -0500122 vendor_ramdisk_available: true,
Colin Crossf9aabd72020-02-15 11:29:50 -0800123 native_bridge_supported: true,
Inseob Kimc0907f12019-02-08 21:00:45 +0900124 }
125
Liz Kammer718eb272022-01-07 10:53:37 -0500126 cc_prebuilt_library_static {
Inseob Kimc0907f12019-02-08 21:00:45 +0900127 name: "libclang_rt.builtins-x86_64-android",
Liz Kammer718eb272022-01-07 10:53:37 -0500128 defaults: [
129 "linux_bionic_supported",
130 "toolchain_libs_defaults",
131 ],
Colin Crossf9aabd72020-02-15 11:29:50 -0800132 native_bridge_supported: true,
Liz Kammer718eb272022-01-07 10:53:37 -0500133 vendor_ramdisk_available: true,
Inseob Kimc0907f12019-02-08 21:00:45 +0900134 }
135
Liz Kammer718eb272022-01-07 10:53:37 -0500136 cc_prebuilt_library_static {
Ryan Prichardb35a85e2021-01-13 19:18:53 -0800137 name: "libunwind",
Liz Kammer718eb272022-01-07 10:53:37 -0500138 defaults: [
139 "linux_bionic_supported",
140 "toolchain_libs_defaults",
141 ],
Ivan Lozanoe6d30982021-02-05 10:57:43 -0500142 vendor_ramdisk_available: true,
Ryan Prichardb35a85e2021-01-13 19:18:53 -0800143 native_bridge_supported: true,
Ryan Prichardb35a85e2021-01-13 19:18:53 -0800144 }
145
Liz Kammer718eb272022-01-07 10:53:37 -0500146 cc_prebuilt_library_static {
Mitch Phillipsda9a4632019-07-15 09:34:09 -0700147 name: "libclang_rt.fuzzer-arm-android",
Liz Kammer718eb272022-01-07 10:53:37 -0500148 defaults: ["toolchain_libs_defaults"],
Mitch Phillipsda9a4632019-07-15 09:34:09 -0700149 }
150
Liz Kammer718eb272022-01-07 10:53:37 -0500151 cc_prebuilt_library_static {
Mitch Phillipsda9a4632019-07-15 09:34:09 -0700152 name: "libclang_rt.fuzzer-aarch64-android",
Liz Kammer718eb272022-01-07 10:53:37 -0500153 defaults: ["toolchain_libs_defaults"],
Mitch Phillipsda9a4632019-07-15 09:34:09 -0700154 }
155
Liz Kammer718eb272022-01-07 10:53:37 -0500156 cc_prebuilt_library_static {
Mitch Phillipsda9a4632019-07-15 09:34:09 -0700157 name: "libclang_rt.fuzzer-i686-android",
Liz Kammer718eb272022-01-07 10:53:37 -0500158 defaults: ["toolchain_libs_defaults"],
Mitch Phillipsda9a4632019-07-15 09:34:09 -0700159 }
160
Liz Kammer718eb272022-01-07 10:53:37 -0500161 cc_prebuilt_library_static {
Mitch Phillipsda9a4632019-07-15 09:34:09 -0700162 name: "libclang_rt.fuzzer-x86_64-android",
Liz Kammer718eb272022-01-07 10:53:37 -0500163 defaults: [
164 "linux_bionic_supported",
165 "toolchain_libs_defaults",
166 ],
Mitch Phillipsda9a4632019-07-15 09:34:09 -0700167 }
168
Liz Kammer718eb272022-01-07 10:53:37 -0500169 cc_prebuilt_library_static {
Mitch Phillipsda9a4632019-07-15 09:34:09 -0700170 name: "libclang_rt.fuzzer-x86_64",
Liz Kammer718eb272022-01-07 10:53:37 -0500171 defaults: [
172 "linux_bionic_supported",
173 "toolchain_libs_defaults",
174 ],
Mitch Phillipsda9a4632019-07-15 09:34:09 -0700175 }
176
Paul Duffind6867912019-12-19 14:38:36 +0000177 // Needed for sanitizer
178 cc_prebuilt_library_shared {
179 name: "libclang_rt.ubsan_standalone-aarch64-android",
Liz Kammer718eb272022-01-07 10:53:37 -0500180 defaults: ["toolchain_libs_defaults"],
Paul Duffind6867912019-12-19 14:38:36 +0000181 }
182
Colin Cross06c80eb2022-02-10 10:34:19 -0800183 cc_prebuilt_library_static {
184 name: "libclang_rt.ubsan_minimal-aarch64-android",
185 defaults: ["toolchain_libs_defaults"],
186 }
187
188 cc_prebuilt_library_static {
189 name: "libclang_rt.ubsan_minimal-arm-android",
190 defaults: ["toolchain_libs_defaults"],
191 }
192
Inseob Kimc0907f12019-02-08 21:00:45 +0900193 cc_library {
Inseob Kimc0907f12019-02-08 21:00:45 +0900194 name: "libc",
Martin Stjernholm7feceb22020-07-11 04:33:29 +0100195 defaults: ["linux_bionic_supported"],
Yi Konge7fe9912019-06-02 00:53:50 -0700196 no_libcrt: true,
Inseob Kimc0907f12019-02-08 21:00:45 +0900197 nocrt: true,
Peter Collingbournee5ba2862019-12-10 18:37:45 -0800198 stl: "none",
Inseob Kimc0907f12019-02-08 21:00:45 +0900199 system_shared_libs: [],
200 recovery_available: true,
Colin Crossf9aabd72020-02-15 11:29:50 -0800201 stubs: {
202 versions: ["27", "28", "29"],
203 },
Colin Cross203b4212021-04-26 17:19:41 -0700204 llndk: {
205 symbol_file: "libc.map.txt",
206 },
Inseob Kimc0907f12019-02-08 21:00:45 +0900207 }
208 cc_library {
209 name: "libm",
Martin Stjernholm7feceb22020-07-11 04:33:29 +0100210 defaults: ["linux_bionic_supported"],
Yi Konge7fe9912019-06-02 00:53:50 -0700211 no_libcrt: true,
Inseob Kimc0907f12019-02-08 21:00:45 +0900212 nocrt: true,
Peter Collingbournee5ba2862019-12-10 18:37:45 -0800213 stl: "none",
Inseob Kimc0907f12019-02-08 21:00:45 +0900214 system_shared_libs: [],
215 recovery_available: true,
Colin Crossf9aabd72020-02-15 11:29:50 -0800216 stubs: {
217 versions: ["27", "28", "29"],
218 },
219 apex_available: [
220 "//apex_available:platform",
221 "myapex"
222 ],
Colin Cross203b4212021-04-26 17:19:41 -0700223 llndk: {
224 symbol_file: "libm.map.txt",
225 },
Inseob Kimc0907f12019-02-08 21:00:45 +0900226 }
Ivan Lozanoa0cd8f92020-04-09 09:56:02 -0400227
228 // Coverage libraries
229 cc_library {
230 name: "libprofile-extras",
231 vendor_available: true,
Ivan Lozanoe6d30982021-02-05 10:57:43 -0500232 vendor_ramdisk_available: true,
Justin Yun63e9ec72020-10-29 16:49:43 +0900233 product_available: true,
Ivan Lozanoa0cd8f92020-04-09 09:56:02 -0400234 recovery_available: true,
235 native_coverage: false,
236 system_shared_libs: [],
237 stl: "none",
238 notice: "custom_notice",
239 }
240 cc_library {
241 name: "libprofile-clang-extras",
242 vendor_available: true,
Ivan Lozanoe6d30982021-02-05 10:57:43 -0500243 vendor_ramdisk_available: true,
Justin Yun63e9ec72020-10-29 16:49:43 +0900244 product_available: true,
Ivan Lozanoa0cd8f92020-04-09 09:56:02 -0400245 recovery_available: true,
246 native_coverage: false,
247 system_shared_libs: [],
248 stl: "none",
249 notice: "custom_notice",
250 }
251 cc_library {
252 name: "libprofile-extras_ndk",
253 vendor_available: true,
Justin Yun63e9ec72020-10-29 16:49:43 +0900254 product_available: true,
Ivan Lozanoa0cd8f92020-04-09 09:56:02 -0400255 native_coverage: false,
256 system_shared_libs: [],
257 stl: "none",
258 notice: "custom_notice",
259 sdk_version: "current",
260 }
261 cc_library {
262 name: "libprofile-clang-extras_ndk",
263 vendor_available: true,
Justin Yun63e9ec72020-10-29 16:49:43 +0900264 product_available: true,
Ivan Lozanoa0cd8f92020-04-09 09:56:02 -0400265 native_coverage: false,
266 system_shared_libs: [],
267 stl: "none",
268 notice: "custom_notice",
269 sdk_version: "current",
270 }
271
Inseob Kimc0907f12019-02-08 21:00:45 +0900272 cc_library {
273 name: "libdl",
Martin Stjernholm7feceb22020-07-11 04:33:29 +0100274 defaults: ["linux_bionic_supported"],
Yi Konge7fe9912019-06-02 00:53:50 -0700275 no_libcrt: true,
Inseob Kimc0907f12019-02-08 21:00:45 +0900276 nocrt: true,
Peter Collingbournee5ba2862019-12-10 18:37:45 -0800277 stl: "none",
Inseob Kimc0907f12019-02-08 21:00:45 +0900278 system_shared_libs: [],
279 recovery_available: true,
Colin Crossf9aabd72020-02-15 11:29:50 -0800280 stubs: {
281 versions: ["27", "28", "29"],
282 },
283 apex_available: [
284 "//apex_available:platform",
285 "myapex"
286 ],
Colin Cross203b4212021-04-26 17:19:41 -0700287 llndk: {
288 symbol_file: "libdl.map.txt",
289 },
Inseob Kimc0907f12019-02-08 21:00:45 +0900290 }
291 cc_library {
Jooyung Han097087b2019-10-22 19:32:18 +0900292 name: "libft2",
293 no_libcrt: true,
294 nocrt: true,
295 system_shared_libs: [],
296 recovery_available: true,
Colin Cross203b4212021-04-26 17:19:41 -0700297 llndk: {
298 symbol_file: "libft2.map.txt",
299 private: true,
300 }
Jooyung Han097087b2019-10-22 19:32:18 +0900301 }
302 cc_library {
Inseob Kimc0907f12019-02-08 21:00:45 +0900303 name: "libc++_static",
Yi Konge7fe9912019-06-02 00:53:50 -0700304 no_libcrt: true,
Inseob Kimc0907f12019-02-08 21:00:45 +0900305 nocrt: true,
306 system_shared_libs: [],
307 stl: "none",
308 vendor_available: true,
Ivan Lozanoe6d30982021-02-05 10:57:43 -0500309 vendor_ramdisk_available: true,
Justin Yun63e9ec72020-10-29 16:49:43 +0900310 product_available: true,
Inseob Kimc0907f12019-02-08 21:00:45 +0900311 recovery_available: true,
Inseob Kim89db15d2020-02-03 18:06:46 +0900312 host_supported: true,
Jooyung Han749dc692020-04-15 11:03:39 +0900313 min_sdk_version: "29",
Jiyong Park541142c2020-03-07 16:35:46 +0900314 apex_available: [
315 "//apex_available:platform",
316 "//apex_available:anyapex",
317 ],
Inseob Kimc0907f12019-02-08 21:00:45 +0900318 }
319 cc_library {
320 name: "libc++",
Yi Konge7fe9912019-06-02 00:53:50 -0700321 no_libcrt: true,
Inseob Kimc0907f12019-02-08 21:00:45 +0900322 nocrt: true,
323 system_shared_libs: [],
324 stl: "none",
325 vendor_available: true,
Justin Yun63e9ec72020-10-29 16:49:43 +0900326 product_available: true,
Inseob Kimc0907f12019-02-08 21:00:45 +0900327 recovery_available: true,
Inseob Kim89db15d2020-02-03 18:06:46 +0900328 host_supported: true,
Jooyung Han749dc692020-04-15 11:03:39 +0900329 min_sdk_version: "29",
Inseob Kimc0907f12019-02-08 21:00:45 +0900330 vndk: {
331 enabled: true,
332 support_system_process: true,
333 },
Colin Crossf9aabd72020-02-15 11:29:50 -0800334 apex_available: [
335 "//apex_available:platform",
Ivan Lozano3e9f9e42020-12-04 15:05:43 -0500336 "//apex_available:anyapex",
Colin Crossf9aabd72020-02-15 11:29:50 -0800337 ],
Inseob Kimc0907f12019-02-08 21:00:45 +0900338 }
339 cc_library {
Dan Albert2da19cb2019-07-24 12:17:40 -0700340 name: "libc++demangle",
341 no_libcrt: true,
342 nocrt: true,
343 system_shared_libs: [],
344 stl: "none",
345 host_supported: false,
346 vendor_available: true,
Ivan Lozanoe6d30982021-02-05 10:57:43 -0500347 vendor_ramdisk_available: true,
Justin Yun63e9ec72020-10-29 16:49:43 +0900348 product_available: true,
Dan Albert2da19cb2019-07-24 12:17:40 -0700349 recovery_available: true,
Jooyung Han749dc692020-04-15 11:03:39 +0900350 min_sdk_version: "29",
Jiyong Park541142c2020-03-07 16:35:46 +0900351 apex_available: [
352 "//apex_available:platform",
353 "//apex_available:anyapex",
354 ],
Dan Albert2da19cb2019-07-24 12:17:40 -0700355 }
Inseob Kimc0907f12019-02-08 21:00:45 +0900356
Jiyong Park541142c2020-03-07 16:35:46 +0900357 cc_defaults {
358 name: "crt_defaults",
Martin Stjernholm7feceb22020-07-11 04:33:29 +0100359 defaults: ["linux_bionic_supported"],
Jiyong Park541142c2020-03-07 16:35:46 +0900360 recovery_available: true,
361 vendor_available: true,
Ivan Lozanoe6d30982021-02-05 10:57:43 -0500362 vendor_ramdisk_available: true,
Justin Yun63e9ec72020-10-29 16:49:43 +0900363 product_available: true,
Jiyong Park541142c2020-03-07 16:35:46 +0900364 native_bridge_supported: true,
365 stl: "none",
Dan Albert92fe7402020-07-15 13:33:30 -0700366 min_sdk_version: "16",
367 crt: true,
Colin Cross6b8f4252021-07-22 11:39:44 -0700368 system_shared_libs: [],
Jiyong Park541142c2020-03-07 16:35:46 +0900369 apex_available: [
370 "//apex_available:platform",
371 "//apex_available:anyapex",
372 ],
373 }
374
Inseob Kimc0907f12019-02-08 21:00:45 +0900375 cc_object {
376 name: "crtbegin_so",
Jiyong Park541142c2020-03-07 16:35:46 +0900377 defaults: ["crt_defaults"],
Jiyong Park7549d462021-08-25 16:16:03 +0900378 srcs: ["crtbegin_so.c"],
379 objs: ["crtbrand"],
Inseob Kimc0907f12019-02-08 21:00:45 +0900380 }
381
382 cc_object {
Colin Cross815daf92019-05-14 16:05:20 -0700383 name: "crtbegin_dynamic",
Jiyong Park541142c2020-03-07 16:35:46 +0900384 defaults: ["crt_defaults"],
Jiyong Park7549d462021-08-25 16:16:03 +0900385 srcs: ["crtbegin.c"],
386 objs: ["crtbrand"],
Colin Cross815daf92019-05-14 16:05:20 -0700387 }
388
389 cc_object {
Inseob Kimc0907f12019-02-08 21:00:45 +0900390 name: "crtbegin_static",
Jiyong Park541142c2020-03-07 16:35:46 +0900391 defaults: ["crt_defaults"],
Jiyong Park7549d462021-08-25 16:16:03 +0900392 srcs: ["crtbegin.c"],
393 objs: ["crtbrand"],
Inseob Kimc0907f12019-02-08 21:00:45 +0900394 }
395
396 cc_object {
397 name: "crtend_so",
Jiyong Park541142c2020-03-07 16:35:46 +0900398 defaults: ["crt_defaults"],
Jiyong Park7549d462021-08-25 16:16:03 +0900399 srcs: ["crtend_so.c"],
400 objs: ["crtbrand"],
Inseob Kimc0907f12019-02-08 21:00:45 +0900401 }
402
403 cc_object {
404 name: "crtend_android",
Jiyong Park541142c2020-03-07 16:35:46 +0900405 defaults: ["crt_defaults"],
Jiyong Park7549d462021-08-25 16:16:03 +0900406 srcs: ["crtend.c"],
407 objs: ["crtbrand"],
408 }
409
410 cc_object {
411 name: "crtbrand",
412 defaults: ["crt_defaults"],
413 srcs: ["crtbrand.c"],
Inseob Kimc0907f12019-02-08 21:00:45 +0900414 }
415
416 cc_library {
417 name: "libprotobuf-cpp-lite",
418 }
Colin Crossf28329d2020-02-15 11:00:10 -0800419
420 cc_library {
421 name: "ndk_libunwind",
Colin Crossae628182021-06-14 16:52:28 -0700422 sdk_version: "minimum",
Colin Crossf28329d2020-02-15 11:00:10 -0800423 stl: "none",
424 system_shared_libs: [],
425 }
426
Dan Albertde5aade2020-06-30 12:32:51 -0700427 ndk_library {
428 name: "libc",
429 first_version: "minimum",
430 symbol_file: "libc.map.txt",
Colin Crossf28329d2020-02-15 11:00:10 -0800431 }
432
Dan Albertde5aade2020-06-30 12:32:51 -0700433 ndk_library {
434 name: "libm",
435 first_version: "minimum",
436 symbol_file: "libm.map.txt",
Colin Crossf28329d2020-02-15 11:00:10 -0800437 }
438
Dan Albertde5aade2020-06-30 12:32:51 -0700439 ndk_library {
440 name: "libdl",
441 first_version: "minimum",
442 symbol_file: "libdl.map.txt",
Colin Crossf28329d2020-02-15 11:00:10 -0800443 }
444
Colin Crossf28329d2020-02-15 11:00:10 -0800445 ndk_prebuilt_shared_stl {
446 name: "ndk_libc++_shared",
Colin Crossae628182021-06-14 16:52:28 -0700447 export_include_dirs: ["ndk_libc++_shared"],
448 }
449
450 ndk_prebuilt_static_stl {
451 name: "ndk_libandroid_support",
452 export_include_dirs: ["ndk_libandroid_support"],
Colin Crossf28329d2020-02-15 11:00:10 -0800453 }
Jiyong Park46a512f2020-12-04 18:02:13 +0900454
455 cc_library_static {
456 name: "libgoogle-benchmark",
457 sdk_version: "current",
458 stl: "none",
459 system_shared_libs: [],
460 }
Evgenii Stepanov193ac2e2020-04-28 15:09:12 -0700461
462 cc_library_static {
463 name: "note_memtag_heap_async",
464 }
465
466 cc_library_static {
467 name: "note_memtag_heap_sync",
468 }
Colin Cross528d67e2021-07-23 22:23:07 +0000469
Colin Cross528d67e2021-07-23 22:23:07 +0000470 cc_library {
471 name: "libc_musl",
472 host_supported: true,
473 no_libcrt: true,
474 nocrt: true,
475 system_shared_libs: [],
476 stl: "none",
477 }
Colin Crossf28329d2020-02-15 11:00:10 -0800478 `
Paul Duffin02a3d652021-02-24 18:51:54 +0000479}
Colin Crossf28329d2020-02-15 11:00:10 -0800480
Paul Duffin02a3d652021-02-24 18:51:54 +0000481func withWindowsModules() string {
482 return `
Liz Kammer718eb272022-01-07 10:53:37 -0500483 cc_prebuilt_library_static {
Paul Duffina04c1072020-03-02 10:16:35 +0000484 name: "libwinpthread",
485 host_supported: true,
486 enabled: false,
487 target: {
488 windows: {
489 enabled: true,
490 },
491 },
Liz Kammer718eb272022-01-07 10:53:37 -0500492 stl: "none",
493 srcs:[""],
Paul Duffina04c1072020-03-02 10:16:35 +0000494 }
495 `
Paul Duffin02a3d652021-02-24 18:51:54 +0000496}
497
Paul Duffin02a3d652021-02-24 18:51:54 +0000498func withLinuxBionic() string {
499 return `
Martin Stjernholm7feceb22020-07-11 04:33:29 +0100500 cc_binary {
501 name: "linker",
502 defaults: ["linux_bionic_supported"],
503 recovery_available: true,
504 stl: "none",
505 nocrt: true,
506 static_executable: true,
507 native_coverage: false,
508 system_shared_libs: [],
509 }
510
511 cc_genrule {
Colin Cross9cfe6112021-06-11 18:02:22 -0700512 name: "host_bionic_linker_script",
Martin Stjernholm7feceb22020-07-11 04:33:29 +0100513 host_supported: true,
514 device_supported: false,
515 target: {
516 host: {
517 enabled: false,
518 },
519 linux_bionic: {
520 enabled: true,
521 },
522 },
Colin Cross9cfe6112021-06-11 18:02:22 -0700523 out: ["linker.script"],
Martin Stjernholm7feceb22020-07-11 04:33:29 +0100524 }
525
526 cc_defaults {
527 name: "linux_bionic_supported",
528 host_supported: true,
529 target: {
530 host: {
531 enabled: false,
532 },
533 linux_bionic: {
534 enabled: true,
535 },
536 },
537 }
538 `
Paul Duffin02a3d652021-02-24 18:51:54 +0000539}
Martin Stjernholm7feceb22020-07-11 04:33:29 +0100540
Paul Duffin02a3d652021-02-24 18:51:54 +0000541func withoutLinuxBionic() string {
542 return `
Martin Stjernholm7feceb22020-07-11 04:33:29 +0100543 cc_defaults {
544 name: "linux_bionic_supported",
545 }
546 `
Inseob Kimc0907f12019-02-08 21:00:45 +0900547}
Colin Cross9a942872019-05-14 15:44:26 -0700548
Colin Crossf28329d2020-02-15 11:00:10 -0800549func GatherRequiredFilesForTest(fs map[string][]byte) {
Colin Crossf28329d2020-02-15 11:00:10 -0800550}
551
Paul Duffin02a3d652021-02-24 18:51:54 +0000552// The directory in which cc linux bionic default modules will be defined.
553//
554// Placing them here ensures that their location does not conflict with default test modules
555// defined by other packages.
556const linuxBionicDefaultsPath = "defaults/cc/linux-bionic/Android.bp"
557
558// The directory in which the default cc common test modules will be defined.
559//
560// Placing them here ensures that their location does not conflict with default test modules
561// defined by other packages.
562const DefaultCcCommonTestModulesDir = "defaults/cc/common/"
563
564// Test fixture preparer that will register most cc build components.
565//
566// Singletons and mutators should only be added here if they are needed for a majority of cc
567// module types, otherwise they should be added under a separate preparer to allow them to be
568// selected only when needed to reduce test execution time.
569//
570// Module types do not have much of an overhead unless they are used so this should include as many
571// module types as possible. The exceptions are those module types that require mutators and/or
572// singletons in order to function in which case they should be kept together in a separate
573// preparer.
574var PrepareForTestWithCcBuildComponents = android.GroupFixturePreparers(
575 android.PrepareForTestWithAndroidBuildComponents,
576 android.FixtureRegisterWithContext(RegisterRequiredBuildComponentsForTest),
577 android.FixtureRegisterWithContext(func(ctx android.RegistrationContext) {
578 ctx.RegisterModuleType("cc_fuzz", FuzzFactory)
579 ctx.RegisterModuleType("cc_test", TestFactory)
580 ctx.RegisterModuleType("cc_test_library", TestLibraryFactory)
Paul Duffin02a3d652021-02-24 18:51:54 +0000581 ctx.RegisterModuleType("vndk_prebuilt_shared", VndkPrebuiltSharedFactory)
582
583 RegisterVndkLibraryTxtTypes(ctx)
584 }),
Paul Duffindb462dd2021-03-21 22:01:55 +0000585
586 // Additional files needed in tests that disallow non-existent source files.
587 // This includes files that are needed by all, or at least most, instances of a cc module type.
588 android.MockFS{
589 // Needed for ndk_prebuilt_(shared|static)_stl.
590 "prebuilts/ndk/current/sources/cxx-stl/llvm-libc++/libs": nil,
591 }.AddToFixture(),
Paul Duffin02a3d652021-02-24 18:51:54 +0000592)
593
594// Preparer that will define default cc modules, e.g. standard prebuilt modules.
595var PrepareForTestWithCcDefaultModules = android.GroupFixturePreparers(
596 PrepareForTestWithCcBuildComponents,
Paul Duffindb462dd2021-03-21 22:01:55 +0000597
598 // Additional files needed in tests that disallow non-existent source.
599 android.MockFS{
Colin Crossae628182021-06-14 16:52:28 -0700600 "defaults/cc/common/libc.map.txt": nil,
601 "defaults/cc/common/libdl.map.txt": nil,
602 "defaults/cc/common/libm.map.txt": nil,
603 "defaults/cc/common/ndk_libandroid_support": nil,
604 "defaults/cc/common/ndk_libc++_shared": nil,
Jiyong Park7549d462021-08-25 16:16:03 +0900605 "defaults/cc/common/crtbegin_so.c": nil,
606 "defaults/cc/common/crtbegin.c": nil,
607 "defaults/cc/common/crtend_so.c": nil,
608 "defaults/cc/common/crtend.c": nil,
609 "defaults/cc/common/crtbrand.c": nil,
Paul Duffindb462dd2021-03-21 22:01:55 +0000610 }.AddToFixture(),
611
Paul Duffin02a3d652021-02-24 18:51:54 +0000612 // Place the default cc test modules that are common to all platforms in a location that will not
613 // conflict with default test modules defined by other packages.
614 android.FixtureAddTextFile(DefaultCcCommonTestModulesDir+"Android.bp", commonDefaultModules()),
615 // Disable linux bionic by default.
616 android.FixtureAddTextFile(linuxBionicDefaultsPath, withoutLinuxBionic()),
617)
618
619// Prepare a fixture to use all cc module types, mutators and singletons fully.
620//
621// This should only be used by tests that want to run with as much of the build enabled as possible.
622var PrepareForIntegrationTestWithCc = android.GroupFixturePreparers(
623 android.PrepareForIntegrationTestWithAndroid,
624 genrule.PrepareForIntegrationTestWithGenrule,
625 PrepareForTestWithCcDefaultModules,
626)
627
628// The preparer to include if running a cc related test for windows.
629var PrepareForTestOnWindows = android.GroupFixturePreparers(
630 // Place the default cc test modules for windows platforms in a location that will not conflict
631 // with default test modules defined by other packages.
632 android.FixtureAddTextFile("defaults/cc/windows/Android.bp", withWindowsModules()),
633)
634
635// The preparer to include if running a cc related test for linux bionic.
636var PrepareForTestOnLinuxBionic = android.GroupFixturePreparers(
Paul Duffin6e9a4002021-03-11 19:01:26 +0000637 // Enable linux bionic
638 //
639 // Can be used after PrepareForTestWithCcDefaultModules to override its default behavior of
640 // disabling linux bionic, hence why this uses FixtureOverrideTextFile.
641 android.FixtureOverrideTextFile(linuxBionicDefaultsPath, withLinuxBionic()),
Paul Duffin02a3d652021-02-24 18:51:54 +0000642)
643
644// This adds some additional modules and singletons which might negatively impact the performance
645// of tests so they are not included in the PrepareForIntegrationTestWithCc.
646var PrepareForTestWithCcIncludeVndk = android.GroupFixturePreparers(
647 PrepareForIntegrationTestWithCc,
648 android.FixtureRegisterWithContext(func(ctx android.RegistrationContext) {
Kiyoung Kim48f37782021-07-07 12:42:39 +0900649 snapshot.VendorSnapshotImageSingleton.Init(ctx)
650 snapshot.RecoverySnapshotImageSingleton.Init(ctx)
651 RegisterVendorSnapshotModules(ctx)
652 RegisterRecoverySnapshotModules(ctx)
Paul Duffin02a3d652021-02-24 18:51:54 +0000653 ctx.RegisterSingletonType("vndk-snapshot", VndkSnapshotSingleton)
654 }),
655)
656
657// TestConfig is the legacy way of creating a test Config for testing cc modules.
658//
659// See testCc for an explanation as to how to stop using this deprecated method.
660//
661// deprecated
Colin Cross98be1bb2019-12-13 20:41:13 -0800662func TestConfig(buildDir string, os android.OsType, env map[string]string,
663 bp string, fs map[string][]byte) android.Config {
Colin Cross9a942872019-05-14 15:44:26 -0700664
Colin Cross98be1bb2019-12-13 20:41:13 -0800665 // add some modules that are required by the compiler and/or linker
666 bp = bp + GatherRequiredDepsForTest(os)
667
Colin Cross2fce23a2020-06-07 17:02:48 -0700668 mockFS := map[string][]byte{}
Colin Cross98be1bb2019-12-13 20:41:13 -0800669
Colin Crossf28329d2020-02-15 11:00:10 -0800670 GatherRequiredFilesForTest(mockFS)
671
Colin Cross98be1bb2019-12-13 20:41:13 -0800672 for k, v := range fs {
673 mockFS[k] = v
674 }
675
Colin Crosscb0ac952021-07-20 13:17:15 -0700676 return android.TestArchConfig(buildDir, env, bp, mockFS)
Colin Cross98be1bb2019-12-13 20:41:13 -0800677}
678
Paul Duffin02a3d652021-02-24 18:51:54 +0000679// CreateTestContext is the legacy way of creating a TestContext for testing cc modules.
680//
681// See testCc for an explanation as to how to stop using this deprecated method.
682//
683// deprecated
Colin Crossae8600b2020-10-29 17:09:13 -0700684func CreateTestContext(config android.Config) *android.TestContext {
685 ctx := android.NewTestArchContext(config)
Paul Duffind6ceb862021-03-04 23:02:31 +0000686 genrule.RegisterGenruleBuildComponents(ctx)
Colin Cross4b49b762019-11-22 15:25:03 -0800687 ctx.RegisterModuleType("cc_fuzz", FuzzFactory)
Colin Cross4b49b762019-11-22 15:25:03 -0800688 ctx.RegisterModuleType("cc_test", TestFactory)
Chris Parsons79d66a52020-06-05 17:26:16 -0400689 ctx.RegisterModuleType("cc_test_library", TestLibraryFactory)
Colin Cross4b49b762019-11-22 15:25:03 -0800690 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
691 ctx.RegisterModuleType("vndk_prebuilt_shared", VndkPrebuiltSharedFactory)
Paul Duffin02a3d652021-02-24 18:51:54 +0000692
Kiyoung Kim48f37782021-07-07 12:42:39 +0900693 snapshot.VendorSnapshotImageSingleton.Init(ctx)
694 snapshot.RecoverySnapshotImageSingleton.Init(ctx)
695 RegisterVendorSnapshotModules(ctx)
696 RegisterRecoverySnapshotModules(ctx)
Paul Duffin02a3d652021-02-24 18:51:54 +0000697 ctx.RegisterSingletonType("vndk-snapshot", VndkSnapshotSingleton)
Colin Crosse4e44bc2020-12-28 13:50:21 -0800698 RegisterVndkLibraryTxtTypes(ctx)
Paul Duffin02a3d652021-02-24 18:51:54 +0000699
Colin Crosse1bb5d02019-09-24 14:55:04 -0700700 ctx.PreArchMutators(android.RegisterDefaultsPreArchMutators)
Paul Duffin021f4e52020-07-30 16:04:17 +0100701 android.RegisterPrebuiltMutators(ctx)
Paul Duffinc988c8e2020-04-29 18:27:14 +0100702 RegisterRequiredBuildComponentsForTest(ctx)
Colin Cross9a942872019-05-14 15:44:26 -0700703
Colin Cross9a942872019-05-14 15:44:26 -0700704 return ctx
705}
Ivan Lozanod67a6b02021-05-20 13:01:32 -0400706
707func checkSnapshotIncludeExclude(t *testing.T, ctx *android.TestContext, singleton android.TestingSingleton, moduleName, snapshotFilename, subDir, variant string, include bool, fake bool) {
708 t.Helper()
709 mod := ctx.ModuleForTests(moduleName, variant)
710 outputFiles := mod.OutputFiles(t, "")
711 if len(outputFiles) != 1 {
712 t.Errorf("%q must have single output\n", moduleName)
713 return
714 }
715 snapshotPath := filepath.Join(subDir, snapshotFilename)
716
717 if include {
718 out := singleton.Output(snapshotPath)
719 if fake {
720 if out.Rule == nil {
721 t.Errorf("Missing rule for module %q output file %q", moduleName, outputFiles[0])
722 }
723 } else {
724 if out.Input.String() != outputFiles[0].String() {
725 t.Errorf("The input of snapshot %q must be %q, but %q", moduleName, out.Input.String(), outputFiles[0])
726 }
727 }
728 } else {
729 out := singleton.MaybeOutput(snapshotPath)
730 if out.Rule != nil {
731 t.Errorf("There must be no rule for module %q output file %q", moduleName, outputFiles[0])
732 }
733 }
734}
735
736func CheckSnapshot(t *testing.T, ctx *android.TestContext, singleton android.TestingSingleton, moduleName, snapshotFilename, subDir, variant string) {
737 t.Helper()
738 checkSnapshotIncludeExclude(t, ctx, singleton, moduleName, snapshotFilename, subDir, variant, true, false)
739}
740
741func CheckSnapshotExclude(t *testing.T, ctx *android.TestContext, singleton android.TestingSingleton, moduleName, snapshotFilename, subDir, variant string) {
742 t.Helper()
743 checkSnapshotIncludeExclude(t, ctx, singleton, moduleName, snapshotFilename, subDir, variant, false, false)
744}
745
746func CheckSnapshotRule(t *testing.T, ctx *android.TestContext, singleton android.TestingSingleton, moduleName, snapshotFilename, subDir, variant string) {
747 t.Helper()
748 checkSnapshotIncludeExclude(t, ctx, singleton, moduleName, snapshotFilename, subDir, variant, true, true)
749}
750
751func AssertExcludeFromVendorSnapshotIs(t *testing.T, ctx *android.TestContext, name string, expected bool, variant string) {
752 t.Helper()
753 m := ctx.ModuleForTests(name, variant).Module().(LinkableInterface)
754 if m.ExcludeFromVendorSnapshot() != expected {
755 t.Errorf("expected %q ExcludeFromVendorSnapshot to be %t", m.String(), expected)
756 }
757}
758
759func GetOutputPaths(ctx *android.TestContext, variant string, moduleNames []string) (paths android.Paths) {
760 for _, moduleName := range moduleNames {
761 module := ctx.ModuleForTests(moduleName, variant).Module().(*Module)
762 output := module.outputFile.Path().RelativeToTop()
763 paths = append(paths, output)
764 }
765 return paths
766}
Ivan Lozanoc2ca1ee2021-11-09 16:23:40 -0500767
768func AssertExcludeFromRecoverySnapshotIs(t *testing.T, ctx *android.TestContext, name string, expected bool, variant string) {
769 t.Helper()
770 m := ctx.ModuleForTests(name, variant).Module().(LinkableInterface)
771 if m.ExcludeFromRecoverySnapshot() != expected {
772 t.Errorf("expected %q ExcludeFromRecoverySnapshot to be %t", m.String(), expected)
773 }
774}