• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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  ExceptionHandle \
34  GetMethodSignature \
35  ImageLayoutA \
36  ImageLayoutB \
37  IMTA \
38  IMTB \
39  Instrumentation \
40  Interfaces \
41  Lookup \
42  Main \
43  MethodTypes \
44  MultiDex \
45  MultiDexModifiedSecondary \
46  MyClass \
47  MyClassNatives \
48  Nested \
49  NonStaticLeafMethods \
50  Packages \
51  ProtoCompare \
52  ProtoCompare2 \
53  ProfileTestMultiDex \
54  StaticLeafMethods \
55  Statics \
56  StaticsFromCode \
57  Transaction \
58  XandY
59
60# Create build rules for each dex file recording the dependency.
61$(foreach dir,$(GTEST_DEX_DIRECTORIES), $(eval $(call build-art-test-dex,art-gtest,$(dir), \
62  $(ART_TARGET_NATIVETEST_OUT),art/build/Android.gtest.mk,ART_TEST_TARGET_GTEST_$(dir)_DEX, \
63  ART_TEST_HOST_GTEST_$(dir)_DEX)))
64
65# Create rules for MainStripped, a copy of Main with the classes.dex stripped
66# for the oat file assistant tests.
67ART_TEST_HOST_GTEST_MainStripped_DEX := $(basename $(ART_TEST_HOST_GTEST_Main_DEX))Stripped$(suffix $(ART_TEST_HOST_GTEST_Main_DEX))
68ART_TEST_TARGET_GTEST_MainStripped_DEX := $(basename $(ART_TEST_TARGET_GTEST_Main_DEX))Stripped$(suffix $(ART_TEST_TARGET_GTEST_Main_DEX))
69
70$(ART_TEST_HOST_GTEST_MainStripped_DEX): $(ART_TEST_HOST_GTEST_Main_DEX)
71	cp $< $@
72	$(call dexpreopt-remove-classes.dex,$@)
73
74$(ART_TEST_TARGET_GTEST_MainStripped_DEX): $(ART_TEST_TARGET_GTEST_Main_DEX)
75	cp $< $@
76	$(call dexpreopt-remove-classes.dex,$@)
77
78ART_TEST_GTEST_VerifierDeps_SRC := $(abspath $(wildcard $(LOCAL_PATH)/VerifierDeps/*.smali))
79ART_TEST_GTEST_VerifierDepsMulti_SRC := $(abspath $(wildcard $(LOCAL_PATH)/VerifierDepsMulti/*.smali))
80ART_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))
81ART_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))
82ART_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))
83ART_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))
84
85$(ART_TEST_HOST_GTEST_VerifierDeps_DEX): $(ART_TEST_GTEST_VerifierDeps_SRC) $(HOST_OUT_EXECUTABLES)/smali
86	 $(HOST_OUT_EXECUTABLES)/smali --output=$@ $(filter %.smali,$^)
87
88$(ART_TEST_TARGET_GTEST_VerifierDeps_DEX): $(ART_TEST_GTEST_VerifierDeps_SRC) $(HOST_OUT_EXECUTABLES)/smali
89	 $(HOST_OUT_EXECUTABLES)/smali --output=$@ $(filter %.smali,$^)
90
91$(ART_TEST_HOST_GTEST_VerifierDepsMulti_DEX): $(ART_TEST_GTEST_VerifierDepsMulti_SRC) $(HOST_OUT_EXECUTABLES)/smali
92	 $(HOST_OUT_EXECUTABLES)/smali --output=$@ $(filter %.smali,$^)
93
94$(ART_TEST_TARGET_GTEST_VerifierDepsMulti_DEX): $(ART_TEST_GTEST_VerifierDepsMulti_SRC) $(HOST_OUT_EXECUTABLES)/smali
95	 $(HOST_OUT_EXECUTABLES)/smali --output=$@ $(filter %.smali,$^)
96
97# Dex file dependencies for each gtest.
98ART_GTEST_dex2oat_environment_tests_DEX_DEPS := Main MainStripped MultiDex MultiDexModifiedSecondary Nested
99
100ART_GTEST_atomic_method_ref_map_test_DEX_DEPS := Interfaces
101ART_GTEST_class_linker_test_DEX_DEPS := AllFields ErroneousA ErroneousB ErroneousInit Interfaces MethodTypes MultiDex MyClass Nested Statics StaticsFromCode
102ART_GTEST_class_table_test_DEX_DEPS := XandY
103ART_GTEST_compiler_driver_test_DEX_DEPS := AbstractMethod StaticLeafMethods ProfileTestMultiDex
104ART_GTEST_dex_cache_test_DEX_DEPS := Main Packages MethodTypes
105ART_GTEST_dex_file_test_DEX_DEPS := GetMethodSignature Main Nested MultiDex
106ART_GTEST_dex2oat_test_DEX_DEPS := $(ART_GTEST_dex2oat_environment_tests_DEX_DEPS) Statics VerifierDeps
107ART_GTEST_exception_test_DEX_DEPS := ExceptionHandle
108ART_GTEST_image_test_DEX_DEPS := ImageLayoutA ImageLayoutB DefaultMethods
109ART_GTEST_imtable_test_DEX_DEPS := IMTA IMTB
110ART_GTEST_instrumentation_test_DEX_DEPS := Instrumentation
111ART_GTEST_jni_compiler_test_DEX_DEPS := MyClassNatives
112ART_GTEST_jni_internal_test_DEX_DEPS := AllFields StaticLeafMethods
113ART_GTEST_oat_file_assistant_test_DEX_DEPS := $(ART_GTEST_dex2oat_environment_tests_DEX_DEPS)
114ART_GTEST_dexoptanalyzer_test_DEX_DEPS := $(ART_GTEST_dex2oat_environment_tests_DEX_DEPS)
115ART_GTEST_image_space_test_DEX_DEPS := $(ART_GTEST_dex2oat_environment_tests_DEX_DEPS)
116ART_GTEST_oat_file_test_DEX_DEPS := Main MultiDex
117ART_GTEST_oat_test_DEX_DEPS := Main
118ART_GTEST_object_test_DEX_DEPS := ProtoCompare ProtoCompare2 StaticsFromCode XandY
119ART_GTEST_proxy_test_DEX_DEPS := Interfaces
120ART_GTEST_reflection_test_DEX_DEPS := Main NonStaticLeafMethods StaticLeafMethods
121ART_GTEST_profile_assistant_test_DEX_DEPS := ProfileTestMultiDex
122ART_GTEST_profile_compilation_info_test_DEX_DEPS := ProfileTestMultiDex
123ART_GTEST_runtime_callbacks_test_DEX_DEPS := XandY
124ART_GTEST_stub_test_DEX_DEPS := AllFields
125ART_GTEST_transaction_test_DEX_DEPS := Transaction
126ART_GTEST_type_lookup_table_test_DEX_DEPS := Lookup
127ART_GTEST_unstarted_runtime_test_DEX_DEPS := Nested
128ART_GTEST_heap_verification_test_DEX_DEPS := ProtoCompare ProtoCompare2 StaticsFromCode XandY
129ART_GTEST_verifier_deps_test_DEX_DEPS := VerifierDeps VerifierDepsMulti MultiDex
130ART_GTEST_dex_to_dex_decompiler_test_DEX_DEPS := VerifierDeps DexToDexDecompiler
131
132# The elf writer test has dependencies on core.oat.
133ART_GTEST_elf_writer_test_HOST_DEPS := $(HOST_CORE_IMAGE_DEFAULT_64) $(HOST_CORE_IMAGE_DEFAULT_32)
134ART_GTEST_elf_writer_test_TARGET_DEPS := $(TARGET_CORE_IMAGE_DEFAULT_64) $(TARGET_CORE_IMAGE_DEFAULT_32)
135
136ART_GTEST_dex2oat_environment_tests_HOST_DEPS := \
137  $(HOST_CORE_IMAGE_optimizing_64) \
138  $(HOST_CORE_IMAGE_optimizing_32) \
139  $(HOST_CORE_IMAGE_interpreter_64) \
140  $(HOST_CORE_IMAGE_interpreter_32) \
141  $(HOST_OUT_EXECUTABLES)/patchoatd
142ART_GTEST_dex2oat_environment_tests_TARGET_DEPS := \
143  $(TARGET_CORE_IMAGE_optimizing_64) \
144  $(TARGET_CORE_IMAGE_optimizing_32) \
145  $(TARGET_CORE_IMAGE_interpreter_64) \
146  $(TARGET_CORE_IMAGE_interpreter_32) \
147  $(TARGET_OUT_EXECUTABLES)/patchoatd
148
149ART_GTEST_oat_file_assistant_test_HOST_DEPS := \
150  $(ART_GTEST_dex2oat_environment_tests_HOST_DEPS)
151ART_GTEST_oat_file_assistant_test_TARGET_DEPS := \
152  $(ART_GTEST_dex2oat_environment_tests_TARGET_DEPS)
153
154ART_GTEST_dexoptanalyzer_test_HOST_DEPS := \
155  $(ART_GTEST_dex2oat_environment_tests_HOST_DEPS) \
156  $(HOST_OUT_EXECUTABLES)/dexoptanalyzerd
157ART_GTEST_dexoptanalyzer_test_TARGET_DEPS := \
158  $(ART_GTEST_dex2oat_environment_tests_TARGET_DEPS) \
159  dexoptanalyzerd
160
161ART_GTEST_image_space_test_HOST_DEPS := \
162  $(ART_GTEST_dex2oat_environment_tests_HOST_DEPS)
163ART_GTEST_image_space_test_TARGET_DEPS := \
164  $(ART_GTEST_dex2oat_environment_tests_TARGET_DEPS)
165
166ART_GTEST_dex2oat_test_HOST_DEPS := \
167  $(ART_GTEST_dex2oat_environment_tests_HOST_DEPS)
168ART_GTEST_dex2oat_test_TARGET_DEPS := \
169  $(ART_GTEST_dex2oat_environment_tests_TARGET_DEPS)
170
171# TODO: document why this is needed.
172ART_GTEST_proxy_test_HOST_DEPS := $(HOST_CORE_IMAGE_DEFAULT_64) $(HOST_CORE_IMAGE_DEFAULT_32)
173
174# The dexdump test requires an image and the dexdump utility.
175# TODO: rename into dexdump when migration completes
176ART_GTEST_dexdump_test_HOST_DEPS := \
177  $(HOST_CORE_IMAGE_DEFAULT_64) \
178  $(HOST_CORE_IMAGE_DEFAULT_32) \
179  $(HOST_OUT_EXECUTABLES)/dexdump2
180ART_GTEST_dexdump_test_TARGET_DEPS := \
181  $(TARGET_CORE_IMAGE_DEFAULT_64) \
182  $(TARGET_CORE_IMAGE_DEFAULT_32) \
183  dexdump2
184
185# The dexlayout test requires an image and the dexlayout utility.
186# TODO: rename into dexdump when migration completes
187ART_GTEST_dexlayout_test_HOST_DEPS := \
188  $(HOST_CORE_IMAGE_DEFAULT_64) \
189  $(HOST_CORE_IMAGE_DEFAULT_32) \
190  $(HOST_OUT_EXECUTABLES)/dexlayout \
191  $(HOST_OUT_EXECUTABLES)/dexdump2
192ART_GTEST_dexlayout_test_TARGET_DEPS := \
193  $(TARGET_CORE_IMAGE_DEFAULT_64) \
194  $(TARGET_CORE_IMAGE_DEFAULT_32) \
195  dexlayout \
196  dexdump2
197
198# The dexlist test requires an image and the dexlist utility.
199ART_GTEST_dexlist_test_HOST_DEPS := \
200  $(HOST_CORE_IMAGE_DEFAULT_64) \
201  $(HOST_CORE_IMAGE_DEFAULT_32) \
202  $(HOST_OUT_EXECUTABLES)/dexlist
203ART_GTEST_dexlist_test_TARGET_DEPS := \
204  $(TARGET_CORE_IMAGE_DEFAULT_64) \
205  $(TARGET_CORE_IMAGE_DEFAULT_32) \
206  dexlist
207
208# The imgdiag test has dependencies on core.oat since it needs to load it during the test.
209# For the host, also add the installed tool (in the base size, that should suffice). For the
210# target, just the module is fine, the sync will happen late enough.
211ART_GTEST_imgdiag_test_HOST_DEPS := \
212  $(HOST_CORE_IMAGE_DEFAULT_64) \
213  $(HOST_CORE_IMAGE_DEFAULT_32) \
214  $(HOST_OUT_EXECUTABLES)/imgdiagd
215ART_GTEST_imgdiag_test_TARGET_DEPS := \
216  $(TARGET_CORE_IMAGE_DEFAULT_64) \
217  $(TARGET_CORE_IMAGE_DEFAULT_32) \
218  imgdiagd
219
220# Oatdump test requires an image and oatfile to dump.
221ART_GTEST_oatdump_test_HOST_DEPS := \
222  $(HOST_CORE_IMAGE_DEFAULT_64) \
223  $(HOST_CORE_IMAGE_DEFAULT_32) \
224  $(HOST_OUT_EXECUTABLES)/oatdumpd \
225  $(HOST_OUT_EXECUTABLES)/oatdumpds
226ART_GTEST_oatdump_test_TARGET_DEPS := \
227  $(TARGET_CORE_IMAGE_DEFAULT_64) \
228  $(TARGET_CORE_IMAGE_DEFAULT_32) \
229  oatdump
230
231# Profile assistant tests requires profman utility.
232ART_GTEST_profile_assistant_test_HOST_DEPS := \
233  $(HOST_OUT_EXECUTABLES)/profmand
234ART_GTEST_profile_assistant_test_TARGET_DEPS := \
235  profman
236
237# The path for which all the source files are relative, not actually the current directory.
238LOCAL_PATH := art
239
240ART_TEST_MODULES := \
241    art_cmdline_tests \
242    art_compiler_tests \
243    art_compiler_host_tests \
244    art_dex2oat_tests \
245    art_dexdump_tests \
246    art_dexlayout_tests \
247    art_dexlist_tests \
248    art_dexoptanalyzer_tests \
249    art_imgdiag_tests \
250    art_oatdump_tests \
251    art_profman_tests \
252    art_runtime_tests \
253    art_runtime_compiler_tests \
254
255ART_TARGET_GTEST_FILES := $(foreach m,$(ART_TEST_MODULES),\
256    $(ART_TEST_LIST_device_$(TARGET_ARCH)_$(m)))
257
258ifdef TARGET_2ND_ARCH
2592ND_ART_TARGET_GTEST_FILES := $(foreach m,$(ART_TEST_MODULES),\
260    $(ART_TEST_LIST_device_$(2ND_TARGET_ARCH)_$(m)))
261endif
262
263ART_HOST_GTEST_FILES := $(foreach m,$(ART_TEST_MODULES),\
264    $(ART_TEST_LIST_host_$(ART_HOST_ARCH)_$(m)))
265
266ifneq ($(HOST_PREFER_32_BIT),true)
2672ND_ART_HOST_GTEST_FILES += $(foreach m,$(ART_TEST_MODULES),\
268    $(ART_TEST_LIST_host_$(2ND_ART_HOST_ARCH)_$(m)))
269endif
270
271# Variables holding collections of gtest pre-requisits used to run a number of gtests.
272ART_TEST_HOST_GTEST$(ART_PHONY_TEST_HOST_SUFFIX)_RULES :=
273ART_TEST_HOST_GTEST$(2ND_ART_PHONY_TEST_HOST_SUFFIX)_RULES :=
274ART_TEST_HOST_GTEST_RULES :=
275ART_TEST_HOST_VALGRIND_GTEST$(ART_PHONY_TEST_HOST_SUFFIX)_RULES :=
276ART_TEST_HOST_VALGRIND_GTEST$(2ND_ART_PHONY_TEST_HOST_SUFFIX)_RULES :=
277ART_TEST_HOST_VALGRIND_GTEST_RULES :=
278ART_TEST_TARGET_GTEST$(ART_PHONY_TEST_TARGET_SUFFIX)_RULES :=
279ART_TEST_TARGET_GTEST$(2ND_ART_PHONY_TEST_TARGET_SUFFIX)_RULES :=
280ART_TEST_TARGET_GTEST_RULES :=
281ART_TEST_TARGET_VALGRIND_GTEST$(ART_PHONY_TEST_TARGET_SUFFIX)_RULES :=
282ART_TEST_TARGET_VALGRIND_GTEST$(2ND_ART_PHONY_TEST_TARGET_SUFFIX)_RULES :=
283ART_TEST_TARGET_VALGRIND_GTEST_RULES :=
284ART_TEST_HOST_GTEST_DEPENDENCIES :=
285
286ART_GTEST_TARGET_ANDROID_ROOT := '/system'
287ifneq ($(ART_TEST_ANDROID_ROOT),)
288  ART_GTEST_TARGET_ANDROID_ROOT := $(ART_TEST_ANDROID_ROOT)
289endif
290
291ART_VALGRIND_TARGET_DEPENDENCIES := \
292  $(TARGET_OUT_EXECUTABLES)/valgrind \
293  $(TARGET_OUT_SHARED_LIBRARIES)/valgrind/memcheck-$(TARGET_ARCH)-linux \
294  $(TARGET_OUT_SHARED_LIBRARIES)/valgrind/vgpreload_core-$(TARGET_ARCH)-linux.so \
295  $(TARGET_OUT_SHARED_LIBRARIES)/valgrind/vgpreload_memcheck-$(TARGET_ARCH)-linux.so \
296  $(TARGET_OUT_SHARED_LIBRARIES)/valgrind/default.supp
297
298ifdef TARGET_2ND_ARCH
299ART_VALGRIND_TARGET_DEPENDENCIES += \
300  $(TARGET_OUT_SHARED_LIBRARIES)/valgrind/memcheck-$(TARGET_2ND_ARCH)-linux \
301  $(TARGET_OUT_SHARED_LIBRARIES)/valgrind/vgpreload_core-$(TARGET_2ND_ARCH)-linux.so \
302  $(TARGET_OUT_SHARED_LIBRARIES)/valgrind/vgpreload_memcheck-$(TARGET_2ND_ARCH)-linux.so
303endif
304
305include $(CLEAR_VARS)
306LOCAL_MODULE := valgrind-target-suppressions.txt
307LOCAL_MODULE_CLASS := ETC
308LOCAL_MODULE_TAGS := optional
309LOCAL_SRC_FILES := test/valgrind-target-suppressions.txt
310LOCAL_MODULE_PATH := $(ART_TARGET_TEST_OUT)
311include $(BUILD_PREBUILT)
312
313# Define a make rule for a target device gtest.
314# $(1): gtest name - the name of the test we're building such as leb128_test.
315# $(2): path relative to $OUT to the test binary
316# $(3): 2ND_ or undefined - used to differentiate between the primary and secondary architecture.
317# $(4): LD_LIBRARY_PATH or undefined - used in case libartd.so is not in /system/lib/
318define define-art-gtest-rule-target
319  gtest_rule := test-art-target-gtest-$(1)$$($(3)ART_PHONY_TEST_TARGET_SUFFIX)
320  gtest_exe := $(OUT_DIR)/$(2)
321  gtest_target_exe := $$(patsubst $(PRODUCT_OUT)/%,/%,$$(gtest_exe))
322
323  # Add the test dependencies to test-art-target-sync, which will be a prerequisite for the test
324  # to ensure files are pushed to the device.
325  TEST_ART_TARGET_SYNC_DEPS += \
326    $$(ART_GTEST_$(1)_TARGET_DEPS) \
327    $(foreach file,$(ART_GTEST_$(1)_DEX_DEPS),$(ART_TEST_TARGET_GTEST_$(file)_DEX)) \
328    $$(gtest_exe) \
329    $$($(3)TARGET_OUT_SHARED_LIBRARIES)/libjavacore.so \
330    $$($(3)TARGET_OUT_SHARED_LIBRARIES)/libopenjdkd.so \
331    $$(TARGET_OUT_JAVA_LIBRARIES)/core-libart-testdex.jar \
332    $$(TARGET_OUT_JAVA_LIBRARIES)/core-oj-testdex.jar \
333    $$(ART_TARGET_TEST_OUT)/valgrind-target-suppressions.txt
334
335$$(gtest_rule) valgrind-$$(gtest_rule): PRIVATE_TARGET_EXE := $$(gtest_target_exe)
336
337.PHONY: $$(gtest_rule)
338$$(gtest_rule): test-art-target-sync
339	$(hide) adb shell touch $(ART_TARGET_TEST_DIR)/$(TARGET_$(3)ARCH)/$$@-$$$$PPID
340	$(hide) adb shell rm $(ART_TARGET_TEST_DIR)/$(TARGET_$(3)ARCH)/$$@-$$$$PPID
341	$(hide) adb shell chmod 755 $$(PRIVATE_TARGET_EXE)
342	$(hide) $$(call ART_TEST_SKIP,$$@) && \
343	  (adb shell "$(GCOV_ENV) LD_LIBRARY_PATH=$(4) ANDROID_ROOT=$(ART_GTEST_TARGET_ANDROID_ROOT) \
344	    $$(PRIVATE_TARGET_EXE) && touch $(ART_TARGET_TEST_DIR)/$(TARGET_$(3)ARCH)/$$@-$$$$PPID" \
345	  && (adb pull $(ART_TARGET_TEST_DIR)/$(TARGET_$(3)ARCH)/$$@-$$$$PPID /tmp/ \
346	      && $$(call ART_TEST_PASSED,$$@)) \
347	  || $$(call ART_TEST_FAILED,$$@))
348	$(hide) rm -f /tmp/$$@-$$$$PPID
349
350  ART_TEST_TARGET_GTEST$($(3)ART_PHONY_TEST_TARGET_SUFFIX)_RULES += $$(gtest_rule)
351  ART_TEST_TARGET_GTEST_RULES += $$(gtest_rule)
352  ART_TEST_TARGET_GTEST_$(1)_RULES += $$(gtest_rule)
353
354.PHONY: valgrind-$$(gtest_rule)
355valgrind-$$(gtest_rule): $(ART_VALGRIND_TARGET_DEPENDENCIES) test-art-target-sync
356	$(hide) adb shell touch $(ART_TARGET_TEST_DIR)/$(TARGET_$(3)ARCH)/$$@-$$$$PPID
357	$(hide) adb shell rm $(ART_TARGET_TEST_DIR)/$(TARGET_$(3)ARCH)/$$@-$$$$PPID
358	$(hide) adb shell chmod 755 $$(PRIVATE_TARGET_EXE)
359	$(hide) $$(call ART_TEST_SKIP,$$@) && \
360	  (adb shell "$(GCOV_ENV) LD_LIBRARY_PATH=$(4) ANDROID_ROOT=$(ART_GTEST_TARGET_ANDROID_ROOT) \
361	    valgrind --leak-check=full --error-exitcode=1 --workaround-gcc296-bugs=yes \
362	    --suppressions=$(ART_TARGET_TEST_DIR)/valgrind-target-suppressions.txt \
363	    --num-callers=50 --show-mismatched-frees=no \
364	    $$(PRIVATE_TARGET_EXE) && touch $(ART_TARGET_TEST_DIR)/$(TARGET_$(3)ARCH)/$$@-$$$$PPID" \
365	  && (adb pull $(ART_TARGET_TEST_DIR)/$(TARGET_$(3)ARCH)/$$@-$$$$PPID /tmp/ \
366	      && $$(call ART_TEST_PASSED,$$@)) \
367	  || $$(call ART_TEST_FAILED,$$@))
368	$(hide) rm -f /tmp/$$@-$$$$PPID
369
370  ART_TEST_TARGET_VALGRIND_GTEST$$($(3)ART_PHONY_TEST_TARGET_SUFFIX)_RULES += valgrind-$$(gtest_rule)
371  ART_TEST_TARGET_VALGRIND_GTEST_RULES += valgrind-$$(gtest_rule)
372  ART_TEST_TARGET_VALGRIND_GTEST_$(1)_RULES += valgrind-$$(gtest_rule)
373
374  # Clear locally defined variables.
375  valgrind_gtest_rule :=
376  gtest_rule :=
377  gtest_exe :=
378  gtest_target_exe :=
379endef  # define-art-gtest-rule-target
380
381ART_VALGRIND_DEPENDENCIES := \
382  $(HOST_OUT_EXECUTABLES)/valgrind \
383  $(HOST_OUT)/lib64/valgrind/memcheck-amd64-linux \
384  $(HOST_OUT)/lib64/valgrind/memcheck-x86-linux \
385  $(HOST_OUT)/lib64/valgrind/default.supp \
386  $(HOST_OUT)/lib64/valgrind/vgpreload_core-amd64-linux.so \
387  $(HOST_OUT)/lib64/valgrind/vgpreload_core-x86-linux.so \
388  $(HOST_OUT)/lib64/valgrind/vgpreload_memcheck-amd64-linux.so \
389  $(HOST_OUT)/lib64/valgrind/vgpreload_memcheck-x86-linux.so
390
391# Define make rules for a host gtests.
392# $(1): gtest name - the name of the test we're building such as leb128_test.
393# $(2): path relative to $OUT to the test binary
394# $(3): 2ND_ or undefined - used to differentiate between the primary and secondary architecture.
395define define-art-gtest-rule-host
396  gtest_rule := test-art-host-gtest-$(1)$$($(3)ART_PHONY_TEST_HOST_SUFFIX)
397  gtest_exe := $(OUT_DIR)/$(2)
398  # Dependencies for all host gtests.
399  gtest_deps := $$(HOST_CORE_DEX_LOCATIONS) \
400    $$($(3)ART_HOST_OUT_SHARED_LIBRARIES)/libjavacore$$(ART_HOST_SHLIB_EXTENSION) \
401    $$($(3)ART_HOST_OUT_SHARED_LIBRARIES)/libopenjdkd$$(ART_HOST_SHLIB_EXTENSION) \
402    $$(gtest_exe) \
403    $$(ART_GTEST_$(1)_HOST_DEPS) \
404    $(foreach file,$(ART_GTEST_$(1)_DEX_DEPS),$(ART_TEST_HOST_GTEST_$(file)_DEX))
405
406  ART_TEST_HOST_GTEST_DEPENDENCIES += $$(gtest_deps)
407
408.PHONY: $$(gtest_rule)
409$$(gtest_rule): $$(gtest_exe) $$(gtest_deps)
410	$(hide) ($$(call ART_TEST_SKIP,$$@) && $$< && $$(call ART_TEST_PASSED,$$@)) \
411	  || $$(call ART_TEST_FAILED,$$@)
412
413  ART_TEST_HOST_GTEST$$($(3)ART_PHONY_TEST_HOST_SUFFIX)_RULES += $$(gtest_rule)
414  ART_TEST_HOST_GTEST_RULES += $$(gtest_rule)
415  ART_TEST_HOST_GTEST_$(1)_RULES += $$(gtest_rule)
416
417
418.PHONY: valgrind-$$(gtest_rule)
419valgrind-$$(gtest_rule): $$(gtest_exe) $$(gtest_deps) $(ART_VALGRIND_DEPENDENCIES)
420	$(hide) $$(call ART_TEST_SKIP,$$@) && \
421	  VALGRIND_LIB=$(HOST_OUT)/lib64/valgrind \
422	  $(HOST_OUT_EXECUTABLES)/valgrind --leak-check=full --error-exitcode=1 \
423	    --suppressions=art/test/valgrind-suppressions.txt --num-callers=50 \
424	    $$< && \
425	    $$(call ART_TEST_PASSED,$$@) || $$(call ART_TEST_FAILED,$$@)
426
427  ART_TEST_HOST_VALGRIND_GTEST$$($(3)ART_PHONY_TEST_HOST_SUFFIX)_RULES += valgrind-$$(gtest_rule)
428  ART_TEST_HOST_VALGRIND_GTEST_RULES += valgrind-$$(gtest_rule)
429  ART_TEST_HOST_VALGRIND_GTEST_$(1)_RULES += valgrind-$$(gtest_rule)
430
431  # Clear locally defined variables.
432  valgrind_gtest_rule :=
433  gtest_rule :=
434  gtest_exe :=
435  gtest_deps :=
436endef  # define-art-gtest-rule-host
437
438# Define the rules to build and run host and target gtests.
439# $(1): file name
440# $(2): 2ND_ or undefined - used to differentiate between the primary and secondary architecture.
441define define-art-gtest-target
442  art_gtest_filename := $(1)
443
444  include $$(CLEAR_VARS)
445  art_gtest_name := $$(notdir $$(basename $$(art_gtest_filename)))
446
447  library_path :=
448  2ND_library_path :=
449  ifneq ($$(ART_TEST_ANDROID_ROOT),)
450    ifdef TARGET_2ND_ARCH
451      2ND_library_path := $$(ART_TEST_ANDROID_ROOT)/lib
452      library_path := $$(ART_TEST_ANDROID_ROOT)/lib64
453    else
454      ifneq ($(filter %64,$(TARGET_ARCH)),)
455        library_path := $$(ART_TEST_ANDROID_ROOT)/lib64
456      else
457        library_path := $$(ART_TEST_ANDROID_ROOT)/lib
458      endif
459    endif
460  endif
461
462  ifndef ART_TEST_TARGET_GTEST_$$(art_gtest_name)_RULES
463    ART_TEST_TARGET_GTEST_$$(art_gtest_name)_RULES :=
464    ART_TEST_TARGET_VALGRIND_GTEST_$$(art_gtest_name)_RULES :=
465  endif
466  $$(eval $$(call define-art-gtest-rule-target,$$(art_gtest_name),$$(art_gtest_filename),$(2),$$($(2)library_path)))
467
468  # Clear locally defined variables.
469  art_gtest_filename :=
470  art_gtest_name :=
471  library_path :=
472  2ND_library_path :=
473endef  # define-art-gtest-target
474
475# $(1): file name
476# $(2): 2ND_ or undefined - used to differentiate between the primary and secondary architecture.
477define define-art-gtest-host
478  art_gtest_filename := $(1)
479
480  include $$(CLEAR_VARS)
481  art_gtest_name := $$(notdir $$(basename $$(art_gtest_filename)))
482  ifndef ART_TEST_HOST_GTEST_$$(art_gtest_name)_RULES
483    ART_TEST_HOST_GTEST_$$(art_gtest_name)_RULES :=
484    ART_TEST_HOST_VALGRIND_GTEST_$$(art_gtest_name)_RULES :=
485  endif
486  $$(eval $$(call define-art-gtest-rule-host,$$(art_gtest_name),$$(art_gtest_filename),$(2)))
487
488  # Clear locally defined variables.
489  art_gtest_filename :=
490  art_gtest_name :=
491endef  # define-art-gtest-host
492
493# Define the rules to build and run gtests for both archs on target.
494# $(1): test name
495define define-art-gtest-target-both
496  art_gtest_name := $(1)
497
498    # A rule to run the different architecture versions of the gtest.
499.PHONY: test-art-target-gtest-$$(art_gtest_name)
500test-art-target-gtest-$$(art_gtest_name): $$(ART_TEST_TARGET_GTEST_$$(art_gtest_name)_RULES)
501	$$(hide) $$(call ART_TEST_PREREQ_FINISHED,$$@)
502
503.PHONY: valgrind-test-art-target-gtest-$$(art_gtest_name)
504valgrind-test-art-target-gtest-$$(art_gtest_name): $$(ART_TEST_TARGET_VALGRIND_GTEST_$$(art_gtest_name)_RULES)
505	$$(hide) $$(call ART_TEST_PREREQ_FINISHED,$$@)
506
507  # Clear now unused variables.
508  ART_TEST_TARGET_GTEST_$$(art_gtest_name)_RULES :=
509  ART_TEST_TARGET_VALGRIND_GTEST_$$(art_gtest_name)_RULES :=
510  art_gtest_name :=
511endef  # define-art-gtest-target-both
512
513# Define the rules to build and run gtests for both archs on host.
514# $(1): test name
515define define-art-gtest-host-both
516  art_gtest_name := $(1)
517
518.PHONY: test-art-host-gtest-$$(art_gtest_name)
519test-art-host-gtest-$$(art_gtest_name): $$(ART_TEST_HOST_GTEST_$$(art_gtest_name)_RULES)
520	$$(hide) $$(call ART_TEST_PREREQ_FINISHED,$$@)
521
522.PHONY: valgrind-test-art-host-gtest-$$(art_gtest_name)
523valgrind-test-art-host-gtest-$$(art_gtest_name): $$(ART_TEST_HOST_VALGRIND_GTEST_$$(art_gtest_name)_RULES)
524	$$(hide) $$(call ART_TEST_PREREQ_FINISHED,$$@)
525
526  # Clear now unused variables.
527  ART_TEST_HOST_GTEST_$$(art_gtest_name)_RULES :=
528  ART_TEST_HOST_VALGRIND_GTEST_$$(art_gtest_name)_RULES :=
529  art_gtest_name :=
530endef  # define-art-gtest-host-both
531
532ifeq ($(ART_BUILD_TARGET),true)
533  $(foreach file,$(ART_TARGET_GTEST_FILES), $(eval $(call define-art-gtest-target,$(file),)))
534  ifdef TARGET_2ND_ARCH
535    $(foreach file,$(2ND_ART_TARGET_GTEST_FILES), $(eval $(call define-art-gtest-target,$(file),2ND_)))
536  endif
537  # Rules to run the different architecture versions of the gtest.
538  $(foreach file,$(ART_TARGET_GTEST_FILES), $(eval $(call define-art-gtest-target-both,$$(notdir $$(basename $$(file))))))
539endif
540ifeq ($(ART_BUILD_HOST),true)
541  $(foreach file,$(ART_HOST_GTEST_FILES), $(eval $(call define-art-gtest-host,$(file),)))
542  ifneq ($(HOST_PREFER_32_BIT),true)
543    $(foreach file,$(2ND_ART_HOST_GTEST_FILES), $(eval $(call define-art-gtest-host,$(file),2ND_)))
544  endif
545  # Rules to run the different architecture versions of the gtest.
546  $(foreach file,$(ART_HOST_GTEST_FILES), $(eval $(call define-art-gtest-host-both,$$(notdir $$(basename $$(file))))))
547endif
548
549# Used outside the art project to get a list of the current tests
550RUNTIME_TARGET_GTEST_MAKE_TARGETS :=
551$(foreach file, $(ART_TARGET_GTEST_FILES), $(eval RUNTIME_TARGET_GTEST_MAKE_TARGETS += $$(notdir $$(basename $$(file)))))
552COMPILER_TARGET_GTEST_MAKE_TARGETS :=
553
554# Define all the combinations of host/target, valgrind and suffix such as:
555# test-art-host-gtest or valgrind-test-art-host-gtest64
556# $(1): host or target
557# $(2): HOST or TARGET
558# $(3): valgrind- or undefined
559# $(4): undefined, 32 or 64
560define define-test-art-gtest-combination
561  ifeq ($(1),host)
562    ifneq ($(2),HOST)
563      $$(error argument mismatch $(1) and ($2))
564    endif
565  else
566    ifneq ($(1),target)
567      $$(error found $(1) expected host or target)
568    endif
569    ifneq ($(2),TARGET)
570      $$(error argument mismatch $(1) and ($2))
571    endif
572  endif
573
574  rule_name := $(3)test-art-$(1)-gtest$(4)
575  ifeq ($(3),valgrind-)
576    dependencies := $$(ART_TEST_$(2)_VALGRIND_GTEST$(4)_RULES)
577  else
578    dependencies := $$(ART_TEST_$(2)_GTEST$(4)_RULES)
579  endif
580
581.PHONY: $$(rule_name)
582$$(rule_name): $$(dependencies)
583	$(hide) $$(call ART_TEST_PREREQ_FINISHED,$$@)
584
585  # Clear locally defined variables.
586  rule_name :=
587  dependencies :=
588endef  # define-test-art-gtest-combination
589
590$(eval $(call define-test-art-gtest-combination,target,TARGET,,))
591$(eval $(call define-test-art-gtest-combination,target,TARGET,valgrind-,))
592$(eval $(call define-test-art-gtest-combination,target,TARGET,,$(ART_PHONY_TEST_TARGET_SUFFIX)))
593$(eval $(call define-test-art-gtest-combination,target,TARGET,valgrind-,$(ART_PHONY_TEST_TARGET_SUFFIX)))
594ifdef TARGET_2ND_ARCH
595$(eval $(call define-test-art-gtest-combination,target,TARGET,,$(2ND_ART_PHONY_TEST_TARGET_SUFFIX)))
596$(eval $(call define-test-art-gtest-combination,target,TARGET,valgrind-,$(2ND_ART_PHONY_TEST_TARGET_SUFFIX)))
597endif
598$(eval $(call define-test-art-gtest-combination,host,HOST,,))
599$(eval $(call define-test-art-gtest-combination,host,HOST,valgrind-,))
600$(eval $(call define-test-art-gtest-combination,host,HOST,,$(ART_PHONY_TEST_HOST_SUFFIX)))
601$(eval $(call define-test-art-gtest-combination,host,HOST,valgrind-,$(ART_PHONY_TEST_HOST_SUFFIX)))
602ifneq ($(HOST_PREFER_32_BIT),true)
603$(eval $(call define-test-art-gtest-combination,host,HOST,,$(2ND_ART_PHONY_TEST_HOST_SUFFIX)))
604$(eval $(call define-test-art-gtest-combination,host,HOST,valgrind-,$(2ND_ART_PHONY_TEST_HOST_SUFFIX)))
605endif
606
607# Clear locally defined variables.
608define-art-gtest-rule-target :=
609define-art-gtest-rule-host :=
610define-art-gtest :=
611define-test-art-gtest-combination :=
612RUNTIME_GTEST_COMMON_SRC_FILES :=
613COMPILER_GTEST_COMMON_SRC_FILES :=
614RUNTIME_GTEST_TARGET_SRC_FILES :=
615RUNTIME_GTEST_HOST_SRC_FILES :=
616COMPILER_GTEST_TARGET_SRC_FILES :=
617COMPILER_GTEST_HOST_SRC_FILES :=
618ART_TEST_HOST_GTEST$(ART_PHONY_TEST_HOST_SUFFIX)_RULES :=
619ART_TEST_HOST_GTEST$(2ND_ART_PHONY_TEST_HOST_SUFFIX)_RULES :=
620ART_TEST_HOST_GTEST_RULES :=
621ART_TEST_HOST_VALGRIND_GTEST$(ART_PHONY_TEST_HOST_SUFFIX)_RULES :=
622ART_TEST_HOST_VALGRIND_GTEST$(2ND_ART_PHONY_TEST_HOST_SUFFIX)_RULES :=
623ART_TEST_HOST_VALGRIND_GTEST_RULES :=
624ART_TEST_TARGET_GTEST$(ART_PHONY_TEST_TARGET_SUFFIX)_RULES :=
625ART_TEST_TARGET_GTEST$(2ND_ART_PHONY_TEST_TARGET_SUFFIX)_RULES :=
626ART_TEST_TARGET_GTEST_RULES :=
627ART_TEST_TARGET_VALGRIND_GTEST$(ART_PHONY_TEST_TARGET_SUFFIX)_RULES :=
628ART_TEST_TARGET_VALGRIND_GTEST$(2ND_ART_PHONY_TEST_TARGET_SUFFIX)_RULES :=
629ART_TEST_TARGET_VALGRIND_GTEST_RULES :=
630ART_GTEST_TARGET_ANDROID_ROOT :=
631ART_GTEST_class_linker_test_DEX_DEPS :=
632ART_GTEST_class_table_test_DEX_DEPS :=
633ART_GTEST_compiler_driver_test_DEX_DEPS :=
634ART_GTEST_dex_file_test_DEX_DEPS :=
635ART_GTEST_exception_test_DEX_DEPS :=
636ART_GTEST_elf_writer_test_HOST_DEPS :=
637ART_GTEST_elf_writer_test_TARGET_DEPS :=
638ART_GTEST_imtable_test_DEX_DEPS :=
639ART_GTEST_jni_compiler_test_DEX_DEPS :=
640ART_GTEST_jni_internal_test_DEX_DEPS :=
641ART_GTEST_oat_file_assistant_test_DEX_DEPS :=
642ART_GTEST_oat_file_assistant_test_HOST_DEPS :=
643ART_GTEST_oat_file_assistant_test_TARGET_DEPS :=
644ART_GTEST_dexoptanalyzer_test_DEX_DEPS :=
645ART_GTEST_dexoptanalyzer_test_HOST_DEPS :=
646ART_GTEST_dexoptanalyzer_test_TARGET_DEPS :=
647ART_GTEST_image_space_test_DEX_DEPS :=
648ART_GTEST_image_space_test_HOST_DEPS :=
649ART_GTEST_image_space_test_TARGET_DEPS :=
650ART_GTEST_dex2oat_test_DEX_DEPS :=
651ART_GTEST_dex2oat_test_HOST_DEPS :=
652ART_GTEST_dex2oat_test_TARGET_DEPS :=
653ART_GTEST_object_test_DEX_DEPS :=
654ART_GTEST_proxy_test_DEX_DEPS :=
655ART_GTEST_reflection_test_DEX_DEPS :=
656ART_GTEST_stub_test_DEX_DEPS :=
657ART_GTEST_transaction_test_DEX_DEPS :=
658ART_GTEST_dex2oat_environment_tests_DEX_DEPS :=
659ART_GTEST_heap_verification_test_DEX_DEPS :=
660ART_GTEST_verifier_deps_test_DEX_DEPS :=
661ART_VALGRIND_DEPENDENCIES :=
662ART_VALGRIND_TARGET_DEPENDENCIES :=
663$(foreach dir,$(GTEST_DEX_DIRECTORIES), $(eval ART_TEST_TARGET_GTEST_$(dir)_DEX :=))
664$(foreach dir,$(GTEST_DEX_DIRECTORIES), $(eval ART_TEST_HOST_GTEST_$(dir)_DEX :=))
665ART_TEST_HOST_GTEST_MainStripped_DEX :=
666ART_TEST_TARGET_GTEST_MainStripped_DEX :=
667ART_TEST_GTEST_VerifierDeps_SRC :=
668ART_TEST_HOST_GTEST_VerifierDeps_DEX :=
669ART_TEST_TARGET_GTEST_VerifierDeps_DEX :=
670GTEST_DEX_DIRECTORIES :=
671LOCAL_PATH :=
672