1#
2# Copyright (C) 2011 The Android Open Source Project
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8#      http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15#
16
17# The path for which all the dex files are relative, not actually the current directory.
18LOCAL_PATH := art/test
19
20include art/build/Android.common_test.mk
21include art/build/Android.common_path.mk
22include art/build/Android.common_build.mk
23
24# Subdirectories in art/test which contain dex files used as inputs for gtests.
25GTEST_DEX_DIRECTORIES := \
26  AbstractMethod \
27  AllFields \
28  DefaultMethods \
29  DexToDexDecompiler \
30  ErroneousA \
31  ErroneousB \
32  ErroneousInit \
33  Extension1 \
34  Extension2 \
35  ForClassLoaderA \
36  ForClassLoaderB \
37  ForClassLoaderC \
38  ForClassLoaderD \
39  ExceptionHandle \
40  GetMethodSignature \
41  HiddenApi \
42  HiddenApiSignatures \
43  HiddenApiStubs \
44  ImageLayoutA \
45  ImageLayoutB \
46  IMTA \
47  IMTB \
48  Instrumentation \
49  Interfaces \
50  Lookup \
51  Main \
52  ManyMethods \
53  MethodTypes \
54  MultiDex \
55  MultiDexModifiedSecondary \
56  MyClass \
57  MyClassNatives \
58  Nested \
59  NonStaticLeafMethods \
60  Packages \
61  ProtoCompare \
62  ProtoCompare2 \
63  ProfileTestMultiDex \
64  StaticLeafMethods \
65  Statics \
66  StaticsFromCode \
67  StringLiterals \
68  Transaction \
69  XandY
70
71# Create build rules for each dex file recording the dependency.
72$(foreach dir,$(GTEST_DEX_DIRECTORIES), $(eval $(call build-art-test-dex,art-gtest,$(dir), \
73  $(ART_TARGET_NATIVETEST_OUT),art/build/Android.gtest.mk,ART_TEST_TARGET_GTEST_$(dir)_DEX, \
74  ART_TEST_HOST_GTEST_$(dir)_DEX)))
75
76# Create rules for MainStripped, a copy of Main with the classes.dex stripped
77# for the oat file assistant tests.
78ART_TEST_HOST_GTEST_MainStripped_DEX := $(basename $(ART_TEST_HOST_GTEST_Main_DEX))Stripped$(suffix $(ART_TEST_HOST_GTEST_Main_DEX))
79ART_TEST_TARGET_GTEST_MainStripped_DEX := $(basename $(ART_TEST_TARGET_GTEST_Main_DEX))Stripped$(suffix $(ART_TEST_TARGET_GTEST_Main_DEX))
80
81# Create rules for MainUncompressedAligned, a copy of Main with the classes.dex uncompressed
82# for the dex2oat tests.
83ART_TEST_HOST_GTEST_MainUncompressedAligned_DEX := $(basename $(ART_TEST_HOST_GTEST_Main_DEX))UncompressedAligned$(suffix $(ART_TEST_HOST_GTEST_Main_DEX))
84ART_TEST_TARGET_GTEST_MainUncompressedAligned_DEX := $(basename $(ART_TEST_TARGET_GTEST_Main_DEX))UncompressedAligned$(suffix $(ART_TEST_TARGET_GTEST_Main_DEX))
85
86# Create rules for UncompressedEmpty, a classes.dex that is empty and uncompressed
87# for the dex2oat tests.
88ART_TEST_HOST_GTEST_EmptyUncompressed_DEX := $(basename $(ART_TEST_HOST_GTEST_Main_DEX))EmptyUncompressed$(suffix $(ART_TEST_HOST_GTEST_Main_DEX))
89ART_TEST_TARGET_GTEST_EmptyUncompressed_DEX := $(basename $(ART_TEST_TARGET_GTEST_Main_DEX))EmptyUncompressed$(suffix $(ART_TEST_TARGET_GTEST_Main_DEX))
90
91# Create rules for UncompressedEmptyAligned, a classes.dex that is empty, uncompressed,
92# and 4 byte aligned for the dex2oat tests.
93ART_TEST_HOST_GTEST_EmptyUncompressedAligned_DEX := $(basename $(ART_TEST_HOST_GTEST_Main_DEX))EmptyUncompressedAligned$(suffix $(ART_TEST_HOST_GTEST_Main_DEX))
94ART_TEST_TARGET_GTEST_EmptyUncompressedAligned_DEX := $(basename $(ART_TEST_TARGET_GTEST_Main_DEX))EmptyUncompressedAligned$(suffix $(ART_TEST_TARGET_GTEST_Main_DEX))
95
96# Create rules for MultiDexUncompressedAligned, a copy of MultiDex with the classes.dex uncompressed
97# for the OatFile tests.
98ART_TEST_HOST_GTEST_MultiDexUncompressedAligned_DEX := $(basename $(ART_TEST_HOST_GTEST_MultiDex_DEX))UncompressedAligned$(suffix $(ART_TEST_HOST_GTEST_MultiDex_DEX))
99ART_TEST_TARGET_GTEST_MultiDexUncompressedAligned_DEX := $(basename $(ART_TEST_TARGET_GTEST_MultiDex_DEX))UncompressedAligned$(suffix $(ART_TEST_TARGET_GTEST_MultiDex_DEX))
100
101ifdef ART_TEST_HOST_GTEST_Main_DEX
102$(ART_TEST_HOST_GTEST_MainStripped_DEX): $(ART_TEST_HOST_GTEST_Main_DEX)
103	cp $< $@
104	$(call dexpreopt-remove-classes.dex,$@)
105endif
106
107ifdef ART_TEST_TARGET_GTEST_Main_DEX
108$(ART_TEST_TARGET_GTEST_MainStripped_DEX): $(ART_TEST_TARGET_GTEST_Main_DEX)
109	cp $< $@
110	$(call dexpreopt-remove-classes.dex,$@)
111endif
112
113ifdef ART_TEST_HOST_GTEST_Main_DEX
114$(ART_TEST_HOST_GTEST_MainUncompressedAligned_DEX): $(ART_TEST_HOST_GTEST_Main_DEX) $(ZIPALIGN)
115	cp $< $@
116	$(call uncompress-dexs, $@)
117	$(call align-package, $@)
118endif
119
120ifdef ART_TEST_TARGET_GTEST_Main_DEX
121$(ART_TEST_TARGET_GTEST_MainUncompressedAligned_DEX): $(ART_TEST_TARGET_GTEST_Main_DEX) $(ZIPALIGN)
122	cp $< $@
123	$(call uncompress-dexs, $@)
124	$(call align-package, $@)
125endif
126
127ifdef ART_TEST_HOST_GTEST_Main_DEX
128$(ART_TEST_HOST_GTEST_EmptyUncompressed_DEX):
129	touch $@_classes.dex
130	zip -j -qD -X -0 $@ $@_classes.dex
131	rm $@_classes.dex
132endif
133
134ifdef ART_TEST_TARGET_GTEST_Main_DEX
135$(ART_TEST_TARGET_GTEST_EmptyUncompressed_DEX):
136	touch $@_classes.dex
137	zip -j -qD -X -0 $@ $@_classes.dex
138	rm $@_classes.dex
139endif
140
141ifdef ART_TEST_HOST_GTEST_Main_DEX
142$(ART_TEST_HOST_GTEST_EmptyUncompressedAligned_DEX): $(ZIPALIGN)
143	touch $@_classes.dex
144	zip -j -0 $@_temp.zip $@_classes.dex
145	$(ZIPALIGN) -f 4 $@_temp.zip $@
146	rm $@_classes.dex
147	rm $@_temp.zip
148endif
149
150ifdef ART_TEST_TARGET_GTEST_Main_DEX
151$(ART_TEST_TARGET_GTEST_EmptyUncompressedAligned_DEX): $(ZIPALIGN)
152	touch $@_classes.dex
153	zip -j -0 $@_temp.zip $@_classes.dex
154	$(ZIPALIGN) -f 4 $@_temp.zip $@
155	rm $@_classes.dex
156	rm $@_temp.zip
157endif
158
159ifdef ART_TEST_HOST_GTEST_MultiDex_DEX
160$(ART_TEST_HOST_GTEST_MultiDexUncompressedAligned_DEX): $(ART_TEST_HOST_GTEST_MultiDex_DEX) $(ZIPALIGN)
161	cp $< $@
162	$(call uncompress-dexs, $@)
163	$(call align-package, $@)
164endif
165
166ifdef ART_TEST_TARGET_GTEST_MultiDex_DEX
167$(ART_TEST_TARGET_GTEST_MultiDexUncompressedAligned_DEX): $(ART_TEST_TARGET_GTEST_MultiDex_DEX) $(ZIPALIGN)
168	cp $< $@
169	$(call uncompress-dexs, $@)
170	$(call align-package, $@)
171endif
172
173ART_TEST_GTEST_VerifierDeps_SRC := $(abspath $(wildcard $(LOCAL_PATH)/VerifierDeps/*.smali))
174ART_TEST_GTEST_VerifierDepsMulti_SRC := $(abspath $(wildcard $(LOCAL_PATH)/VerifierDepsMulti/*.smali))
175ART_TEST_HOST_GTEST_VerifierDeps_DEX := $(dir $(ART_TEST_HOST_GTEST_Main_DEX))$(subst Main,VerifierDeps,$(basename $(notdir $(ART_TEST_HOST_GTEST_Main_DEX))))$(suffix $(ART_TEST_HOST_GTEST_Main_DEX))
176ART_TEST_TARGET_GTEST_VerifierDeps_DEX := $(dir $(ART_TEST_TARGET_GTEST_Main_DEX))$(subst Main,VerifierDeps,$(basename $(notdir $(ART_TEST_TARGET_GTEST_Main_DEX))))$(suffix $(ART_TEST_TARGET_GTEST_Main_DEX))
177ART_TEST_HOST_GTEST_VerifierDepsMulti_DEX := $(dir $(ART_TEST_HOST_GTEST_Main_DEX))$(subst Main,VerifierDepsMulti,$(basename $(notdir $(ART_TEST_HOST_GTEST_Main_DEX))))$(suffix $(ART_TEST_HOST_GTEST_Main_DEX))
178ART_TEST_TARGET_GTEST_VerifierDepsMulti_DEX := $(dir $(ART_TEST_TARGET_GTEST_Main_DEX))$(subst Main,VerifierDepsMulti,$(basename $(notdir $(ART_TEST_TARGET_GTEST_Main_DEX))))$(suffix $(ART_TEST_TARGET_GTEST_Main_DEX))
179
180$(ART_TEST_HOST_GTEST_VerifierDeps_DEX): $(ART_TEST_GTEST_VerifierDeps_SRC) $(HOST_OUT_EXECUTABLES)/smali
181	 $(HOST_OUT_EXECUTABLES)/smali assemble --output $@ $(filter %.smali,$^)
182
183$(ART_TEST_TARGET_GTEST_VerifierDeps_DEX): $(ART_TEST_GTEST_VerifierDeps_SRC) $(HOST_OUT_EXECUTABLES)/smali
184	 $(HOST_OUT_EXECUTABLES)/smali assemble --output $@ $(filter %.smali,$^)
185
186$(ART_TEST_HOST_GTEST_VerifierDepsMulti_DEX): $(ART_TEST_GTEST_VerifierDepsMulti_SRC) $(HOST_OUT_EXECUTABLES)/smali
187	 $(HOST_OUT_EXECUTABLES)/smali assemble --output $@ $(filter %.smali,$^)
188
189$(ART_TEST_TARGET_GTEST_VerifierDepsMulti_DEX): $(ART_TEST_GTEST_VerifierDepsMulti_SRC) $(HOST_OUT_EXECUTABLES)/smali
190	 $(HOST_OUT_EXECUTABLES)/smali assemble --output $@ $(filter %.smali,$^)
191
192ART_TEST_GTEST_VerifySoftFailDuringClinit_SRC := $(abspath $(wildcard $(LOCAL_PATH)/VerifySoftFailDuringClinit/*.smali))
193ART_TEST_HOST_GTEST_VerifySoftFailDuringClinit_DEX := $(dir $(ART_TEST_HOST_GTEST_Main_DEX))$(subst Main,VerifySoftFailDuringClinit,$(basename $(notdir $(ART_TEST_HOST_GTEST_Main_DEX))))$(suffix $(ART_TEST_HOST_GTEST_Main_DEX))
194ART_TEST_TARGET_GTEST_VerifySoftFailDuringClinit_DEX := $(dir $(ART_TEST_TARGET_GTEST_Main_DEX))$(subst Main,VerifySoftFailDuringClinit,$(basename $(notdir $(ART_TEST_TARGET_GTEST_Main_DEX))))$(suffix $(ART_TEST_TARGET_GTEST_Main_DEX))
195
196$(ART_TEST_HOST_GTEST_VerifySoftFailDuringClinit_DEX): $(ART_TEST_GTEST_VerifySoftFailDuringClinit_SRC) $(HOST_OUT_EXECUTABLES)/smali
197	 $(HOST_OUT_EXECUTABLES)/smali assemble --output $@ $(filter %.smali,$^)
198
199$(ART_TEST_TARGET_GTEST_VerifySoftFailDuringClinit_DEX): $(ART_TEST_GTEST_VerifySoftFailDuringClinit_SRC) $(HOST_OUT_EXECUTABLES)/smali
200	 $(HOST_OUT_EXECUTABLES)/smali assemble --output $@ $(filter %.smali,$^)
201
202# Dex file dependencies for each gtest.
203ART_GTEST_art_dex_file_loader_test_DEX_DEPS := GetMethodSignature Main Nested MultiDex
204ART_GTEST_dex2oat_environment_tests_DEX_DEPS := Main MainStripped MultiDex MultiDexModifiedSecondary MyClassNatives Nested VerifierDeps VerifierDepsMulti
205
206ART_GTEST_atomic_dex_ref_map_test_DEX_DEPS := Interfaces
207ART_GTEST_class_linker_test_DEX_DEPS := AllFields ErroneousA ErroneousB ErroneousInit ForClassLoaderA ForClassLoaderB ForClassLoaderC ForClassLoaderD Interfaces MethodTypes MultiDex MyClass Nested Statics StaticsFromCode
208ART_GTEST_class_loader_context_test_DEX_DEPS := Main MultiDex MyClass ForClassLoaderA ForClassLoaderB ForClassLoaderC ForClassLoaderD
209ART_GTEST_class_table_test_DEX_DEPS := XandY
210ART_GTEST_compiler_driver_test_DEX_DEPS := AbstractMethod StaticLeafMethods ProfileTestMultiDex
211ART_GTEST_dex_cache_test_DEX_DEPS := Main Packages MethodTypes
212ART_GTEST_dexanalyze_test_DEX_DEPS := MultiDex
213ART_GTEST_dexlayout_test_DEX_DEPS := ManyMethods
214ART_GTEST_dex2oat_test_DEX_DEPS := $(ART_GTEST_dex2oat_environment_tests_DEX_DEPS) ManyMethods Statics VerifierDeps MainUncompressedAligned EmptyUncompressed EmptyUncompressedAligned StringLiterals
215ART_GTEST_dex2oat_image_test_DEX_DEPS := $(ART_GTEST_dex2oat_environment_tests_DEX_DEPS) Statics VerifierDeps
216ART_GTEST_exception_test_DEX_DEPS := ExceptionHandle
217ART_GTEST_hiddenapi_test_DEX_DEPS := HiddenApi HiddenApiStubs
218ART_GTEST_hidden_api_test_DEX_DEPS := HiddenApiSignatures Main MultiDex
219ART_GTEST_image_test_DEX_DEPS := ImageLayoutA ImageLayoutB DefaultMethods VerifySoftFailDuringClinit
220ART_GTEST_imtable_test_DEX_DEPS := IMTA IMTB
221ART_GTEST_instrumentation_test_DEX_DEPS := Instrumentation
222ART_GTEST_jni_compiler_test_DEX_DEPS := MyClassNatives
223ART_GTEST_jni_internal_test_DEX_DEPS := AllFields StaticLeafMethods MyClassNatives
224ART_GTEST_oat_file_assistant_test_DEX_DEPS := $(ART_GTEST_dex2oat_environment_tests_DEX_DEPS)
225ART_GTEST_dexoptanalyzer_test_DEX_DEPS := $(ART_GTEST_dex2oat_environment_tests_DEX_DEPS)
226ART_GTEST_image_space_test_DEX_DEPS := $(ART_GTEST_dex2oat_environment_tests_DEX_DEPS) Extension1 Extension2
227ART_GTEST_oat_file_test_DEX_DEPS := Main MultiDex MainUncompressedAligned MultiDexUncompressedAligned MainStripped Nested MultiDexModifiedSecondary
228ART_GTEST_oat_test_DEX_DEPS := Main
229ART_GTEST_oat_writer_test_DEX_DEPS := Main
230# two_runtimes_test build off dex2oat_environment_test, which does sanity checks on the following dex files.
231ART_GTEST_two_runtimes_test_DEX_DEPS := Main MainStripped Nested MultiDex MultiDexModifiedSecondary
232ART_GTEST_object_test_DEX_DEPS := ProtoCompare ProtoCompare2 StaticsFromCode XandY
233ART_GTEST_proxy_test_DEX_DEPS := Interfaces
234ART_GTEST_reflection_test_DEX_DEPS := Main NonStaticLeafMethods StaticLeafMethods
235ART_GTEST_profile_assistant_test_DEX_DEPS := ProfileTestMultiDex
236ART_GTEST_profile_compilation_info_test_DEX_DEPS := ManyMethods ProfileTestMultiDex
237ART_GTEST_profile_boot_info_test_DEX_DEPS := ManyMethods ProfileTestMultiDex MultiDex
238ART_GTEST_profiling_info_test_DEX_DEPS := ProfileTestMultiDex
239ART_GTEST_runtime_callbacks_test_DEX_DEPS := XandY
240ART_GTEST_stub_test_DEX_DEPS := AllFields
241ART_GTEST_transaction_test_DEX_DEPS := Transaction
242ART_GTEST_type_lookup_table_test_DEX_DEPS := Lookup
243ART_GTEST_unstarted_runtime_test_DEX_DEPS := Nested
244ART_GTEST_heap_verification_test_DEX_DEPS := ProtoCompare ProtoCompare2 StaticsFromCode XandY
245ART_GTEST_verifier_deps_test_DEX_DEPS := VerifierDeps VerifierDepsMulti MultiDex
246ART_GTEST_dex_to_dex_decompiler_test_DEX_DEPS := VerifierDeps DexToDexDecompiler
247ART_GTEST_oatdump_app_test_DEX_DEPS := ProfileTestMultiDex
248ART_GTEST_oatdump_test_DEX_DEPS := ProfileTestMultiDex
249ART_GTEST_reg_type_test_DEX_DEPS := Interfaces
250
251# The elf writer test has dependencies on core.oat.
252ART_GTEST_elf_writer_test_HOST_DEPS := $(HOST_CORE_IMAGE_DEFAULT_64) $(HOST_CORE_IMAGE_DEFAULT_32)
253ART_GTEST_elf_writer_test_TARGET_DEPS := $(TARGET_CORE_IMAGE_DEFAULT_64) $(TARGET_CORE_IMAGE_DEFAULT_32)
254
255# The two_runtimes_test test has dependencies on core.oat.
256ART_GTEST_two_runtimes_test_HOST_DEPS := $(HOST_CORE_IMAGE_DEFAULT_64) $(HOST_CORE_IMAGE_DEFAULT_32)
257ART_GTEST_two_runtimes_test_TARGET_DEPS := $(TARGET_CORE_IMAGE_DEFAULT_64) $(TARGET_CORE_IMAGE_DEFAULT_32)
258
259# The transaction test has dependencies on core.oat.
260ART_GTEST_transaction_test_HOST_DEPS := $(HOST_CORE_IMAGE_DEFAULT_64) $(HOST_CORE_IMAGE_DEFAULT_32)
261ART_GTEST_transaction_test_TARGET_DEPS := $(TARGET_CORE_IMAGE_DEFAULT_64) $(TARGET_CORE_IMAGE_DEFAULT_32)
262
263ART_GTEST_dex2oat_environment_tests_HOST_DEPS := \
264  $(HOST_CORE_IMAGE_optimizing_64) \
265  $(HOST_CORE_IMAGE_optimizing_32) \
266  $(HOST_CORE_IMAGE_interpreter_64) \
267  $(HOST_CORE_IMAGE_interpreter_32)
268ART_GTEST_dex2oat_environment_tests_TARGET_DEPS := \
269  $(TARGET_CORE_IMAGE_optimizing_64) \
270  $(TARGET_CORE_IMAGE_optimizing_32) \
271  $(TARGET_CORE_IMAGE_interpreter_64) \
272  $(TARGET_CORE_IMAGE_interpreter_32)
273
274ART_GTEST_oat_file_test_HOST_DEPS := \
275  $(ART_GTEST_dex2oat_environment_tests_HOST_DEPS) \
276  $(HOST_OUT_EXECUTABLES)/dex2oatd
277ART_GTEST_oat_file_test_TARGET_DEPS := \
278  $(ART_GTEST_dex2oat_environment_tests_TARGET_DEPS) \
279  dex2oatd.com.android.art.debug
280
281ART_GTEST_oat_file_assistant_test_HOST_DEPS := \
282  $(ART_GTEST_dex2oat_environment_tests_HOST_DEPS)
283ART_GTEST_oat_file_assistant_test_TARGET_DEPS := \
284  $(ART_GTEST_dex2oat_environment_tests_TARGET_DEPS)
285
286ART_GTEST_dexoptanalyzer_test_HOST_DEPS := \
287  $(ART_GTEST_dex2oat_environment_tests_HOST_DEPS) \
288  $(HOST_OUT_EXECUTABLES)/dexoptanalyzerd
289ART_GTEST_dexoptanalyzer_test_TARGET_DEPS := \
290  $(ART_GTEST_dex2oat_environment_tests_TARGET_DEPS) \
291  $(TESTING_ART_APEX)  # For dexoptanalyzerd.
292
293ART_GTEST_image_space_test_HOST_DEPS := \
294  $(ART_GTEST_dex2oat_environment_tests_HOST_DEPS)
295ART_GTEST_image_space_test_TARGET_DEPS := \
296  $(ART_GTEST_dex2oat_environment_tests_TARGET_DEPS)
297
298ART_GTEST_dex2oat_test_HOST_DEPS := \
299  $(ART_GTEST_dex2oat_environment_tests_HOST_DEPS) \
300  $(HOST_OUT_EXECUTABLES)/dex2oatd
301ART_GTEST_dex2oat_test_TARGET_DEPS := \
302  $(ART_GTEST_dex2oat_environment_tests_TARGET_DEPS) \
303  $(TESTING_ART_APEX)  # For dex2oatd.
304
305ART_GTEST_dex2oat_image_test_HOST_DEPS := \
306  $(ART_GTEST_dex2oat_environment_tests_HOST_DEPS) \
307  $(HOST_OUT_EXECUTABLES)/dex2oatd
308ART_GTEST_dex2oat_image_test_TARGET_DEPS := \
309  $(ART_GTEST_dex2oat_environment_tests_TARGET_DEPS) \
310  $(TESTING_ART_APEX)  # For dex2oatd.
311
312ART_GTEST_module_exclusion_test_HOST_DEPS := \
313  $(ART_GTEST_dex2oat_image_test_HOST_DEPS)
314ART_GTEST_module_exclusion_test_TARGET_DEPS := \
315  $(ART_GTEST_dex2oat_image_test_TARGET_DEPS)
316
317# TODO: document why this is needed.
318ART_GTEST_proxy_test_HOST_DEPS := $(HOST_CORE_IMAGE_DEFAULT_64) $(HOST_CORE_IMAGE_DEFAULT_32)
319
320# The dexdiag test requires the dexdiag utility.
321ART_GTEST_dexdiag_test_HOST_DEPS := $(HOST_OUT_EXECUTABLES)/dexdiag
322ART_GTEST_dexdiag_test_TARGET_DEPS := $(TESTING_ART_APEX)  # For dexdiag.
323
324# The dexdump test requires an image and the dexdump utility.
325# TODO: rename into dexdump when migration completes
326ART_GTEST_dexdump_test_HOST_DEPS := \
327  $(HOST_CORE_IMAGE_DEFAULT_64) \
328  $(HOST_CORE_IMAGE_DEFAULT_32) \
329  $(HOST_OUT_EXECUTABLES)/dexdump
330ART_GTEST_dexdump_test_TARGET_DEPS := \
331  $(TARGET_CORE_IMAGE_DEFAULT_64) \
332  $(TARGET_CORE_IMAGE_DEFAULT_32) \
333  dexdump.com.android.art.debug
334
335# The dexanalyze test requires an image and the dexanalyze utility.
336ART_GTEST_dexanalyze_test_HOST_DEPS := \
337  $(HOST_CORE_IMAGE_DEFAULT_64) \
338  $(HOST_CORE_IMAGE_DEFAULT_32) \
339  $(HOST_OUT_EXECUTABLES)/dexanalyze
340ART_GTEST_dexanalyze_test_TARGET_DEPS := \
341  $(TARGET_CORE_IMAGE_DEFAULT_64) \
342  $(TARGET_CORE_IMAGE_DEFAULT_32) \
343  dexanalyze.com.android.art.debug
344
345# The dexlayout test requires an image and the dexlayout utility.
346# TODO: rename into dexdump when migration completes
347ART_GTEST_dexlayout_test_HOST_DEPS := \
348  $(HOST_CORE_IMAGE_DEFAULT_64) \
349  $(HOST_CORE_IMAGE_DEFAULT_32) \
350  $(HOST_OUT_EXECUTABLES)/dexlayoutd \
351  $(HOST_OUT_EXECUTABLES)/dexdump
352ART_GTEST_dexlayout_test_TARGET_DEPS := \
353  $(TARGET_CORE_IMAGE_DEFAULT_64) \
354  $(TARGET_CORE_IMAGE_DEFAULT_32) \
355  dexlayoutd.com.android.art.debug \
356  dexdump.com.android.art.debug
357
358# The dexlist test requires an image and the dexlist utility.
359ART_GTEST_dexlist_test_HOST_DEPS := \
360  $(HOST_CORE_IMAGE_DEFAULT_64) \
361  $(HOST_CORE_IMAGE_DEFAULT_32) \
362  $(HOST_OUT_EXECUTABLES)/dexlist
363ART_GTEST_dexlist_test_TARGET_DEPS := \
364  $(TARGET_CORE_IMAGE_DEFAULT_64) \
365  $(TARGET_CORE_IMAGE_DEFAULT_32) \
366  $(TESTING_ART_APEX)   # For dexlist.
367
368# The imgdiag test has dependencies on core.oat since it needs to load it during the test.
369# For the host, also add the installed tool (in the base size, that should suffice). For the
370# target, just the module is fine, the sync will happen late enough.
371ART_GTEST_imgdiag_test_HOST_DEPS := \
372  $(HOST_CORE_IMAGE_DEFAULT_64) \
373  $(HOST_CORE_IMAGE_DEFAULT_32) \
374  $(HOST_OUT_EXECUTABLES)/imgdiagd
375ART_GTEST_imgdiag_test_TARGET_DEPS := \
376  $(TARGET_CORE_IMAGE_DEFAULT_64) \
377  $(TARGET_CORE_IMAGE_DEFAULT_32) \
378  imgdiagd.com.android.art.debug
379
380# Dex analyze test requires dexanalyze.
381ART_GTEST_dexanalyze_test_HOST_DEPS := \
382  $(HOST_OUT_EXECUTABLES)/dexanalyze
383ART_GTEST_dexanalyze_test_TARGET_DEPS := \
384  dexanalyze.com.android.art.debug
385
386# Oatdump test requires an image and oatfile to dump.
387ART_GTEST_oatdump_test_HOST_DEPS := \
388  $(HOST_CORE_IMAGE_DEFAULT_64) \
389  $(HOST_CORE_IMAGE_DEFAULT_32) \
390  $(HOST_OUT_EXECUTABLES)/oatdumpd \
391  $(HOST_OUT_EXECUTABLES)/oatdumpds \
392  $(HOST_OUT_EXECUTABLES)/dexdump \
393  $(HOST_OUT_EXECUTABLES)/dex2oatd \
394  $(HOST_OUT_EXECUTABLES)/dex2oatds
395ART_GTEST_oatdump_test_TARGET_DEPS := \
396  $(TARGET_CORE_IMAGE_DEFAULT_64) \
397  $(TARGET_CORE_IMAGE_DEFAULT_32) \
398  $(TESTING_ART_APEX)    # For oatdumpd, dexdump, dex2oatd.
399ART_GTEST_oatdump_image_test_HOST_DEPS := $(ART_GTEST_oatdump_test_HOST_DEPS)
400ART_GTEST_oatdump_image_test_TARGET_DEPS := $(ART_GTEST_oatdump_test_TARGET_DEPS)
401ART_GTEST_oatdump_app_test_HOST_DEPS := $(ART_GTEST_oatdump_test_HOST_DEPS)
402ART_GTEST_oatdump_app_test_TARGET_DEPS := $(ART_GTEST_oatdump_test_TARGET_DEPS)
403
404# Profile assistant tests requires profman utility.
405ART_GTEST_profile_assistant_test_HOST_DEPS := $(HOST_OUT_EXECUTABLES)/profmand
406ART_GTEST_profile_assistant_test_TARGET_DEPS := $(TESTING_ART_APEX)  # For profmand.
407
408ART_GTEST_hiddenapi_test_HOST_DEPS := \
409  $(HOST_CORE_IMAGE_DEFAULT_64) \
410  $(HOST_CORE_IMAGE_DEFAULT_32) \
411  $(HOST_OUT_EXECUTABLES)/hiddenapid
412
413# The path for which all the source files are relative, not actually the current directory.
414LOCAL_PATH := art
415
416ART_TEST_MODULES := \
417    art_cmdline_tests \
418    art_compiler_host_tests \
419    art_compiler_tests \
420    art_dex2oat_tests \
421    art_dexanalyze_tests \
422    art_dexdiag_tests \
423    art_dexdump_tests \
424    art_dexlayout_tests \
425    art_dexlist_tests \
426    art_dexoptanalyzer_tests \
427    art_hiddenapi_tests \
428    art_imgdiag_tests \
429    art_libartbase_tests \
430    art_libartpalette_tests \
431    art_libdexfile_external_tests \
432    art_libdexfile_support_static_tests \
433    art_libdexfile_support_tests \
434    art_libdexfile_tests \
435    art_libprofile_tests \
436    art_oatdump_tests \
437    art_profman_tests \
438    art_runtime_compiler_tests \
439    art_runtime_tests \
440    art_sigchain_tests \
441
442ART_TARGET_GTEST_NAMES := $(foreach tm,$(ART_TEST_MODULES),\
443  $(foreach path,$(ART_TEST_LIST_device_$(TARGET_ARCH)_$(tm)),\
444    $(notdir $(path))\
445   )\
446)
447
448ART_HOST_GTEST_FILES := $(foreach m,$(ART_TEST_MODULES),\
449    $(ART_TEST_LIST_host_$(ART_HOST_ARCH)_$(m)))
450
451ifneq ($(HOST_PREFER_32_BIT),true)
4522ND_ART_HOST_GTEST_FILES += $(foreach m,$(ART_TEST_MODULES),\
453    $(ART_TEST_LIST_host_$(2ND_ART_HOST_ARCH)_$(m)))
454endif
455
456# Variables holding collections of gtest pre-requisits used to run a number of gtests.
457ART_TEST_HOST_GTEST$(ART_PHONY_TEST_HOST_SUFFIX)_RULES :=
458ART_TEST_HOST_GTEST$(2ND_ART_PHONY_TEST_HOST_SUFFIX)_RULES :=
459ART_TEST_HOST_GTEST_RULES :=
460ART_TEST_TARGET_GTEST$(ART_PHONY_TEST_TARGET_SUFFIX)_RULES :=
461ART_TEST_TARGET_GTEST$(2ND_ART_PHONY_TEST_TARGET_SUFFIX)_RULES :=
462ART_TEST_TARGET_GTEST_RULES :=
463ART_TEST_HOST_GTEST_DEPENDENCIES :=
464ART_TEST_TARGET_GTEST_DEPENDENCIES :=
465
466ART_GTEST_TARGET_ANDROID_ROOT := '/system'
467ifneq ($(ART_TEST_ANDROID_ROOT),)
468  ART_GTEST_TARGET_ANDROID_ROOT := $(ART_TEST_ANDROID_ROOT)
469endif
470
471ART_GTEST_TARGET_ANDROID_I18N_ROOT := '/apex/com.android.i18n'
472ifneq ($(ART_TEST_ANDROID_I18N_ROOT),)
473  ART_GTEST_TARGET_ANDROID_I18N_ROOT := $(ART_TEST_ANDROID_I18N_ROOT)
474endif
475
476ART_GTEST_TARGET_ANDROID_ART_ROOT := '/apex/com.android.art'
477ifneq ($(ART_TEST_ANDROID_ART_ROOT),)
478  ART_GTEST_TARGET_ANDROID_ART_ROOT := $(ART_TEST_ANDROID_ART_ROOT)
479endif
480
481ART_GTEST_TARGET_ANDROID_TZDATA_ROOT := '/apex/com.android.tzdata'
482ifneq ($(ART_TEST_ANDROID_TZDATA_ROOT),)
483  ART_GTEST_TARGET_ANDROID_TZDATA_ROOT := $(ART_TEST_ANDROID_TZDATA_ROOT)
484endif
485
486# Define make rules for a host gtests.
487# $(1): gtest name - the name of the test we're building such as leb128_test.
488# $(2): path relative to $OUT to the test binary
489# $(3): 2ND_ or undefined - used to differentiate between the primary and secondary architecture.
490define define-art-gtest-rule-host
491  gtest_suffix := $(1)$$($(3)ART_PHONY_TEST_HOST_SUFFIX)
492  gtest_rule := test-art-host-gtest-$$(gtest_suffix)
493  gtest_output := $(call intermediates-dir-for,PACKAGING,art-host-gtest,HOST)/$$(gtest_suffix).xml
494  $$(call dist-for-goals,$$(gtest_rule),$$(gtest_output):gtest/$$(gtest_suffix))
495  gtest_exe := $(2)
496  # Dependencies for all host gtests.
497  gtest_deps := $$(HOST_CORE_DEX_LOCATIONS) \
498    $$($(3)ART_HOST_OUT_SHARED_LIBRARIES)/libicu_jni$$(ART_HOST_SHLIB_EXTENSION) \
499    $$($(3)ART_HOST_OUT_SHARED_LIBRARIES)/libjavacore$$(ART_HOST_SHLIB_EXTENSION) \
500    $$($(3)ART_HOST_OUT_SHARED_LIBRARIES)/libopenjdkd$$(ART_HOST_SHLIB_EXTENSION) \
501    $$(gtest_exe) \
502    $$(ART_GTEST_$(1)_HOST_DEPS) \
503    $(foreach file,$(ART_GTEST_$(1)_DEX_DEPS),$(ART_TEST_HOST_GTEST_$(file)_DEX)) \
504    $(HOST_OUT_EXECUTABLES)/signal_dumper
505
506  ART_TEST_HOST_GTEST_DEPENDENCIES += $$(gtest_deps)
507
508.PHONY: $$(gtest_rule)
509$$(gtest_rule): $$(gtest_output)
510
511# Re-run the tests, even if nothing changed. Until the build system has a dedicated "no cache"
512# option, claim to write a file that is never produced.
513$$(gtest_output): .KATI_IMPLICIT_OUTPUTS := $$(gtest_output)-nocache
514$$(gtest_output): NAME := $$(gtest_rule)
515ifeq (,$(SANITIZE_HOST))
516$$(gtest_output): $$(gtest_exe) $$(gtest_deps)
517	$(hide) ($$(call ART_TEST_SKIP,$$(NAME)) && \
518		timeout --foreground -k 120s 2400s $(HOST_OUT_EXECUTABLES)/signal_dumper -s 15 \
519			$$< --gtest_output=xml:$$@ && \
520		$$(call ART_TEST_PASSED,$$(NAME))) || $$(call ART_TEST_FAILED,$$(NAME))
521else
522# Note: envsetup currently exports ASAN_OPTIONS=detect_leaks=0 to suppress leak detection, as some
523#       build tools (e.g., ninja) intentionally leak. We want leak checks when we run our tests, so
524#       override ASAN_OPTIONS. b/37751350
525# Note 2: Under sanitization, also capture the output, and run it through the stack tool on failure
526# (with the x86-64 ABI, as this allows symbolization of both x86 and x86-64). We don't do this in
527# general as it loses all the color output, and we have our own symbolization step when not running
528# under ASAN.
529$$(gtest_output): $$(gtest_exe) $$(gtest_deps)
530	$(hide) ($$(call ART_TEST_SKIP,$$(NAME)) && set -o pipefail && \
531		ASAN_OPTIONS=detect_leaks=1 timeout --foreground -k 120s 3600s \
532			$(HOST_OUT_EXECUTABLES)/signal_dumper -s 15 \
533				$$< --gtest_output=xml:$$@ 2>&1 | tee $$<.tmp.out >&2 && \
534		{ $$(call ART_TEST_PASSED,$$(NAME)) ; rm $$<.tmp.out ; }) || \
535		( grep -q AddressSanitizer $$<.tmp.out && export ANDROID_BUILD_TOP=`pwd` && \
536			{ echo "ABI: 'x86_64'" | cat - $$<.tmp.out | development/scripts/stack | tail -n 3000 ; } ; \
537		rm $$<.tmp.out ; $$(call ART_TEST_FAILED,$$(NAME)))
538endif
539
540  ART_TEST_HOST_GTEST$$($(3)ART_PHONY_TEST_HOST_SUFFIX)_RULES += $$(gtest_rule)
541  ART_TEST_HOST_GTEST_RULES += $$(gtest_rule)
542  ART_TEST_HOST_GTEST_$(1)_RULES += $$(gtest_rule)
543
544
545  # Clear locally defined variables.
546  gtest_deps :=
547  gtest_exe :=
548  gtest_output :=
549  gtest_rule :=
550  gtest_suffix :=
551endef  # define-art-gtest-rule-host
552
553# Add the additional dependencies for the specified test
554# $(1): test name
555define add-art-gtest-dependencies
556  # Note that, both the primary and the secondary arches of the libs are built by depending
557  # on the module name.
558  gtest_deps := \
559    $$(ART_GTEST_$(1)_TARGET_DEPS) \
560    $(foreach file,$(ART_GTEST_$(1)_DEX_DEPS),$(ART_TEST_TARGET_GTEST_$(file)_DEX)) \
561
562  ART_TEST_TARGET_GTEST_DEPENDENCIES += $$(gtest_deps)
563
564  # Clear locally defined variables.
565  gtest_deps :=
566endef  # add-art-gtest-dependencies
567
568# $(1): file name
569# $(2): 2ND_ or undefined - used to differentiate between the primary and secondary architecture.
570define define-art-gtest-host
571  art_gtest_filename := $(1)
572
573  include $$(CLEAR_VARS)
574  art_gtest_name := $$(notdir $$(basename $$(art_gtest_filename)))
575  ifndef ART_TEST_HOST_GTEST_$$(art_gtest_name)_RULES
576    ART_TEST_HOST_GTEST_$$(art_gtest_name)_RULES :=
577  endif
578  $$(eval $$(call define-art-gtest-rule-host,$$(art_gtest_name),$$(art_gtest_filename),$(2)))
579
580  # Clear locally defined variables.
581  art_gtest_filename :=
582  art_gtest_name :=
583endef  # define-art-gtest-host
584
585# Define the rules to build and run gtests for both archs on host.
586# $(1): test name
587define define-art-gtest-host-both
588  art_gtest_name := $(1)
589
590.PHONY: test-art-host-gtest-$$(art_gtest_name)
591test-art-host-gtest-$$(art_gtest_name): $$(ART_TEST_HOST_GTEST_$$(art_gtest_name)_RULES)
592	$$(hide) $$(call ART_TEST_PREREQ_FINISHED,$$@)
593
594  # Clear now unused variables.
595  ART_TEST_HOST_GTEST_$$(art_gtest_name)_RULES :=
596  art_gtest_name :=
597endef  # define-art-gtest-host-both
598
599ifeq ($(ART_BUILD_TARGET),true)
600  $(foreach name,$(ART_TARGET_GTEST_NAMES), $(eval $(call add-art-gtest-dependencies,$(name),)))
601  ART_TEST_TARGET_GTEST_DEPENDENCIES += \
602    libicu_jni.com.android.art.debug \
603    libjavacore.com.android.art.debug \
604    libopenjdkd.com.android.art.debug \
605    $(foreach jar,$(TARGET_TEST_CORE_JARS),$(TARGET_OUT_JAVA_LIBRARIES)/$(jar).jar)
606endif
607ifeq ($(ART_BUILD_HOST),true)
608  $(foreach file,$(ART_HOST_GTEST_FILES), $(eval $(call define-art-gtest-host,$(file),)))
609  ifneq ($(HOST_PREFER_32_BIT),true)
610    $(foreach file,$(2ND_ART_HOST_GTEST_FILES), $(eval $(call define-art-gtest-host,$(file),2ND_)))
611  endif
612  # Rules to run the different architecture versions of the gtest.
613  $(foreach file,$(ART_HOST_GTEST_FILES), $(eval $(call define-art-gtest-host-both,$$(notdir $$(basename $$(file))))))
614endif
615
616# Used outside the art project to get a list of the current tests
617RUNTIME_TARGET_GTEST_MAKE_TARGETS :=
618art_target_gtest_files := $(foreach m,$(ART_TEST_MODULES),$(ART_TEST_LIST_device_$(TARGET_ARCH)_$(m)))
619# If testdir == testfile, assume this is not a test_per_src module
620$(foreach file,$(art_target_gtest_files),\
621  $(eval testdir := $$(notdir $$(patsubst %/,%,$$(dir $$(file)))))\
622  $(eval testfile := $$(notdir $$(basename $$(file))))\
623  $(if $(call streq,$(testdir),$(testfile)),,\
624    $(eval testfile := $(testdir)_$(testfile)))\
625  $(eval RUNTIME_TARGET_GTEST_MAKE_TARGETS += $(testfile))\
626)
627testdir :=
628testfile :=
629art_target_gtest_files :=
630
631# Define all the combinations of host/target and suffix such as:
632# test-art-host-gtest or test-art-host-gtest64
633# $(1): host or target
634# $(2): HOST or TARGET
635# $(3): undefined, 32 or 64
636define define-test-art-gtest-combination
637  ifeq ($(1),host)
638    ifneq ($(2),HOST)
639      $$(error argument mismatch $(1) and ($2))
640    endif
641  else
642    ifneq ($(1),target)
643      $$(error found $(1) expected host or target)
644    endif
645    ifneq ($(2),TARGET)
646      $$(error argument mismatch $(1) and ($2))
647    endif
648  endif
649
650  rule_name := test-art-$(1)-gtest$(3)
651  dependencies := $$(ART_TEST_$(2)_GTEST$(3)_RULES)
652
653.PHONY: $$(rule_name)
654$$(rule_name): $$(dependencies) d8
655	$(hide) $$(call ART_TEST_PREREQ_FINISHED,$$@)
656
657  # Clear locally defined variables.
658  rule_name :=
659  dependencies :=
660endef  # define-test-art-gtest-combination
661
662$(eval $(call define-test-art-gtest-combination,target,TARGET,))
663$(eval $(call define-test-art-gtest-combination,target,TARGET,$(ART_PHONY_TEST_TARGET_SUFFIX)))
664ifdef 2ND_ART_PHONY_TEST_TARGET_SUFFIX
665$(eval $(call define-test-art-gtest-combination,target,TARGET,$(2ND_ART_PHONY_TEST_TARGET_SUFFIX)))
666endif
667$(eval $(call define-test-art-gtest-combination,host,HOST,))
668$(eval $(call define-test-art-gtest-combination,host,HOST,$(ART_PHONY_TEST_HOST_SUFFIX)))
669ifneq ($(HOST_PREFER_32_BIT),true)
670$(eval $(call define-test-art-gtest-combination,host,HOST,$(2ND_ART_PHONY_TEST_HOST_SUFFIX)))
671endif
672
673# Clear locally defined variables.
674define-art-gtest-rule-target :=
675define-art-gtest-rule-host :=
676define-art-gtest :=
677define-test-art-gtest-combination :=
678RUNTIME_GTEST_COMMON_SRC_FILES :=
679COMPILER_GTEST_COMMON_SRC_FILES :=
680RUNTIME_GTEST_TARGET_SRC_FILES :=
681RUNTIME_GTEST_HOST_SRC_FILES :=
682COMPILER_GTEST_TARGET_SRC_FILES :=
683COMPILER_GTEST_HOST_SRC_FILES :=
684ART_TEST_HOST_GTEST$(ART_PHONY_TEST_HOST_SUFFIX)_RULES :=
685ART_TEST_HOST_GTEST$(2ND_ART_PHONY_TEST_HOST_SUFFIX)_RULES :=
686ART_TEST_HOST_GTEST_RULES :=
687ART_TEST_TARGET_GTEST$(ART_PHONY_TEST_TARGET_SUFFIX)_RULES :=
688ART_TEST_TARGET_GTEST$(2ND_ART_PHONY_TEST_TARGET_SUFFIX)_RULES :=
689ART_TEST_TARGET_GTEST_RULES :=
690ART_GTEST_TARGET_ANDROID_ROOT :=
691ART_GTEST_TARGET_ANDROID_I18N_ROOT :=
692ART_GTEST_TARGET_ANDROID_ART_ROOT :=
693ART_GTEST_TARGET_ANDROID_TZDATA_ROOT :=
694ART_GTEST_class_linker_test_DEX_DEPS :=
695ART_GTEST_class_table_test_DEX_DEPS :=
696ART_GTEST_compiler_driver_test_DEX_DEPS :=
697ART_GTEST_dex_file_test_DEX_DEPS :=
698ART_GTEST_exception_test_DEX_DEPS :=
699ART_GTEST_elf_writer_test_HOST_DEPS :=
700ART_GTEST_elf_writer_test_TARGET_DEPS :=
701ART_GTEST_imtable_test_DEX_DEPS :=
702ART_GTEST_jni_compiler_test_DEX_DEPS :=
703ART_GTEST_jni_internal_test_DEX_DEPS :=
704ART_GTEST_oat_file_assistant_test_DEX_DEPS :=
705ART_GTEST_oat_file_assistant_test_HOST_DEPS :=
706ART_GTEST_oat_file_assistant_test_TARGET_DEPS :=
707ART_GTEST_dexanalyze_test_DEX_DEPS :=
708ART_GTEST_dexoptanalyzer_test_DEX_DEPS :=
709ART_GTEST_dexoptanalyzer_test_HOST_DEPS :=
710ART_GTEST_dexoptanalyzer_test_TARGET_DEPS :=
711ART_GTEST_image_space_test_DEX_DEPS :=
712ART_GTEST_image_space_test_HOST_DEPS :=
713ART_GTEST_image_space_test_TARGET_DEPS :=
714ART_GTEST_dex2oat_test_DEX_DEPS :=
715ART_GTEST_dex2oat_test_HOST_DEPS :=
716ART_GTEST_dex2oat_test_TARGET_DEPS :=
717ART_GTEST_dex2oat_image_test_DEX_DEPS :=
718ART_GTEST_dex2oat_image_test_HOST_DEPS :=
719ART_GTEST_dex2oat_image_test_TARGET_DEPS :=
720ART_GTEST_module_exclusion_test_HOST_DEPS :=
721ART_GTEST_module_exclusion_test_TARGET_DEPS :=
722ART_GTEST_object_test_DEX_DEPS :=
723ART_GTEST_proxy_test_DEX_DEPS :=
724ART_GTEST_reflection_test_DEX_DEPS :=
725ART_GTEST_stub_test_DEX_DEPS :=
726ART_GTEST_transaction_test_DEX_DEPS :=
727ART_GTEST_dex2oat_environment_tests_DEX_DEPS :=
728ART_GTEST_heap_verification_test_DEX_DEPS :=
729ART_GTEST_verifier_deps_test_DEX_DEPS :=
730$(foreach dir,$(GTEST_DEX_DIRECTORIES), $(eval ART_TEST_TARGET_GTEST_$(dir)_DEX :=))
731$(foreach dir,$(GTEST_DEX_DIRECTORIES), $(eval ART_TEST_HOST_GTEST_$(dir)_DEX :=))
732ART_TEST_HOST_GTEST_MainStripped_DEX :=
733ART_TEST_TARGET_GTEST_MainStripped_DEX :=
734ART_TEST_HOST_GTEST_MainUncompressedAligned_DEX :=
735ART_TEST_TARGET_GTEST_MainUncompressedAligned_DEX :=
736ART_TEST_HOST_GTEST_EmptyUncompressed_DEX :=
737ART_TEST_TARGET_GTEST_EmptyUncompressed_DEX :=
738ART_TEST_GTEST_VerifierDeps_SRC :=
739ART_TEST_HOST_GTEST_VerifierDeps_DEX :=
740ART_TEST_TARGET_GTEST_VerifierDeps_DEX :=
741ART_TEST_GTEST_VerifySoftFailDuringClinit_SRC :=
742ART_TEST_HOST_GTEST_VerifySoftFailDuringClinit_DEX :=
743ART_TEST_TARGET_GTEST_VerifySoftFailDuringClinit_DEX :=
744GTEST_DEX_DIRECTORIES :=
745LOCAL_PATH :=
746