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