• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// 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
21func RegisterRequiredBuildComponentsForTest(ctx android.RegistrationContext) {
22	RegisterPrebuiltBuildComponents(ctx)
23	android.RegisterPrebuiltMutators(ctx)
24
25	RegisterCCBuildComponents(ctx)
26	RegisterBinaryBuildComponents(ctx)
27	RegisterLibraryBuildComponents(ctx)
28	RegisterLibraryHeadersBuildComponents(ctx)
29
30	ctx.RegisterModuleType("toolchain_library", ToolchainLibraryFactory)
31	ctx.RegisterModuleType("llndk_library", LlndkLibraryFactory)
32	ctx.RegisterModuleType("cc_object", ObjectFactory)
33	ctx.RegisterModuleType("ndk_prebuilt_shared_stl", NdkPrebuiltSharedStlFactory)
34	ctx.RegisterModuleType("ndk_prebuilt_object", NdkPrebuiltObjectFactory)
35}
36
37func GatherRequiredDepsForTest(oses ...android.OsType) string {
38	ret := `
39		toolchain_library {
40			name: "libatomic",
41			vendor_available: true,
42			recovery_available: true,
43			native_bridge_supported: true,
44			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,
58			native_bridge_supported: true,
59			src: "",
60		}
61
62		toolchain_library {
63			name: "libclang_rt.builtins-aarch64-android",
64			vendor_available: true,
65			recovery_available: true,
66			native_bridge_supported: true,
67			src: "",
68		}
69
70		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
84		toolchain_library {
85			name: "libclang_rt.builtins-i686-android",
86			vendor_available: true,
87			recovery_available: true,
88			native_bridge_supported: true,
89			src: "",
90		}
91
92		toolchain_library {
93			name: "libclang_rt.builtins-x86_64-android",
94			vendor_available: true,
95			recovery_available: true,
96			native_bridge_supported: true,
97			src: "",
98		}
99
100		toolchain_library {
101			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
135		// Needed for sanitizer
136		cc_prebuilt_library_shared {
137			name: "libclang_rt.ubsan_standalone-aarch64-android",
138			vendor_available: true,
139			recovery_available: true,
140			system_shared_libs: [],
141			srcs: [""],
142		}
143
144		toolchain_library {
145			name: "libgcc",
146			vendor_available: true,
147			recovery_available: true,
148			src: "",
149		}
150
151		toolchain_library {
152			name: "libgcc_stripped",
153			vendor_available: true,
154			recovery_available: true,
155			sdk_version: "current",
156			src: "",
157		}
158
159		cc_library {
160			name: "libc",
161			no_libcrt: true,
162			nocrt: true,
163			stl: "none",
164			system_shared_libs: [],
165			recovery_available: true,
166			stubs: {
167				versions: ["27", "28", "29"],
168			},
169		}
170		llndk_library {
171			name: "libc",
172			symbol_file: "",
173			sdk_version: "current",
174		}
175		cc_library {
176			name: "libm",
177			no_libcrt: true,
178			nocrt: true,
179			stl: "none",
180			system_shared_libs: [],
181			recovery_available: true,
182			stubs: {
183				versions: ["27", "28", "29"],
184			},
185			apex_available: [
186				"//apex_available:platform",
187				"myapex"
188			],
189		}
190		llndk_library {
191			name: "libm",
192			symbol_file: "",
193			sdk_version: "current",
194		}
195		cc_library {
196			name: "libdl",
197			no_libcrt: true,
198			nocrt: true,
199			stl: "none",
200			system_shared_libs: [],
201			recovery_available: true,
202			stubs: {
203				versions: ["27", "28", "29"],
204			},
205			apex_available: [
206				"//apex_available:platform",
207				"myapex"
208			],
209		}
210		llndk_library {
211			name: "libdl",
212			symbol_file: "",
213			sdk_version: "current",
214		}
215		cc_library {
216			name: "libft2",
217			no_libcrt: true,
218			nocrt: true,
219			system_shared_libs: [],
220			recovery_available: true,
221		}
222		llndk_library {
223			name: "libft2",
224			symbol_file: "",
225			vendor_available: false,
226			sdk_version: "current",
227		}
228		cc_library {
229			name: "libc++_static",
230			no_libcrt: true,
231			nocrt: true,
232			system_shared_libs: [],
233			stl: "none",
234			vendor_available: true,
235			recovery_available: true,
236			host_supported: true,
237			apex_available: [
238				"//apex_available:platform",
239				"//apex_available:anyapex",
240			],
241		}
242		cc_library {
243			name: "libc++",
244			no_libcrt: true,
245			nocrt: true,
246			system_shared_libs: [],
247			stl: "none",
248			vendor_available: true,
249			recovery_available: true,
250			host_supported: true,
251			vndk: {
252				enabled: true,
253				support_system_process: true,
254			},
255			apex_available: [
256				"//apex_available:platform",
257				"myapex"
258			],
259		}
260		cc_library {
261			name: "libc++demangle",
262			no_libcrt: true,
263			nocrt: true,
264			system_shared_libs: [],
265			stl: "none",
266			host_supported: false,
267			vendor_available: true,
268			recovery_available: true,
269			apex_available: [
270				"//apex_available:platform",
271				"//apex_available:anyapex",
272			],
273		}
274		cc_library {
275			name: "libunwind_llvm",
276			no_libcrt: true,
277			nocrt: true,
278			system_shared_libs: [],
279			stl: "none",
280			vendor_available: true,
281			recovery_available: true,
282		}
283
284		cc_defaults {
285			name: "crt_defaults",
286			recovery_available: true,
287			vendor_available: true,
288			native_bridge_supported: true,
289			stl: "none",
290			apex_available: [
291				"//apex_available:platform",
292				"//apex_available:anyapex",
293			],
294		}
295
296		cc_object {
297			name: "crtbegin_so",
298			defaults: ["crt_defaults"],
299			recovery_available: true,
300			vendor_available: true,
301			native_bridge_supported: true,
302			stl: "none",
303		}
304
305		cc_object {
306			name: "crtbegin_dynamic",
307			defaults: ["crt_defaults"],
308			recovery_available: true,
309			vendor_available: true,
310			native_bridge_supported: true,
311			stl: "none",
312		}
313
314		cc_object {
315			name: "crtbegin_static",
316			defaults: ["crt_defaults"],
317			recovery_available: true,
318			vendor_available: true,
319			native_bridge_supported: true,
320			stl: "none",
321		}
322
323		cc_object {
324			name: "crtend_so",
325			defaults: ["crt_defaults"],
326			recovery_available: true,
327			vendor_available: true,
328			native_bridge_supported: true,
329			stl: "none",
330		}
331
332		cc_object {
333			name: "crtend_android",
334			defaults: ["crt_defaults"],
335			recovery_available: true,
336			vendor_available: true,
337			native_bridge_supported: true,
338			stl: "none",
339		}
340
341		cc_library {
342			name: "libprotobuf-cpp-lite",
343		}
344
345		cc_library {
346			name: "ndk_libunwind",
347			sdk_version: "current",
348			stl: "none",
349			system_shared_libs: [],
350		}
351
352		cc_library {
353			name: "libc.ndk.current",
354			sdk_version: "current",
355			stl: "none",
356			system_shared_libs: [],
357		}
358
359		cc_library {
360			name: "libm.ndk.current",
361			sdk_version: "current",
362			stl: "none",
363			system_shared_libs: [],
364		}
365
366		cc_library {
367			name: "libdl.ndk.current",
368			sdk_version: "current",
369			stl: "none",
370			system_shared_libs: [],
371		}
372
373		ndk_prebuilt_object {
374			name: "ndk_crtbegin_so.27",
375			sdk_version: "27",
376		}
377
378		ndk_prebuilt_object {
379			name: "ndk_crtend_so.27",
380			sdk_version: "27",
381		}
382
383		ndk_prebuilt_object {
384			name: "ndk_crtbegin_dynamic.27",
385			sdk_version: "27",
386		}
387
388		ndk_prebuilt_object {
389			name: "ndk_crtend_android.27",
390			sdk_version: "27",
391		}
392
393		ndk_prebuilt_shared_stl {
394			name: "ndk_libc++_shared",
395		}
396	`
397
398	for _, os := range oses {
399		if os == android.Fuchsia {
400			ret += `
401		cc_library {
402			name: "libbioniccompat",
403			stl: "none",
404		}
405		cc_library {
406			name: "libcompiler_rt",
407			stl: "none",
408		}
409		`
410		}
411		if os == android.Windows {
412			ret += `
413		toolchain_library {
414			name: "libwinpthread",
415			host_supported: true,
416			enabled: false,
417			target: {
418				windows: {
419					enabled: true,
420				},
421			},
422			src: "",
423		}
424		`
425		}
426	}
427	return ret
428}
429
430func GatherRequiredFilesForTest(fs map[string][]byte) {
431}
432
433func TestConfig(buildDir string, os android.OsType, env map[string]string,
434	bp string, fs map[string][]byte) android.Config {
435
436	// add some modules that are required by the compiler and/or linker
437	bp = bp + GatherRequiredDepsForTest(os)
438
439	mockFS := map[string][]byte{}
440
441	GatherRequiredFilesForTest(mockFS)
442
443	for k, v := range fs {
444		mockFS[k] = v
445	}
446
447	var config android.Config
448	if os == android.Fuchsia {
449		config = android.TestArchConfigFuchsia(buildDir, env, bp, mockFS)
450	} else {
451		config = android.TestArchConfig(buildDir, env, bp, mockFS)
452	}
453
454	return config
455}
456
457func CreateTestContext() *android.TestContext {
458	ctx := android.NewTestArchContext()
459	ctx.RegisterModuleType("cc_fuzz", FuzzFactory)
460	ctx.RegisterModuleType("cc_test", TestFactory)
461	ctx.RegisterModuleType("llndk_headers", llndkHeadersFactory)
462	ctx.RegisterModuleType("ndk_library", NdkLibraryFactory)
463	ctx.RegisterModuleType("vendor_public_library", vendorPublicLibraryFactory)
464	ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
465	ctx.RegisterModuleType("vndk_prebuilt_shared", VndkPrebuiltSharedFactory)
466	ctx.RegisterModuleType("vndk_libraries_txt", VndkLibrariesTxtFactory)
467	ctx.PreArchMutators(android.RegisterDefaultsPreArchMutators)
468	RegisterRequiredBuildComponentsForTest(ctx)
469	ctx.RegisterSingletonType("vndk-snapshot", VndkSnapshotSingleton)
470	ctx.RegisterSingletonType("vendor-snapshot", VendorSnapshotSingleton)
471
472	return ctx
473}
474