Home | History | Annotate | Download | only in build
      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.
     18 LOCAL_PATH := art/test
     19 
     20 include art/build/Android.common_test.mk
     21 include art/build/Android.common_path.mk
     22 include art/build/Android.common_build.mk
     23 
     24 # Subdirectories in art/test which contain dex files used as inputs for gtests.
     25 GTEST_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.
     67 ART_TEST_HOST_GTEST_MainStripped_DEX := $(basename $(ART_TEST_HOST_GTEST_Main_DEX))Stripped$(suffix $(ART_TEST_HOST_GTEST_Main_DEX))
     68 ART_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 
     78 ART_TEST_GTEST_VerifierDeps_SRC := $(abspath $(wildcard $(LOCAL_PATH)/VerifierDeps/*.smali))
     79 ART_TEST_GTEST_VerifierDepsMulti_SRC := $(abspath $(wildcard $(LOCAL_PATH)/VerifierDepsMulti/*.smali))
     80 ART_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))
     81 ART_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))
     82 ART_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))
     83 ART_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.
     98 ART_GTEST_dex2oat_environment_tests_DEX_DEPS := Main MainStripped MultiDex MultiDexModifiedSecondary Nested
     99 
    100 ART_GTEST_atomic_method_ref_map_test_DEX_DEPS := Interfaces
    101 ART_GTEST_class_linker_test_DEX_DEPS := AllFields ErroneousA ErroneousB ErroneousInit Interfaces MethodTypes MultiDex MyClass Nested Statics StaticsFromCode
    102 ART_GTEST_class_table_test_DEX_DEPS := XandY
    103 ART_GTEST_compiler_driver_test_DEX_DEPS := AbstractMethod StaticLeafMethods ProfileTestMultiDex
    104 ART_GTEST_dex_cache_test_DEX_DEPS := Main Packages MethodTypes
    105 ART_GTEST_dex_file_test_DEX_DEPS := GetMethodSignature Main Nested MultiDex
    106 ART_GTEST_dex2oat_test_DEX_DEPS := $(ART_GTEST_dex2oat_environment_tests_DEX_DEPS) Statics VerifierDeps
    107 ART_GTEST_exception_test_DEX_DEPS := ExceptionHandle
    108 ART_GTEST_image_test_DEX_DEPS := ImageLayoutA ImageLayoutB DefaultMethods
    109 ART_GTEST_imtable_test_DEX_DEPS := IMTA IMTB
    110 ART_GTEST_instrumentation_test_DEX_DEPS := Instrumentation
    111 ART_GTEST_jni_compiler_test_DEX_DEPS := MyClassNatives
    112 ART_GTEST_jni_internal_test_DEX_DEPS := AllFields StaticLeafMethods
    113 ART_GTEST_oat_file_assistant_test_DEX_DEPS := $(ART_GTEST_dex2oat_environment_tests_DEX_DEPS)
    114 ART_GTEST_dexoptanalyzer_test_DEX_DEPS := $(ART_GTEST_dex2oat_environment_tests_DEX_DEPS)
    115 ART_GTEST_image_space_test_DEX_DEPS := $(ART_GTEST_dex2oat_environment_tests_DEX_DEPS)
    116 ART_GTEST_oat_file_test_DEX_DEPS := Main MultiDex
    117 ART_GTEST_oat_test_DEX_DEPS := Main
    118 ART_GTEST_object_test_DEX_DEPS := ProtoCompare ProtoCompare2 StaticsFromCode XandY
    119 ART_GTEST_proxy_test_DEX_DEPS := Interfaces
    120 ART_GTEST_reflection_test_DEX_DEPS := Main NonStaticLeafMethods StaticLeafMethods
    121 ART_GTEST_profile_assistant_test_DEX_DEPS := ProfileTestMultiDex
    122 ART_GTEST_profile_compilation_info_test_DEX_DEPS := ProfileTestMultiDex
    123 ART_GTEST_runtime_callbacks_test_DEX_DEPS := XandY
    124 ART_GTEST_stub_test_DEX_DEPS := AllFields
    125 ART_GTEST_transaction_test_DEX_DEPS := Transaction
    126 ART_GTEST_type_lookup_table_test_DEX_DEPS := Lookup
    127 ART_GTEST_unstarted_runtime_test_DEX_DEPS := Nested
    128 ART_GTEST_heap_verification_test_DEX_DEPS := ProtoCompare ProtoCompare2 StaticsFromCode XandY
    129 ART_GTEST_verifier_deps_test_DEX_DEPS := VerifierDeps VerifierDepsMulti MultiDex
    130 ART_GTEST_dex_to_dex_decompiler_test_DEX_DEPS := VerifierDeps DexToDexDecompiler
    131 
    132 # The elf writer test has dependencies on core.oat.
    133 ART_GTEST_elf_writer_test_HOST_DEPS := $(HOST_CORE_IMAGE_DEFAULT_64) $(HOST_CORE_IMAGE_DEFAULT_32)
    134 ART_GTEST_elf_writer_test_TARGET_DEPS := $(TARGET_CORE_IMAGE_DEFAULT_64) $(TARGET_CORE_IMAGE_DEFAULT_32)
    135 
    136 ART_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
    142 ART_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 
    149 ART_GTEST_oat_file_assistant_test_HOST_DEPS := \
    150   $(ART_GTEST_dex2oat_environment_tests_HOST_DEPS)
    151 ART_GTEST_oat_file_assistant_test_TARGET_DEPS := \
    152   $(ART_GTEST_dex2oat_environment_tests_TARGET_DEPS)
    153 
    154 ART_GTEST_dexoptanalyzer_test_HOST_DEPS := \
    155   $(ART_GTEST_dex2oat_environment_tests_HOST_DEPS) \
    156   $(HOST_OUT_EXECUTABLES)/dexoptanalyzerd
    157 ART_GTEST_dexoptanalyzer_test_TARGET_DEPS := \
    158   $(ART_GTEST_dex2oat_environment_tests_TARGET_DEPS) \
    159   dexoptanalyzerd
    160 
    161 ART_GTEST_image_space_test_HOST_DEPS := \
    162   $(ART_GTEST_dex2oat_environment_tests_HOST_DEPS)
    163 ART_GTEST_image_space_test_TARGET_DEPS := \
    164   $(ART_GTEST_dex2oat_environment_tests_TARGET_DEPS)
    165 
    166 ART_GTEST_dex2oat_test_HOST_DEPS := \
    167   $(ART_GTEST_dex2oat_environment_tests_HOST_DEPS)
    168 ART_GTEST_dex2oat_test_TARGET_DEPS := \
    169   $(ART_GTEST_dex2oat_environment_tests_TARGET_DEPS)
    170 
    171 # TODO: document why this is needed.
    172 ART_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
    176 ART_GTEST_dexdump_test_HOST_DEPS := \
    177   $(HOST_CORE_IMAGE_DEFAULT_64) \
    178   $(HOST_CORE_IMAGE_DEFAULT_32) \
    179   $(HOST_OUT_EXECUTABLES)/dexdump2
    180 ART_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
    187 ART_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
    192 ART_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.
    199 ART_GTEST_dexlist_test_HOST_DEPS := \
    200   $(HOST_CORE_IMAGE_DEFAULT_64) \
    201   $(HOST_CORE_IMAGE_DEFAULT_32) \
    202   $(HOST_OUT_EXECUTABLES)/dexlist
    203 ART_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.
    211 ART_GTEST_imgdiag_test_HOST_DEPS := \
    212   $(HOST_CORE_IMAGE_DEFAULT_64) \
    213   $(HOST_CORE_IMAGE_DEFAULT_32) \
    214   $(HOST_OUT_EXECUTABLES)/imgdiagd
    215 ART_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.
    221 ART_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
    226 ART_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.
    232 ART_GTEST_profile_assistant_test_HOST_DEPS := \
    233   $(HOST_OUT_EXECUTABLES)/profmand
    234 ART_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.
    238 LOCAL_PATH := art
    239 
    240 ART_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 
    255 ART_TARGET_GTEST_FILES := $(foreach m,$(ART_TEST_MODULES),\
    256     $(ART_TEST_LIST_device_$(TARGET_ARCH)_$(m)))
    257 
    258 ifdef TARGET_2ND_ARCH
    259 2ND_ART_TARGET_GTEST_FILES := $(foreach m,$(ART_TEST_MODULES),\
    260     $(ART_TEST_LIST_device_$(2ND_TARGET_ARCH)_$(m)))
    261 endif
    262 
    263 ART_HOST_GTEST_FILES := $(foreach m,$(ART_TEST_MODULES),\
    264     $(ART_TEST_LIST_host_$(ART_HOST_ARCH)_$(m)))
    265 
    266 ifneq ($(HOST_PREFER_32_BIT),true)
    267 2ND_ART_HOST_GTEST_FILES += $(foreach m,$(ART_TEST_MODULES),\
    268     $(ART_TEST_LIST_host_$(2ND_ART_HOST_ARCH)_$(m)))
    269 endif
    270 
    271 # Variables holding collections of gtest pre-requisits used to run a number of gtests.
    272 ART_TEST_HOST_GTEST$(ART_PHONY_TEST_HOST_SUFFIX)_RULES :=
    273 ART_TEST_HOST_GTEST$(2ND_ART_PHONY_TEST_HOST_SUFFIX)_RULES :=
    274 ART_TEST_HOST_GTEST_RULES :=
    275 ART_TEST_HOST_VALGRIND_GTEST$(ART_PHONY_TEST_HOST_SUFFIX)_RULES :=
    276 ART_TEST_HOST_VALGRIND_GTEST$(2ND_ART_PHONY_TEST_HOST_SUFFIX)_RULES :=
    277 ART_TEST_HOST_VALGRIND_GTEST_RULES :=
    278 ART_TEST_TARGET_GTEST$(ART_PHONY_TEST_TARGET_SUFFIX)_RULES :=
    279 ART_TEST_TARGET_GTEST$(2ND_ART_PHONY_TEST_TARGET_SUFFIX)_RULES :=
    280 ART_TEST_TARGET_GTEST_RULES :=
    281 ART_TEST_TARGET_VALGRIND_GTEST$(ART_PHONY_TEST_TARGET_SUFFIX)_RULES :=
    282 ART_TEST_TARGET_VALGRIND_GTEST$(2ND_ART_PHONY_TEST_TARGET_SUFFIX)_RULES :=
    283 ART_TEST_TARGET_VALGRIND_GTEST_RULES :=
    284 ART_TEST_HOST_GTEST_DEPENDENCIES :=
    285 
    286 ART_GTEST_TARGET_ANDROID_ROOT := '/system'
    287 ifneq ($(ART_TEST_ANDROID_ROOT),)
    288   ART_GTEST_TARGET_ANDROID_ROOT := $(ART_TEST_ANDROID_ROOT)
    289 endif
    290 
    291 ART_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 
    298 ifdef TARGET_2ND_ARCH
    299 ART_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
    303 endif
    304 
    305 include $(CLEAR_VARS)
    306 LOCAL_MODULE := valgrind-target-suppressions.txt
    307 LOCAL_MODULE_CLASS := ETC
    308 LOCAL_MODULE_TAGS := optional
    309 LOCAL_SRC_FILES := test/valgrind-target-suppressions.txt
    310 LOCAL_MODULE_PATH := $(ART_TARGET_TEST_OUT)
    311 include $(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/
    318 define 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)
    355 valgrind-$$(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 :=
    379 endef  # define-art-gtest-rule-target
    380 
    381 ART_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.
    395 define 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)
    419 valgrind-$$(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 :=
    436 endef  # 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.
    441 define 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 :=
    473 endef  # define-art-gtest-target
    474 
    475 # $(1): file name
    476 # $(2): 2ND_ or undefined - used to differentiate between the primary and secondary architecture.
    477 define 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 :=
    491 endef  # define-art-gtest-host
    492 
    493 # Define the rules to build and run gtests for both archs on target.
    494 # $(1): test name
    495 define 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)
    500 test-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)
    504 valgrind-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 :=
    511 endef  # define-art-gtest-target-both
    512 
    513 # Define the rules to build and run gtests for both archs on host.
    514 # $(1): test name
    515 define define-art-gtest-host-both
    516   art_gtest_name := $(1)
    517 
    518 .PHONY: test-art-host-gtest-$$(art_gtest_name)
    519 test-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)
    523 valgrind-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 :=
    530 endef  # define-art-gtest-host-both
    531 
    532 ifeq ($(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))))))
    539 endif
    540 ifeq ($(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))))))
    547 endif
    548 
    549 # Used outside the art project to get a list of the current tests
    550 RUNTIME_TARGET_GTEST_MAKE_TARGETS :=
    551 $(foreach file, $(ART_TARGET_GTEST_FILES), $(eval RUNTIME_TARGET_GTEST_MAKE_TARGETS += $$(notdir $$(basename $$(file)))))
    552 COMPILER_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
    560 define 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 :=
    588 endef  # 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)))
    594 ifdef 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)))
    597 endif
    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)))
    602 ifneq ($(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)))
    605 endif
    606 
    607 # Clear locally defined variables.
    608 define-art-gtest-rule-target :=
    609 define-art-gtest-rule-host :=
    610 define-art-gtest :=
    611 define-test-art-gtest-combination :=
    612 RUNTIME_GTEST_COMMON_SRC_FILES :=
    613 COMPILER_GTEST_COMMON_SRC_FILES :=
    614 RUNTIME_GTEST_TARGET_SRC_FILES :=
    615 RUNTIME_GTEST_HOST_SRC_FILES :=
    616 COMPILER_GTEST_TARGET_SRC_FILES :=
    617 COMPILER_GTEST_HOST_SRC_FILES :=
    618 ART_TEST_HOST_GTEST$(ART_PHONY_TEST_HOST_SUFFIX)_RULES :=
    619 ART_TEST_HOST_GTEST$(2ND_ART_PHONY_TEST_HOST_SUFFIX)_RULES :=
    620 ART_TEST_HOST_GTEST_RULES :=
    621 ART_TEST_HOST_VALGRIND_GTEST$(ART_PHONY_TEST_HOST_SUFFIX)_RULES :=
    622 ART_TEST_HOST_VALGRIND_GTEST$(2ND_ART_PHONY_TEST_HOST_SUFFIX)_RULES :=
    623 ART_TEST_HOST_VALGRIND_GTEST_RULES :=
    624 ART_TEST_TARGET_GTEST$(ART_PHONY_TEST_TARGET_SUFFIX)_RULES :=
    625 ART_TEST_TARGET_GTEST$(2ND_ART_PHONY_TEST_TARGET_SUFFIX)_RULES :=
    626 ART_TEST_TARGET_GTEST_RULES :=
    627 ART_TEST_TARGET_VALGRIND_GTEST$(ART_PHONY_TEST_TARGET_SUFFIX)_RULES :=
    628 ART_TEST_TARGET_VALGRIND_GTEST$(2ND_ART_PHONY_TEST_TARGET_SUFFIX)_RULES :=
    629 ART_TEST_TARGET_VALGRIND_GTEST_RULES :=
    630 ART_GTEST_TARGET_ANDROID_ROOT :=
    631 ART_GTEST_class_linker_test_DEX_DEPS :=
    632 ART_GTEST_class_table_test_DEX_DEPS :=
    633 ART_GTEST_compiler_driver_test_DEX_DEPS :=
    634 ART_GTEST_dex_file_test_DEX_DEPS :=
    635 ART_GTEST_exception_test_DEX_DEPS :=
    636 ART_GTEST_elf_writer_test_HOST_DEPS :=
    637 ART_GTEST_elf_writer_test_TARGET_DEPS :=
    638 ART_GTEST_imtable_test_DEX_DEPS :=
    639 ART_GTEST_jni_compiler_test_DEX_DEPS :=
    640 ART_GTEST_jni_internal_test_DEX_DEPS :=
    641 ART_GTEST_oat_file_assistant_test_DEX_DEPS :=
    642 ART_GTEST_oat_file_assistant_test_HOST_DEPS :=
    643 ART_GTEST_oat_file_assistant_test_TARGET_DEPS :=
    644 ART_GTEST_dexoptanalyzer_test_DEX_DEPS :=
    645 ART_GTEST_dexoptanalyzer_test_HOST_DEPS :=
    646 ART_GTEST_dexoptanalyzer_test_TARGET_DEPS :=
    647 ART_GTEST_image_space_test_DEX_DEPS :=
    648 ART_GTEST_image_space_test_HOST_DEPS :=
    649 ART_GTEST_image_space_test_TARGET_DEPS :=
    650 ART_GTEST_dex2oat_test_DEX_DEPS :=
    651 ART_GTEST_dex2oat_test_HOST_DEPS :=
    652 ART_GTEST_dex2oat_test_TARGET_DEPS :=
    653 ART_GTEST_object_test_DEX_DEPS :=
    654 ART_GTEST_proxy_test_DEX_DEPS :=
    655 ART_GTEST_reflection_test_DEX_DEPS :=
    656 ART_GTEST_stub_test_DEX_DEPS :=
    657 ART_GTEST_transaction_test_DEX_DEPS :=
    658 ART_GTEST_dex2oat_environment_tests_DEX_DEPS :=
    659 ART_GTEST_heap_verification_test_DEX_DEPS :=
    660 ART_GTEST_verifier_deps_test_DEX_DEPS :=
    661 ART_VALGRIND_DEPENDENCIES :=
    662 ART_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 :=))
    665 ART_TEST_HOST_GTEST_MainStripped_DEX :=
    666 ART_TEST_TARGET_GTEST_MainStripped_DEX :=
    667 ART_TEST_GTEST_VerifierDeps_SRC :=
    668 ART_TEST_HOST_GTEST_VerifierDeps_DEX :=
    669 ART_TEST_TARGET_GTEST_VerifierDeps_DEX :=
    670 GTEST_DEX_DIRECTORIES :=
    671 LOCAL_PATH :=
    672