blob: c3a33cb9134cf864ea5d2329987c4a6b79d9b6b3 [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 Kim487689e2022-07-26 09:48:22 +090023 "android/soong/multitree"
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)
Inseob Kim5eb7ee92022-04-27 10:30:34 +090032 RegisterLibraryStubBuildComponents(ctx)
Paul Duffin6c26dc72019-12-19 15:02:40 +000033
Kiyoung Kim487689e2022-07-26 09:48:22 +090034 multitree.RegisterApiImportsModule(ctx)
35
Sam Delmericof2b16062023-09-25 12:13:17 +000036 ctx.RegisterModuleType("prebuilt_build_tool", android.NewPrebuiltBuildTool)
Jiyong Park46a512f2020-12-04 18:02:13 +090037 ctx.RegisterModuleType("cc_benchmark", BenchmarkFactory)
Hao Chen1c8ea5b2023-10-20 23:03:45 +000038 ctx.RegisterModuleType("cc_cmake_snapshot", CmakeSnapshotFactory)
Paul Duffin6c26dc72019-12-19 15:02:40 +000039 ctx.RegisterModuleType("cc_object", ObjectFactory)
Wei Libcd39942021-09-16 23:57:28 +000040 ctx.RegisterModuleType("cc_genrule", GenRuleFactory)
Colin Crossf28329d2020-02-15 11:00:10 -080041 ctx.RegisterModuleType("ndk_prebuilt_shared_stl", NdkPrebuiltSharedStlFactory)
Colin Crossae628182021-06-14 16:52:28 -070042 ctx.RegisterModuleType("ndk_prebuilt_static_stl", NdkPrebuiltStaticStlFactory)
Dan Albertde5aade2020-06-30 12:32:51 -070043 ctx.RegisterModuleType("ndk_library", NdkLibraryFactory)
Spandan Das319711b2023-09-19 19:04:41 +000044 ctx.RegisterModuleType("ndk_headers", NdkHeadersFactory)
Paul Duffin77980a82019-12-19 16:01:36 +000045}
46
Paul Duffina04c1072020-03-02 10:16:35 +000047func GatherRequiredDepsForTest(oses ...android.OsType) string {
Paul Duffin02a3d652021-02-24 18:51:54 +000048 ret := commonDefaultModules()
49
50 supportLinuxBionic := false
51 for _, os := range oses {
Paul Duffin02a3d652021-02-24 18:51:54 +000052 if os == android.Windows {
53 ret += withWindowsModules()
54 }
55 if os == android.LinuxBionic {
56 supportLinuxBionic = true
57 ret += withLinuxBionic()
58 }
59 }
60
61 if !supportLinuxBionic {
62 ret += withoutLinuxBionic()
63 }
64
65 return ret
66}
67
68func commonDefaultModules() string {
69 return `
Liz Kammer718eb272022-01-07 10:53:37 -050070 cc_defaults {
71 name: "toolchain_libs_defaults",
Colin Cross5dc62c92023-02-15 12:20:19 -080072 host_supported: true,
Inseob Kimc0907f12019-02-08 21:00:45 +090073 vendor_available: true,
Justin Yun63e9ec72020-10-29 16:49:43 +090074 product_available: true,
Inseob Kimc0907f12019-02-08 21:00:45 +090075 recovery_available: true,
Liz Kammer718eb272022-01-07 10:53:37 -050076 no_libcrt: true,
77 sdk_version: "minimum",
Jooyung Han75568392020-03-20 04:29:24 +090078 nocrt: true,
Kalesh Singhf4ffe0a2024-01-29 13:01:51 -080079 no_crt_pad_segment: true,
Jooyung Han75568392020-03-20 04:29:24 +090080 system_shared_libs: [],
81 stl: "none",
Jooyung Han75568392020-03-20 04:29:24 +090082 check_elf_files: false,
83 sanitize: {
84 never: true,
85 },
Spandan Das4de7b492023-05-05 21:13:01 +000086 apex_available: [
87 "//apex_available:anyapex",
88 "//apex_available:platform",
89 ],
Jooyung Han75568392020-03-20 04:29:24 +090090 }
91
Liz Kammer718eb272022-01-07 10:53:37 -050092 cc_prebuilt_library_static {
93 name: "libcompiler_rt-extras",
94 defaults: ["toolchain_libs_defaults"],
95 vendor_ramdisk_available: true,
Colin Cross3e5e7782022-06-17 22:17:05 +000096 srcs: [""],
Liz Kammer718eb272022-01-07 10:53:37 -050097 }
98
99 cc_prebuilt_library_static {
Colin Cross4c4c1be2022-02-10 11:41:18 -0800100 name: "libclang_rt.builtins",
Colin Cross06c80eb2022-02-10 10:34:19 -0800101 defaults: ["toolchain_libs_defaults"],
102 host_supported: true,
Colin Cross4c4c1be2022-02-10 11:41:18 -0800103 vendor_available: true,
104 vendor_ramdisk_available: true,
105 native_bridge_supported: true,
Colin Cross3e5e7782022-06-17 22:17:05 +0000106 srcs: [""],
Colin Cross06c80eb2022-02-10 10:34:19 -0800107 }
108
Liz Kammer718eb272022-01-07 10:53:37 -0500109 cc_prebuilt_library_shared {
Colin Cross4c4c1be2022-02-10 11:41:18 -0800110 name: "libclang_rt.hwasan",
Liz Kammer718eb272022-01-07 10:53:37 -0500111 defaults: ["toolchain_libs_defaults"],
Colin Cross3e5e7782022-06-17 22:17:05 +0000112 srcs: [""],
Liz Kammer718eb272022-01-07 10:53:37 -0500113 }
114
115 cc_prebuilt_library_static {
Ryan Prichardb35a85e2021-01-13 19:18:53 -0800116 name: "libunwind",
Liz Kammer718eb272022-01-07 10:53:37 -0500117 defaults: [
118 "linux_bionic_supported",
119 "toolchain_libs_defaults",
120 ],
Ivan Lozanoe6d30982021-02-05 10:57:43 -0500121 vendor_ramdisk_available: true,
Ryan Prichardb35a85e2021-01-13 19:18:53 -0800122 native_bridge_supported: true,
Colin Cross3e5e7782022-06-17 22:17:05 +0000123 srcs: [""],
Ryan Prichardb35a85e2021-01-13 19:18:53 -0800124 }
125
Liz Kammer718eb272022-01-07 10:53:37 -0500126 cc_prebuilt_library_static {
Colin Cross4c4c1be2022-02-10 11:41:18 -0800127 name: "libclang_rt.fuzzer",
Liz Kammer718eb272022-01-07 10:53:37 -0500128 defaults: [
129 "linux_bionic_supported",
130 "toolchain_libs_defaults",
131 ],
Colin Cross3e5e7782022-06-17 22:17:05 +0000132 srcs: [""],
Mitch Phillipsda9a4632019-07-15 09:34:09 -0700133 }
134
Paul Duffind6867912019-12-19 14:38:36 +0000135 // Needed for sanitizer
136 cc_prebuilt_library_shared {
Colin Cross4c4c1be2022-02-10 11:41:18 -0800137 name: "libclang_rt.ubsan_standalone",
Liz Kammer718eb272022-01-07 10:53:37 -0500138 defaults: ["toolchain_libs_defaults"],
Colin Cross3e5e7782022-06-17 22:17:05 +0000139 srcs: [""],
Paul Duffind6867912019-12-19 14:38:36 +0000140 }
141
Colin Cross06c80eb2022-02-10 10:34:19 -0800142 cc_prebuilt_library_static {
Colin Cross5dc62c92023-02-15 12:20:19 -0800143 name: "libclang_rt.ubsan_standalone.static",
144 defaults: ["toolchain_libs_defaults"],
145 srcs: [""],
146 }
147
148 cc_prebuilt_library_static {
Colin Cross4c4c1be2022-02-10 11:41:18 -0800149 name: "libclang_rt.ubsan_minimal",
Colin Cross06c80eb2022-02-10 10:34:19 -0800150 defaults: ["toolchain_libs_defaults"],
Colin Cross3e5e7782022-06-17 22:17:05 +0000151 host_supported: true,
152 target: {
153 android_arm64: {
154 srcs: ["libclang_rt.ubsan_minimal.android_arm64.a"],
155 },
156 android_arm: {
157 srcs: ["libclang_rt.ubsan_minimal.android_arm.a"],
158 },
159 linux_glibc_x86_64: {
160 srcs: ["libclang_rt.ubsan_minimal.x86_64.a"],
161 },
162 linux_glibc_x86: {
163 srcs: ["libclang_rt.ubsan_minimal.x86.a"],
164 },
Colin Cross5dc62c92023-02-15 12:20:19 -0800165 linux_musl_x86_64: {
166 srcs: ["libclang_rt.ubsan_minimal.x86_64.a"],
167 },
168 linux_musl_x86: {
169 srcs: ["libclang_rt.ubsan_minimal.x86.a"],
170 },
Colin Cross3e5e7782022-06-17 22:17:05 +0000171 },
Colin Cross06c80eb2022-02-10 10:34:19 -0800172 }
173
Inseob Kimc0907f12019-02-08 21:00:45 +0900174 cc_library {
Inseob Kimc0907f12019-02-08 21:00:45 +0900175 name: "libc",
Martin Stjernholm7feceb22020-07-11 04:33:29 +0100176 defaults: ["linux_bionic_supported"],
Yi Konge7fe9912019-06-02 00:53:50 -0700177 no_libcrt: true,
Inseob Kimc0907f12019-02-08 21:00:45 +0900178 nocrt: true,
Peter Collingbournee5ba2862019-12-10 18:37:45 -0800179 stl: "none",
Inseob Kimc0907f12019-02-08 21:00:45 +0900180 system_shared_libs: [],
181 recovery_available: true,
Colin Crossf9aabd72020-02-15 11:29:50 -0800182 stubs: {
183 versions: ["27", "28", "29"],
184 },
Colin Cross203b4212021-04-26 17:19:41 -0700185 llndk: {
186 symbol_file: "libc.map.txt",
187 },
Inseob Kimc0907f12019-02-08 21:00:45 +0900188 }
189 cc_library {
190 name: "libm",
Martin Stjernholm7feceb22020-07-11 04:33:29 +0100191 defaults: ["linux_bionic_supported"],
Yi Konge7fe9912019-06-02 00:53:50 -0700192 no_libcrt: true,
Inseob Kimc0907f12019-02-08 21:00:45 +0900193 nocrt: true,
Peter Collingbournee5ba2862019-12-10 18:37:45 -0800194 stl: "none",
Inseob Kimc0907f12019-02-08 21:00:45 +0900195 system_shared_libs: [],
196 recovery_available: true,
Colin Crossf9aabd72020-02-15 11:29:50 -0800197 stubs: {
198 versions: ["27", "28", "29"],
199 },
200 apex_available: [
201 "//apex_available:platform",
202 "myapex"
203 ],
Colin Cross203b4212021-04-26 17:19:41 -0700204 llndk: {
205 symbol_file: "libm.map.txt",
206 },
Inseob Kimc0907f12019-02-08 21:00:45 +0900207 }
Ivan Lozanoa0cd8f92020-04-09 09:56:02 -0400208
209 // Coverage libraries
210 cc_library {
211 name: "libprofile-extras",
212 vendor_available: true,
Ivan Lozanoe6d30982021-02-05 10:57:43 -0500213 vendor_ramdisk_available: true,
Justin Yun63e9ec72020-10-29 16:49:43 +0900214 product_available: true,
Ivan Lozanoa0cd8f92020-04-09 09:56:02 -0400215 recovery_available: true,
216 native_coverage: false,
217 system_shared_libs: [],
218 stl: "none",
Ivan Lozanoa0cd8f92020-04-09 09:56:02 -0400219 }
220 cc_library {
221 name: "libprofile-clang-extras",
222 vendor_available: true,
Ivan Lozanoe6d30982021-02-05 10:57:43 -0500223 vendor_ramdisk_available: true,
Justin Yun63e9ec72020-10-29 16:49:43 +0900224 product_available: true,
Ivan Lozanoa0cd8f92020-04-09 09:56:02 -0400225 recovery_available: true,
226 native_coverage: false,
227 system_shared_libs: [],
228 stl: "none",
Ivan Lozanoa0cd8f92020-04-09 09:56:02 -0400229 }
230 cc_library {
231 name: "libprofile-extras_ndk",
232 vendor_available: true,
Justin Yun63e9ec72020-10-29 16:49:43 +0900233 product_available: true,
Ivan Lozanoa0cd8f92020-04-09 09:56:02 -0400234 native_coverage: false,
235 system_shared_libs: [],
236 stl: "none",
Ivan Lozanoa0cd8f92020-04-09 09:56:02 -0400237 sdk_version: "current",
238 }
239 cc_library {
240 name: "libprofile-clang-extras_ndk",
241 vendor_available: true,
Justin Yun63e9ec72020-10-29 16:49:43 +0900242 product_available: true,
Ivan Lozanoa0cd8f92020-04-09 09:56:02 -0400243 native_coverage: false,
244 system_shared_libs: [],
245 stl: "none",
Ivan Lozanoa0cd8f92020-04-09 09:56:02 -0400246 sdk_version: "current",
247 }
248
Inseob Kimc0907f12019-02-08 21:00:45 +0900249 cc_library {
250 name: "libdl",
Martin Stjernholm7feceb22020-07-11 04:33:29 +0100251 defaults: ["linux_bionic_supported"],
Yi Konge7fe9912019-06-02 00:53:50 -0700252 no_libcrt: true,
Inseob Kimc0907f12019-02-08 21:00:45 +0900253 nocrt: true,
Peter Collingbournee5ba2862019-12-10 18:37:45 -0800254 stl: "none",
Inseob Kimc0907f12019-02-08 21:00:45 +0900255 system_shared_libs: [],
256 recovery_available: true,
Colin Crossf9aabd72020-02-15 11:29:50 -0800257 stubs: {
258 versions: ["27", "28", "29"],
259 },
260 apex_available: [
261 "//apex_available:platform",
262 "myapex"
263 ],
Colin Cross203b4212021-04-26 17:19:41 -0700264 llndk: {
265 symbol_file: "libdl.map.txt",
266 },
Inseob Kimc0907f12019-02-08 21:00:45 +0900267 }
268 cc_library {
Jooyung Han097087b2019-10-22 19:32:18 +0900269 name: "libft2",
270 no_libcrt: true,
271 nocrt: true,
272 system_shared_libs: [],
273 recovery_available: true,
Colin Cross203b4212021-04-26 17:19:41 -0700274 llndk: {
275 symbol_file: "libft2.map.txt",
276 private: true,
277 }
Jooyung Han097087b2019-10-22 19:32:18 +0900278 }
279 cc_library {
Inseob Kimc0907f12019-02-08 21:00:45 +0900280 name: "libc++_static",
Yi Konge7fe9912019-06-02 00:53:50 -0700281 no_libcrt: true,
Inseob Kimc0907f12019-02-08 21:00:45 +0900282 nocrt: true,
283 system_shared_libs: [],
284 stl: "none",
285 vendor_available: true,
Ivan Lozanoe6d30982021-02-05 10:57:43 -0500286 vendor_ramdisk_available: true,
Justin Yun63e9ec72020-10-29 16:49:43 +0900287 product_available: true,
Inseob Kimc0907f12019-02-08 21:00:45 +0900288 recovery_available: true,
Inseob Kim89db15d2020-02-03 18:06:46 +0900289 host_supported: true,
Jooyung Han749dc692020-04-15 11:03:39 +0900290 min_sdk_version: "29",
Jiyong Park541142c2020-03-07 16:35:46 +0900291 apex_available: [
292 "//apex_available:platform",
293 "//apex_available:anyapex",
294 ],
Inseob Kimc0907f12019-02-08 21:00:45 +0900295 }
296 cc_library {
297 name: "libc++",
Yi Konge7fe9912019-06-02 00:53:50 -0700298 no_libcrt: true,
Inseob Kimc0907f12019-02-08 21:00:45 +0900299 nocrt: true,
300 system_shared_libs: [],
301 stl: "none",
302 vendor_available: true,
Justin Yun63e9ec72020-10-29 16:49:43 +0900303 product_available: true,
Inseob Kimc0907f12019-02-08 21:00:45 +0900304 recovery_available: true,
Inseob Kim89db15d2020-02-03 18:06:46 +0900305 host_supported: true,
Jooyung Han749dc692020-04-15 11:03:39 +0900306 min_sdk_version: "29",
Kiyoung Kim0d1c1e62024-03-26 16:33:58 +0900307 double_loadable: true,
Colin Crossf9aabd72020-02-15 11:29:50 -0800308 apex_available: [
309 "//apex_available:platform",
Ivan Lozano3e9f9e42020-12-04 15:05:43 -0500310 "//apex_available:anyapex",
Colin Crossf9aabd72020-02-15 11:29:50 -0800311 ],
Inseob Kimc0907f12019-02-08 21:00:45 +0900312 }
313 cc_library {
Dan Albert2da19cb2019-07-24 12:17:40 -0700314 name: "libc++demangle",
315 no_libcrt: true,
316 nocrt: true,
317 system_shared_libs: [],
318 stl: "none",
319 host_supported: false,
320 vendor_available: true,
Ivan Lozanoe6d30982021-02-05 10:57:43 -0500321 vendor_ramdisk_available: true,
Justin Yun63e9ec72020-10-29 16:49:43 +0900322 product_available: true,
Dan Albert2da19cb2019-07-24 12:17:40 -0700323 recovery_available: true,
Jooyung Han749dc692020-04-15 11:03:39 +0900324 min_sdk_version: "29",
Jiyong Park541142c2020-03-07 16:35:46 +0900325 apex_available: [
326 "//apex_available:platform",
327 "//apex_available:anyapex",
328 ],
Dan Albert2da19cb2019-07-24 12:17:40 -0700329 }
Inseob Kimc0907f12019-02-08 21:00:45 +0900330
Jiyong Park541142c2020-03-07 16:35:46 +0900331 cc_defaults {
332 name: "crt_defaults",
Martin Stjernholm7feceb22020-07-11 04:33:29 +0100333 defaults: ["linux_bionic_supported"],
Jiyong Park541142c2020-03-07 16:35:46 +0900334 recovery_available: true,
335 vendor_available: true,
Ivan Lozanoe6d30982021-02-05 10:57:43 -0500336 vendor_ramdisk_available: true,
Justin Yun63e9ec72020-10-29 16:49:43 +0900337 product_available: true,
Jiyong Park541142c2020-03-07 16:35:46 +0900338 native_bridge_supported: true,
339 stl: "none",
Dan Albert92fe7402020-07-15 13:33:30 -0700340 min_sdk_version: "16",
341 crt: true,
Colin Cross6b8f4252021-07-22 11:39:44 -0700342 system_shared_libs: [],
Jiyong Park541142c2020-03-07 16:35:46 +0900343 apex_available: [
344 "//apex_available:platform",
345 "//apex_available:anyapex",
346 ],
347 }
348
Inseob Kimc0907f12019-02-08 21:00:45 +0900349 cc_object {
350 name: "crtbegin_so",
Jiyong Park541142c2020-03-07 16:35:46 +0900351 defaults: ["crt_defaults"],
Jiyong Park7549d462021-08-25 16:16:03 +0900352 srcs: ["crtbegin_so.c"],
353 objs: ["crtbrand"],
Inseob Kimc0907f12019-02-08 21:00:45 +0900354 }
355
356 cc_object {
Colin Cross815daf92019-05-14 16:05:20 -0700357 name: "crtbegin_dynamic",
Jiyong Park541142c2020-03-07 16:35:46 +0900358 defaults: ["crt_defaults"],
Jiyong Park7549d462021-08-25 16:16:03 +0900359 srcs: ["crtbegin.c"],
360 objs: ["crtbrand"],
Colin Cross815daf92019-05-14 16:05:20 -0700361 }
362
363 cc_object {
Inseob Kimc0907f12019-02-08 21:00:45 +0900364 name: "crtbegin_static",
Jiyong Park541142c2020-03-07 16:35:46 +0900365 defaults: ["crt_defaults"],
Jiyong Park7549d462021-08-25 16:16:03 +0900366 srcs: ["crtbegin.c"],
367 objs: ["crtbrand"],
Inseob Kimc0907f12019-02-08 21:00:45 +0900368 }
369
370 cc_object {
371 name: "crtend_so",
Jiyong Park541142c2020-03-07 16:35:46 +0900372 defaults: ["crt_defaults"],
Jiyong Park7549d462021-08-25 16:16:03 +0900373 srcs: ["crtend_so.c"],
374 objs: ["crtbrand"],
Inseob Kimc0907f12019-02-08 21:00:45 +0900375 }
376
377 cc_object {
378 name: "crtend_android",
Jiyong Park541142c2020-03-07 16:35:46 +0900379 defaults: ["crt_defaults"],
Jiyong Park7549d462021-08-25 16:16:03 +0900380 srcs: ["crtend.c"],
381 objs: ["crtbrand"],
382 }
383
384 cc_object {
Kalesh Singhf4ffe0a2024-01-29 13:01:51 -0800385 name: "crt_pad_segment",
386 defaults: ["crt_defaults"],
387 }
388
389 cc_object {
Jiyong Park7549d462021-08-25 16:16:03 +0900390 name: "crtbrand",
391 defaults: ["crt_defaults"],
392 srcs: ["crtbrand.c"],
Inseob Kimc0907f12019-02-08 21:00:45 +0900393 }
394
395 cc_library {
396 name: "libprotobuf-cpp-lite",
397 }
Colin Crossf28329d2020-02-15 11:00:10 -0800398
399 cc_library {
400 name: "ndk_libunwind",
Colin Crossae628182021-06-14 16:52:28 -0700401 sdk_version: "minimum",
Colin Crossf28329d2020-02-15 11:00:10 -0800402 stl: "none",
403 system_shared_libs: [],
404 }
405
Dan Albertde5aade2020-06-30 12:32:51 -0700406 ndk_library {
407 name: "libc",
408 first_version: "minimum",
409 symbol_file: "libc.map.txt",
Colin Crossf28329d2020-02-15 11:00:10 -0800410 }
411
Dan Albertde5aade2020-06-30 12:32:51 -0700412 ndk_library {
413 name: "libm",
414 first_version: "minimum",
415 symbol_file: "libm.map.txt",
Colin Crossf28329d2020-02-15 11:00:10 -0800416 }
417
Dan Albertde5aade2020-06-30 12:32:51 -0700418 ndk_library {
419 name: "libdl",
420 first_version: "minimum",
421 symbol_file: "libdl.map.txt",
Colin Crossf28329d2020-02-15 11:00:10 -0800422 }
423
Colin Crossf28329d2020-02-15 11:00:10 -0800424 ndk_prebuilt_shared_stl {
425 name: "ndk_libc++_shared",
Colin Crossae628182021-06-14 16:52:28 -0700426 export_include_dirs: ["ndk_libc++_shared"],
427 }
428
Jiyong Park46a512f2020-12-04 18:02:13 +0900429 cc_library_static {
430 name: "libgoogle-benchmark",
431 sdk_version: "current",
432 stl: "none",
433 system_shared_libs: [],
434 }
Evgenii Stepanov193ac2e2020-04-28 15:09:12 -0700435
436 cc_library_static {
437 name: "note_memtag_heap_async",
438 }
439
440 cc_library_static {
441 name: "note_memtag_heap_sync",
442 }
Colin Cross528d67e2021-07-23 22:23:07 +0000443
Colin Cross528d67e2021-07-23 22:23:07 +0000444 cc_library {
445 name: "libc_musl",
446 host_supported: true,
447 no_libcrt: true,
448 nocrt: true,
449 system_shared_libs: [],
450 stl: "none",
451 }
Colin Crossf28329d2020-02-15 11:00:10 -0800452 `
Paul Duffin02a3d652021-02-24 18:51:54 +0000453}
Colin Crossf28329d2020-02-15 11:00:10 -0800454
Paul Duffin02a3d652021-02-24 18:51:54 +0000455func withWindowsModules() string {
456 return `
Liz Kammer718eb272022-01-07 10:53:37 -0500457 cc_prebuilt_library_static {
Paul Duffina04c1072020-03-02 10:16:35 +0000458 name: "libwinpthread",
459 host_supported: true,
460 enabled: false,
461 target: {
462 windows: {
463 enabled: true,
464 },
465 },
Liz Kammer718eb272022-01-07 10:53:37 -0500466 stl: "none",
467 srcs:[""],
Paul Duffina04c1072020-03-02 10:16:35 +0000468 }
469 `
Paul Duffin02a3d652021-02-24 18:51:54 +0000470}
471
Paul Duffin02a3d652021-02-24 18:51:54 +0000472func withLinuxBionic() string {
473 return `
Martin Stjernholm7feceb22020-07-11 04:33:29 +0100474 cc_binary {
475 name: "linker",
476 defaults: ["linux_bionic_supported"],
477 recovery_available: true,
478 stl: "none",
479 nocrt: true,
480 static_executable: true,
481 native_coverage: false,
482 system_shared_libs: [],
483 }
484
485 cc_genrule {
Colin Cross9cfe6112021-06-11 18:02:22 -0700486 name: "host_bionic_linker_script",
Martin Stjernholm7feceb22020-07-11 04:33:29 +0100487 host_supported: true,
488 device_supported: false,
489 target: {
490 host: {
491 enabled: false,
492 },
493 linux_bionic: {
494 enabled: true,
495 },
496 },
Colin Cross9cfe6112021-06-11 18:02:22 -0700497 out: ["linker.script"],
Martin Stjernholm7feceb22020-07-11 04:33:29 +0100498 }
499
500 cc_defaults {
501 name: "linux_bionic_supported",
502 host_supported: true,
503 target: {
504 host: {
505 enabled: false,
506 },
507 linux_bionic: {
508 enabled: true,
509 },
510 },
511 }
512 `
Paul Duffin02a3d652021-02-24 18:51:54 +0000513}
Martin Stjernholm7feceb22020-07-11 04:33:29 +0100514
Paul Duffin02a3d652021-02-24 18:51:54 +0000515func withoutLinuxBionic() string {
516 return `
Martin Stjernholm7feceb22020-07-11 04:33:29 +0100517 cc_defaults {
518 name: "linux_bionic_supported",
519 }
520 `
Inseob Kimc0907f12019-02-08 21:00:45 +0900521}
Colin Cross9a942872019-05-14 15:44:26 -0700522
Colin Crossf28329d2020-02-15 11:00:10 -0800523func GatherRequiredFilesForTest(fs map[string][]byte) {
Colin Crossf28329d2020-02-15 11:00:10 -0800524}
525
Paul Duffin02a3d652021-02-24 18:51:54 +0000526// The directory in which cc linux bionic default modules will be defined.
527//
528// Placing them here ensures that their location does not conflict with default test modules
529// defined by other packages.
530const linuxBionicDefaultsPath = "defaults/cc/linux-bionic/Android.bp"
531
532// The directory in which the default cc common test modules will be defined.
533//
534// Placing them here ensures that their location does not conflict with default test modules
535// defined by other packages.
536const DefaultCcCommonTestModulesDir = "defaults/cc/common/"
537
538// Test fixture preparer that will register most cc build components.
539//
540// Singletons and mutators should only be added here if they are needed for a majority of cc
541// module types, otherwise they should be added under a separate preparer to allow them to be
542// selected only when needed to reduce test execution time.
543//
544// Module types do not have much of an overhead unless they are used so this should include as many
545// module types as possible. The exceptions are those module types that require mutators and/or
546// singletons in order to function in which case they should be kept together in a separate
547// preparer.
548var PrepareForTestWithCcBuildComponents = android.GroupFixturePreparers(
549 android.PrepareForTestWithAndroidBuildComponents,
550 android.FixtureRegisterWithContext(RegisterRequiredBuildComponentsForTest),
551 android.FixtureRegisterWithContext(func(ctx android.RegistrationContext) {
Cory Barkera1da26f2022-06-07 20:12:06 +0000552 ctx.RegisterModuleType("cc_fuzz", LibFuzzFactory)
Paul Duffin02a3d652021-02-24 18:51:54 +0000553 ctx.RegisterModuleType("cc_test", TestFactory)
554 ctx.RegisterModuleType("cc_test_library", TestLibraryFactory)
Paul Duffin02a3d652021-02-24 18:51:54 +0000555 ctx.RegisterModuleType("vndk_prebuilt_shared", VndkPrebuiltSharedFactory)
556
557 RegisterVndkLibraryTxtTypes(ctx)
Kiyoung Kim973cb6f2024-04-29 14:14:53 +0900558 RegisterLlndkLibraryTxtType(ctx)
Paul Duffin02a3d652021-02-24 18:51:54 +0000559 }),
Paul Duffindb462dd2021-03-21 22:01:55 +0000560
561 // Additional files needed in tests that disallow non-existent source files.
562 // This includes files that are needed by all, or at least most, instances of a cc module type.
563 android.MockFS{
564 // Needed for ndk_prebuilt_(shared|static)_stl.
Spandan Das6e332d22023-09-13 17:58:52 +0000565 "defaults/cc/common/current/sources/cxx-stl/llvm-libc++/libs": nil,
Paul Duffindb462dd2021-03-21 22:01:55 +0000566 }.AddToFixture(),
Paul Duffin02a3d652021-02-24 18:51:54 +0000567)
568
569// Preparer that will define default cc modules, e.g. standard prebuilt modules.
570var PrepareForTestWithCcDefaultModules = android.GroupFixturePreparers(
571 PrepareForTestWithCcBuildComponents,
Paul Duffindb462dd2021-03-21 22:01:55 +0000572
573 // Additional files needed in tests that disallow non-existent source.
574 android.MockFS{
Kiyoung Kim973cb6f2024-04-29 14:14:53 +0900575 "defaults/cc/common/libc.map.txt": nil,
576 "defaults/cc/common/libdl.map.txt": nil,
577 "defaults/cc/common/libft2.map.txt": nil,
578 "defaults/cc/common/libm.map.txt": nil,
579 "defaults/cc/common/ndk_libc++_shared": nil,
580 "defaults/cc/common/crtbegin_so.c": nil,
581 "defaults/cc/common/crtbegin.c": nil,
582 "defaults/cc/common/crtend_so.c": nil,
583 "defaults/cc/common/crtend.c": nil,
584 "defaults/cc/common/crtbrand.c": nil,
585 "external/compiler-rt/lib/cfi/cfi_blocklist.txt": nil,
Colin Cross3e5e7782022-06-17 22:17:05 +0000586
587 "defaults/cc/common/libclang_rt.ubsan_minimal.android_arm64.a": nil,
588 "defaults/cc/common/libclang_rt.ubsan_minimal.android_arm.a": nil,
589 "defaults/cc/common/libclang_rt.ubsan_minimal.x86_64.a": nil,
590 "defaults/cc/common/libclang_rt.ubsan_minimal.x86.a": nil,
Paul Duffindb462dd2021-03-21 22:01:55 +0000591 }.AddToFixture(),
592
Paul Duffin02a3d652021-02-24 18:51:54 +0000593 // Place the default cc test modules that are common to all platforms in a location that will not
594 // conflict with default test modules defined by other packages.
595 android.FixtureAddTextFile(DefaultCcCommonTestModulesDir+"Android.bp", commonDefaultModules()),
596 // Disable linux bionic by default.
597 android.FixtureAddTextFile(linuxBionicDefaultsPath, withoutLinuxBionic()),
598)
599
600// Prepare a fixture to use all cc module types, mutators and singletons fully.
601//
602// This should only be used by tests that want to run with as much of the build enabled as possible.
603var PrepareForIntegrationTestWithCc = android.GroupFixturePreparers(
604 android.PrepareForIntegrationTestWithAndroid,
605 genrule.PrepareForIntegrationTestWithGenrule,
606 PrepareForTestWithCcDefaultModules,
607)
608
609// The preparer to include if running a cc related test for windows.
610var PrepareForTestOnWindows = android.GroupFixturePreparers(
611 // Place the default cc test modules for windows platforms in a location that will not conflict
612 // with default test modules defined by other packages.
613 android.FixtureAddTextFile("defaults/cc/windows/Android.bp", withWindowsModules()),
614)
615
616// The preparer to include if running a cc related test for linux bionic.
617var PrepareForTestOnLinuxBionic = android.GroupFixturePreparers(
Paul Duffin6e9a4002021-03-11 19:01:26 +0000618 // Enable linux bionic
619 //
620 // Can be used after PrepareForTestWithCcDefaultModules to override its default behavior of
621 // disabling linux bionic, hence why this uses FixtureOverrideTextFile.
622 android.FixtureOverrideTextFile(linuxBionicDefaultsPath, withLinuxBionic()),
Paul Duffin02a3d652021-02-24 18:51:54 +0000623)
624
Colin Cross5dc62c92023-02-15 12:20:19 -0800625// PrepareForTestWithHostMusl sets the host configuration to musl libc instead of glibc. It also disables the test
626// on mac, which doesn't support musl libc, and adds musl modules.
627var PrepareForTestWithHostMusl = android.GroupFixturePreparers(
628 android.FixtureModifyConfig(android.ModifyTestConfigForMusl),
629 android.PrepareForSkipTestOnMac,
630 android.FixtureAddTextFile("external/musl/Android.bp", `
631 cc_defaults {
632 name: "libc_musl_crt_defaults",
633 host_supported: true,
634 device_supported: false,
635 }
636
637 cc_object {
638 name: "libc_musl_crtbegin_so",
639 defaults: ["libc_musl_crt_defaults"],
640 }
641
642 cc_object {
643 name: "libc_musl_crtend_so",
644 defaults: ["libc_musl_crt_defaults"],
645 }
646
647 cc_object {
648 name: "libc_musl_crtbegin_dynamic",
649 defaults: ["libc_musl_crt_defaults"],
650 }
651
652 cc_object {
653 name: "libc_musl_crtbegin_static",
654 defaults: ["libc_musl_crt_defaults"],
655 }
656
657 cc_object {
658 name: "libc_musl_crtend",
659 defaults: ["libc_musl_crt_defaults"],
660 }
661 `),
662)
663
Vinh Trancde10162023-03-09 22:07:19 -0500664// PrepareForTestWithFdoProfile registers module types to test with fdo_profile
665var PrepareForTestWithFdoProfile = android.FixtureRegisterWithContext(func(ctx android.RegistrationContext) {
666 ctx.RegisterModuleType("soong_namespace", android.NamespaceFactory)
Vinh Trance40b922023-06-05 12:57:55 -0400667 ctx.RegisterModuleType("fdo_profile", FdoProfileFactory)
Vinh Trancde10162023-03-09 22:07:19 -0500668})
669
Paul Duffin02a3d652021-02-24 18:51:54 +0000670// TestConfig is the legacy way of creating a test Config for testing cc modules.
671//
672// See testCc for an explanation as to how to stop using this deprecated method.
673//
674// deprecated
Colin Cross98be1bb2019-12-13 20:41:13 -0800675func TestConfig(buildDir string, os android.OsType, env map[string]string,
676 bp string, fs map[string][]byte) android.Config {
Colin Cross9a942872019-05-14 15:44:26 -0700677
Colin Cross98be1bb2019-12-13 20:41:13 -0800678 // add some modules that are required by the compiler and/or linker
679 bp = bp + GatherRequiredDepsForTest(os)
680
Colin Cross2fce23a2020-06-07 17:02:48 -0700681 mockFS := map[string][]byte{}
Colin Cross98be1bb2019-12-13 20:41:13 -0800682
Colin Crossf28329d2020-02-15 11:00:10 -0800683 GatherRequiredFilesForTest(mockFS)
684
Colin Cross98be1bb2019-12-13 20:41:13 -0800685 for k, v := range fs {
686 mockFS[k] = v
687 }
688
Colin Crosscb0ac952021-07-20 13:17:15 -0700689 return android.TestArchConfig(buildDir, env, bp, mockFS)
Colin Cross98be1bb2019-12-13 20:41:13 -0800690}
691
Paul Duffin02a3d652021-02-24 18:51:54 +0000692// CreateTestContext is the legacy way of creating a TestContext for testing cc modules.
693//
694// See testCc for an explanation as to how to stop using this deprecated method.
695//
696// deprecated
Colin Crossae8600b2020-10-29 17:09:13 -0700697func CreateTestContext(config android.Config) *android.TestContext {
698 ctx := android.NewTestArchContext(config)
Paul Duffind6ceb862021-03-04 23:02:31 +0000699 genrule.RegisterGenruleBuildComponents(ctx)
Cory Barkera1da26f2022-06-07 20:12:06 +0000700 ctx.RegisterModuleType("cc_fuzz", LibFuzzFactory)
Colin Cross4b49b762019-11-22 15:25:03 -0800701 ctx.RegisterModuleType("cc_test", TestFactory)
Chris Parsons79d66a52020-06-05 17:26:16 -0400702 ctx.RegisterModuleType("cc_test_library", TestLibraryFactory)
Colin Cross4b49b762019-11-22 15:25:03 -0800703 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
704 ctx.RegisterModuleType("vndk_prebuilt_shared", VndkPrebuiltSharedFactory)
Paul Duffin02a3d652021-02-24 18:51:54 +0000705
Colin Crosse4e44bc2020-12-28 13:50:21 -0800706 RegisterVndkLibraryTxtTypes(ctx)
Kiyoung Kim973cb6f2024-04-29 14:14:53 +0900707 RegisterLlndkLibraryTxtType(ctx)
Paul Duffin02a3d652021-02-24 18:51:54 +0000708
Colin Crosse1bb5d02019-09-24 14:55:04 -0700709 ctx.PreArchMutators(android.RegisterDefaultsPreArchMutators)
Paul Duffin021f4e52020-07-30 16:04:17 +0100710 android.RegisterPrebuiltMutators(ctx)
Paul Duffinc988c8e2020-04-29 18:27:14 +0100711 RegisterRequiredBuildComponentsForTest(ctx)
Colin Cross9a942872019-05-14 15:44:26 -0700712
Colin Cross9a942872019-05-14 15:44:26 -0700713 return ctx
714}
Ivan Lozanod67a6b02021-05-20 13:01:32 -0400715
716func checkSnapshotIncludeExclude(t *testing.T, ctx *android.TestContext, singleton android.TestingSingleton, moduleName, snapshotFilename, subDir, variant string, include bool, fake bool) {
717 t.Helper()
718 mod := ctx.ModuleForTests(moduleName, variant)
719 outputFiles := mod.OutputFiles(t, "")
720 if len(outputFiles) != 1 {
721 t.Errorf("%q must have single output\n", moduleName)
722 return
723 }
724 snapshotPath := filepath.Join(subDir, snapshotFilename)
725
726 if include {
727 out := singleton.Output(snapshotPath)
728 if fake {
729 if out.Rule == nil {
730 t.Errorf("Missing rule for module %q output file %q", moduleName, outputFiles[0])
731 }
732 } else {
733 if out.Input.String() != outputFiles[0].String() {
734 t.Errorf("The input of snapshot %q must be %q, but %q", moduleName, out.Input.String(), outputFiles[0])
735 }
736 }
737 } else {
738 out := singleton.MaybeOutput(snapshotPath)
739 if out.Rule != nil {
740 t.Errorf("There must be no rule for module %q output file %q", moduleName, outputFiles[0])
741 }
742 }
743}
744
745func CheckSnapshot(t *testing.T, ctx *android.TestContext, singleton android.TestingSingleton, moduleName, snapshotFilename, subDir, variant string) {
746 t.Helper()
747 checkSnapshotIncludeExclude(t, ctx, singleton, moduleName, snapshotFilename, subDir, variant, true, false)
748}
749
750func CheckSnapshotExclude(t *testing.T, ctx *android.TestContext, singleton android.TestingSingleton, moduleName, snapshotFilename, subDir, variant string) {
751 t.Helper()
752 checkSnapshotIncludeExclude(t, ctx, singleton, moduleName, snapshotFilename, subDir, variant, false, false)
753}
754
755func CheckSnapshotRule(t *testing.T, ctx *android.TestContext, singleton android.TestingSingleton, moduleName, snapshotFilename, subDir, variant string) {
756 t.Helper()
757 checkSnapshotIncludeExclude(t, ctx, singleton, moduleName, snapshotFilename, subDir, variant, true, true)
758}
759
Ivan Lozanod67a6b02021-05-20 13:01:32 -0400760func GetOutputPaths(ctx *android.TestContext, variant string, moduleNames []string) (paths android.Paths) {
761 for _, moduleName := range moduleNames {
762 module := ctx.ModuleForTests(moduleName, variant).Module().(*Module)
763 output := module.outputFile.Path().RelativeToTop()
764 paths = append(paths, output)
765 }
766 return paths
767}