blob: 6a002c05a5d11983d4a3ccd50f969dc2b6760c21 [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
33 ctx.RegisterModuleType("toolchain_library", ToolchainLibraryFactory)
Jiyong Park46a512f2020-12-04 18:02:13 +090034 ctx.RegisterModuleType("cc_benchmark", BenchmarkFactory)
Paul Duffin6c26dc72019-12-19 15:02:40 +000035 ctx.RegisterModuleType("cc_object", ObjectFactory)
Martin Stjernholm7feceb22020-07-11 04:33:29 +010036 ctx.RegisterModuleType("cc_genrule", genRuleFactory)
Colin Crossf28329d2020-02-15 11:00:10 -080037 ctx.RegisterModuleType("ndk_prebuilt_shared_stl", NdkPrebuiltSharedStlFactory)
Colin Crossae628182021-06-14 16:52:28 -070038 ctx.RegisterModuleType("ndk_prebuilt_static_stl", NdkPrebuiltStaticStlFactory)
Colin Crossf28329d2020-02-15 11:00:10 -080039 ctx.RegisterModuleType("ndk_prebuilt_object", NdkPrebuiltObjectFactory)
Dan Albertde5aade2020-06-30 12:32:51 -070040 ctx.RegisterModuleType("ndk_library", NdkLibraryFactory)
Paul Duffin77980a82019-12-19 16:01:36 +000041}
42
Paul Duffina04c1072020-03-02 10:16:35 +000043func GatherRequiredDepsForTest(oses ...android.OsType) string {
Paul Duffin02a3d652021-02-24 18:51:54 +000044 ret := commonDefaultModules()
45
46 supportLinuxBionic := false
47 for _, os := range oses {
48 if os == android.Fuchsia {
49 ret += withFuchsiaModules()
50 }
51 if os == android.Windows {
52 ret += withWindowsModules()
53 }
54 if os == android.LinuxBionic {
55 supportLinuxBionic = true
56 ret += withLinuxBionic()
57 }
58 }
59
60 if !supportLinuxBionic {
61 ret += withoutLinuxBionic()
62 }
63
64 return ret
65}
66
67func commonDefaultModules() string {
68 return `
Inseob Kimc0907f12019-02-08 21:00:45 +090069 toolchain_library {
Inseob Kimc0907f12019-02-08 21:00:45 +090070 name: "libcompiler_rt-extras",
71 vendor_available: true,
Ivan Lozanoe6d30982021-02-05 10:57:43 -050072 vendor_ramdisk_available: true,
Justin Yun63e9ec72020-10-29 16:49:43 +090073 product_available: true,
Inseob Kimc0907f12019-02-08 21:00:45 +090074 recovery_available: true,
75 src: "",
76 }
77
78 toolchain_library {
79 name: "libclang_rt.builtins-arm-android",
80 vendor_available: true,
Ivan Lozanoe6d30982021-02-05 10:57:43 -050081 vendor_ramdisk_available: true,
Justin Yun63e9ec72020-10-29 16:49:43 +090082 product_available: true,
Inseob Kimc0907f12019-02-08 21:00:45 +090083 recovery_available: true,
Colin Crossf9aabd72020-02-15 11:29:50 -080084 native_bridge_supported: true,
Inseob Kimc0907f12019-02-08 21:00:45 +090085 src: "",
86 }
87
88 toolchain_library {
89 name: "libclang_rt.builtins-aarch64-android",
90 vendor_available: true,
Ivan Lozanoe6d30982021-02-05 10:57:43 -050091 vendor_ramdisk_available: true,
Justin Yun63e9ec72020-10-29 16:49:43 +090092 product_available: true,
Inseob Kimc0907f12019-02-08 21:00:45 +090093 recovery_available: true,
Colin Crossf9aabd72020-02-15 11:29:50 -080094 native_bridge_supported: true,
Inseob Kimc0907f12019-02-08 21:00:45 +090095 src: "",
96 }
97
Jooyung Han75568392020-03-20 04:29:24 +090098 cc_prebuilt_library_shared {
99 name: "libclang_rt.hwasan-aarch64-android",
100 nocrt: true,
101 vendor_available: true,
Justin Yun63e9ec72020-10-29 16:49:43 +0900102 product_available: true,
Jooyung Han75568392020-03-20 04:29:24 +0900103 recovery_available: true,
104 system_shared_libs: [],
105 stl: "none",
106 srcs: [""],
107 check_elf_files: false,
108 sanitize: {
109 never: true,
110 },
111 }
112
Inseob Kimc0907f12019-02-08 21:00:45 +0900113 toolchain_library {
114 name: "libclang_rt.builtins-i686-android",
115 vendor_available: true,
Ivan Lozanoe6d30982021-02-05 10:57:43 -0500116 vendor_ramdisk_available: true,
Justin Yun63e9ec72020-10-29 16:49:43 +0900117 product_available: true,
Inseob Kimc0907f12019-02-08 21:00:45 +0900118 recovery_available: true,
Colin Crossf9aabd72020-02-15 11:29:50 -0800119 native_bridge_supported: true,
Inseob Kimc0907f12019-02-08 21:00:45 +0900120 src: "",
121 }
122
123 toolchain_library {
124 name: "libclang_rt.builtins-x86_64-android",
Martin Stjernholm7feceb22020-07-11 04:33:29 +0100125 defaults: ["linux_bionic_supported"],
Inseob Kimc0907f12019-02-08 21:00:45 +0900126 vendor_available: true,
Ivan Lozanoe6d30982021-02-05 10:57:43 -0500127 vendor_ramdisk_available: true,
Justin Yun63e9ec72020-10-29 16:49:43 +0900128 product_available: true,
Inseob Kimc0907f12019-02-08 21:00:45 +0900129 recovery_available: true,
Colin Crossf9aabd72020-02-15 11:29:50 -0800130 native_bridge_supported: true,
Inseob Kimc0907f12019-02-08 21:00:45 +0900131 src: "",
132 }
133
134 toolchain_library {
Ryan Prichardb35a85e2021-01-13 19:18:53 -0800135 name: "libunwind",
136 defaults: ["linux_bionic_supported"],
137 vendor_available: true,
Ivan Lozanoe6d30982021-02-05 10:57:43 -0500138 vendor_ramdisk_available: true,
Ryan Prichardb35a85e2021-01-13 19:18:53 -0800139 product_available: true,
140 recovery_available: true,
141 native_bridge_supported: true,
142 src: "",
143 }
144
145 toolchain_library {
Mitch Phillipsda9a4632019-07-15 09:34:09 -0700146 name: "libclang_rt.fuzzer-arm-android",
147 vendor_available: true,
Justin Yun63e9ec72020-10-29 16:49:43 +0900148 product_available: true,
Mitch Phillipsda9a4632019-07-15 09:34:09 -0700149 recovery_available: true,
150 src: "",
151 }
152
153 toolchain_library {
154 name: "libclang_rt.fuzzer-aarch64-android",
155 vendor_available: true,
Justin Yun63e9ec72020-10-29 16:49:43 +0900156 product_available: true,
Mitch Phillipsda9a4632019-07-15 09:34:09 -0700157 recovery_available: true,
158 src: "",
159 }
160
161 toolchain_library {
162 name: "libclang_rt.fuzzer-i686-android",
163 vendor_available: true,
Justin Yun63e9ec72020-10-29 16:49:43 +0900164 product_available: true,
Mitch Phillipsda9a4632019-07-15 09:34:09 -0700165 recovery_available: true,
166 src: "",
167 }
168
169 toolchain_library {
170 name: "libclang_rt.fuzzer-x86_64-android",
Martin Stjernholm7feceb22020-07-11 04:33:29 +0100171 defaults: ["linux_bionic_supported"],
Mitch Phillipsda9a4632019-07-15 09:34:09 -0700172 vendor_available: true,
Justin Yun63e9ec72020-10-29 16:49:43 +0900173 product_available: true,
Mitch Phillipsda9a4632019-07-15 09:34:09 -0700174 recovery_available: true,
175 src: "",
176 }
177
178 toolchain_library {
179 name: "libclang_rt.fuzzer-x86_64",
180 vendor_available: true,
Justin Yun63e9ec72020-10-29 16:49:43 +0900181 product_available: true,
Mitch Phillipsda9a4632019-07-15 09:34:09 -0700182 recovery_available: true,
183 src: "",
184 }
185
Paul Duffind6867912019-12-19 14:38:36 +0000186 // Needed for sanitizer
187 cc_prebuilt_library_shared {
188 name: "libclang_rt.ubsan_standalone-aarch64-android",
189 vendor_available: true,
Justin Yun63e9ec72020-10-29 16:49:43 +0900190 product_available: true,
Paul Duffind6867912019-12-19 14:38:36 +0000191 recovery_available: true,
Colin Crossf9aabd72020-02-15 11:29:50 -0800192 system_shared_libs: [],
Paul Duffind6867912019-12-19 14:38:36 +0000193 srcs: [""],
194 }
195
Inseob Kimc0907f12019-02-08 21:00:45 +0900196 cc_library {
Inseob Kimc0907f12019-02-08 21:00:45 +0900197 name: "libc",
Martin Stjernholm7feceb22020-07-11 04:33:29 +0100198 defaults: ["linux_bionic_supported"],
Yi Konge7fe9912019-06-02 00:53:50 -0700199 no_libcrt: true,
Inseob Kimc0907f12019-02-08 21:00:45 +0900200 nocrt: true,
Peter Collingbournee5ba2862019-12-10 18:37:45 -0800201 stl: "none",
Inseob Kimc0907f12019-02-08 21:00:45 +0900202 system_shared_libs: [],
203 recovery_available: true,
Colin Crossf9aabd72020-02-15 11:29:50 -0800204 stubs: {
205 versions: ["27", "28", "29"],
206 },
Colin Cross203b4212021-04-26 17:19:41 -0700207 llndk: {
208 symbol_file: "libc.map.txt",
209 },
Inseob Kimc0907f12019-02-08 21:00:45 +0900210 }
211 cc_library {
212 name: "libm",
Martin Stjernholm7feceb22020-07-11 04:33:29 +0100213 defaults: ["linux_bionic_supported"],
Yi Konge7fe9912019-06-02 00:53:50 -0700214 no_libcrt: true,
Inseob Kimc0907f12019-02-08 21:00:45 +0900215 nocrt: true,
Peter Collingbournee5ba2862019-12-10 18:37:45 -0800216 stl: "none",
Inseob Kimc0907f12019-02-08 21:00:45 +0900217 system_shared_libs: [],
218 recovery_available: true,
Colin Crossf9aabd72020-02-15 11:29:50 -0800219 stubs: {
220 versions: ["27", "28", "29"],
221 },
222 apex_available: [
223 "//apex_available:platform",
224 "myapex"
225 ],
Colin Cross203b4212021-04-26 17:19:41 -0700226 llndk: {
227 symbol_file: "libm.map.txt",
228 },
Inseob Kimc0907f12019-02-08 21:00:45 +0900229 }
Ivan Lozanoa0cd8f92020-04-09 09:56:02 -0400230
231 // Coverage libraries
232 cc_library {
233 name: "libprofile-extras",
234 vendor_available: true,
Ivan Lozanoe6d30982021-02-05 10:57:43 -0500235 vendor_ramdisk_available: true,
Justin Yun63e9ec72020-10-29 16:49:43 +0900236 product_available: true,
Ivan Lozanoa0cd8f92020-04-09 09:56:02 -0400237 recovery_available: true,
238 native_coverage: false,
239 system_shared_libs: [],
240 stl: "none",
241 notice: "custom_notice",
242 }
243 cc_library {
244 name: "libprofile-clang-extras",
245 vendor_available: true,
Ivan Lozanoe6d30982021-02-05 10:57:43 -0500246 vendor_ramdisk_available: true,
Justin Yun63e9ec72020-10-29 16:49:43 +0900247 product_available: true,
Ivan Lozanoa0cd8f92020-04-09 09:56:02 -0400248 recovery_available: true,
249 native_coverage: false,
250 system_shared_libs: [],
251 stl: "none",
252 notice: "custom_notice",
253 }
254 cc_library {
255 name: "libprofile-extras_ndk",
256 vendor_available: true,
Justin Yun63e9ec72020-10-29 16:49:43 +0900257 product_available: true,
Ivan Lozanoa0cd8f92020-04-09 09:56:02 -0400258 native_coverage: false,
259 system_shared_libs: [],
260 stl: "none",
261 notice: "custom_notice",
262 sdk_version: "current",
263 }
264 cc_library {
265 name: "libprofile-clang-extras_ndk",
266 vendor_available: true,
Justin Yun63e9ec72020-10-29 16:49:43 +0900267 product_available: true,
Ivan Lozanoa0cd8f92020-04-09 09:56:02 -0400268 native_coverage: false,
269 system_shared_libs: [],
270 stl: "none",
271 notice: "custom_notice",
272 sdk_version: "current",
273 }
274
Inseob Kimc0907f12019-02-08 21:00:45 +0900275 cc_library {
276 name: "libdl",
Martin Stjernholm7feceb22020-07-11 04:33:29 +0100277 defaults: ["linux_bionic_supported"],
Yi Konge7fe9912019-06-02 00:53:50 -0700278 no_libcrt: true,
Inseob Kimc0907f12019-02-08 21:00:45 +0900279 nocrt: true,
Peter Collingbournee5ba2862019-12-10 18:37:45 -0800280 stl: "none",
Inseob Kimc0907f12019-02-08 21:00:45 +0900281 system_shared_libs: [],
282 recovery_available: true,
Colin Crossf9aabd72020-02-15 11:29:50 -0800283 stubs: {
284 versions: ["27", "28", "29"],
285 },
286 apex_available: [
287 "//apex_available:platform",
288 "myapex"
289 ],
Colin Cross203b4212021-04-26 17:19:41 -0700290 llndk: {
291 symbol_file: "libdl.map.txt",
292 },
Inseob Kimc0907f12019-02-08 21:00:45 +0900293 }
294 cc_library {
Jooyung Han097087b2019-10-22 19:32:18 +0900295 name: "libft2",
296 no_libcrt: true,
297 nocrt: true,
298 system_shared_libs: [],
299 recovery_available: true,
Colin Cross203b4212021-04-26 17:19:41 -0700300 llndk: {
301 symbol_file: "libft2.map.txt",
302 private: true,
303 }
Jooyung Han097087b2019-10-22 19:32:18 +0900304 }
305 cc_library {
Inseob Kimc0907f12019-02-08 21:00:45 +0900306 name: "libc++_static",
Yi Konge7fe9912019-06-02 00:53:50 -0700307 no_libcrt: true,
Inseob Kimc0907f12019-02-08 21:00:45 +0900308 nocrt: true,
309 system_shared_libs: [],
310 stl: "none",
311 vendor_available: true,
Ivan Lozanoe6d30982021-02-05 10:57:43 -0500312 vendor_ramdisk_available: true,
Justin Yun63e9ec72020-10-29 16:49:43 +0900313 product_available: true,
Inseob Kimc0907f12019-02-08 21:00:45 +0900314 recovery_available: true,
Inseob Kim89db15d2020-02-03 18:06:46 +0900315 host_supported: true,
Jooyung Han749dc692020-04-15 11:03:39 +0900316 min_sdk_version: "29",
Jiyong Park541142c2020-03-07 16:35:46 +0900317 apex_available: [
318 "//apex_available:platform",
319 "//apex_available:anyapex",
320 ],
Inseob Kimc0907f12019-02-08 21:00:45 +0900321 }
322 cc_library {
323 name: "libc++",
Yi Konge7fe9912019-06-02 00:53:50 -0700324 no_libcrt: true,
Inseob Kimc0907f12019-02-08 21:00:45 +0900325 nocrt: true,
326 system_shared_libs: [],
327 stl: "none",
328 vendor_available: true,
Justin Yun63e9ec72020-10-29 16:49:43 +0900329 product_available: true,
Inseob Kimc0907f12019-02-08 21:00:45 +0900330 recovery_available: true,
Inseob Kim89db15d2020-02-03 18:06:46 +0900331 host_supported: true,
Jooyung Han749dc692020-04-15 11:03:39 +0900332 min_sdk_version: "29",
Inseob Kimc0907f12019-02-08 21:00:45 +0900333 vndk: {
334 enabled: true,
335 support_system_process: true,
336 },
Colin Crossf9aabd72020-02-15 11:29:50 -0800337 apex_available: [
338 "//apex_available:platform",
Ivan Lozano3e9f9e42020-12-04 15:05:43 -0500339 "//apex_available:anyapex",
Colin Crossf9aabd72020-02-15 11:29:50 -0800340 ],
Inseob Kimc0907f12019-02-08 21:00:45 +0900341 }
342 cc_library {
Dan Albert2da19cb2019-07-24 12:17:40 -0700343 name: "libc++demangle",
344 no_libcrt: true,
345 nocrt: true,
346 system_shared_libs: [],
347 stl: "none",
348 host_supported: false,
349 vendor_available: true,
Ivan Lozanoe6d30982021-02-05 10:57:43 -0500350 vendor_ramdisk_available: true,
Justin Yun63e9ec72020-10-29 16:49:43 +0900351 product_available: true,
Dan Albert2da19cb2019-07-24 12:17:40 -0700352 recovery_available: true,
Jooyung Han749dc692020-04-15 11:03:39 +0900353 min_sdk_version: "29",
Jiyong Park541142c2020-03-07 16:35:46 +0900354 apex_available: [
355 "//apex_available:platform",
356 "//apex_available:anyapex",
357 ],
Dan Albert2da19cb2019-07-24 12:17:40 -0700358 }
Inseob Kimc0907f12019-02-08 21:00:45 +0900359
Jiyong Park541142c2020-03-07 16:35:46 +0900360 cc_defaults {
361 name: "crt_defaults",
Martin Stjernholm7feceb22020-07-11 04:33:29 +0100362 defaults: ["linux_bionic_supported"],
Jiyong Park541142c2020-03-07 16:35:46 +0900363 recovery_available: true,
364 vendor_available: true,
Ivan Lozanoe6d30982021-02-05 10:57:43 -0500365 vendor_ramdisk_available: true,
Justin Yun63e9ec72020-10-29 16:49:43 +0900366 product_available: true,
Jiyong Park541142c2020-03-07 16:35:46 +0900367 native_bridge_supported: true,
368 stl: "none",
Dan Albert92fe7402020-07-15 13:33:30 -0700369 min_sdk_version: "16",
370 crt: true,
Colin Cross137d7da2021-06-21 16:41:29 -0700371 default_shared_libs: [],
Jiyong Park541142c2020-03-07 16:35:46 +0900372 apex_available: [
373 "//apex_available:platform",
374 "//apex_available:anyapex",
375 ],
376 }
377
Inseob Kimc0907f12019-02-08 21:00:45 +0900378 cc_object {
379 name: "crtbegin_so",
Jiyong Park541142c2020-03-07 16:35:46 +0900380 defaults: ["crt_defaults"],
Inseob Kimc0907f12019-02-08 21:00:45 +0900381 }
382
383 cc_object {
Colin Cross815daf92019-05-14 16:05:20 -0700384 name: "crtbegin_dynamic",
Jiyong Park541142c2020-03-07 16:35:46 +0900385 defaults: ["crt_defaults"],
Colin Cross815daf92019-05-14 16:05:20 -0700386 }
387
388 cc_object {
Inseob Kimc0907f12019-02-08 21:00:45 +0900389 name: "crtbegin_static",
Jiyong Park541142c2020-03-07 16:35:46 +0900390 defaults: ["crt_defaults"],
Inseob Kimc0907f12019-02-08 21:00:45 +0900391 }
392
393 cc_object {
394 name: "crtend_so",
Jiyong Park541142c2020-03-07 16:35:46 +0900395 defaults: ["crt_defaults"],
Inseob Kimc0907f12019-02-08 21:00:45 +0900396 }
397
398 cc_object {
399 name: "crtend_android",
Jiyong Park541142c2020-03-07 16:35:46 +0900400 defaults: ["crt_defaults"],
Inseob Kimc0907f12019-02-08 21:00:45 +0900401 }
402
403 cc_library {
404 name: "libprotobuf-cpp-lite",
405 }
Colin Crossf28329d2020-02-15 11:00:10 -0800406
407 cc_library {
408 name: "ndk_libunwind",
Colin Crossae628182021-06-14 16:52:28 -0700409 sdk_version: "minimum",
Colin Crossf28329d2020-02-15 11:00:10 -0800410 stl: "none",
411 system_shared_libs: [],
412 }
413
Dan Albertde5aade2020-06-30 12:32:51 -0700414 ndk_library {
415 name: "libc",
416 first_version: "minimum",
417 symbol_file: "libc.map.txt",
Colin Crossf28329d2020-02-15 11:00:10 -0800418 }
419
Dan Albertde5aade2020-06-30 12:32:51 -0700420 ndk_library {
421 name: "libm",
422 first_version: "minimum",
423 symbol_file: "libm.map.txt",
Colin Crossf28329d2020-02-15 11:00:10 -0800424 }
425
Dan Albertde5aade2020-06-30 12:32:51 -0700426 ndk_library {
427 name: "libdl",
428 first_version: "minimum",
429 symbol_file: "libdl.map.txt",
Colin Crossf28329d2020-02-15 11:00:10 -0800430 }
431
Colin Crossf28329d2020-02-15 11:00:10 -0800432 ndk_prebuilt_shared_stl {
433 name: "ndk_libc++_shared",
Colin Crossae628182021-06-14 16:52:28 -0700434 export_include_dirs: ["ndk_libc++_shared"],
435 }
436
437 ndk_prebuilt_static_stl {
438 name: "ndk_libandroid_support",
439 export_include_dirs: ["ndk_libandroid_support"],
Colin Crossf28329d2020-02-15 11:00:10 -0800440 }
Jiyong Park46a512f2020-12-04 18:02:13 +0900441
442 cc_library_static {
443 name: "libgoogle-benchmark",
444 sdk_version: "current",
445 stl: "none",
446 system_shared_libs: [],
447 }
Evgenii Stepanov193ac2e2020-04-28 15:09:12 -0700448
449 cc_library_static {
450 name: "note_memtag_heap_async",
451 }
452
453 cc_library_static {
454 name: "note_memtag_heap_sync",
455 }
Colin Crossf28329d2020-02-15 11:00:10 -0800456 `
Paul Duffin02a3d652021-02-24 18:51:54 +0000457}
Colin Crossf28329d2020-02-15 11:00:10 -0800458
Paul Duffin02a3d652021-02-24 18:51:54 +0000459func withWindowsModules() string {
460 return `
Paul Duffina04c1072020-03-02 10:16:35 +0000461 toolchain_library {
462 name: "libwinpthread",
463 host_supported: true,
464 enabled: false,
465 target: {
466 windows: {
467 enabled: true,
468 },
469 },
470 src: "",
471 }
472 `
Paul Duffin02a3d652021-02-24 18:51:54 +0000473}
474
475func withFuchsiaModules() string {
476 return `
477 cc_library {
478 name: "libbioniccompat",
479 stl: "none",
Paul Duffina04c1072020-03-02 10:16:35 +0000480 }
Paul Duffin02a3d652021-02-24 18:51:54 +0000481 cc_library {
482 name: "libcompiler_rt",
483 stl: "none",
484 }
485 `
486}
487
488func withLinuxBionic() string {
489 return `
Martin Stjernholm7feceb22020-07-11 04:33:29 +0100490 cc_binary {
491 name: "linker",
492 defaults: ["linux_bionic_supported"],
493 recovery_available: true,
494 stl: "none",
495 nocrt: true,
496 static_executable: true,
497 native_coverage: false,
498 system_shared_libs: [],
499 }
500
501 cc_genrule {
Colin Cross9cfe6112021-06-11 18:02:22 -0700502 name: "host_bionic_linker_script",
Martin Stjernholm7feceb22020-07-11 04:33:29 +0100503 host_supported: true,
504 device_supported: false,
505 target: {
506 host: {
507 enabled: false,
508 },
509 linux_bionic: {
510 enabled: true,
511 },
512 },
Colin Cross9cfe6112021-06-11 18:02:22 -0700513 out: ["linker.script"],
Martin Stjernholm7feceb22020-07-11 04:33:29 +0100514 }
515
516 cc_defaults {
517 name: "linux_bionic_supported",
518 host_supported: true,
519 target: {
520 host: {
521 enabled: false,
522 },
523 linux_bionic: {
524 enabled: true,
525 },
526 },
527 }
528 `
Paul Duffin02a3d652021-02-24 18:51:54 +0000529}
Martin Stjernholm7feceb22020-07-11 04:33:29 +0100530
Paul Duffin02a3d652021-02-24 18:51:54 +0000531func withoutLinuxBionic() string {
532 return `
Martin Stjernholm7feceb22020-07-11 04:33:29 +0100533 cc_defaults {
534 name: "linux_bionic_supported",
535 }
536 `
Inseob Kimc0907f12019-02-08 21:00:45 +0900537}
Colin Cross9a942872019-05-14 15:44:26 -0700538
Colin Crossf28329d2020-02-15 11:00:10 -0800539func GatherRequiredFilesForTest(fs map[string][]byte) {
Colin Crossf28329d2020-02-15 11:00:10 -0800540}
541
Paul Duffin02a3d652021-02-24 18:51:54 +0000542// The directory in which cc linux bionic default modules will be defined.
543//
544// Placing them here ensures that their location does not conflict with default test modules
545// defined by other packages.
546const linuxBionicDefaultsPath = "defaults/cc/linux-bionic/Android.bp"
547
548// The directory in which the default cc common test modules will be defined.
549//
550// Placing them here ensures that their location does not conflict with default test modules
551// defined by other packages.
552const DefaultCcCommonTestModulesDir = "defaults/cc/common/"
553
554// Test fixture preparer that will register most cc build components.
555//
556// Singletons and mutators should only be added here if they are needed for a majority of cc
557// module types, otherwise they should be added under a separate preparer to allow them to be
558// selected only when needed to reduce test execution time.
559//
560// Module types do not have much of an overhead unless they are used so this should include as many
561// module types as possible. The exceptions are those module types that require mutators and/or
562// singletons in order to function in which case they should be kept together in a separate
563// preparer.
564var PrepareForTestWithCcBuildComponents = android.GroupFixturePreparers(
565 android.PrepareForTestWithAndroidBuildComponents,
566 android.FixtureRegisterWithContext(RegisterRequiredBuildComponentsForTest),
567 android.FixtureRegisterWithContext(func(ctx android.RegistrationContext) {
568 ctx.RegisterModuleType("cc_fuzz", FuzzFactory)
569 ctx.RegisterModuleType("cc_test", TestFactory)
570 ctx.RegisterModuleType("cc_test_library", TestLibraryFactory)
Paul Duffin02a3d652021-02-24 18:51:54 +0000571 ctx.RegisterModuleType("vndk_prebuilt_shared", VndkPrebuiltSharedFactory)
572
573 RegisterVndkLibraryTxtTypes(ctx)
574 }),
Paul Duffindb462dd2021-03-21 22:01:55 +0000575
576 // Additional files needed in tests that disallow non-existent source files.
577 // This includes files that are needed by all, or at least most, instances of a cc module type.
578 android.MockFS{
579 // Needed for ndk_prebuilt_(shared|static)_stl.
580 "prebuilts/ndk/current/sources/cxx-stl/llvm-libc++/libs": nil,
581 }.AddToFixture(),
Paul Duffin02a3d652021-02-24 18:51:54 +0000582)
583
584// Preparer that will define default cc modules, e.g. standard prebuilt modules.
585var PrepareForTestWithCcDefaultModules = android.GroupFixturePreparers(
586 PrepareForTestWithCcBuildComponents,
Paul Duffindb462dd2021-03-21 22:01:55 +0000587
588 // Additional files needed in tests that disallow non-existent source.
589 android.MockFS{
Colin Crossae628182021-06-14 16:52:28 -0700590 "defaults/cc/common/libc.map.txt": nil,
591 "defaults/cc/common/libdl.map.txt": nil,
592 "defaults/cc/common/libm.map.txt": nil,
593 "defaults/cc/common/ndk_libandroid_support": nil,
594 "defaults/cc/common/ndk_libc++_shared": nil,
Paul Duffindb462dd2021-03-21 22:01:55 +0000595 }.AddToFixture(),
596
Paul Duffin02a3d652021-02-24 18:51:54 +0000597 // Place the default cc test modules that are common to all platforms in a location that will not
598 // conflict with default test modules defined by other packages.
599 android.FixtureAddTextFile(DefaultCcCommonTestModulesDir+"Android.bp", commonDefaultModules()),
600 // Disable linux bionic by default.
601 android.FixtureAddTextFile(linuxBionicDefaultsPath, withoutLinuxBionic()),
602)
603
604// Prepare a fixture to use all cc module types, mutators and singletons fully.
605//
606// This should only be used by tests that want to run with as much of the build enabled as possible.
607var PrepareForIntegrationTestWithCc = android.GroupFixturePreparers(
608 android.PrepareForIntegrationTestWithAndroid,
609 genrule.PrepareForIntegrationTestWithGenrule,
610 PrepareForTestWithCcDefaultModules,
611)
612
613// The preparer to include if running a cc related test for windows.
614var PrepareForTestOnWindows = android.GroupFixturePreparers(
615 // Place the default cc test modules for windows platforms in a location that will not conflict
616 // with default test modules defined by other packages.
617 android.FixtureAddTextFile("defaults/cc/windows/Android.bp", withWindowsModules()),
618)
619
620// The preparer to include if running a cc related test for linux bionic.
621var PrepareForTestOnLinuxBionic = android.GroupFixturePreparers(
Paul Duffin6e9a4002021-03-11 19:01:26 +0000622 // Enable linux bionic
623 //
624 // Can be used after PrepareForTestWithCcDefaultModules to override its default behavior of
625 // disabling linux bionic, hence why this uses FixtureOverrideTextFile.
626 android.FixtureOverrideTextFile(linuxBionicDefaultsPath, withLinuxBionic()),
Paul Duffin02a3d652021-02-24 18:51:54 +0000627)
628
Paul Duffinecdac8a2021-02-24 19:18:42 +0000629// The preparer to include if running a cc related test for fuchsia.
630var PrepareForTestOnFuchsia = android.GroupFixturePreparers(
631 // Place the default cc test modules for fuschia in a location that will not conflict with default
632 // test modules defined by other packages.
633 android.FixtureAddTextFile("defaults/cc/fuschia/Android.bp", withFuchsiaModules()),
634 android.PrepareForTestSetDeviceToFuchsia,
635)
636
Paul Duffin02a3d652021-02-24 18:51:54 +0000637// This adds some additional modules and singletons which might negatively impact the performance
638// of tests so they are not included in the PrepareForIntegrationTestWithCc.
639var PrepareForTestWithCcIncludeVndk = android.GroupFixturePreparers(
640 PrepareForIntegrationTestWithCc,
641 android.FixtureRegisterWithContext(func(ctx android.RegistrationContext) {
Kiyoung Kim48f37782021-07-07 12:42:39 +0900642 snapshot.VendorSnapshotImageSingleton.Init(ctx)
643 snapshot.RecoverySnapshotImageSingleton.Init(ctx)
644 RegisterVendorSnapshotModules(ctx)
645 RegisterRecoverySnapshotModules(ctx)
Paul Duffin02a3d652021-02-24 18:51:54 +0000646 ctx.RegisterSingletonType("vndk-snapshot", VndkSnapshotSingleton)
647 }),
648)
649
650// TestConfig is the legacy way of creating a test Config for testing cc modules.
651//
652// See testCc for an explanation as to how to stop using this deprecated method.
653//
654// deprecated
Colin Cross98be1bb2019-12-13 20:41:13 -0800655func TestConfig(buildDir string, os android.OsType, env map[string]string,
656 bp string, fs map[string][]byte) android.Config {
Colin Cross9a942872019-05-14 15:44:26 -0700657
Colin Cross98be1bb2019-12-13 20:41:13 -0800658 // add some modules that are required by the compiler and/or linker
659 bp = bp + GatherRequiredDepsForTest(os)
660
Colin Cross2fce23a2020-06-07 17:02:48 -0700661 mockFS := map[string][]byte{}
Colin Cross98be1bb2019-12-13 20:41:13 -0800662
Colin Crossf28329d2020-02-15 11:00:10 -0800663 GatherRequiredFilesForTest(mockFS)
664
Colin Cross98be1bb2019-12-13 20:41:13 -0800665 for k, v := range fs {
666 mockFS[k] = v
667 }
668
669 var config android.Config
670 if os == android.Fuchsia {
Paul Duffinecdac8a2021-02-24 19:18:42 +0000671 panic("Fuchsia not supported use test fixture instead")
Colin Cross98be1bb2019-12-13 20:41:13 -0800672 } else {
673 config = android.TestArchConfig(buildDir, env, bp, mockFS)
674 }
675
676 return config
677}
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}