blob: 9652d216cc7dabf1c508abb774932426a9a711c3 [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 (
18 "android/soong/android"
19)
20
Paul Duffin77980a82019-12-19 16:01:36 +000021func RegisterRequiredBuildComponentsForTest(ctx android.RegistrationContext) {
Paul Duffind6867912019-12-19 14:38:36 +000022 RegisterPrebuiltBuildComponents(ctx)
Paul Duffind6867912019-12-19 14:38:36 +000023 android.RegisterPrebuiltMutators(ctx)
Paul Duffin075c4172019-12-19 19:06:13 +000024
Paul Duffin036e7002019-12-19 19:16:28 +000025 RegisterCCBuildComponents(ctx)
Paul Duffin2ee69792020-01-16 12:14:42 +000026 RegisterBinaryBuildComponents(ctx)
Paul Duffin6c26dc72019-12-19 15:02:40 +000027 RegisterLibraryBuildComponents(ctx)
Paul Duffin246ac302020-02-21 10:28:43 +000028 RegisterLibraryHeadersBuildComponents(ctx)
Paul Duffin6c26dc72019-12-19 15:02:40 +000029
30 ctx.RegisterModuleType("toolchain_library", ToolchainLibraryFactory)
31 ctx.RegisterModuleType("llndk_library", LlndkLibraryFactory)
32 ctx.RegisterModuleType("cc_object", ObjectFactory)
Colin Crossf28329d2020-02-15 11:00:10 -080033 ctx.RegisterModuleType("ndk_prebuilt_shared_stl", NdkPrebuiltSharedStlFactory)
34 ctx.RegisterModuleType("ndk_prebuilt_object", NdkPrebuiltObjectFactory)
Paul Duffin77980a82019-12-19 16:01:36 +000035}
36
Inseob Kimc0907f12019-02-08 21:00:45 +090037func GatherRequiredDepsForTest(os android.OsType) string {
38 ret := `
39 toolchain_library {
40 name: "libatomic",
41 vendor_available: true,
42 recovery_available: true,
Colin Crossf9aabd72020-02-15 11:29:50 -080043 native_bridge_supported: true,
Inseob Kimc0907f12019-02-08 21:00:45 +090044 src: "",
45 }
46
47 toolchain_library {
48 name: "libcompiler_rt-extras",
49 vendor_available: true,
50 recovery_available: true,
51 src: "",
52 }
53
54 toolchain_library {
55 name: "libclang_rt.builtins-arm-android",
56 vendor_available: true,
57 recovery_available: true,
Colin Crossf9aabd72020-02-15 11:29:50 -080058 native_bridge_supported: true,
Inseob Kimc0907f12019-02-08 21:00:45 +090059 src: "",
60 }
61
62 toolchain_library {
63 name: "libclang_rt.builtins-aarch64-android",
64 vendor_available: true,
65 recovery_available: true,
Colin Crossf9aabd72020-02-15 11:29:50 -080066 native_bridge_supported: true,
Inseob Kimc0907f12019-02-08 21:00:45 +090067 src: "",
68 }
69
Jooyung Han74066602020-03-20 04:29:24 +090070 cc_prebuilt_library_shared {
71 name: "libclang_rt.hwasan-aarch64-android",
72 nocrt: true,
73 vendor_available: true,
74 recovery_available: true,
75 system_shared_libs: [],
76 stl: "none",
77 srcs: [""],
78 check_elf_files: false,
79 sanitize: {
80 never: true,
81 },
82 }
83
Inseob Kimc0907f12019-02-08 21:00:45 +090084 toolchain_library {
85 name: "libclang_rt.builtins-i686-android",
86 vendor_available: true,
87 recovery_available: true,
Colin Crossf9aabd72020-02-15 11:29:50 -080088 native_bridge_supported: true,
Inseob Kimc0907f12019-02-08 21:00:45 +090089 src: "",
90 }
91
92 toolchain_library {
93 name: "libclang_rt.builtins-x86_64-android",
94 vendor_available: true,
95 recovery_available: true,
Colin Crossf9aabd72020-02-15 11:29:50 -080096 native_bridge_supported: true,
Inseob Kimc0907f12019-02-08 21:00:45 +090097 src: "",
98 }
99
100 toolchain_library {
Mitch Phillipsda9a4632019-07-15 09:34:09 -0700101 name: "libclang_rt.fuzzer-arm-android",
102 vendor_available: true,
103 recovery_available: true,
104 src: "",
105 }
106
107 toolchain_library {
108 name: "libclang_rt.fuzzer-aarch64-android",
109 vendor_available: true,
110 recovery_available: true,
111 src: "",
112 }
113
114 toolchain_library {
115 name: "libclang_rt.fuzzer-i686-android",
116 vendor_available: true,
117 recovery_available: true,
118 src: "",
119 }
120
121 toolchain_library {
122 name: "libclang_rt.fuzzer-x86_64-android",
123 vendor_available: true,
124 recovery_available: true,
125 src: "",
126 }
127
128 toolchain_library {
129 name: "libclang_rt.fuzzer-x86_64",
130 vendor_available: true,
131 recovery_available: true,
132 src: "",
133 }
134
Paul Duffind6867912019-12-19 14:38:36 +0000135 // Needed for sanitizer
136 cc_prebuilt_library_shared {
137 name: "libclang_rt.ubsan_standalone-aarch64-android",
138 vendor_available: true,
139 recovery_available: true,
Colin Crossf9aabd72020-02-15 11:29:50 -0800140 system_shared_libs: [],
Paul Duffind6867912019-12-19 14:38:36 +0000141 srcs: [""],
142 }
143
Mitch Phillipsda9a4632019-07-15 09:34:09 -0700144 toolchain_library {
Inseob Kimc0907f12019-02-08 21:00:45 +0900145 name: "libgcc",
146 vendor_available: true,
147 recovery_available: true,
148 src: "",
149 }
150
Yi Kongacee27c2019-03-29 20:05:14 -0700151 toolchain_library {
152 name: "libgcc_stripped",
153 vendor_available: true,
154 recovery_available: true,
155 src: "",
156 }
157
Inseob Kimc0907f12019-02-08 21:00:45 +0900158 cc_library {
Inseob Kimc0907f12019-02-08 21:00:45 +0900159 name: "libc",
Yi Konge7fe9912019-06-02 00:53:50 -0700160 no_libcrt: true,
Inseob Kimc0907f12019-02-08 21:00:45 +0900161 nocrt: true,
Peter Collingbournee5ba2862019-12-10 18:37:45 -0800162 stl: "none",
Inseob Kimc0907f12019-02-08 21:00:45 +0900163 system_shared_libs: [],
164 recovery_available: true,
Colin Crossf9aabd72020-02-15 11:29:50 -0800165 stubs: {
166 versions: ["27", "28", "29"],
167 },
Inseob Kimc0907f12019-02-08 21:00:45 +0900168 }
169 llndk_library {
170 name: "libc",
171 symbol_file: "",
172 }
173 cc_library {
174 name: "libm",
Yi Konge7fe9912019-06-02 00:53:50 -0700175 no_libcrt: true,
Inseob Kimc0907f12019-02-08 21:00:45 +0900176 nocrt: true,
Peter Collingbournee5ba2862019-12-10 18:37:45 -0800177 stl: "none",
Inseob Kimc0907f12019-02-08 21:00:45 +0900178 system_shared_libs: [],
179 recovery_available: true,
Colin Crossf9aabd72020-02-15 11:29:50 -0800180 stubs: {
181 versions: ["27", "28", "29"],
182 },
183 apex_available: [
184 "//apex_available:platform",
185 "myapex"
186 ],
Inseob Kimc0907f12019-02-08 21:00:45 +0900187 }
188 llndk_library {
189 name: "libm",
190 symbol_file: "",
191 }
192 cc_library {
193 name: "libdl",
Yi Konge7fe9912019-06-02 00:53:50 -0700194 no_libcrt: true,
Inseob Kimc0907f12019-02-08 21:00:45 +0900195 nocrt: true,
Peter Collingbournee5ba2862019-12-10 18:37:45 -0800196 stl: "none",
Inseob Kimc0907f12019-02-08 21:00:45 +0900197 system_shared_libs: [],
198 recovery_available: true,
Colin Crossf9aabd72020-02-15 11:29:50 -0800199 stubs: {
200 versions: ["27", "28", "29"],
201 },
202 apex_available: [
203 "//apex_available:platform",
204 "myapex"
205 ],
Inseob Kimc0907f12019-02-08 21:00:45 +0900206 }
207 llndk_library {
208 name: "libdl",
209 symbol_file: "",
210 }
211 cc_library {
Jooyung Han097087b2019-10-22 19:32:18 +0900212 name: "libft2",
213 no_libcrt: true,
214 nocrt: true,
215 system_shared_libs: [],
216 recovery_available: true,
217 }
218 llndk_library {
219 name: "libft2",
220 symbol_file: "",
221 vendor_available: false,
222 }
223 cc_library {
Inseob Kimc0907f12019-02-08 21:00:45 +0900224 name: "libc++_static",
Yi Konge7fe9912019-06-02 00:53:50 -0700225 no_libcrt: true,
Inseob Kimc0907f12019-02-08 21:00:45 +0900226 nocrt: true,
227 system_shared_libs: [],
228 stl: "none",
229 vendor_available: true,
230 recovery_available: true,
Inseob Kimeb591652020-02-03 18:06:46 +0900231 host_supported: true,
Jiyong Park2416c292020-03-07 16:35:46 +0900232 apex_available: [
233 "//apex_available:platform",
234 "//apex_available:anyapex",
235 ],
Inseob Kimc0907f12019-02-08 21:00:45 +0900236 }
237 cc_library {
238 name: "libc++",
Yi Konge7fe9912019-06-02 00:53:50 -0700239 no_libcrt: true,
Inseob Kimc0907f12019-02-08 21:00:45 +0900240 nocrt: true,
241 system_shared_libs: [],
242 stl: "none",
243 vendor_available: true,
244 recovery_available: true,
Inseob Kimeb591652020-02-03 18:06:46 +0900245 host_supported: true,
Inseob Kimc0907f12019-02-08 21:00:45 +0900246 vndk: {
247 enabled: true,
248 support_system_process: true,
249 },
Colin Crossf9aabd72020-02-15 11:29:50 -0800250 apex_available: [
251 "//apex_available:platform",
252 "myapex"
253 ],
Inseob Kimc0907f12019-02-08 21:00:45 +0900254 }
255 cc_library {
Dan Albert2da19cb2019-07-24 12:17:40 -0700256 name: "libc++demangle",
257 no_libcrt: true,
258 nocrt: true,
259 system_shared_libs: [],
260 stl: "none",
261 host_supported: false,
262 vendor_available: true,
263 recovery_available: true,
Jiyong Park2416c292020-03-07 16:35:46 +0900264 apex_available: [
265 "//apex_available:platform",
266 "//apex_available:anyapex",
267 ],
Dan Albert2da19cb2019-07-24 12:17:40 -0700268 }
269 cc_library {
Inseob Kimc0907f12019-02-08 21:00:45 +0900270 name: "libunwind_llvm",
Yi Konge7fe9912019-06-02 00:53:50 -0700271 no_libcrt: true,
Inseob Kimc0907f12019-02-08 21:00:45 +0900272 nocrt: true,
273 system_shared_libs: [],
274 stl: "none",
275 vendor_available: true,
276 recovery_available: true,
277 }
278
Jiyong Park2416c292020-03-07 16:35:46 +0900279 cc_defaults {
280 name: "crt_defaults",
281 recovery_available: true,
282 vendor_available: true,
283 native_bridge_supported: true,
284 stl: "none",
285 apex_available: [
286 "//apex_available:platform",
287 "//apex_available:anyapex",
288 ],
289 }
290
Inseob Kimc0907f12019-02-08 21:00:45 +0900291 cc_object {
292 name: "crtbegin_so",
Jiyong Park2416c292020-03-07 16:35:46 +0900293 defaults: ["crt_defaults"],
Inseob Kimc0907f12019-02-08 21:00:45 +0900294 recovery_available: true,
295 vendor_available: true,
Colin Crossf9aabd72020-02-15 11:29:50 -0800296 native_bridge_supported: true,
Jiyong Parka7bc8ad2019-10-15 15:20:07 +0900297 stl: "none",
Inseob Kimc0907f12019-02-08 21:00:45 +0900298 }
299
300 cc_object {
Colin Cross815daf92019-05-14 16:05:20 -0700301 name: "crtbegin_dynamic",
Jiyong Park2416c292020-03-07 16:35:46 +0900302 defaults: ["crt_defaults"],
Colin Cross815daf92019-05-14 16:05:20 -0700303 recovery_available: true,
304 vendor_available: true,
Colin Crossf9aabd72020-02-15 11:29:50 -0800305 native_bridge_supported: true,
306 stl: "none",
Colin Cross815daf92019-05-14 16:05:20 -0700307 }
308
309 cc_object {
Inseob Kimc0907f12019-02-08 21:00:45 +0900310 name: "crtbegin_static",
Jiyong Park2416c292020-03-07 16:35:46 +0900311 defaults: ["crt_defaults"],
Inseob Kimc0907f12019-02-08 21:00:45 +0900312 recovery_available: true,
313 vendor_available: true,
Colin Crossf9aabd72020-02-15 11:29:50 -0800314 native_bridge_supported: true,
315 stl: "none",
Inseob Kimc0907f12019-02-08 21:00:45 +0900316 }
317
318 cc_object {
319 name: "crtend_so",
Jiyong Park2416c292020-03-07 16:35:46 +0900320 defaults: ["crt_defaults"],
Inseob Kimc0907f12019-02-08 21:00:45 +0900321 recovery_available: true,
322 vendor_available: true,
Colin Crossf9aabd72020-02-15 11:29:50 -0800323 native_bridge_supported: true,
Jiyong Parka7bc8ad2019-10-15 15:20:07 +0900324 stl: "none",
Inseob Kimc0907f12019-02-08 21:00:45 +0900325 }
326
327 cc_object {
328 name: "crtend_android",
Jiyong Park2416c292020-03-07 16:35:46 +0900329 defaults: ["crt_defaults"],
Inseob Kimc0907f12019-02-08 21:00:45 +0900330 recovery_available: true,
331 vendor_available: true,
Colin Crossf9aabd72020-02-15 11:29:50 -0800332 native_bridge_supported: true,
333 stl: "none",
Inseob Kimc0907f12019-02-08 21:00:45 +0900334 }
335
336 cc_library {
337 name: "libprotobuf-cpp-lite",
338 }
Colin Crossf28329d2020-02-15 11:00:10 -0800339
340 cc_library {
341 name: "ndk_libunwind",
342 sdk_version: "current",
343 stl: "none",
344 system_shared_libs: [],
345 }
346
347 cc_library {
348 name: "libc.ndk.current",
349 sdk_version: "current",
350 stl: "none",
351 system_shared_libs: [],
352 }
353
354 cc_library {
355 name: "libm.ndk.current",
356 sdk_version: "current",
357 stl: "none",
358 system_shared_libs: [],
359 }
360
361 cc_library {
362 name: "libdl.ndk.current",
363 sdk_version: "current",
364 stl: "none",
365 system_shared_libs: [],
366 }
367
368 ndk_prebuilt_object {
369 name: "ndk_crtbegin_so.27",
370 sdk_version: "27",
371 }
372
373 ndk_prebuilt_object {
374 name: "ndk_crtend_so.27",
375 sdk_version: "27",
376 }
377
378 ndk_prebuilt_shared_stl {
379 name: "ndk_libc++_shared",
380 }
381 `
382
Inseob Kimc0907f12019-02-08 21:00:45 +0900383 if os == android.Fuchsia {
384 ret += `
385 cc_library {
386 name: "libbioniccompat",
387 stl: "none",
388 }
389 cc_library {
390 name: "libcompiler_rt",
391 stl: "none",
392 }
393 `
394 }
395 return ret
396}
Colin Cross9a942872019-05-14 15:44:26 -0700397
Colin Crossf28329d2020-02-15 11:00:10 -0800398func GatherRequiredFilesForTest(fs map[string][]byte) {
399 fs["prebuilts/ndk/current/sources/cxx-stl/llvm-libc++/libs/arm64-v8a/libc++_shared.so"] = nil
400 fs["prebuilts/ndk/current/platforms/android-27/arch-arm/usr/lib/crtbegin_so.o"] = nil
401 fs["prebuilts/ndk/current/platforms/android-27/arch-arm/usr/lib/crtend_so.o"] = nil
402 fs["prebuilts/ndk/current/platforms/android-27/arch-arm64/usr/lib/crtbegin_so.o"] = nil
403 fs["prebuilts/ndk/current/platforms/android-27/arch-arm64/usr/lib/crtend_so.o"] = nil
404 fs["prebuilts/ndk/current/platforms/android-27/arch-x86/usr/lib/crtbegin_so.o"] = nil
405 fs["prebuilts/ndk/current/platforms/android-27/arch-x86/usr/lib/crtend_so.o"] = nil
406 fs["prebuilts/ndk/current/platforms/android-27/arch-x86_64/usr/lib64/crtbegin_so.o"] = nil
407 fs["prebuilts/ndk/current/platforms/android-27/arch-x86_64/usr/lib64/crtend_so.o"] = nil
408}
409
Colin Cross98be1bb2019-12-13 20:41:13 -0800410func TestConfig(buildDir string, os android.OsType, env map[string]string,
411 bp string, fs map[string][]byte) android.Config {
Colin Cross9a942872019-05-14 15:44:26 -0700412
Colin Cross98be1bb2019-12-13 20:41:13 -0800413 // add some modules that are required by the compiler and/or linker
414 bp = bp + GatherRequiredDepsForTest(os)
415
416 mockFS := map[string][]byte{
417 "foo.c": nil,
418 "foo.lds": nil,
419 "bar.c": nil,
420 "baz.c": nil,
421 "baz.o": nil,
422 "a.proto": nil,
423 "b.aidl": nil,
424 "sub/c.aidl": nil,
425 "my_include": nil,
426 "foo.map.txt": nil,
427 "liba.so": nil,
428 }
429
Colin Crossf28329d2020-02-15 11:00:10 -0800430 GatherRequiredFilesForTest(mockFS)
431
Colin Cross98be1bb2019-12-13 20:41:13 -0800432 for k, v := range fs {
433 mockFS[k] = v
434 }
435
436 var config android.Config
437 if os == android.Fuchsia {
438 config = android.TestArchConfigFuchsia(buildDir, env, bp, mockFS)
439 } else {
440 config = android.TestArchConfig(buildDir, env, bp, mockFS)
441 }
442
443 return config
444}
445
446func CreateTestContext() *android.TestContext {
Colin Cross9a942872019-05-14 15:44:26 -0700447 ctx := android.NewTestArchContext()
Colin Cross4b49b762019-11-22 15:25:03 -0800448 ctx.RegisterModuleType("cc_fuzz", FuzzFactory)
Colin Cross4b49b762019-11-22 15:25:03 -0800449 ctx.RegisterModuleType("cc_test", TestFactory)
Colin Cross4b49b762019-11-22 15:25:03 -0800450 ctx.RegisterModuleType("llndk_headers", llndkHeadersFactory)
Jooyung Hanb90e4912019-12-09 18:21:48 +0900451 ctx.RegisterModuleType("ndk_library", NdkLibraryFactory)
Colin Cross4b49b762019-11-22 15:25:03 -0800452 ctx.RegisterModuleType("vendor_public_library", vendorPublicLibraryFactory)
Colin Cross4b49b762019-11-22 15:25:03 -0800453 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
454 ctx.RegisterModuleType("vndk_prebuilt_shared", VndkPrebuiltSharedFactory)
455 ctx.RegisterModuleType("vndk_libraries_txt", VndkLibrariesTxtFactory)
Paul Duffin77980a82019-12-19 16:01:36 +0000456 RegisterRequiredBuildComponentsForTest(ctx)
Colin Crosse1bb5d02019-09-24 14:55:04 -0700457 ctx.PreArchMutators(android.RegisterDefaultsPreArchMutators)
Colin Cross4b49b762019-11-22 15:25:03 -0800458 ctx.RegisterSingletonType("vndk-snapshot", VndkSnapshotSingleton)
Inseob Kim8471cda2019-11-15 09:59:12 +0900459 ctx.RegisterSingletonType("vendor-snapshot", VendorSnapshotSingleton)
Colin Cross9a942872019-05-14 15:44:26 -0700460
Colin Cross9a942872019-05-14 15:44:26 -0700461 return ctx
462}