blob: ed1ab7d376426284a72d0355677ded44edcac0d7 [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)
28
29 ctx.RegisterModuleType("toolchain_library", ToolchainLibraryFactory)
30 ctx.RegisterModuleType("llndk_library", LlndkLibraryFactory)
31 ctx.RegisterModuleType("cc_object", ObjectFactory)
Colin Crossf28329d2020-02-15 11:00:10 -080032 ctx.RegisterModuleType("ndk_prebuilt_shared_stl", NdkPrebuiltSharedStlFactory)
33 ctx.RegisterModuleType("ndk_prebuilt_object", NdkPrebuiltObjectFactory)
Paul Duffin77980a82019-12-19 16:01:36 +000034}
35
Inseob Kimc0907f12019-02-08 21:00:45 +090036func GatherRequiredDepsForTest(os android.OsType) string {
37 ret := `
38 toolchain_library {
39 name: "libatomic",
40 vendor_available: true,
41 recovery_available: true,
Colin Crossf9aabd72020-02-15 11:29:50 -080042 native_bridge_supported: true,
Inseob Kimc0907f12019-02-08 21:00:45 +090043 src: "",
44 }
45
46 toolchain_library {
47 name: "libcompiler_rt-extras",
48 vendor_available: true,
49 recovery_available: true,
50 src: "",
51 }
52
53 toolchain_library {
54 name: "libclang_rt.builtins-arm-android",
55 vendor_available: true,
56 recovery_available: true,
Colin Crossf9aabd72020-02-15 11:29:50 -080057 native_bridge_supported: true,
Inseob Kimc0907f12019-02-08 21:00:45 +090058 src: "",
59 }
60
61 toolchain_library {
62 name: "libclang_rt.builtins-aarch64-android",
63 vendor_available: true,
64 recovery_available: true,
Colin Crossf9aabd72020-02-15 11:29:50 -080065 native_bridge_supported: true,
Inseob Kimc0907f12019-02-08 21:00:45 +090066 src: "",
67 }
68
Jooyung Han74066602020-03-20 04:29:24 +090069 cc_prebuilt_library_shared {
70 name: "libclang_rt.hwasan-aarch64-android",
71 nocrt: true,
72 vendor_available: true,
73 recovery_available: true,
74 system_shared_libs: [],
75 stl: "none",
76 srcs: [""],
77 check_elf_files: false,
78 sanitize: {
79 never: true,
80 },
81 }
82
Inseob Kimc0907f12019-02-08 21:00:45 +090083 toolchain_library {
84 name: "libclang_rt.builtins-i686-android",
85 vendor_available: true,
86 recovery_available: true,
Colin Crossf9aabd72020-02-15 11:29:50 -080087 native_bridge_supported: true,
Inseob Kimc0907f12019-02-08 21:00:45 +090088 src: "",
89 }
90
91 toolchain_library {
92 name: "libclang_rt.builtins-x86_64-android",
93 vendor_available: true,
94 recovery_available: true,
Colin Crossf9aabd72020-02-15 11:29:50 -080095 native_bridge_supported: true,
Inseob Kimc0907f12019-02-08 21:00:45 +090096 src: "",
97 }
98
99 toolchain_library {
Mitch Phillipsda9a4632019-07-15 09:34:09 -0700100 name: "libclang_rt.fuzzer-arm-android",
101 vendor_available: true,
102 recovery_available: true,
103 src: "",
104 }
105
106 toolchain_library {
107 name: "libclang_rt.fuzzer-aarch64-android",
108 vendor_available: true,
109 recovery_available: true,
110 src: "",
111 }
112
113 toolchain_library {
114 name: "libclang_rt.fuzzer-i686-android",
115 vendor_available: true,
116 recovery_available: true,
117 src: "",
118 }
119
120 toolchain_library {
121 name: "libclang_rt.fuzzer-x86_64-android",
122 vendor_available: true,
123 recovery_available: true,
124 src: "",
125 }
126
127 toolchain_library {
128 name: "libclang_rt.fuzzer-x86_64",
129 vendor_available: true,
130 recovery_available: true,
131 src: "",
132 }
133
Paul Duffind6867912019-12-19 14:38:36 +0000134 // Needed for sanitizer
135 cc_prebuilt_library_shared {
136 name: "libclang_rt.ubsan_standalone-aarch64-android",
137 vendor_available: true,
138 recovery_available: true,
Colin Crossf9aabd72020-02-15 11:29:50 -0800139 system_shared_libs: [],
Paul Duffind6867912019-12-19 14:38:36 +0000140 srcs: [""],
141 }
142
Mitch Phillipsda9a4632019-07-15 09:34:09 -0700143 toolchain_library {
Inseob Kimc0907f12019-02-08 21:00:45 +0900144 name: "libgcc",
145 vendor_available: true,
146 recovery_available: true,
147 src: "",
148 }
149
Yi Kongacee27c2019-03-29 20:05:14 -0700150 toolchain_library {
151 name: "libgcc_stripped",
152 vendor_available: true,
153 recovery_available: true,
154 src: "",
155 }
156
Inseob Kimc0907f12019-02-08 21:00:45 +0900157 cc_library {
Inseob Kimc0907f12019-02-08 21:00:45 +0900158 name: "libc",
Yi Konge7fe9912019-06-02 00:53:50 -0700159 no_libcrt: true,
Inseob Kimc0907f12019-02-08 21:00:45 +0900160 nocrt: true,
Peter Collingbournee5ba2862019-12-10 18:37:45 -0800161 stl: "none",
Inseob Kimc0907f12019-02-08 21:00:45 +0900162 system_shared_libs: [],
163 recovery_available: true,
Colin Crossf9aabd72020-02-15 11:29:50 -0800164 stubs: {
165 versions: ["27", "28", "29"],
166 },
Inseob Kimc0907f12019-02-08 21:00:45 +0900167 }
168 llndk_library {
169 name: "libc",
170 symbol_file: "",
171 }
172 cc_library {
173 name: "libm",
Yi Konge7fe9912019-06-02 00:53:50 -0700174 no_libcrt: true,
Inseob Kimc0907f12019-02-08 21:00:45 +0900175 nocrt: true,
Peter Collingbournee5ba2862019-12-10 18:37:45 -0800176 stl: "none",
Inseob Kimc0907f12019-02-08 21:00:45 +0900177 system_shared_libs: [],
178 recovery_available: true,
Colin Crossf9aabd72020-02-15 11:29:50 -0800179 stubs: {
180 versions: ["27", "28", "29"],
181 },
182 apex_available: [
183 "//apex_available:platform",
184 "myapex"
185 ],
Inseob Kimc0907f12019-02-08 21:00:45 +0900186 }
187 llndk_library {
188 name: "libm",
189 symbol_file: "",
190 }
191 cc_library {
192 name: "libdl",
Yi Konge7fe9912019-06-02 00:53:50 -0700193 no_libcrt: true,
Inseob Kimc0907f12019-02-08 21:00:45 +0900194 nocrt: true,
Peter Collingbournee5ba2862019-12-10 18:37:45 -0800195 stl: "none",
Inseob Kimc0907f12019-02-08 21:00:45 +0900196 system_shared_libs: [],
197 recovery_available: true,
Colin Crossf9aabd72020-02-15 11:29:50 -0800198 stubs: {
199 versions: ["27", "28", "29"],
200 },
201 apex_available: [
202 "//apex_available:platform",
203 "myapex"
204 ],
Inseob Kimc0907f12019-02-08 21:00:45 +0900205 }
206 llndk_library {
207 name: "libdl",
208 symbol_file: "",
209 }
210 cc_library {
Jooyung Han097087b2019-10-22 19:32:18 +0900211 name: "libft2",
212 no_libcrt: true,
213 nocrt: true,
214 system_shared_libs: [],
215 recovery_available: true,
216 }
217 llndk_library {
218 name: "libft2",
219 symbol_file: "",
220 vendor_available: false,
221 }
222 cc_library {
Inseob Kimc0907f12019-02-08 21:00:45 +0900223 name: "libc++_static",
Yi Konge7fe9912019-06-02 00:53:50 -0700224 no_libcrt: true,
Inseob Kimc0907f12019-02-08 21:00:45 +0900225 nocrt: true,
226 system_shared_libs: [],
227 stl: "none",
228 vendor_available: true,
229 recovery_available: true,
Jiyong Park2416c292020-03-07 16:35:46 +0900230 apex_available: [
231 "//apex_available:platform",
232 "//apex_available:anyapex",
233 ],
Inseob Kimc0907f12019-02-08 21:00:45 +0900234 }
235 cc_library {
236 name: "libc++",
Yi Konge7fe9912019-06-02 00:53:50 -0700237 no_libcrt: true,
Inseob Kimc0907f12019-02-08 21:00:45 +0900238 nocrt: true,
239 system_shared_libs: [],
240 stl: "none",
241 vendor_available: true,
242 recovery_available: true,
243 vndk: {
244 enabled: true,
245 support_system_process: true,
246 },
Colin Crossf9aabd72020-02-15 11:29:50 -0800247 apex_available: [
248 "//apex_available:platform",
249 "myapex"
250 ],
Inseob Kimc0907f12019-02-08 21:00:45 +0900251 }
252 cc_library {
Dan Albert2da19cb2019-07-24 12:17:40 -0700253 name: "libc++demangle",
254 no_libcrt: true,
255 nocrt: true,
256 system_shared_libs: [],
257 stl: "none",
258 host_supported: false,
259 vendor_available: true,
260 recovery_available: true,
Jiyong Park2416c292020-03-07 16:35:46 +0900261 apex_available: [
262 "//apex_available:platform",
263 "//apex_available:anyapex",
264 ],
Dan Albert2da19cb2019-07-24 12:17:40 -0700265 }
266 cc_library {
Inseob Kimc0907f12019-02-08 21:00:45 +0900267 name: "libunwind_llvm",
Yi Konge7fe9912019-06-02 00:53:50 -0700268 no_libcrt: true,
Inseob Kimc0907f12019-02-08 21:00:45 +0900269 nocrt: true,
270 system_shared_libs: [],
271 stl: "none",
272 vendor_available: true,
273 recovery_available: true,
274 }
275
Jiyong Park2416c292020-03-07 16:35:46 +0900276 cc_defaults {
277 name: "crt_defaults",
278 recovery_available: true,
279 vendor_available: true,
280 native_bridge_supported: true,
281 stl: "none",
282 apex_available: [
283 "//apex_available:platform",
284 "//apex_available:anyapex",
285 ],
286 }
287
Inseob Kimc0907f12019-02-08 21:00:45 +0900288 cc_object {
289 name: "crtbegin_so",
Jiyong Park2416c292020-03-07 16:35:46 +0900290 defaults: ["crt_defaults"],
Inseob Kimc0907f12019-02-08 21:00:45 +0900291 recovery_available: true,
292 vendor_available: true,
Colin Crossf9aabd72020-02-15 11:29:50 -0800293 native_bridge_supported: true,
Jiyong Parka7bc8ad2019-10-15 15:20:07 +0900294 stl: "none",
Inseob Kimc0907f12019-02-08 21:00:45 +0900295 }
296
297 cc_object {
Colin Cross815daf92019-05-14 16:05:20 -0700298 name: "crtbegin_dynamic",
Jiyong Park2416c292020-03-07 16:35:46 +0900299 defaults: ["crt_defaults"],
Colin Cross815daf92019-05-14 16:05:20 -0700300 recovery_available: true,
301 vendor_available: true,
Colin Crossf9aabd72020-02-15 11:29:50 -0800302 native_bridge_supported: true,
303 stl: "none",
Colin Cross815daf92019-05-14 16:05:20 -0700304 }
305
306 cc_object {
Inseob Kimc0907f12019-02-08 21:00:45 +0900307 name: "crtbegin_static",
Jiyong Park2416c292020-03-07 16:35:46 +0900308 defaults: ["crt_defaults"],
Inseob Kimc0907f12019-02-08 21:00:45 +0900309 recovery_available: true,
310 vendor_available: true,
Colin Crossf9aabd72020-02-15 11:29:50 -0800311 native_bridge_supported: true,
312 stl: "none",
Inseob Kimc0907f12019-02-08 21:00:45 +0900313 }
314
315 cc_object {
316 name: "crtend_so",
Jiyong Park2416c292020-03-07 16:35:46 +0900317 defaults: ["crt_defaults"],
Inseob Kimc0907f12019-02-08 21:00:45 +0900318 recovery_available: true,
319 vendor_available: true,
Colin Crossf9aabd72020-02-15 11:29:50 -0800320 native_bridge_supported: true,
Jiyong Parka7bc8ad2019-10-15 15:20:07 +0900321 stl: "none",
Inseob Kimc0907f12019-02-08 21:00:45 +0900322 }
323
324 cc_object {
325 name: "crtend_android",
Jiyong Park2416c292020-03-07 16:35:46 +0900326 defaults: ["crt_defaults"],
Inseob Kimc0907f12019-02-08 21:00:45 +0900327 recovery_available: true,
328 vendor_available: true,
Colin Crossf9aabd72020-02-15 11:29:50 -0800329 native_bridge_supported: true,
330 stl: "none",
Inseob Kimc0907f12019-02-08 21:00:45 +0900331 }
332
333 cc_library {
334 name: "libprotobuf-cpp-lite",
335 }
Colin Crossf28329d2020-02-15 11:00:10 -0800336
337 cc_library {
338 name: "ndk_libunwind",
339 sdk_version: "current",
340 stl: "none",
341 system_shared_libs: [],
342 }
343
344 cc_library {
345 name: "libc.ndk.current",
346 sdk_version: "current",
347 stl: "none",
348 system_shared_libs: [],
349 }
350
351 cc_library {
352 name: "libm.ndk.current",
353 sdk_version: "current",
354 stl: "none",
355 system_shared_libs: [],
356 }
357
358 cc_library {
359 name: "libdl.ndk.current",
360 sdk_version: "current",
361 stl: "none",
362 system_shared_libs: [],
363 }
364
365 ndk_prebuilt_object {
366 name: "ndk_crtbegin_so.27",
367 sdk_version: "27",
368 }
369
370 ndk_prebuilt_object {
371 name: "ndk_crtend_so.27",
372 sdk_version: "27",
373 }
374
375 ndk_prebuilt_shared_stl {
376 name: "ndk_libc++_shared",
377 }
378 `
379
Inseob Kimc0907f12019-02-08 21:00:45 +0900380 if os == android.Fuchsia {
381 ret += `
382 cc_library {
383 name: "libbioniccompat",
384 stl: "none",
385 }
386 cc_library {
387 name: "libcompiler_rt",
388 stl: "none",
389 }
390 `
391 }
392 return ret
393}
Colin Cross9a942872019-05-14 15:44:26 -0700394
Colin Crossf28329d2020-02-15 11:00:10 -0800395func GatherRequiredFilesForTest(fs map[string][]byte) {
396 fs["prebuilts/ndk/current/sources/cxx-stl/llvm-libc++/libs/arm64-v8a/libc++_shared.so"] = nil
397 fs["prebuilts/ndk/current/platforms/android-27/arch-arm/usr/lib/crtbegin_so.o"] = nil
398 fs["prebuilts/ndk/current/platforms/android-27/arch-arm/usr/lib/crtend_so.o"] = nil
399 fs["prebuilts/ndk/current/platforms/android-27/arch-arm64/usr/lib/crtbegin_so.o"] = nil
400 fs["prebuilts/ndk/current/platforms/android-27/arch-arm64/usr/lib/crtend_so.o"] = nil
401 fs["prebuilts/ndk/current/platforms/android-27/arch-x86/usr/lib/crtbegin_so.o"] = nil
402 fs["prebuilts/ndk/current/platforms/android-27/arch-x86/usr/lib/crtend_so.o"] = nil
403 fs["prebuilts/ndk/current/platforms/android-27/arch-x86_64/usr/lib64/crtbegin_so.o"] = nil
404 fs["prebuilts/ndk/current/platforms/android-27/arch-x86_64/usr/lib64/crtend_so.o"] = nil
405}
406
Colin Cross98be1bb2019-12-13 20:41:13 -0800407func TestConfig(buildDir string, os android.OsType, env map[string]string,
408 bp string, fs map[string][]byte) android.Config {
Colin Cross9a942872019-05-14 15:44:26 -0700409
Colin Cross98be1bb2019-12-13 20:41:13 -0800410 // add some modules that are required by the compiler and/or linker
411 bp = bp + GatherRequiredDepsForTest(os)
412
413 mockFS := map[string][]byte{
414 "foo.c": nil,
415 "foo.lds": nil,
416 "bar.c": nil,
417 "baz.c": nil,
418 "baz.o": nil,
419 "a.proto": nil,
420 "b.aidl": nil,
421 "sub/c.aidl": nil,
422 "my_include": nil,
423 "foo.map.txt": nil,
424 "liba.so": nil,
425 }
426
Colin Crossf28329d2020-02-15 11:00:10 -0800427 GatherRequiredFilesForTest(mockFS)
428
Colin Cross98be1bb2019-12-13 20:41:13 -0800429 for k, v := range fs {
430 mockFS[k] = v
431 }
432
433 var config android.Config
434 if os == android.Fuchsia {
435 config = android.TestArchConfigFuchsia(buildDir, env, bp, mockFS)
436 } else {
437 config = android.TestArchConfig(buildDir, env, bp, mockFS)
438 }
439
440 return config
441}
442
443func CreateTestContext() *android.TestContext {
Colin Cross9a942872019-05-14 15:44:26 -0700444 ctx := android.NewTestArchContext()
Colin Cross4b49b762019-11-22 15:25:03 -0800445 ctx.RegisterModuleType("cc_fuzz", FuzzFactory)
Colin Cross4b49b762019-11-22 15:25:03 -0800446 ctx.RegisterModuleType("cc_test", TestFactory)
Colin Cross4b49b762019-11-22 15:25:03 -0800447 ctx.RegisterModuleType("llndk_headers", llndkHeadersFactory)
Jooyung Hanb90e4912019-12-09 18:21:48 +0900448 ctx.RegisterModuleType("ndk_library", NdkLibraryFactory)
Colin Cross4b49b762019-11-22 15:25:03 -0800449 ctx.RegisterModuleType("vendor_public_library", vendorPublicLibraryFactory)
Colin Cross4b49b762019-11-22 15:25:03 -0800450 ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
451 ctx.RegisterModuleType("vndk_prebuilt_shared", VndkPrebuiltSharedFactory)
452 ctx.RegisterModuleType("vndk_libraries_txt", VndkLibrariesTxtFactory)
Paul Duffin77980a82019-12-19 16:01:36 +0000453 RegisterRequiredBuildComponentsForTest(ctx)
Colin Crosse1bb5d02019-09-24 14:55:04 -0700454 ctx.PreArchMutators(android.RegisterDefaultsPreArchMutators)
Colin Cross4b49b762019-11-22 15:25:03 -0800455 ctx.RegisterSingletonType("vndk-snapshot", VndkSnapshotSingleton)
Inseob Kim8471cda2019-11-15 09:59:12 +0900456 ctx.RegisterSingletonType("vendor-snapshot", VendorSnapshotSingleton)
Colin Cross9a942872019-05-14 15:44:26 -0700457
Colin Cross9a942872019-05-14 15:44:26 -0700458 return ctx
459}