xref: /aosp_15_r20/build/soong/cc/testing.go (revision 333d2b3687b3a337dbcca9d65000bca186795e39)
1*333d2b36SAndroid Build Coastguard Worker// Copyright (C) 2019 The Android Open Source Project
2*333d2b36SAndroid Build Coastguard Worker//
3*333d2b36SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License");
4*333d2b36SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License.
5*333d2b36SAndroid Build Coastguard Worker// You may obtain a copy of the License at
6*333d2b36SAndroid Build Coastguard Worker//
7*333d2b36SAndroid Build Coastguard Worker//     http://www.apache.org/licenses/LICENSE-2.0
8*333d2b36SAndroid Build Coastguard Worker//
9*333d2b36SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software
10*333d2b36SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS,
11*333d2b36SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*333d2b36SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and
13*333d2b36SAndroid Build Coastguard Worker// limitations under the License.
14*333d2b36SAndroid Build Coastguard Worker
15*333d2b36SAndroid Build Coastguard Workerpackage cc
16*333d2b36SAndroid Build Coastguard Worker
17*333d2b36SAndroid Build Coastguard Workerimport (
18*333d2b36SAndroid Build Coastguard Worker	"path/filepath"
19*333d2b36SAndroid Build Coastguard Worker	"testing"
20*333d2b36SAndroid Build Coastguard Worker
21*333d2b36SAndroid Build Coastguard Worker	"android/soong/android"
22*333d2b36SAndroid Build Coastguard Worker	"android/soong/genrule"
23*333d2b36SAndroid Build Coastguard Worker)
24*333d2b36SAndroid Build Coastguard Worker
25*333d2b36SAndroid Build Coastguard Workerfunc RegisterRequiredBuildComponentsForTest(ctx android.RegistrationContext) {
26*333d2b36SAndroid Build Coastguard Worker	RegisterPrebuiltBuildComponents(ctx)
27*333d2b36SAndroid Build Coastguard Worker	RegisterCCBuildComponents(ctx)
28*333d2b36SAndroid Build Coastguard Worker	RegisterBinaryBuildComponents(ctx)
29*333d2b36SAndroid Build Coastguard Worker	RegisterLibraryBuildComponents(ctx)
30*333d2b36SAndroid Build Coastguard Worker	RegisterLibraryHeadersBuildComponents(ctx)
31*333d2b36SAndroid Build Coastguard Worker
32*333d2b36SAndroid Build Coastguard Worker	ctx.RegisterModuleType("prebuilt_build_tool", android.NewPrebuiltBuildTool)
33*333d2b36SAndroid Build Coastguard Worker	ctx.RegisterModuleType("cc_benchmark", BenchmarkFactory)
34*333d2b36SAndroid Build Coastguard Worker	ctx.RegisterModuleType("cc_cmake_snapshot", CmakeSnapshotFactory)
35*333d2b36SAndroid Build Coastguard Worker	ctx.RegisterModuleType("cc_object", ObjectFactory)
36*333d2b36SAndroid Build Coastguard Worker	ctx.RegisterModuleType("cc_genrule", GenRuleFactory)
37*333d2b36SAndroid Build Coastguard Worker	ctx.RegisterModuleType("ndk_library", NdkLibraryFactory)
38*333d2b36SAndroid Build Coastguard Worker	ctx.RegisterModuleType("ndk_headers", NdkHeadersFactory)
39*333d2b36SAndroid Build Coastguard Worker}
40*333d2b36SAndroid Build Coastguard Worker
41*333d2b36SAndroid Build Coastguard Workerfunc GatherRequiredDepsForTest(oses ...android.OsType) string {
42*333d2b36SAndroid Build Coastguard Worker	ret := commonDefaultModules()
43*333d2b36SAndroid Build Coastguard Worker
44*333d2b36SAndroid Build Coastguard Worker	supportLinuxBionic := false
45*333d2b36SAndroid Build Coastguard Worker	for _, os := range oses {
46*333d2b36SAndroid Build Coastguard Worker		if os == android.Windows {
47*333d2b36SAndroid Build Coastguard Worker			ret += withWindowsModules()
48*333d2b36SAndroid Build Coastguard Worker		}
49*333d2b36SAndroid Build Coastguard Worker		if os == android.LinuxBionic {
50*333d2b36SAndroid Build Coastguard Worker			supportLinuxBionic = true
51*333d2b36SAndroid Build Coastguard Worker			ret += withLinuxBionic()
52*333d2b36SAndroid Build Coastguard Worker		}
53*333d2b36SAndroid Build Coastguard Worker	}
54*333d2b36SAndroid Build Coastguard Worker
55*333d2b36SAndroid Build Coastguard Worker	if !supportLinuxBionic {
56*333d2b36SAndroid Build Coastguard Worker		ret += withoutLinuxBionic()
57*333d2b36SAndroid Build Coastguard Worker	}
58*333d2b36SAndroid Build Coastguard Worker
59*333d2b36SAndroid Build Coastguard Worker	return ret
60*333d2b36SAndroid Build Coastguard Worker}
61*333d2b36SAndroid Build Coastguard Worker
62*333d2b36SAndroid Build Coastguard Workerfunc commonDefaultModules() string {
63*333d2b36SAndroid Build Coastguard Worker	return `
64*333d2b36SAndroid Build Coastguard Worker		cc_defaults {
65*333d2b36SAndroid Build Coastguard Worker			name: "toolchain_libs_defaults",
66*333d2b36SAndroid Build Coastguard Worker			host_supported: true,
67*333d2b36SAndroid Build Coastguard Worker			vendor_available: true,
68*333d2b36SAndroid Build Coastguard Worker			product_available: true,
69*333d2b36SAndroid Build Coastguard Worker			recovery_available: true,
70*333d2b36SAndroid Build Coastguard Worker			no_libcrt: true,
71*333d2b36SAndroid Build Coastguard Worker			sdk_version: "minimum",
72*333d2b36SAndroid Build Coastguard Worker			nocrt: true,
73*333d2b36SAndroid Build Coastguard Worker			no_crt_pad_segment: true,
74*333d2b36SAndroid Build Coastguard Worker			system_shared_libs: [],
75*333d2b36SAndroid Build Coastguard Worker			stl: "none",
76*333d2b36SAndroid Build Coastguard Worker			check_elf_files: false,
77*333d2b36SAndroid Build Coastguard Worker			sanitize: {
78*333d2b36SAndroid Build Coastguard Worker				never: true,
79*333d2b36SAndroid Build Coastguard Worker			},
80*333d2b36SAndroid Build Coastguard Worker			apex_available: [
81*333d2b36SAndroid Build Coastguard Worker				"//apex_available:anyapex",
82*333d2b36SAndroid Build Coastguard Worker				"//apex_available:platform",
83*333d2b36SAndroid Build Coastguard Worker			],
84*333d2b36SAndroid Build Coastguard Worker		}
85*333d2b36SAndroid Build Coastguard Worker
86*333d2b36SAndroid Build Coastguard Worker		cc_prebuilt_library_static {
87*333d2b36SAndroid Build Coastguard Worker			name: "libcompiler_rt-extras",
88*333d2b36SAndroid Build Coastguard Worker			defaults: ["toolchain_libs_defaults"],
89*333d2b36SAndroid Build Coastguard Worker			vendor_ramdisk_available: true,
90*333d2b36SAndroid Build Coastguard Worker			srcs: [""],
91*333d2b36SAndroid Build Coastguard Worker		}
92*333d2b36SAndroid Build Coastguard Worker
93*333d2b36SAndroid Build Coastguard Worker		cc_prebuilt_library_static {
94*333d2b36SAndroid Build Coastguard Worker			name: "libclang_rt.builtins",
95*333d2b36SAndroid Build Coastguard Worker			defaults: ["toolchain_libs_defaults"],
96*333d2b36SAndroid Build Coastguard Worker			host_supported: true,
97*333d2b36SAndroid Build Coastguard Worker	        vendor_available: true,
98*333d2b36SAndroid Build Coastguard Worker			vendor_ramdisk_available: true,
99*333d2b36SAndroid Build Coastguard Worker			native_bridge_supported: true,
100*333d2b36SAndroid Build Coastguard Worker			srcs: [""],
101*333d2b36SAndroid Build Coastguard Worker		}
102*333d2b36SAndroid Build Coastguard Worker
103*333d2b36SAndroid Build Coastguard Worker		cc_prebuilt_library_shared {
104*333d2b36SAndroid Build Coastguard Worker			name: "libclang_rt.hwasan",
105*333d2b36SAndroid Build Coastguard Worker			defaults: ["toolchain_libs_defaults"],
106*333d2b36SAndroid Build Coastguard Worker			srcs: [""],
107*333d2b36SAndroid Build Coastguard Worker		}
108*333d2b36SAndroid Build Coastguard Worker
109*333d2b36SAndroid Build Coastguard Worker		cc_prebuilt_library_static {
110*333d2b36SAndroid Build Coastguard Worker			name: "libunwind",
111*333d2b36SAndroid Build Coastguard Worker			defaults: [
112*333d2b36SAndroid Build Coastguard Worker				"linux_bionic_supported",
113*333d2b36SAndroid Build Coastguard Worker				"toolchain_libs_defaults",
114*333d2b36SAndroid Build Coastguard Worker			],
115*333d2b36SAndroid Build Coastguard Worker			vendor_ramdisk_available: true,
116*333d2b36SAndroid Build Coastguard Worker			native_bridge_supported: true,
117*333d2b36SAndroid Build Coastguard Worker			srcs: [""],
118*333d2b36SAndroid Build Coastguard Worker		}
119*333d2b36SAndroid Build Coastguard Worker
120*333d2b36SAndroid Build Coastguard Worker		cc_prebuilt_library_static {
121*333d2b36SAndroid Build Coastguard Worker			name: "libclang_rt.fuzzer",
122*333d2b36SAndroid Build Coastguard Worker			defaults: [
123*333d2b36SAndroid Build Coastguard Worker				"linux_bionic_supported",
124*333d2b36SAndroid Build Coastguard Worker				"toolchain_libs_defaults",
125*333d2b36SAndroid Build Coastguard Worker			],
126*333d2b36SAndroid Build Coastguard Worker			srcs: [""],
127*333d2b36SAndroid Build Coastguard Worker		}
128*333d2b36SAndroid Build Coastguard Worker
129*333d2b36SAndroid Build Coastguard Worker		// Needed for sanitizer
130*333d2b36SAndroid Build Coastguard Worker		cc_prebuilt_library_shared {
131*333d2b36SAndroid Build Coastguard Worker			name: "libclang_rt.ubsan_standalone",
132*333d2b36SAndroid Build Coastguard Worker			defaults: ["toolchain_libs_defaults"],
133*333d2b36SAndroid Build Coastguard Worker			srcs: [""],
134*333d2b36SAndroid Build Coastguard Worker		}
135*333d2b36SAndroid Build Coastguard Worker
136*333d2b36SAndroid Build Coastguard Worker		cc_prebuilt_library_static {
137*333d2b36SAndroid Build Coastguard Worker			name: "libclang_rt.ubsan_standalone.static",
138*333d2b36SAndroid Build Coastguard Worker			defaults: ["toolchain_libs_defaults"],
139*333d2b36SAndroid Build Coastguard Worker			srcs: [""],
140*333d2b36SAndroid Build Coastguard Worker		}
141*333d2b36SAndroid Build Coastguard Worker
142*333d2b36SAndroid Build Coastguard Worker		cc_prebuilt_library_static {
143*333d2b36SAndroid Build Coastguard Worker			name: "libclang_rt.ubsan_minimal",
144*333d2b36SAndroid Build Coastguard Worker			defaults: ["toolchain_libs_defaults"],
145*333d2b36SAndroid Build Coastguard Worker			host_supported: true,
146*333d2b36SAndroid Build Coastguard Worker			target: {
147*333d2b36SAndroid Build Coastguard Worker				android_arm64: {
148*333d2b36SAndroid Build Coastguard Worker					srcs: ["libclang_rt.ubsan_minimal.android_arm64.a"],
149*333d2b36SAndroid Build Coastguard Worker				},
150*333d2b36SAndroid Build Coastguard Worker				android_arm: {
151*333d2b36SAndroid Build Coastguard Worker					srcs: ["libclang_rt.ubsan_minimal.android_arm.a"],
152*333d2b36SAndroid Build Coastguard Worker				},
153*333d2b36SAndroid Build Coastguard Worker				linux_glibc_x86_64: {
154*333d2b36SAndroid Build Coastguard Worker					srcs: ["libclang_rt.ubsan_minimal.x86_64.a"],
155*333d2b36SAndroid Build Coastguard Worker				},
156*333d2b36SAndroid Build Coastguard Worker				linux_glibc_x86: {
157*333d2b36SAndroid Build Coastguard Worker					srcs: ["libclang_rt.ubsan_minimal.x86.a"],
158*333d2b36SAndroid Build Coastguard Worker				},
159*333d2b36SAndroid Build Coastguard Worker				linux_musl_x86_64: {
160*333d2b36SAndroid Build Coastguard Worker					srcs: ["libclang_rt.ubsan_minimal.x86_64.a"],
161*333d2b36SAndroid Build Coastguard Worker				},
162*333d2b36SAndroid Build Coastguard Worker				linux_musl_x86: {
163*333d2b36SAndroid Build Coastguard Worker					srcs: ["libclang_rt.ubsan_minimal.x86.a"],
164*333d2b36SAndroid Build Coastguard Worker				},
165*333d2b36SAndroid Build Coastguard Worker			},
166*333d2b36SAndroid Build Coastguard Worker		}
167*333d2b36SAndroid Build Coastguard Worker
168*333d2b36SAndroid Build Coastguard Worker		cc_library {
169*333d2b36SAndroid Build Coastguard Worker			name: "libc",
170*333d2b36SAndroid Build Coastguard Worker			defaults: ["linux_bionic_supported"],
171*333d2b36SAndroid Build Coastguard Worker			no_libcrt: true,
172*333d2b36SAndroid Build Coastguard Worker			nocrt: true,
173*333d2b36SAndroid Build Coastguard Worker			stl: "none",
174*333d2b36SAndroid Build Coastguard Worker			system_shared_libs: [],
175*333d2b36SAndroid Build Coastguard Worker			recovery_available: true,
176*333d2b36SAndroid Build Coastguard Worker			stubs: {
177*333d2b36SAndroid Build Coastguard Worker				versions: ["27", "28", "29"],
178*333d2b36SAndroid Build Coastguard Worker			},
179*333d2b36SAndroid Build Coastguard Worker			llndk: {
180*333d2b36SAndroid Build Coastguard Worker				symbol_file: "libc.map.txt",
181*333d2b36SAndroid Build Coastguard Worker			},
182*333d2b36SAndroid Build Coastguard Worker		}
183*333d2b36SAndroid Build Coastguard Worker		cc_library {
184*333d2b36SAndroid Build Coastguard Worker			name: "libm",
185*333d2b36SAndroid Build Coastguard Worker			defaults: ["linux_bionic_supported"],
186*333d2b36SAndroid Build Coastguard Worker			no_libcrt: true,
187*333d2b36SAndroid Build Coastguard Worker			nocrt: true,
188*333d2b36SAndroid Build Coastguard Worker			stl: "none",
189*333d2b36SAndroid Build Coastguard Worker			system_shared_libs: [],
190*333d2b36SAndroid Build Coastguard Worker			recovery_available: true,
191*333d2b36SAndroid Build Coastguard Worker			stubs: {
192*333d2b36SAndroid Build Coastguard Worker				versions: ["27", "28", "29"],
193*333d2b36SAndroid Build Coastguard Worker			},
194*333d2b36SAndroid Build Coastguard Worker			apex_available: [
195*333d2b36SAndroid Build Coastguard Worker				"//apex_available:platform",
196*333d2b36SAndroid Build Coastguard Worker				"myapex"
197*333d2b36SAndroid Build Coastguard Worker			],
198*333d2b36SAndroid Build Coastguard Worker			llndk: {
199*333d2b36SAndroid Build Coastguard Worker				symbol_file: "libm.map.txt",
200*333d2b36SAndroid Build Coastguard Worker			},
201*333d2b36SAndroid Build Coastguard Worker		}
202*333d2b36SAndroid Build Coastguard Worker
203*333d2b36SAndroid Build Coastguard Worker		// Coverage libraries
204*333d2b36SAndroid Build Coastguard Worker		cc_library {
205*333d2b36SAndroid Build Coastguard Worker			name: "libprofile-extras",
206*333d2b36SAndroid Build Coastguard Worker			vendor_available: true,
207*333d2b36SAndroid Build Coastguard Worker			vendor_ramdisk_available: true,
208*333d2b36SAndroid Build Coastguard Worker			product_available: true,
209*333d2b36SAndroid Build Coastguard Worker			recovery_available: true,
210*333d2b36SAndroid Build Coastguard Worker			native_coverage: false,
211*333d2b36SAndroid Build Coastguard Worker			system_shared_libs: [],
212*333d2b36SAndroid Build Coastguard Worker			stl: "none",
213*333d2b36SAndroid Build Coastguard Worker		}
214*333d2b36SAndroid Build Coastguard Worker		cc_library {
215*333d2b36SAndroid Build Coastguard Worker			name: "libprofile-clang-extras",
216*333d2b36SAndroid Build Coastguard Worker			vendor_available: true,
217*333d2b36SAndroid Build Coastguard Worker			vendor_ramdisk_available: true,
218*333d2b36SAndroid Build Coastguard Worker			product_available: true,
219*333d2b36SAndroid Build Coastguard Worker			recovery_available: true,
220*333d2b36SAndroid Build Coastguard Worker			native_coverage: false,
221*333d2b36SAndroid Build Coastguard Worker			system_shared_libs: [],
222*333d2b36SAndroid Build Coastguard Worker			stl: "none",
223*333d2b36SAndroid Build Coastguard Worker		}
224*333d2b36SAndroid Build Coastguard Worker		cc_library {
225*333d2b36SAndroid Build Coastguard Worker			name: "libprofile-extras_ndk",
226*333d2b36SAndroid Build Coastguard Worker			vendor_available: true,
227*333d2b36SAndroid Build Coastguard Worker			product_available: true,
228*333d2b36SAndroid Build Coastguard Worker			native_coverage: false,
229*333d2b36SAndroid Build Coastguard Worker			system_shared_libs: [],
230*333d2b36SAndroid Build Coastguard Worker			stl: "none",
231*333d2b36SAndroid Build Coastguard Worker			sdk_version: "current",
232*333d2b36SAndroid Build Coastguard Worker		}
233*333d2b36SAndroid Build Coastguard Worker		cc_library {
234*333d2b36SAndroid Build Coastguard Worker			name: "libprofile-clang-extras_ndk",
235*333d2b36SAndroid Build Coastguard Worker			vendor_available: true,
236*333d2b36SAndroid Build Coastguard Worker			product_available: true,
237*333d2b36SAndroid Build Coastguard Worker			native_coverage: false,
238*333d2b36SAndroid Build Coastguard Worker			system_shared_libs: [],
239*333d2b36SAndroid Build Coastguard Worker			stl: "none",
240*333d2b36SAndroid Build Coastguard Worker			sdk_version: "current",
241*333d2b36SAndroid Build Coastguard Worker		}
242*333d2b36SAndroid Build Coastguard Worker
243*333d2b36SAndroid Build Coastguard Worker		cc_library {
244*333d2b36SAndroid Build Coastguard Worker			name: "libdl",
245*333d2b36SAndroid Build Coastguard Worker			defaults: ["linux_bionic_supported"],
246*333d2b36SAndroid Build Coastguard Worker			no_libcrt: true,
247*333d2b36SAndroid Build Coastguard Worker			nocrt: true,
248*333d2b36SAndroid Build Coastguard Worker			stl: "none",
249*333d2b36SAndroid Build Coastguard Worker			system_shared_libs: [],
250*333d2b36SAndroid Build Coastguard Worker			recovery_available: true,
251*333d2b36SAndroid Build Coastguard Worker			stubs: {
252*333d2b36SAndroid Build Coastguard Worker				versions: ["27", "28", "29"],
253*333d2b36SAndroid Build Coastguard Worker			},
254*333d2b36SAndroid Build Coastguard Worker			apex_available: [
255*333d2b36SAndroid Build Coastguard Worker				"//apex_available:platform",
256*333d2b36SAndroid Build Coastguard Worker				"myapex"
257*333d2b36SAndroid Build Coastguard Worker			],
258*333d2b36SAndroid Build Coastguard Worker			llndk: {
259*333d2b36SAndroid Build Coastguard Worker				symbol_file: "libdl.map.txt",
260*333d2b36SAndroid Build Coastguard Worker			},
261*333d2b36SAndroid Build Coastguard Worker		}
262*333d2b36SAndroid Build Coastguard Worker		cc_library {
263*333d2b36SAndroid Build Coastguard Worker			name: "libft2",
264*333d2b36SAndroid Build Coastguard Worker			no_libcrt: true,
265*333d2b36SAndroid Build Coastguard Worker			nocrt: true,
266*333d2b36SAndroid Build Coastguard Worker			system_shared_libs: [],
267*333d2b36SAndroid Build Coastguard Worker			recovery_available: true,
268*333d2b36SAndroid Build Coastguard Worker			llndk: {
269*333d2b36SAndroid Build Coastguard Worker				symbol_file: "libft2.map.txt",
270*333d2b36SAndroid Build Coastguard Worker				private: true,
271*333d2b36SAndroid Build Coastguard Worker			}
272*333d2b36SAndroid Build Coastguard Worker		}
273*333d2b36SAndroid Build Coastguard Worker		cc_library {
274*333d2b36SAndroid Build Coastguard Worker			name: "libc++_static",
275*333d2b36SAndroid Build Coastguard Worker			no_libcrt: true,
276*333d2b36SAndroid Build Coastguard Worker			nocrt: true,
277*333d2b36SAndroid Build Coastguard Worker			system_shared_libs: [],
278*333d2b36SAndroid Build Coastguard Worker			stl: "none",
279*333d2b36SAndroid Build Coastguard Worker			vendor_available: true,
280*333d2b36SAndroid Build Coastguard Worker			vendor_ramdisk_available: true,
281*333d2b36SAndroid Build Coastguard Worker			product_available: true,
282*333d2b36SAndroid Build Coastguard Worker			recovery_available: true,
283*333d2b36SAndroid Build Coastguard Worker			host_supported: true,
284*333d2b36SAndroid Build Coastguard Worker			min_sdk_version: "29",
285*333d2b36SAndroid Build Coastguard Worker			apex_available: [
286*333d2b36SAndroid Build Coastguard Worker				"//apex_available:platform",
287*333d2b36SAndroid Build Coastguard Worker				"//apex_available:anyapex",
288*333d2b36SAndroid Build Coastguard Worker			],
289*333d2b36SAndroid Build Coastguard Worker		}
290*333d2b36SAndroid Build Coastguard Worker		cc_library {
291*333d2b36SAndroid Build Coastguard Worker			name: "libc++",
292*333d2b36SAndroid Build Coastguard Worker			no_libcrt: true,
293*333d2b36SAndroid Build Coastguard Worker			nocrt: true,
294*333d2b36SAndroid Build Coastguard Worker			system_shared_libs: [],
295*333d2b36SAndroid Build Coastguard Worker			stl: "none",
296*333d2b36SAndroid Build Coastguard Worker			vendor_available: true,
297*333d2b36SAndroid Build Coastguard Worker			vendor_ramdisk_available: true,
298*333d2b36SAndroid Build Coastguard Worker			product_available: true,
299*333d2b36SAndroid Build Coastguard Worker			recovery_available: true,
300*333d2b36SAndroid Build Coastguard Worker			host_supported: true,
301*333d2b36SAndroid Build Coastguard Worker			min_sdk_version: "29",
302*333d2b36SAndroid Build Coastguard Worker			double_loadable: true,
303*333d2b36SAndroid Build Coastguard Worker			apex_available: [
304*333d2b36SAndroid Build Coastguard Worker				"//apex_available:platform",
305*333d2b36SAndroid Build Coastguard Worker				"//apex_available:anyapex",
306*333d2b36SAndroid Build Coastguard Worker			],
307*333d2b36SAndroid Build Coastguard Worker		}
308*333d2b36SAndroid Build Coastguard Worker		cc_library {
309*333d2b36SAndroid Build Coastguard Worker			name: "ndk_libc++_shared",
310*333d2b36SAndroid Build Coastguard Worker			export_include_dirs: ["ndk_libc++_shared_include_dirs"],
311*333d2b36SAndroid Build Coastguard Worker			no_libcrt: true,
312*333d2b36SAndroid Build Coastguard Worker			nocrt: true,
313*333d2b36SAndroid Build Coastguard Worker			system_shared_libs: [],
314*333d2b36SAndroid Build Coastguard Worker			stl: "none",
315*333d2b36SAndroid Build Coastguard Worker			vendor_available: true,
316*333d2b36SAndroid Build Coastguard Worker			vendor_ramdisk_available: true,
317*333d2b36SAndroid Build Coastguard Worker			product_available: true,
318*333d2b36SAndroid Build Coastguard Worker			recovery_available: true,
319*333d2b36SAndroid Build Coastguard Worker			host_supported: false,
320*333d2b36SAndroid Build Coastguard Worker			sdk_version: "minimum",
321*333d2b36SAndroid Build Coastguard Worker			double_loadable: true,
322*333d2b36SAndroid Build Coastguard Worker			apex_available: [
323*333d2b36SAndroid Build Coastguard Worker				"//apex_available:platform",
324*333d2b36SAndroid Build Coastguard Worker				"//apex_available:anyapex",
325*333d2b36SAndroid Build Coastguard Worker			],
326*333d2b36SAndroid Build Coastguard Worker		}
327*333d2b36SAndroid Build Coastguard Worker		cc_library {
328*333d2b36SAndroid Build Coastguard Worker			name: "libc++demangle",
329*333d2b36SAndroid Build Coastguard Worker			no_libcrt: true,
330*333d2b36SAndroid Build Coastguard Worker			nocrt: true,
331*333d2b36SAndroid Build Coastguard Worker			system_shared_libs: [],
332*333d2b36SAndroid Build Coastguard Worker			stl: "none",
333*333d2b36SAndroid Build Coastguard Worker			host_supported: false,
334*333d2b36SAndroid Build Coastguard Worker			vendor_available: true,
335*333d2b36SAndroid Build Coastguard Worker			vendor_ramdisk_available: true,
336*333d2b36SAndroid Build Coastguard Worker			product_available: true,
337*333d2b36SAndroid Build Coastguard Worker			recovery_available: true,
338*333d2b36SAndroid Build Coastguard Worker			min_sdk_version: "29",
339*333d2b36SAndroid Build Coastguard Worker			apex_available: [
340*333d2b36SAndroid Build Coastguard Worker				"//apex_available:platform",
341*333d2b36SAndroid Build Coastguard Worker				"//apex_available:anyapex",
342*333d2b36SAndroid Build Coastguard Worker			],
343*333d2b36SAndroid Build Coastguard Worker		}
344*333d2b36SAndroid Build Coastguard Worker
345*333d2b36SAndroid Build Coastguard Worker		cc_defaults {
346*333d2b36SAndroid Build Coastguard Worker			name: "crt_defaults",
347*333d2b36SAndroid Build Coastguard Worker			defaults: ["linux_bionic_supported"],
348*333d2b36SAndroid Build Coastguard Worker			recovery_available: true,
349*333d2b36SAndroid Build Coastguard Worker			vendor_available: true,
350*333d2b36SAndroid Build Coastguard Worker			vendor_ramdisk_available: true,
351*333d2b36SAndroid Build Coastguard Worker			product_available: true,
352*333d2b36SAndroid Build Coastguard Worker			native_bridge_supported: true,
353*333d2b36SAndroid Build Coastguard Worker			stl: "none",
354*333d2b36SAndroid Build Coastguard Worker			min_sdk_version: "16",
355*333d2b36SAndroid Build Coastguard Worker			crt: true,
356*333d2b36SAndroid Build Coastguard Worker			system_shared_libs: [],
357*333d2b36SAndroid Build Coastguard Worker			apex_available: [
358*333d2b36SAndroid Build Coastguard Worker				"//apex_available:platform",
359*333d2b36SAndroid Build Coastguard Worker				"//apex_available:anyapex",
360*333d2b36SAndroid Build Coastguard Worker			],
361*333d2b36SAndroid Build Coastguard Worker		}
362*333d2b36SAndroid Build Coastguard Worker
363*333d2b36SAndroid Build Coastguard Worker		cc_object {
364*333d2b36SAndroid Build Coastguard Worker			name: "crtbegin_so",
365*333d2b36SAndroid Build Coastguard Worker			defaults: ["crt_defaults"],
366*333d2b36SAndroid Build Coastguard Worker			srcs: ["crtbegin_so.c"],
367*333d2b36SAndroid Build Coastguard Worker			objs: ["crtbrand"],
368*333d2b36SAndroid Build Coastguard Worker		}
369*333d2b36SAndroid Build Coastguard Worker
370*333d2b36SAndroid Build Coastguard Worker		cc_object {
371*333d2b36SAndroid Build Coastguard Worker			name: "crtbegin_dynamic",
372*333d2b36SAndroid Build Coastguard Worker			defaults: ["crt_defaults"],
373*333d2b36SAndroid Build Coastguard Worker			srcs: ["crtbegin.c"],
374*333d2b36SAndroid Build Coastguard Worker			objs: ["crtbrand"],
375*333d2b36SAndroid Build Coastguard Worker		}
376*333d2b36SAndroid Build Coastguard Worker
377*333d2b36SAndroid Build Coastguard Worker		cc_object {
378*333d2b36SAndroid Build Coastguard Worker			name: "crtbegin_static",
379*333d2b36SAndroid Build Coastguard Worker			defaults: ["crt_defaults"],
380*333d2b36SAndroid Build Coastguard Worker			srcs: ["crtbegin.c"],
381*333d2b36SAndroid Build Coastguard Worker			objs: ["crtbrand"],
382*333d2b36SAndroid Build Coastguard Worker		}
383*333d2b36SAndroid Build Coastguard Worker
384*333d2b36SAndroid Build Coastguard Worker		cc_object {
385*333d2b36SAndroid Build Coastguard Worker			name: "crtend_so",
386*333d2b36SAndroid Build Coastguard Worker			defaults: ["crt_defaults"],
387*333d2b36SAndroid Build Coastguard Worker			srcs: ["crtend_so.c"],
388*333d2b36SAndroid Build Coastguard Worker			objs: ["crtbrand"],
389*333d2b36SAndroid Build Coastguard Worker		}
390*333d2b36SAndroid Build Coastguard Worker
391*333d2b36SAndroid Build Coastguard Worker		cc_object {
392*333d2b36SAndroid Build Coastguard Worker			name: "crtend_android",
393*333d2b36SAndroid Build Coastguard Worker			defaults: ["crt_defaults"],
394*333d2b36SAndroid Build Coastguard Worker			srcs: ["crtend.c"],
395*333d2b36SAndroid Build Coastguard Worker			objs: ["crtbrand"],
396*333d2b36SAndroid Build Coastguard Worker		}
397*333d2b36SAndroid Build Coastguard Worker
398*333d2b36SAndroid Build Coastguard Worker		cc_object {
399*333d2b36SAndroid Build Coastguard Worker			name: "crt_pad_segment",
400*333d2b36SAndroid Build Coastguard Worker			defaults: ["crt_defaults"],
401*333d2b36SAndroid Build Coastguard Worker		}
402*333d2b36SAndroid Build Coastguard Worker
403*333d2b36SAndroid Build Coastguard Worker		cc_object {
404*333d2b36SAndroid Build Coastguard Worker			name: "crtbrand",
405*333d2b36SAndroid Build Coastguard Worker			defaults: ["crt_defaults"],
406*333d2b36SAndroid Build Coastguard Worker			srcs: ["crtbrand.c"],
407*333d2b36SAndroid Build Coastguard Worker		}
408*333d2b36SAndroid Build Coastguard Worker
409*333d2b36SAndroid Build Coastguard Worker		cc_library {
410*333d2b36SAndroid Build Coastguard Worker			name: "libprotobuf-cpp-lite",
411*333d2b36SAndroid Build Coastguard Worker		}
412*333d2b36SAndroid Build Coastguard Worker
413*333d2b36SAndroid Build Coastguard Worker		ndk_library {
414*333d2b36SAndroid Build Coastguard Worker			name: "libc",
415*333d2b36SAndroid Build Coastguard Worker			first_version: "minimum",
416*333d2b36SAndroid Build Coastguard Worker			symbol_file: "libc.map.txt",
417*333d2b36SAndroid Build Coastguard Worker		}
418*333d2b36SAndroid Build Coastguard Worker
419*333d2b36SAndroid Build Coastguard Worker		ndk_library {
420*333d2b36SAndroid Build Coastguard Worker			name: "libm",
421*333d2b36SAndroid Build Coastguard Worker			first_version: "minimum",
422*333d2b36SAndroid Build Coastguard Worker			symbol_file: "libm.map.txt",
423*333d2b36SAndroid Build Coastguard Worker		}
424*333d2b36SAndroid Build Coastguard Worker
425*333d2b36SAndroid Build Coastguard Worker		ndk_library {
426*333d2b36SAndroid Build Coastguard Worker			name: "libdl",
427*333d2b36SAndroid Build Coastguard Worker			first_version: "minimum",
428*333d2b36SAndroid Build Coastguard Worker			symbol_file: "libdl.map.txt",
429*333d2b36SAndroid Build Coastguard Worker		}
430*333d2b36SAndroid Build Coastguard Worker
431*333d2b36SAndroid Build Coastguard Worker		cc_library_static {
432*333d2b36SAndroid Build Coastguard Worker			name: "libgoogle-benchmark",
433*333d2b36SAndroid Build Coastguard Worker			sdk_version: "current",
434*333d2b36SAndroid Build Coastguard Worker			stl: "none",
435*333d2b36SAndroid Build Coastguard Worker			system_shared_libs: [],
436*333d2b36SAndroid Build Coastguard Worker		}
437*333d2b36SAndroid Build Coastguard Worker
438*333d2b36SAndroid Build Coastguard Worker		cc_library_static {
439*333d2b36SAndroid Build Coastguard Worker			name: "note_memtag_heap_async",
440*333d2b36SAndroid Build Coastguard Worker		}
441*333d2b36SAndroid Build Coastguard Worker
442*333d2b36SAndroid Build Coastguard Worker		cc_library_static {
443*333d2b36SAndroid Build Coastguard Worker			name: "note_memtag_heap_sync",
444*333d2b36SAndroid Build Coastguard Worker		}
445*333d2b36SAndroid Build Coastguard Worker
446*333d2b36SAndroid Build Coastguard Worker		cc_library {
447*333d2b36SAndroid Build Coastguard Worker			name: "libc_musl",
448*333d2b36SAndroid Build Coastguard Worker			host_supported: true,
449*333d2b36SAndroid Build Coastguard Worker			no_libcrt: true,
450*333d2b36SAndroid Build Coastguard Worker			nocrt: true,
451*333d2b36SAndroid Build Coastguard Worker			system_shared_libs: [],
452*333d2b36SAndroid Build Coastguard Worker			stl: "none",
453*333d2b36SAndroid Build Coastguard Worker		}
454*333d2b36SAndroid Build Coastguard Worker	`
455*333d2b36SAndroid Build Coastguard Worker}
456*333d2b36SAndroid Build Coastguard Worker
457*333d2b36SAndroid Build Coastguard Workerfunc withWindowsModules() string {
458*333d2b36SAndroid Build Coastguard Worker	return `
459*333d2b36SAndroid Build Coastguard Worker		cc_prebuilt_library_static {
460*333d2b36SAndroid Build Coastguard Worker			name: "libwinpthread",
461*333d2b36SAndroid Build Coastguard Worker			host_supported: true,
462*333d2b36SAndroid Build Coastguard Worker			enabled: false,
463*333d2b36SAndroid Build Coastguard Worker			target: {
464*333d2b36SAndroid Build Coastguard Worker				windows: {
465*333d2b36SAndroid Build Coastguard Worker					enabled: true,
466*333d2b36SAndroid Build Coastguard Worker				},
467*333d2b36SAndroid Build Coastguard Worker			},
468*333d2b36SAndroid Build Coastguard Worker			stl: "none",
469*333d2b36SAndroid Build Coastguard Worker			srcs:[""],
470*333d2b36SAndroid Build Coastguard Worker		}
471*333d2b36SAndroid Build Coastguard Worker		`
472*333d2b36SAndroid Build Coastguard Worker}
473*333d2b36SAndroid Build Coastguard Worker
474*333d2b36SAndroid Build Coastguard Workerfunc withLinuxBionic() string {
475*333d2b36SAndroid Build Coastguard Worker	return `
476*333d2b36SAndroid Build Coastguard Worker				cc_binary {
477*333d2b36SAndroid Build Coastguard Worker					name: "linker",
478*333d2b36SAndroid Build Coastguard Worker					defaults: ["linux_bionic_supported"],
479*333d2b36SAndroid Build Coastguard Worker					recovery_available: true,
480*333d2b36SAndroid Build Coastguard Worker					stl: "none",
481*333d2b36SAndroid Build Coastguard Worker					nocrt: true,
482*333d2b36SAndroid Build Coastguard Worker					static_executable: true,
483*333d2b36SAndroid Build Coastguard Worker					native_coverage: false,
484*333d2b36SAndroid Build Coastguard Worker					system_shared_libs: [],
485*333d2b36SAndroid Build Coastguard Worker				}
486*333d2b36SAndroid Build Coastguard Worker
487*333d2b36SAndroid Build Coastguard Worker				cc_genrule {
488*333d2b36SAndroid Build Coastguard Worker					name: "host_bionic_linker_script",
489*333d2b36SAndroid Build Coastguard Worker					host_supported: true,
490*333d2b36SAndroid Build Coastguard Worker					device_supported: false,
491*333d2b36SAndroid Build Coastguard Worker					target: {
492*333d2b36SAndroid Build Coastguard Worker						host: {
493*333d2b36SAndroid Build Coastguard Worker							enabled: false,
494*333d2b36SAndroid Build Coastguard Worker						},
495*333d2b36SAndroid Build Coastguard Worker						linux_bionic: {
496*333d2b36SAndroid Build Coastguard Worker							enabled: true,
497*333d2b36SAndroid Build Coastguard Worker						},
498*333d2b36SAndroid Build Coastguard Worker					},
499*333d2b36SAndroid Build Coastguard Worker					out: ["linker.script"],
500*333d2b36SAndroid Build Coastguard Worker				}
501*333d2b36SAndroid Build Coastguard Worker
502*333d2b36SAndroid Build Coastguard Worker				cc_defaults {
503*333d2b36SAndroid Build Coastguard Worker					name: "linux_bionic_supported",
504*333d2b36SAndroid Build Coastguard Worker					host_supported: true,
505*333d2b36SAndroid Build Coastguard Worker					target: {
506*333d2b36SAndroid Build Coastguard Worker						host: {
507*333d2b36SAndroid Build Coastguard Worker							enabled: false,
508*333d2b36SAndroid Build Coastguard Worker						},
509*333d2b36SAndroid Build Coastguard Worker						linux_bionic: {
510*333d2b36SAndroid Build Coastguard Worker							enabled: true,
511*333d2b36SAndroid Build Coastguard Worker						},
512*333d2b36SAndroid Build Coastguard Worker					},
513*333d2b36SAndroid Build Coastguard Worker				}
514*333d2b36SAndroid Build Coastguard Worker			`
515*333d2b36SAndroid Build Coastguard Worker}
516*333d2b36SAndroid Build Coastguard Worker
517*333d2b36SAndroid Build Coastguard Workerfunc withoutLinuxBionic() string {
518*333d2b36SAndroid Build Coastguard Worker	return `
519*333d2b36SAndroid Build Coastguard Worker			cc_defaults {
520*333d2b36SAndroid Build Coastguard Worker				name: "linux_bionic_supported",
521*333d2b36SAndroid Build Coastguard Worker			}
522*333d2b36SAndroid Build Coastguard Worker		`
523*333d2b36SAndroid Build Coastguard Worker}
524*333d2b36SAndroid Build Coastguard Worker
525*333d2b36SAndroid Build Coastguard Workerfunc GatherRequiredFilesForTest(fs map[string][]byte) {
526*333d2b36SAndroid Build Coastguard Worker}
527*333d2b36SAndroid Build Coastguard Worker
528*333d2b36SAndroid Build Coastguard Worker// The directory in which cc linux bionic default modules will be defined.
529*333d2b36SAndroid Build Coastguard Worker//
530*333d2b36SAndroid Build Coastguard Worker// Placing them here ensures that their location does not conflict with default test modules
531*333d2b36SAndroid Build Coastguard Worker// defined by other packages.
532*333d2b36SAndroid Build Coastguard Workerconst linuxBionicDefaultsPath = "defaults/cc/linux-bionic/Android.bp"
533*333d2b36SAndroid Build Coastguard Worker
534*333d2b36SAndroid Build Coastguard Worker// The directory in which the default cc common test modules will be defined.
535*333d2b36SAndroid Build Coastguard Worker//
536*333d2b36SAndroid Build Coastguard Worker// Placing them here ensures that their location does not conflict with default test modules
537*333d2b36SAndroid Build Coastguard Worker// defined by other packages.
538*333d2b36SAndroid Build Coastguard Workerconst DefaultCcCommonTestModulesDir = "defaults/cc/common/"
539*333d2b36SAndroid Build Coastguard Worker
540*333d2b36SAndroid Build Coastguard Worker// Test fixture preparer that will register most cc build components.
541*333d2b36SAndroid Build Coastguard Worker//
542*333d2b36SAndroid Build Coastguard Worker// Singletons and mutators should only be added here if they are needed for a majority of cc
543*333d2b36SAndroid Build Coastguard Worker// module types, otherwise they should be added under a separate preparer to allow them to be
544*333d2b36SAndroid Build Coastguard Worker// selected only when needed to reduce test execution time.
545*333d2b36SAndroid Build Coastguard Worker//
546*333d2b36SAndroid Build Coastguard Worker// Module types do not have much of an overhead unless they are used so this should include as many
547*333d2b36SAndroid Build Coastguard Worker// module types as possible. The exceptions are those module types that require mutators and/or
548*333d2b36SAndroid Build Coastguard Worker// singletons in order to function in which case they should be kept together in a separate
549*333d2b36SAndroid Build Coastguard Worker// preparer.
550*333d2b36SAndroid Build Coastguard Workervar PrepareForTestWithCcBuildComponents = android.GroupFixturePreparers(
551*333d2b36SAndroid Build Coastguard Worker	android.PrepareForTestWithAndroidBuildComponents,
552*333d2b36SAndroid Build Coastguard Worker	android.FixtureRegisterWithContext(RegisterRequiredBuildComponentsForTest),
553*333d2b36SAndroid Build Coastguard Worker	android.FixtureRegisterWithContext(func(ctx android.RegistrationContext) {
554*333d2b36SAndroid Build Coastguard Worker		ctx.RegisterModuleType("cc_fuzz", LibFuzzFactory)
555*333d2b36SAndroid Build Coastguard Worker		ctx.RegisterModuleType("cc_test", TestFactory)
556*333d2b36SAndroid Build Coastguard Worker		ctx.RegisterModuleType("cc_test_library", TestLibraryFactory)
557*333d2b36SAndroid Build Coastguard Worker		ctx.RegisterModuleType("vndk_prebuilt_shared", VndkPrebuiltSharedFactory)
558*333d2b36SAndroid Build Coastguard Worker
559*333d2b36SAndroid Build Coastguard Worker		RegisterLlndkLibraryTxtType(ctx)
560*333d2b36SAndroid Build Coastguard Worker	}),
561*333d2b36SAndroid Build Coastguard Worker)
562*333d2b36SAndroid Build Coastguard Worker
563*333d2b36SAndroid Build Coastguard Worker// Preparer that will define default cc modules, e.g. standard prebuilt modules.
564*333d2b36SAndroid Build Coastguard Workervar PrepareForTestWithCcDefaultModules = android.GroupFixturePreparers(
565*333d2b36SAndroid Build Coastguard Worker	PrepareForTestWithCcBuildComponents,
566*333d2b36SAndroid Build Coastguard Worker
567*333d2b36SAndroid Build Coastguard Worker	// Additional files needed in tests that disallow non-existent source.
568*333d2b36SAndroid Build Coastguard Worker	android.MockFS{
569*333d2b36SAndroid Build Coastguard Worker		"defaults/cc/common/libc.map.txt":                   nil,
570*333d2b36SAndroid Build Coastguard Worker		"defaults/cc/common/libdl.map.txt":                  nil,
571*333d2b36SAndroid Build Coastguard Worker		"defaults/cc/common/libft2.map.txt":                 nil,
572*333d2b36SAndroid Build Coastguard Worker		"defaults/cc/common/libm.map.txt":                   nil,
573*333d2b36SAndroid Build Coastguard Worker		"defaults/cc/common/ndk_libc++_shared_include_dirs": nil,
574*333d2b36SAndroid Build Coastguard Worker		"defaults/cc/common/crtbegin_so.c":                  nil,
575*333d2b36SAndroid Build Coastguard Worker		"defaults/cc/common/crtbegin.c":                     nil,
576*333d2b36SAndroid Build Coastguard Worker		"defaults/cc/common/crtend_so.c":                    nil,
577*333d2b36SAndroid Build Coastguard Worker		"defaults/cc/common/crtend.c":                       nil,
578*333d2b36SAndroid Build Coastguard Worker		"defaults/cc/common/crtbrand.c":                     nil,
579*333d2b36SAndroid Build Coastguard Worker		"external/compiler-rt/lib/cfi/cfi_blocklist.txt":    nil,
580*333d2b36SAndroid Build Coastguard Worker
581*333d2b36SAndroid Build Coastguard Worker		"defaults/cc/common/libclang_rt.ubsan_minimal.android_arm64.a": nil,
582*333d2b36SAndroid Build Coastguard Worker		"defaults/cc/common/libclang_rt.ubsan_minimal.android_arm.a":   nil,
583*333d2b36SAndroid Build Coastguard Worker		"defaults/cc/common/libclang_rt.ubsan_minimal.x86_64.a":        nil,
584*333d2b36SAndroid Build Coastguard Worker		"defaults/cc/common/libclang_rt.ubsan_minimal.x86.a":           nil,
585*333d2b36SAndroid Build Coastguard Worker	}.AddToFixture(),
586*333d2b36SAndroid Build Coastguard Worker
587*333d2b36SAndroid Build Coastguard Worker	// Place the default cc test modules that are common to all platforms in a location that will not
588*333d2b36SAndroid Build Coastguard Worker	// conflict with default test modules defined by other packages.
589*333d2b36SAndroid Build Coastguard Worker	android.FixtureAddTextFile(DefaultCcCommonTestModulesDir+"Android.bp", commonDefaultModules()),
590*333d2b36SAndroid Build Coastguard Worker	// Disable linux bionic by default.
591*333d2b36SAndroid Build Coastguard Worker	android.FixtureAddTextFile(linuxBionicDefaultsPath, withoutLinuxBionic()),
592*333d2b36SAndroid Build Coastguard Worker)
593*333d2b36SAndroid Build Coastguard Worker
594*333d2b36SAndroid Build Coastguard Worker// Prepare a fixture to use all cc module types, mutators and singletons fully.
595*333d2b36SAndroid Build Coastguard Worker//
596*333d2b36SAndroid Build Coastguard Worker// This should only be used by tests that want to run with as much of the build enabled as possible.
597*333d2b36SAndroid Build Coastguard Workervar PrepareForIntegrationTestWithCc = android.GroupFixturePreparers(
598*333d2b36SAndroid Build Coastguard Worker	android.PrepareForIntegrationTestWithAndroid,
599*333d2b36SAndroid Build Coastguard Worker	genrule.PrepareForIntegrationTestWithGenrule,
600*333d2b36SAndroid Build Coastguard Worker	PrepareForTestWithCcDefaultModules,
601*333d2b36SAndroid Build Coastguard Worker)
602*333d2b36SAndroid Build Coastguard Worker
603*333d2b36SAndroid Build Coastguard Worker// The preparer to include if running a cc related test for windows.
604*333d2b36SAndroid Build Coastguard Workervar PrepareForTestOnWindows = android.GroupFixturePreparers(
605*333d2b36SAndroid Build Coastguard Worker	// Place the default cc test modules for windows platforms in a location that will not conflict
606*333d2b36SAndroid Build Coastguard Worker	// with default test modules defined by other packages.
607*333d2b36SAndroid Build Coastguard Worker	android.FixtureAddTextFile("defaults/cc/windows/Android.bp", withWindowsModules()),
608*333d2b36SAndroid Build Coastguard Worker)
609*333d2b36SAndroid Build Coastguard Worker
610*333d2b36SAndroid Build Coastguard Worker// The preparer to include if running a cc related test for linux bionic.
611*333d2b36SAndroid Build Coastguard Workervar PrepareForTestOnLinuxBionic = android.GroupFixturePreparers(
612*333d2b36SAndroid Build Coastguard Worker	// Enable linux bionic
613*333d2b36SAndroid Build Coastguard Worker	//
614*333d2b36SAndroid Build Coastguard Worker	// Can be used after PrepareForTestWithCcDefaultModules to override its default behavior of
615*333d2b36SAndroid Build Coastguard Worker	// disabling linux bionic, hence why this uses FixtureOverrideTextFile.
616*333d2b36SAndroid Build Coastguard Worker	android.FixtureOverrideTextFile(linuxBionicDefaultsPath, withLinuxBionic()),
617*333d2b36SAndroid Build Coastguard Worker)
618*333d2b36SAndroid Build Coastguard Worker
619*333d2b36SAndroid Build Coastguard Worker// PrepareForTestWithHostMusl sets the host configuration to musl libc instead of glibc.  It also disables the test
620*333d2b36SAndroid Build Coastguard Worker// on mac, which doesn't support musl libc, and adds musl modules.
621*333d2b36SAndroid Build Coastguard Workervar PrepareForTestWithHostMusl = android.GroupFixturePreparers(
622*333d2b36SAndroid Build Coastguard Worker	android.FixtureModifyConfig(android.ModifyTestConfigForMusl),
623*333d2b36SAndroid Build Coastguard Worker	android.PrepareForSkipTestOnMac,
624*333d2b36SAndroid Build Coastguard Worker	android.FixtureAddTextFile("external/musl/Android.bp", `
625*333d2b36SAndroid Build Coastguard Worker		cc_defaults {
626*333d2b36SAndroid Build Coastguard Worker			name: "libc_musl_crt_defaults",
627*333d2b36SAndroid Build Coastguard Worker			host_supported: true,
628*333d2b36SAndroid Build Coastguard Worker			device_supported: false,
629*333d2b36SAndroid Build Coastguard Worker		}
630*333d2b36SAndroid Build Coastguard Worker
631*333d2b36SAndroid Build Coastguard Worker		cc_object {
632*333d2b36SAndroid Build Coastguard Worker			name: "libc_musl_crtbegin_so",
633*333d2b36SAndroid Build Coastguard Worker			defaults: ["libc_musl_crt_defaults"],
634*333d2b36SAndroid Build Coastguard Worker		}
635*333d2b36SAndroid Build Coastguard Worker
636*333d2b36SAndroid Build Coastguard Worker		cc_object {
637*333d2b36SAndroid Build Coastguard Worker			name: "libc_musl_crtend_so",
638*333d2b36SAndroid Build Coastguard Worker			defaults: ["libc_musl_crt_defaults"],
639*333d2b36SAndroid Build Coastguard Worker		}
640*333d2b36SAndroid Build Coastguard Worker
641*333d2b36SAndroid Build Coastguard Worker		cc_object {
642*333d2b36SAndroid Build Coastguard Worker			name: "libc_musl_crtbegin_dynamic",
643*333d2b36SAndroid Build Coastguard Worker			defaults: ["libc_musl_crt_defaults"],
644*333d2b36SAndroid Build Coastguard Worker		}
645*333d2b36SAndroid Build Coastguard Worker
646*333d2b36SAndroid Build Coastguard Worker		cc_object {
647*333d2b36SAndroid Build Coastguard Worker			name: "libc_musl_crtbegin_static",
648*333d2b36SAndroid Build Coastguard Worker			defaults: ["libc_musl_crt_defaults"],
649*333d2b36SAndroid Build Coastguard Worker		}
650*333d2b36SAndroid Build Coastguard Worker
651*333d2b36SAndroid Build Coastguard Worker		cc_object {
652*333d2b36SAndroid Build Coastguard Worker			name: "libc_musl_crtend",
653*333d2b36SAndroid Build Coastguard Worker			defaults: ["libc_musl_crt_defaults"],
654*333d2b36SAndroid Build Coastguard Worker		}
655*333d2b36SAndroid Build Coastguard Worker	`),
656*333d2b36SAndroid Build Coastguard Worker)
657*333d2b36SAndroid Build Coastguard Worker
658*333d2b36SAndroid Build Coastguard Worker// PrepareForTestWithFdoProfile registers module types to test with fdo_profile
659*333d2b36SAndroid Build Coastguard Workervar PrepareForTestWithFdoProfile = android.FixtureRegisterWithContext(func(ctx android.RegistrationContext) {
660*333d2b36SAndroid Build Coastguard Worker	ctx.RegisterModuleType("soong_namespace", android.NamespaceFactory)
661*333d2b36SAndroid Build Coastguard Worker	ctx.RegisterModuleType("fdo_profile", FdoProfileFactory)
662*333d2b36SAndroid Build Coastguard Worker})
663*333d2b36SAndroid Build Coastguard Worker
664*333d2b36SAndroid Build Coastguard Worker// TestConfig is the legacy way of creating a test Config for testing cc modules.
665*333d2b36SAndroid Build Coastguard Worker//
666*333d2b36SAndroid Build Coastguard Worker// See testCc for an explanation as to how to stop using this deprecated method.
667*333d2b36SAndroid Build Coastguard Worker//
668*333d2b36SAndroid Build Coastguard Worker// deprecated
669*333d2b36SAndroid Build Coastguard Workerfunc TestConfig(buildDir string, os android.OsType, env map[string]string,
670*333d2b36SAndroid Build Coastguard Worker	bp string, fs map[string][]byte) android.Config {
671*333d2b36SAndroid Build Coastguard Worker
672*333d2b36SAndroid Build Coastguard Worker	// add some modules that are required by the compiler and/or linker
673*333d2b36SAndroid Build Coastguard Worker	bp = bp + GatherRequiredDepsForTest(os)
674*333d2b36SAndroid Build Coastguard Worker
675*333d2b36SAndroid Build Coastguard Worker	mockFS := map[string][]byte{}
676*333d2b36SAndroid Build Coastguard Worker
677*333d2b36SAndroid Build Coastguard Worker	GatherRequiredFilesForTest(mockFS)
678*333d2b36SAndroid Build Coastguard Worker
679*333d2b36SAndroid Build Coastguard Worker	for k, v := range fs {
680*333d2b36SAndroid Build Coastguard Worker		mockFS[k] = v
681*333d2b36SAndroid Build Coastguard Worker	}
682*333d2b36SAndroid Build Coastguard Worker
683*333d2b36SAndroid Build Coastguard Worker	return android.TestArchConfig(buildDir, env, bp, mockFS)
684*333d2b36SAndroid Build Coastguard Worker}
685*333d2b36SAndroid Build Coastguard Worker
686*333d2b36SAndroid Build Coastguard Worker// CreateTestContext is the legacy way of creating a TestContext for testing cc modules.
687*333d2b36SAndroid Build Coastguard Worker//
688*333d2b36SAndroid Build Coastguard Worker// See testCc for an explanation as to how to stop using this deprecated method.
689*333d2b36SAndroid Build Coastguard Worker//
690*333d2b36SAndroid Build Coastguard Worker// deprecated
691*333d2b36SAndroid Build Coastguard Workerfunc CreateTestContext(config android.Config) *android.TestContext {
692*333d2b36SAndroid Build Coastguard Worker	ctx := android.NewTestArchContext(config)
693*333d2b36SAndroid Build Coastguard Worker	genrule.RegisterGenruleBuildComponents(ctx)
694*333d2b36SAndroid Build Coastguard Worker	ctx.RegisterModuleType("cc_fuzz", LibFuzzFactory)
695*333d2b36SAndroid Build Coastguard Worker	ctx.RegisterModuleType("cc_test", TestFactory)
696*333d2b36SAndroid Build Coastguard Worker	ctx.RegisterModuleType("cc_test_library", TestLibraryFactory)
697*333d2b36SAndroid Build Coastguard Worker	ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
698*333d2b36SAndroid Build Coastguard Worker	ctx.RegisterModuleType("vndk_prebuilt_shared", VndkPrebuiltSharedFactory)
699*333d2b36SAndroid Build Coastguard Worker
700*333d2b36SAndroid Build Coastguard Worker	RegisterLlndkLibraryTxtType(ctx)
701*333d2b36SAndroid Build Coastguard Worker
702*333d2b36SAndroid Build Coastguard Worker	ctx.PreArchMutators(android.RegisterDefaultsPreArchMutators)
703*333d2b36SAndroid Build Coastguard Worker	android.RegisterPrebuiltMutators(ctx)
704*333d2b36SAndroid Build Coastguard Worker	RegisterRequiredBuildComponentsForTest(ctx)
705*333d2b36SAndroid Build Coastguard Worker
706*333d2b36SAndroid Build Coastguard Worker	return ctx
707*333d2b36SAndroid Build Coastguard Worker}
708*333d2b36SAndroid Build Coastguard Worker
709*333d2b36SAndroid Build Coastguard Workerfunc checkSnapshotIncludeExclude(t *testing.T, ctx *android.TestContext, singleton android.TestingSingleton, moduleName, snapshotFilename, subDir, variant string, include bool, fake bool) {
710*333d2b36SAndroid Build Coastguard Worker	t.Helper()
711*333d2b36SAndroid Build Coastguard Worker	mod := ctx.ModuleForTests(moduleName, variant)
712*333d2b36SAndroid Build Coastguard Worker	outputFiles := mod.OutputFiles(ctx, t, "")
713*333d2b36SAndroid Build Coastguard Worker	if len(outputFiles) != 1 {
714*333d2b36SAndroid Build Coastguard Worker		t.Errorf("%q must have single output\n", moduleName)
715*333d2b36SAndroid Build Coastguard Worker		return
716*333d2b36SAndroid Build Coastguard Worker	}
717*333d2b36SAndroid Build Coastguard Worker	snapshotPath := filepath.Join(subDir, snapshotFilename)
718*333d2b36SAndroid Build Coastguard Worker
719*333d2b36SAndroid Build Coastguard Worker	if include {
720*333d2b36SAndroid Build Coastguard Worker		out := singleton.Output(snapshotPath)
721*333d2b36SAndroid Build Coastguard Worker		if fake {
722*333d2b36SAndroid Build Coastguard Worker			if out.Rule == nil {
723*333d2b36SAndroid Build Coastguard Worker				t.Errorf("Missing rule for module %q output file %q", moduleName, outputFiles[0])
724*333d2b36SAndroid Build Coastguard Worker			}
725*333d2b36SAndroid Build Coastguard Worker		} else {
726*333d2b36SAndroid Build Coastguard Worker			if out.Input.String() != outputFiles[0].String() {
727*333d2b36SAndroid Build Coastguard Worker				t.Errorf("The input of snapshot %q must be %q, but %q", moduleName, out.Input.String(), outputFiles[0])
728*333d2b36SAndroid Build Coastguard Worker			}
729*333d2b36SAndroid Build Coastguard Worker		}
730*333d2b36SAndroid Build Coastguard Worker	} else {
731*333d2b36SAndroid Build Coastguard Worker		out := singleton.MaybeOutput(snapshotPath)
732*333d2b36SAndroid Build Coastguard Worker		if out.Rule != nil {
733*333d2b36SAndroid Build Coastguard Worker			t.Errorf("There must be no rule for module %q output file %q", moduleName, outputFiles[0])
734*333d2b36SAndroid Build Coastguard Worker		}
735*333d2b36SAndroid Build Coastguard Worker	}
736*333d2b36SAndroid Build Coastguard Worker}
737*333d2b36SAndroid Build Coastguard Worker
738*333d2b36SAndroid Build Coastguard Workerfunc CheckSnapshot(t *testing.T, ctx *android.TestContext, singleton android.TestingSingleton, moduleName, snapshotFilename, subDir, variant string) {
739*333d2b36SAndroid Build Coastguard Worker	t.Helper()
740*333d2b36SAndroid Build Coastguard Worker	checkSnapshotIncludeExclude(t, ctx, singleton, moduleName, snapshotFilename, subDir, variant, true, false)
741*333d2b36SAndroid Build Coastguard Worker}
742*333d2b36SAndroid Build Coastguard Worker
743*333d2b36SAndroid Build Coastguard Workerfunc CheckSnapshotExclude(t *testing.T, ctx *android.TestContext, singleton android.TestingSingleton, moduleName, snapshotFilename, subDir, variant string) {
744*333d2b36SAndroid Build Coastguard Worker	t.Helper()
745*333d2b36SAndroid Build Coastguard Worker	checkSnapshotIncludeExclude(t, ctx, singleton, moduleName, snapshotFilename, subDir, variant, false, false)
746*333d2b36SAndroid Build Coastguard Worker}
747*333d2b36SAndroid Build Coastguard Worker
748*333d2b36SAndroid Build Coastguard Workerfunc CheckSnapshotRule(t *testing.T, ctx *android.TestContext, singleton android.TestingSingleton, moduleName, snapshotFilename, subDir, variant string) {
749*333d2b36SAndroid Build Coastguard Worker	t.Helper()
750*333d2b36SAndroid Build Coastguard Worker	checkSnapshotIncludeExclude(t, ctx, singleton, moduleName, snapshotFilename, subDir, variant, true, true)
751*333d2b36SAndroid Build Coastguard Worker}
752*333d2b36SAndroid Build Coastguard Worker
753*333d2b36SAndroid Build Coastguard Workerfunc GetOutputPaths(ctx *android.TestContext, variant string, moduleNames []string) (paths android.Paths) {
754*333d2b36SAndroid Build Coastguard Worker	for _, moduleName := range moduleNames {
755*333d2b36SAndroid Build Coastguard Worker		module := ctx.ModuleForTests(moduleName, variant).Module().(*Module)
756*333d2b36SAndroid Build Coastguard Worker		output := module.outputFile.Path().RelativeToTop()
757*333d2b36SAndroid Build Coastguard Worker		paths = append(paths, output)
758*333d2b36SAndroid Build Coastguard Worker	}
759*333d2b36SAndroid Build Coastguard Worker	return paths
760*333d2b36SAndroid Build Coastguard Worker}
761