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  ExceptionHandle \
29  GetMethodSignature \
30  ImageLayoutA \
31  ImageLayoutB \
32  Instrumentation \
33  Interfaces \
34  Lookup \
35  Main \
36  MultiDex \
37  MultiDexModifiedSecondary \
38  MyClass \
39  MyClassNatives \
40  Nested \
41  NonStaticLeafMethods \
42  Packages \
43  ProtoCompare \
44  ProtoCompare2 \
45  ProfileTestMultiDex \
46  StaticLeafMethods \
47  Statics \
48  StaticsFromCode \
49  Transaction \
50  XandY
51
52# Create build rules for each dex file recording the dependency.
53$(foreach dir,$(GTEST_DEX_DIRECTORIES), $(eval $(call build-art-test-dex,art-gtest,$(dir), \
54  $(ART_TARGET_NATIVETEST_OUT),art/build/Android.gtest.mk,ART_TEST_TARGET_GTEST_$(dir)_DEX, \
55  ART_TEST_HOST_GTEST_$(dir)_DEX)))
56
57# Create rules for MainStripped, a copy of Main with the classes.dex stripped
58# for the oat file assistant tests.
59ART_TEST_HOST_GTEST_MainStripped_DEX := $(basename $(ART_TEST_HOST_GTEST_Main_DEX))Stripped$(suffix $(ART_TEST_HOST_GTEST_Main_DEX))
60ART_TEST_TARGET_GTEST_MainStripped_DEX := $(basename $(ART_TEST_TARGET_GTEST_Main_DEX))Stripped$(suffix $(ART_TEST_TARGET_GTEST_Main_DEX))
61
62$(ART_TEST_HOST_GTEST_MainStripped_DEX): $(ART_TEST_HOST_GTEST_Main_DEX)
63	cp $< $@
64	$(call dexpreopt-remove-classes.dex,$@)
65
66$(ART_TEST_TARGET_GTEST_MainStripped_DEX): $(ART_TEST_TARGET_GTEST_Main_DEX)
67	cp $< $@
68	$(call dexpreopt-remove-classes.dex,$@)
69
70# Dex file dependencies for each gtest.
71ART_GTEST_dex2oat_environment_tests_DEX_DEPS := Main MainStripped MultiDex MultiDexModifiedSecondary Nested
72
73ART_GTEST_class_linker_test_DEX_DEPS := Interfaces MultiDex MyClass Nested Statics StaticsFromCode
74ART_GTEST_compiler_driver_test_DEX_DEPS := AbstractMethod StaticLeafMethods ProfileTestMultiDex
75ART_GTEST_dex_cache_test_DEX_DEPS := Main Packages
76ART_GTEST_dex_file_test_DEX_DEPS := GetMethodSignature Main Nested
77ART_GTEST_dex2oat_test_DEX_DEPS := $(ART_GTEST_dex2oat_environment_tests_DEX_DEPS)
78ART_GTEST_exception_test_DEX_DEPS := ExceptionHandle
79ART_GTEST_image_test_DEX_DEPS := ImageLayoutA ImageLayoutB
80ART_GTEST_instrumentation_test_DEX_DEPS := Instrumentation
81ART_GTEST_jni_compiler_test_DEX_DEPS := MyClassNatives
82ART_GTEST_jni_internal_test_DEX_DEPS := AllFields StaticLeafMethods
83ART_GTEST_oat_file_assistant_test_DEX_DEPS := $(ART_GTEST_dex2oat_environment_tests_DEX_DEPS)
84ART_GTEST_oat_file_test_DEX_DEPS := Main MultiDex
85ART_GTEST_oat_test_DEX_DEPS := Main
86ART_GTEST_object_test_DEX_DEPS := ProtoCompare ProtoCompare2 StaticsFromCode XandY
87ART_GTEST_proxy_test_DEX_DEPS := Interfaces
88ART_GTEST_reflection_test_DEX_DEPS := Main NonStaticLeafMethods StaticLeafMethods
89ART_GTEST_profile_assistant_test_DEX_DEPS := ProfileTestMultiDex
90ART_GTEST_profile_compilation_info_test_DEX_DEPS := ProfileTestMultiDex
91ART_GTEST_stub_test_DEX_DEPS := AllFields
92ART_GTEST_transaction_test_DEX_DEPS := Transaction
93ART_GTEST_type_lookup_table_test_DEX_DEPS := Lookup
94
95# The elf writer test has dependencies on core.oat.
96ART_GTEST_elf_writer_test_HOST_DEPS := $(HOST_CORE_IMAGE_default_no-pic_64) $(HOST_CORE_IMAGE_default_no-pic_32)
97ART_GTEST_elf_writer_test_TARGET_DEPS := $(TARGET_CORE_IMAGE_default_no-pic_64) $(TARGET_CORE_IMAGE_default_no-pic_32)
98
99ART_GTEST_dex2oat_environment_tests_HOST_DEPS := \
100  $(HOST_CORE_IMAGE_default_no-pic_64) \
101  $(HOST_CORE_IMAGE_default_no-pic_32)
102ART_GTEST_dex2oat_environment_tests_TARGET_DEPS := \
103  $(TARGET_CORE_IMAGE_default_no-pic_64) \
104  $(TARGET_CORE_IMAGE_default_no-pic_32)
105
106ART_GTEST_oat_file_assistant_test_HOST_DEPS := \
107   $(ART_GTEST_dex2oat_environment_tests_HOST_DEPS) \
108   $(HOST_OUT_EXECUTABLES)/patchoatd
109ART_GTEST_oat_file_assistant_test_TARGET_DEPS := \
110   $(ART_GTEST_dex2oat_environment_tests_TARGET_DEPS) \
111   $(TARGET_OUT_EXECUTABLES)/patchoatd
112
113
114ART_GTEST_dex2oat_test_HOST_DEPS := \
115  $(ART_GTEST_dex2oat_environment_tests_HOST_DEPS)
116ART_GTEST_dex2oat_test_TARGET_DEPS := \
117  $(ART_GTEST_dex2oat_environment_tests_TARGET_DEPS)
118
119# TODO: document why this is needed.
120ART_GTEST_proxy_test_HOST_DEPS := $(HOST_CORE_IMAGE_default_no-pic_64) $(HOST_CORE_IMAGE_default_no-pic_32)
121
122# The dexdump test requires an image and the dexdump utility.
123# TODO: rename into dexdump when migration completes
124ART_GTEST_dexdump_test_HOST_DEPS := \
125  $(HOST_CORE_IMAGE_default_no-pic_64) \
126  $(HOST_CORE_IMAGE_default_no-pic_32) \
127  $(HOST_OUT_EXECUTABLES)/dexdump2
128ART_GTEST_dexdump_test_TARGET_DEPS := \
129  $(TARGET_CORE_IMAGE_default_no-pic_64) \
130  $(TARGET_CORE_IMAGE_default_no-pic_32) \
131  dexdump2
132
133# The dexlist test requires an image and the dexlist utility.
134ART_GTEST_dexlist_test_HOST_DEPS := \
135  $(HOST_CORE_IMAGE_default_no-pic_64) \
136  $(HOST_CORE_IMAGE_default_no-pic_32) \
137  $(HOST_OUT_EXECUTABLES)/dexlist
138ART_GTEST_dexlist_test_TARGET_DEPS := \
139  $(TARGET_CORE_IMAGE_default_no-pic_64) \
140  $(TARGET_CORE_IMAGE_default_no-pic_32) \
141  dexlist
142
143# The imgdiag test has dependencies on core.oat since it needs to load it during the test.
144# For the host, also add the installed tool (in the base size, that should suffice). For the
145# target, just the module is fine, the sync will happen late enough.
146ART_GTEST_imgdiag_test_HOST_DEPS := \
147  $(HOST_CORE_IMAGE_default_no-pic_64) \
148  $(HOST_CORE_IMAGE_default_no-pic_32) \
149  $(HOST_OUT_EXECUTABLES)/imgdiagd
150ART_GTEST_imgdiag_test_TARGET_DEPS := \
151  $(TARGET_CORE_IMAGE_default_no-pic_64) \
152  $(TARGET_CORE_IMAGE_default_no-pic_32) \
153  imgdiagd
154
155# Oatdump test requires an image and oatfile to dump.
156ART_GTEST_oatdump_test_HOST_DEPS := \
157  $(HOST_CORE_IMAGE_default_no-pic_64) \
158  $(HOST_CORE_IMAGE_default_no-pic_32) \
159  $(HOST_OUT_EXECUTABLES)/oatdumpd
160ART_GTEST_oatdump_test_TARGET_DEPS := \
161  $(TARGET_CORE_IMAGE_default_no-pic_64) \
162  $(TARGET_CORE_IMAGE_default_no-pic_32) \
163  oatdump
164
165# Profile assistant tests requires profman utility.
166ART_GTEST_profile_assistant_test_HOST_DEPS := \
167  $(HOST_OUT_EXECUTABLES)/profmand
168ART_GTEST_profile_assistant_test_TARGET_DEPS := \
169  profman
170
171# The path for which all the source files are relative, not actually the current directory.
172LOCAL_PATH := art
173
174RUNTIME_GTEST_COMMON_SRC_FILES := \
175  cmdline/cmdline_parser_test.cc \
176  dexdump/dexdump_test.cc \
177  dexlist/dexlist_test.cc \
178  dex2oat/dex2oat_test.cc \
179  imgdiag/imgdiag_test.cc \
180  oatdump/oatdump_test.cc \
181  profman/profile_assistant_test.cc \
182  runtime/arch/arch_test.cc \
183  runtime/arch/instruction_set_test.cc \
184  runtime/arch/instruction_set_features_test.cc \
185  runtime/arch/memcmp16_test.cc \
186  runtime/arch/stub_test.cc \
187  runtime/arch/arm/instruction_set_features_arm_test.cc \
188  runtime/arch/arm64/instruction_set_features_arm64_test.cc \
189  runtime/arch/mips/instruction_set_features_mips_test.cc \
190  runtime/arch/mips64/instruction_set_features_mips64_test.cc \
191  runtime/arch/x86/instruction_set_features_x86_test.cc \
192  runtime/arch/x86_64/instruction_set_features_x86_64_test.cc \
193  runtime/barrier_test.cc \
194  runtime/base/arena_allocator_test.cc \
195  runtime/base/bit_field_test.cc \
196  runtime/base/bit_utils_test.cc \
197  runtime/base/bit_vector_test.cc \
198  runtime/base/hash_set_test.cc \
199  runtime/base/hex_dump_test.cc \
200  runtime/base/histogram_test.cc \
201  runtime/base/mutex_test.cc \
202  runtime/base/scoped_flock_test.cc \
203  runtime/base/stringprintf_test.cc \
204  runtime/base/time_utils_test.cc \
205  runtime/base/timing_logger_test.cc \
206  runtime/base/variant_map_test.cc \
207  runtime/base/unix_file/fd_file_test.cc \
208  runtime/class_linker_test.cc \
209  runtime/compiler_filter_test.cc \
210  runtime/dex_file_test.cc \
211  runtime/dex_file_verifier_test.cc \
212  runtime/dex_instruction_test.cc \
213  runtime/dex_instruction_visitor_test.cc \
214  runtime/dex_method_iterator_test.cc \
215  runtime/entrypoints/math_entrypoints_test.cc \
216  runtime/entrypoints/quick/quick_trampoline_entrypoints_test.cc \
217  runtime/entrypoints_order_test.cc \
218  runtime/gc/accounting/card_table_test.cc \
219  runtime/gc/accounting/mod_union_table_test.cc \
220  runtime/gc/accounting/space_bitmap_test.cc \
221  runtime/gc/collector/immune_spaces_test.cc \
222  runtime/gc/heap_test.cc \
223  runtime/gc/reference_queue_test.cc \
224  runtime/gc/space/dlmalloc_space_static_test.cc \
225  runtime/gc/space/dlmalloc_space_random_test.cc \
226  runtime/gc/space/large_object_space_test.cc \
227  runtime/gc/space/rosalloc_space_static_test.cc \
228  runtime/gc/space/rosalloc_space_random_test.cc \
229  runtime/gc/space/space_create_test.cc \
230  runtime/gc/task_processor_test.cc \
231  runtime/gtest_test.cc \
232  runtime/handle_scope_test.cc \
233  runtime/indenter_test.cc \
234  runtime/indirect_reference_table_test.cc \
235  runtime/instrumentation_test.cc \
236  runtime/intern_table_test.cc \
237  runtime/interpreter/safe_math_test.cc \
238  runtime/interpreter/unstarted_runtime_test.cc \
239  runtime/java_vm_ext_test.cc \
240  runtime/jit/profile_compilation_info_test.cc \
241  runtime/lambda/closure_test.cc \
242  runtime/lambda/shorty_field_type_test.cc \
243  runtime/leb128_test.cc \
244  runtime/mem_map_test.cc \
245  runtime/memory_region_test.cc \
246  runtime/mirror/dex_cache_test.cc \
247  runtime/mirror/object_test.cc \
248  runtime/monitor_pool_test.cc \
249  runtime/monitor_test.cc \
250  runtime/oat_file_test.cc \
251  runtime/oat_file_assistant_test.cc \
252  runtime/parsed_options_test.cc \
253  runtime/prebuilt_tools_test.cc \
254  runtime/reference_table_test.cc \
255  runtime/thread_pool_test.cc \
256  runtime/transaction_test.cc \
257  runtime/type_lookup_table_test.cc \
258  runtime/utf_test.cc \
259  runtime/utils_test.cc \
260  runtime/verifier/method_verifier_test.cc \
261  runtime/verifier/reg_type_test.cc \
262  runtime/zip_archive_test.cc
263
264COMPILER_GTEST_COMMON_SRC_FILES := \
265  runtime/jni_internal_test.cc \
266  runtime/proxy_test.cc \
267  runtime/reflection_test.cc \
268  compiler/compiled_method_test.cc \
269  compiler/debug/dwarf/dwarf_test.cc \
270  compiler/driver/compiled_method_storage_test.cc \
271  compiler/driver/compiler_driver_test.cc \
272  compiler/elf_writer_test.cc \
273  compiler/exception_test.cc \
274  compiler/image_test.cc \
275  compiler/jni/jni_compiler_test.cc \
276  compiler/linker/multi_oat_relative_patcher_test.cc \
277  compiler/linker/output_stream_test.cc \
278  compiler/oat_test.cc \
279  compiler/optimizing/bounds_check_elimination_test.cc \
280  compiler/optimizing/dominator_test.cc \
281  compiler/optimizing/find_loops_test.cc \
282  compiler/optimizing/graph_checker_test.cc \
283  compiler/optimizing/graph_test.cc \
284  compiler/optimizing/gvn_test.cc \
285  compiler/optimizing/induction_var_analysis_test.cc \
286  compiler/optimizing/induction_var_range_test.cc \
287  compiler/optimizing/licm_test.cc \
288  compiler/optimizing/live_interval_test.cc \
289  compiler/optimizing/nodes_test.cc \
290  compiler/optimizing/parallel_move_test.cc \
291  compiler/optimizing/pretty_printer_test.cc \
292  compiler/optimizing/reference_type_propagation_test.cc \
293  compiler/optimizing/side_effects_test.cc \
294  compiler/optimizing/ssa_test.cc \
295  compiler/optimizing/stack_map_test.cc \
296  compiler/optimizing/suspend_check_test.cc \
297  compiler/utils/dedupe_set_test.cc \
298  compiler/utils/intrusive_forward_list_test.cc \
299  compiler/utils/swap_space_test.cc \
300  compiler/utils/test_dex_file_builder_test.cc \
301
302COMPILER_GTEST_COMMON_SRC_FILES_all := \
303  compiler/jni/jni_cfi_test.cc \
304  compiler/optimizing/codegen_test.cc \
305  compiler/optimizing/constant_folding_test.cc \
306  compiler/optimizing/dead_code_elimination_test.cc \
307  compiler/optimizing/linearize_test.cc \
308  compiler/optimizing/liveness_test.cc \
309  compiler/optimizing/live_ranges_test.cc \
310  compiler/optimizing/optimizing_cfi_test.cc \
311  compiler/optimizing/register_allocator_test.cc \
312
313COMPILER_GTEST_COMMON_SRC_FILES_arm := \
314  compiler/linker/arm/relative_patcher_thumb2_test.cc \
315  compiler/utils/arm/managed_register_arm_test.cc \
316
317COMPILER_GTEST_COMMON_SRC_FILES_arm64 := \
318  compiler/linker/arm64/relative_patcher_arm64_test.cc \
319  compiler/utils/arm64/managed_register_arm64_test.cc \
320
321COMPILER_GTEST_COMMON_SRC_FILES_mips := \
322
323COMPILER_GTEST_COMMON_SRC_FILES_mips64 := \
324
325COMPILER_GTEST_COMMON_SRC_FILES_x86 := \
326  compiler/linker/x86/relative_patcher_x86_test.cc \
327  compiler/utils/x86/managed_register_x86_test.cc \
328
329COMPILER_GTEST_COMMON_SRC_FILES_x86_64 := \
330  compiler/linker/x86_64/relative_patcher_x86_64_test.cc \
331
332RUNTIME_GTEST_TARGET_SRC_FILES := \
333  $(RUNTIME_GTEST_COMMON_SRC_FILES)
334
335RUNTIME_GTEST_HOST_SRC_FILES := \
336  $(RUNTIME_GTEST_COMMON_SRC_FILES)
337
338COMPILER_GTEST_TARGET_SRC_FILES := \
339  $(COMPILER_GTEST_COMMON_SRC_FILES)
340
341COMPILER_GTEST_TARGET_SRC_FILES_all := \
342  $(COMPILER_GTEST_COMMON_SRC_FILES_all) \
343
344COMPILER_GTEST_TARGET_SRC_FILES_arm := \
345  $(COMPILER_GTEST_COMMON_SRC_FILES_arm) \
346
347COMPILER_GTEST_TARGET_SRC_FILES_arm64 := \
348  $(COMPILER_GTEST_COMMON_SRC_FILES_arm64) \
349
350COMPILER_GTEST_TARGET_SRC_FILES_mips := \
351  $(COMPILER_GTEST_COMMON_SRC_FILES_mips) \
352
353COMPILER_GTEST_TARGET_SRC_FILES_mips64 := \
354  $(COMPILER_GTEST_COMMON_SRC_FILES_mips64) \
355
356COMPILER_GTEST_TARGET_SRC_FILES_x86 := \
357  $(COMPILER_GTEST_COMMON_SRC_FILES_x86) \
358
359COMPILER_GTEST_TARGET_SRC_FILES_x86_64 := \
360  $(COMPILER_GTEST_COMMON_SRC_FILES_x86_64) \
361
362$(foreach arch,$(ART_TARGET_CODEGEN_ARCHS),$(eval COMPILER_GTEST_TARGET_SRC_FILES += $$(COMPILER_GTEST_TARGET_SRC_FILES_$(arch))))
363ifeq (true,$(ART_TARGET_COMPILER_TESTS))
364  COMPILER_GTEST_TARGET_SRC_FILES += $(COMPILER_GTEST_TARGET_SRC_FILES_all)
365endif
366
367COMPILER_GTEST_HOST_SRC_FILES := \
368  $(COMPILER_GTEST_COMMON_SRC_FILES) \
369
370COMPILER_GTEST_HOST_SRC_FILES_all := \
371  $(COMPILER_GTEST_COMMON_SRC_FILES_all) \
372
373COMPILER_GTEST_HOST_SRC_FILES_arm := \
374  $(COMPILER_GTEST_COMMON_SRC_FILES_arm) \
375  compiler/utils/arm/assembler_arm32_test.cc \
376  compiler/utils/arm/assembler_thumb2_test.cc \
377  compiler/utils/assembler_thumb_test.cc \
378
379COMPILER_GTEST_HOST_SRC_FILES_arm64 := \
380  $(COMPILER_GTEST_COMMON_SRC_FILES_arm64) \
381
382COMPILER_GTEST_HOST_SRC_FILES_mips := \
383  $(COMPILER_GTEST_COMMON_SRC_FILES_mips) \
384  compiler/utils/mips/assembler_mips_test.cc \
385
386COMPILER_GTEST_HOST_SRC_FILES_mips64 := \
387  $(COMPILER_GTEST_COMMON_SRC_FILES_mips64) \
388  compiler/utils/mips64/assembler_mips64_test.cc \
389
390COMPILER_GTEST_HOST_SRC_FILES_x86 := \
391  $(COMPILER_GTEST_COMMON_SRC_FILES_x86) \
392  compiler/utils/x86/assembler_x86_test.cc \
393
394COMPILER_GTEST_HOST_SRC_FILES_x86_64 := \
395  $(COMPILER_GTEST_COMMON_SRC_FILES_x86_64) \
396  compiler/utils/x86_64/assembler_x86_64_test.cc
397
398$(foreach arch,$(ART_HOST_CODEGEN_ARCHS),$(eval COMPILER_GTEST_HOST_SRC_FILES += $$(COMPILER_GTEST_HOST_SRC_FILES_$(arch))))
399ifeq (true,$(ART_HOST_COMPILER_TESTS))
400  COMPILER_GTEST_HOST_SRC_FILES += $(COMPILER_GTEST_HOST_SRC_FILES_all)
401endif
402
403ART_TEST_CFLAGS :=
404
405include $(CLEAR_VARS)
406LOCAL_MODULE := libart-gtest
407LOCAL_MODULE_TAGS := optional
408LOCAL_CPP_EXTENSION := cc
409LOCAL_SRC_FILES := runtime/common_runtime_test.cc compiler/common_compiler_test.cc
410LOCAL_C_INCLUDES := $(ART_C_INCLUDES) art/runtime art/cmdline art/compiler
411LOCAL_SHARED_LIBRARIES := libartd libartd-compiler libdl
412LOCAL_STATIC_LIBRARIES += libgtest
413LOCAL_ADDITIONAL_DEPENDENCIES := art/build/Android.common_build.mk
414LOCAL_ADDITIONAL_DEPENDENCIES += art/build/Android.gtest.mk
415$(eval $(call set-target-local-clang-vars))
416$(eval $(call set-target-local-cflags-vars,debug))
417LOCAL_CLANG_CFLAGS += -Wno-used-but-marked-unused -Wno-deprecated -Wno-missing-noreturn # gtest issue
418include $(BUILD_SHARED_LIBRARY)
419
420include $(CLEAR_VARS)
421LOCAL_MODULE := libart-gtest
422LOCAL_MODULE_TAGS := optional
423LOCAL_CPP_EXTENSION := cc
424LOCAL_CFLAGS := $(ART_HOST_CFLAGS)
425LOCAL_ASFLAGS := $(ART_HOST_ASFLAGS)
426LOCAL_SRC_FILES := runtime/common_runtime_test.cc compiler/common_compiler_test.cc
427LOCAL_C_INCLUDES := $(ART_C_INCLUDES) art/runtime art/cmdline art/compiler
428LOCAL_SHARED_LIBRARIES := libartd libartd-compiler
429LOCAL_STATIC_LIBRARIES := libgtest_host
430LOCAL_LDLIBS += -ldl -lpthread
431LOCAL_MULTILIB := both
432LOCAL_CLANG := $(ART_HOST_CLANG)
433LOCAL_CLANG_CFLAGS += -Wno-used-but-marked-unused -Wno-deprecated -Wno-missing-noreturn  # gtest issue
434LOCAL_ADDITIONAL_DEPENDENCIES := art/build/Android.common_build.mk
435LOCAL_ADDITIONAL_DEPENDENCIES += art/build/Android.gtest.mk
436include $(BUILD_HOST_SHARED_LIBRARY)
437
438# Variables holding collections of gtest pre-requisits used to run a number of gtests.
439ART_TEST_HOST_GTEST$(ART_PHONY_TEST_HOST_SUFFIX)_RULES :=
440ART_TEST_HOST_GTEST$(2ND_ART_PHONY_TEST_HOST_SUFFIX)_RULES :=
441ART_TEST_HOST_GTEST_RULES :=
442ART_TEST_HOST_VALGRIND_GTEST$(ART_PHONY_TEST_HOST_SUFFIX)_RULES :=
443ART_TEST_HOST_VALGRIND_GTEST$(2ND_ART_PHONY_TEST_HOST_SUFFIX)_RULES :=
444ART_TEST_HOST_VALGRIND_GTEST_RULES :=
445ART_TEST_TARGET_GTEST$(ART_PHONY_TEST_TARGET_SUFFIX)_RULES :=
446ART_TEST_TARGET_GTEST$(2ND_ART_PHONY_TEST_TARGET_SUFFIX)_RULES :=
447ART_TEST_TARGET_GTEST_RULES :=
448ART_TEST_HOST_GTEST_DEPENDENCIES :=
449
450ART_GTEST_TARGET_ANDROID_ROOT := '/system'
451ifneq ($(ART_TEST_ANDROID_ROOT),)
452  ART_GTEST_TARGET_ANDROID_ROOT := $(ART_TEST_ANDROID_ROOT)
453endif
454
455# Define a make rule for a target device gtest.
456# $(1): gtest name - the name of the test we're building such as leb128_test.
457# $(2): 2ND_ or undefined - used to differentiate between the primary and secondary architecture.
458# $(3): LD_LIBRARY_PATH or undefined - used in case libartd.so is not in /system/lib/
459define define-art-gtest-rule-target
460  gtest_rule := test-art-target-gtest-$(1)$$($(2)ART_PHONY_TEST_TARGET_SUFFIX)
461
462  # Add the test dependencies to test-art-target-sync, which will be a prerequisite for the test
463  # to ensure files are pushed to the device.
464  TEST_ART_TARGET_SYNC_DEPS += \
465    $$(ART_GTEST_$(1)_TARGET_DEPS) \
466    $(foreach file,$(ART_GTEST_$(1)_DEX_DEPS),$(ART_TEST_TARGET_GTEST_$(file)_DEX)) \
467    $$(ART_TARGET_NATIVETEST_OUT)/$$(TARGET_$(2)ARCH)/$(1) \
468    $$($(2)TARGET_OUT_SHARED_LIBRARIES)/libjavacore.so \
469    $$($(2)TARGET_OUT_SHARED_LIBRARIES)/libopenjdkd.so \
470    $$(TARGET_OUT_JAVA_LIBRARIES)/core-libart-testdex.jar \
471    $$(TARGET_OUT_JAVA_LIBRARIES)/core-oj-testdex.jar
472
473.PHONY: $$(gtest_rule)
474$$(gtest_rule): test-art-target-sync
475	$(hide) adb shell touch $(ART_TARGET_TEST_DIR)/$(TARGET_$(2)ARCH)/$$@-$$$$PPID
476	$(hide) adb shell rm $(ART_TARGET_TEST_DIR)/$(TARGET_$(2)ARCH)/$$@-$$$$PPID
477	$(hide) adb shell chmod 755 $(ART_TARGET_NATIVETEST_DIR)/$(TARGET_$(2)ARCH)/$(1)
478	$(hide) $$(call ART_TEST_SKIP,$$@) && \
479	  (adb shell "$(GCOV_ENV) LD_LIBRARY_PATH=$(3) ANDROID_ROOT=$(ART_GTEST_TARGET_ANDROID_ROOT) \
480	    $(ART_TARGET_NATIVETEST_DIR)/$(TARGET_$(2)ARCH)/$(1) && touch $(ART_TARGET_TEST_DIR)/$(TARGET_$(2)ARCH)/$$@-$$$$PPID" \
481	  && (adb pull $(ART_TARGET_TEST_DIR)/$(TARGET_$(2)ARCH)/$$@-$$$$PPID /tmp/ \
482	      && $$(call ART_TEST_PASSED,$$@)) \
483	  || $$(call ART_TEST_FAILED,$$@))
484	$(hide) rm -f /tmp/$$@-$$$$PPID
485
486  ART_TEST_TARGET_GTEST$($(2)ART_PHONY_TEST_TARGET_SUFFIX)_RULES += $$(gtest_rule)
487  ART_TEST_TARGET_GTEST_RULES += $$(gtest_rule)
488  ART_TEST_TARGET_GTEST_$(1)_RULES += $$(gtest_rule)
489
490  # Clear locally defined variables.
491  gtest_rule :=
492endef  # define-art-gtest-rule-target
493
494ART_VALGRIND_DEPENDENCIES := \
495  $(HOST_OUT_EXECUTABLES)/valgrind \
496  $(HOST_OUT)/lib64/valgrind/memcheck-amd64-linux \
497  $(HOST_OUT)/lib64/valgrind/memcheck-x86-linux \
498  $(HOST_OUT)/lib64/valgrind/default.supp \
499  $(HOST_OUT)/lib64/valgrind/vgpreload_core-amd64-linux.so \
500  $(HOST_OUT)/lib64/valgrind/vgpreload_core-x86-linux.so \
501  $(HOST_OUT)/lib64/valgrind/vgpreload_memcheck-amd64-linux.so \
502  $(HOST_OUT)/lib64/valgrind/vgpreload_memcheck-x86-linux.so
503
504# Define make rules for a host gtests.
505# $(1): gtest name - the name of the test we're building such as leb128_test.
506# $(2): 2ND_ or undefined - used to differentiate between the primary and secondary architecture.
507define define-art-gtest-rule-host
508  gtest_rule := test-art-host-gtest-$(1)$$($(2)ART_PHONY_TEST_HOST_SUFFIX)
509  gtest_exe := $$(HOST_OUT_EXECUTABLES)/$(1)$$($(2)ART_PHONY_TEST_HOST_SUFFIX)
510  # Dependencies for all host gtests.
511  gtest_deps := $$(HOST_CORE_DEX_LOCATIONS) \
512    $$($(2)ART_HOST_OUT_SHARED_LIBRARIES)/libjavacore$$(ART_HOST_SHLIB_EXTENSION) \
513    $$($(2)ART_HOST_OUT_SHARED_LIBRARIES)/libopenjdkd$$(ART_HOST_SHLIB_EXTENSION) \
514    $$(gtest_exe) \
515    $$(ART_GTEST_$(1)_HOST_DEPS) \
516    $(foreach file,$(ART_GTEST_$(1)_DEX_DEPS),$(ART_TEST_HOST_GTEST_$(file)_DEX))
517
518  ART_TEST_HOST_GTEST_DEPENDENCIES += $$(gtest_deps)
519
520.PHONY: $$(gtest_rule)
521$$(gtest_rule): $$(gtest_exe) $$(gtest_deps)
522	$(hide) ($$(call ART_TEST_SKIP,$$@) && $$< && $$(call ART_TEST_PASSED,$$@)) \
523	  || $$(call ART_TEST_FAILED,$$@)
524
525  ART_TEST_HOST_GTEST$$($(2)ART_PHONY_TEST_HOST_SUFFIX)_RULES += $$(gtest_rule)
526  ART_TEST_HOST_GTEST_RULES += $$(gtest_rule)
527  ART_TEST_HOST_GTEST_$(1)_RULES += $$(gtest_rule)
528
529
530.PHONY: valgrind-$$(gtest_rule)
531valgrind-$$(gtest_rule): $$(gtest_exe) $$(gtest_deps) $(ART_VALGRIND_DEPENDENCIES)
532	$(hide) $$(call ART_TEST_SKIP,$$@) && \
533	  VALGRIND_LIB=$(HOST_OUT)/lib64/valgrind \
534	  $(HOST_OUT_EXECUTABLES)/valgrind --leak-check=full --error-exitcode=1 \
535	    --suppressions=art/test/valgrind-suppressions.txt $$< && \
536	    $$(call ART_TEST_PASSED,$$@) || $$(call ART_TEST_FAILED,$$@)
537
538  ART_TEST_HOST_VALGRIND_GTEST$$($(2)ART_PHONY_TEST_HOST_SUFFIX)_RULES += valgrind-$$(gtest_rule)
539  ART_TEST_HOST_VALGRIND_GTEST_RULES += valgrind-$$(gtest_rule)
540  ART_TEST_HOST_VALGRIND_GTEST_$(1)_RULES += valgrind-$$(gtest_rule)
541
542  # Clear locally defined variables.
543  valgrind_gtest_rule :=
544  gtest_rule :=
545  gtest_exe :=
546  gtest_deps :=
547endef  # define-art-gtest-rule-host
548
549# Define the rules to build and run host and target gtests.
550# $(1): target or host
551# $(2): file name
552# $(3): extra C includes
553# $(4): extra shared libraries
554define define-art-gtest
555  ifneq ($(1),target)
556    ifneq ($(1),host)
557      $$(error expected target or host for argument 1, received $(1))
558    endif
559  endif
560
561  art_target_or_host := $(1)
562  art_gtest_filename := $(2)
563  art_gtest_extra_c_includes := $(3)
564  art_gtest_extra_shared_libraries := $(4)
565
566  include $$(CLEAR_VARS)
567  art_gtest_name := $$(notdir $$(basename $$(art_gtest_filename)))
568  LOCAL_MODULE := $$(art_gtest_name)
569  ifeq ($$(art_target_or_host),target)
570    LOCAL_MODULE_TAGS := tests
571  endif
572  LOCAL_CPP_EXTENSION := $$(ART_CPP_EXTENSION)
573  LOCAL_SRC_FILES := $$(art_gtest_filename)
574  LOCAL_C_INCLUDES += $$(ART_C_INCLUDES) art/runtime art/cmdline $$(art_gtest_extra_c_includes)
575  LOCAL_SHARED_LIBRARIES += libartd $$(art_gtest_extra_shared_libraries) libart-gtest libartd-disassembler
576  LOCAL_WHOLE_STATIC_LIBRARIES += libsigchain
577
578  LOCAL_ADDITIONAL_DEPENDENCIES := art/build/Android.common_build.mk
579  LOCAL_ADDITIONAL_DEPENDENCIES += art/build/Android.gtest.mk
580
581  # Mac OS linker doesn't understand --export-dynamic.
582  ifneq ($$(HOST_OS)-$$(art_target_or_host),darwin-host)
583    # Allow jni_compiler_test to find Java_MyClassNatives_bar within itself using dlopen(NULL, ...).
584    LOCAL_LDFLAGS := -Wl,--export-dynamic -Wl,-u,Java_MyClassNatives_bar -Wl,-u,Java_MyClassNatives_sbar
585  endif
586
587  LOCAL_CFLAGS := $$(ART_TEST_CFLAGS)
588  ifeq ($$(art_target_or_host),target)
589    $$(eval $$(call set-target-local-clang-vars))
590    $$(eval $$(call set-target-local-cflags-vars,debug))
591    LOCAL_SHARED_LIBRARIES += libdl libicuuc libicui18n libnativehelper libz libcutils libvixl
592    LOCAL_MODULE_PATH_32 := $$(ART_TARGET_NATIVETEST_OUT)/$$(ART_TARGET_ARCH_32)
593    LOCAL_MODULE_PATH_64 := $$(ART_TARGET_NATIVETEST_OUT)/$$(ART_TARGET_ARCH_64)
594    LOCAL_MULTILIB := both
595    LOCAL_CLANG_CFLAGS += -Wno-used-but-marked-unused -Wno-deprecated -Wno-missing-noreturn  # gtest issue
596    include $$(BUILD_EXECUTABLE)
597    library_path :=
598    2nd_library_path :=
599    ifneq ($$(ART_TEST_ANDROID_ROOT),)
600      ifdef TARGET_2ND_ARCH
601        2nd_library_path := $$(ART_TEST_ANDROID_ROOT)/lib
602        library_path := $$(ART_TEST_ANDROID_ROOT)/lib64
603      else
604        ifneq ($(filter %64,$(TARGET_ARCH)),)
605          library_path := $$(ART_TEST_ANDROID_ROOT)/lib64
606        else
607          library_path := $$(ART_TEST_ANDROID_ROOT)/lib
608        endif
609      endif
610    endif
611
612    ART_TEST_TARGET_GTEST_$$(art_gtest_name)_RULES :=
613    ifdef TARGET_2ND_ARCH
614      $$(eval $$(call define-art-gtest-rule-target,$$(art_gtest_name),2ND_,$$(2nd_library_path)))
615    endif
616    $$(eval $$(call define-art-gtest-rule-target,$$(art_gtest_name),,$$(library_path)))
617
618    # A rule to run the different architecture versions of the gtest.
619.PHONY: test-art-target-gtest-$$(art_gtest_name)
620test-art-target-gtest-$$(art_gtest_name): $$(ART_TEST_TARGET_GTEST_$$(art_gtest_name)_RULES)
621	$$(hide) $$(call ART_TEST_PREREQ_FINISHED,$$@)
622
623    # Clear locally defined variables.
624    ART_TEST_TARGET_GTEST_$$(art_gtest_name)_RULES :=
625  else # host
626    LOCAL_CLANG := $$(ART_HOST_CLANG)
627    LOCAL_CFLAGS += $$(ART_HOST_CFLAGS) $$(ART_HOST_DEBUG_CFLAGS)
628    LOCAL_ASFLAGS += $$(ART_HOST_ASFLAGS)
629    LOCAL_SHARED_LIBRARIES += libicuuc-host libicui18n-host libnativehelper libziparchive-host libz-host libvixl
630    LOCAL_LDLIBS := $(ART_HOST_LDLIBS) -lpthread -ldl
631    LOCAL_IS_HOST_MODULE := true
632    LOCAL_MULTILIB := both
633    LOCAL_MODULE_STEM_32 := $$(art_gtest_name)32
634    LOCAL_MODULE_STEM_64 := $$(art_gtest_name)64
635    LOCAL_CLANG_CFLAGS += -Wno-used-but-marked-unused -Wno-deprecated -Wno-missing-noreturn  # gtest issue
636    include $$(BUILD_HOST_EXECUTABLE)
637
638    ART_TEST_HOST_GTEST_$$(art_gtest_name)_RULES :=
639    ART_TEST_HOST_VALGRIND_GTEST_$$(art_gtest_name)_RULES :=
640    ifneq ($$(HOST_PREFER_32_BIT),true)
641      $$(eval $$(call define-art-gtest-rule-host,$$(art_gtest_name),2ND_))
642    endif
643    $$(eval $$(call define-art-gtest-rule-host,$$(art_gtest_name),))
644
645    # Rules to run the different architecture versions of the gtest.
646.PHONY: test-art-host-gtest-$$(art_gtest_name)
647test-art-host-gtest-$$(art_gtest_name): $$(ART_TEST_HOST_GTEST_$$(art_gtest_name)_RULES)
648	$$(hide) $$(call ART_TEST_PREREQ_FINISHED,$$@)
649
650.PHONY: valgrind-test-art-host-gtest-$$(art_gtest_name)
651valgrind-test-art-host-gtest-$$(art_gtest_name): $$(ART_TEST_HOST_VALGRIND_GTEST_$$(art_gtest_name)_RULES)
652	$$(hide) $$(call ART_TEST_PREREQ_FINISHED,$$@)
653
654    # Clear locally defined variables.
655    ART_TEST_HOST_GTEST_$$(art_gtest_name)_RULES :=
656    ART_TEST_HOST_VALGRIND_GTEST_$$(art_gtest_name)_RULES :=
657  endif  # host_or_target
658
659  # Clear locally defined variables.
660  art_target_or_host :=
661  art_gtest_filename :=
662  art_gtest_extra_c_includes :=
663  art_gtest_extra_shared_libraries :=
664  art_gtest_name :=
665  library_path :=
666  2nd_library_path :=
667endef  # define-art-gtest
668
669
670ifeq ($(ART_BUILD_TARGET),true)
671  $(foreach file,$(RUNTIME_GTEST_TARGET_SRC_FILES), $(eval $(call define-art-gtest,target,$(file),,libbacktrace)))
672  $(foreach file,$(COMPILER_GTEST_TARGET_SRC_FILES), $(eval $(call define-art-gtest,target,$(file),art/compiler,libartd-compiler libbacktrace libnativeloader)))
673endif
674ifeq ($(ART_BUILD_HOST),true)
675  $(foreach file,$(RUNTIME_GTEST_HOST_SRC_FILES), $(eval $(call define-art-gtest,host,$(file),,libbacktrace)))
676  $(foreach file,$(COMPILER_GTEST_HOST_SRC_FILES), $(eval $(call define-art-gtest,host,$(file),art/compiler,libartd-compiler libbacktrace libnativeloader)))
677endif
678
679# Used outside the art project to get a list of the current tests
680RUNTIME_TARGET_GTEST_MAKE_TARGETS :=
681$(foreach file, $(RUNTIME_GTEST_TARGET_SRC_FILES), $(eval RUNTIME_TARGET_GTEST_MAKE_TARGETS += $$(notdir $$(basename $$(file)))))
682COMPILER_TARGET_GTEST_MAKE_TARGETS :=
683$(foreach file, $(COMPILER_GTEST_TARGET_SRC_FILES), $(eval COMPILER_TARGET_GTEST_MAKE_TARGETS += $$(notdir $$(basename $$(file)))))
684
685# Define all the combinations of host/target, valgrind and suffix such as:
686# test-art-host-gtest or valgrind-test-art-host-gtest64
687# $(1): host or target
688# $(2): HOST or TARGET
689# $(3): valgrind- or undefined
690# $(4): undefined, 32 or 64
691define define-test-art-gtest-combination
692  ifeq ($(1),host)
693    ifneq ($(2),HOST)
694      $$(error argument mismatch $(1) and ($2))
695    endif
696  else
697    ifneq ($(1),target)
698      $$(error found $(1) expected host or target)
699    endif
700    ifneq ($(2),TARGET)
701      $$(error argument mismatch $(1) and ($2))
702    endif
703  endif
704
705  rule_name := $(3)test-art-$(1)-gtest$(4)
706  ifeq ($(3),valgrind-)
707    ifneq ($(1),host)
708      $$(error valgrind tests only wired up for the host)
709    endif
710    dependencies := $$(ART_TEST_$(2)_VALGRIND_GTEST$(4)_RULES)
711  else
712    dependencies := $$(ART_TEST_$(2)_GTEST$(4)_RULES)
713  endif
714
715.PHONY: $$(rule_name)
716$$(rule_name): $$(dependencies)
717	$(hide) $$(call ART_TEST_PREREQ_FINISHED,$$@)
718
719  # Clear locally defined variables.
720  rule_name :=
721  dependencies :=
722endef  # define-test-art-gtest-combination
723
724$(eval $(call define-test-art-gtest-combination,target,TARGET,,))
725$(eval $(call define-test-art-gtest-combination,target,TARGET,,$(ART_PHONY_TEST_TARGET_SUFFIX)))
726ifdef TARGET_2ND_ARCH
727$(eval $(call define-test-art-gtest-combination,target,TARGET,,$(2ND_ART_PHONY_TEST_TARGET_SUFFIX)))
728endif
729$(eval $(call define-test-art-gtest-combination,host,HOST,,))
730$(eval $(call define-test-art-gtest-combination,host,HOST,valgrind-,))
731$(eval $(call define-test-art-gtest-combination,host,HOST,,$(ART_PHONY_TEST_HOST_SUFFIX)))
732$(eval $(call define-test-art-gtest-combination,host,HOST,valgrind-,$(ART_PHONY_TEST_HOST_SUFFIX)))
733ifneq ($(HOST_PREFER_32_BIT),true)
734$(eval $(call define-test-art-gtest-combination,host,HOST,,$(2ND_ART_PHONY_TEST_HOST_SUFFIX)))
735$(eval $(call define-test-art-gtest-combination,host,HOST,valgrind-,$(2ND_ART_PHONY_TEST_HOST_SUFFIX)))
736endif
737
738# Clear locally defined variables.
739define-art-gtest-rule-target :=
740define-art-gtest-rule-host :=
741define-art-gtest :=
742define-test-art-gtest-combination :=
743RUNTIME_GTEST_COMMON_SRC_FILES :=
744COMPILER_GTEST_COMMON_SRC_FILES :=
745RUNTIME_GTEST_TARGET_SRC_FILES :=
746RUNTIME_GTEST_HOST_SRC_FILES :=
747COMPILER_GTEST_TARGET_SRC_FILES :=
748COMPILER_GTEST_HOST_SRC_FILES :=
749ART_TEST_CFLAGS :=
750ART_TEST_HOST_GTEST$(ART_PHONY_TEST_HOST_SUFFIX)_RULES :=
751ART_TEST_HOST_GTEST$(2ND_ART_PHONY_TEST_HOST_SUFFIX)_RULES :=
752ART_TEST_HOST_GTEST_RULES :=
753ART_TEST_HOST_VALGRIND_GTEST$(ART_PHONY_TEST_HOST_SUFFIX)_RULES :=
754ART_TEST_HOST_VALGRIND_GTEST$(2ND_ART_PHONY_TEST_HOST_SUFFIX)_RULES :=
755ART_TEST_HOST_VALGRIND_GTEST_RULES :=
756ART_TEST_TARGET_GTEST$(ART_PHONY_TEST_TARGET_SUFFIX)_RULES :=
757ART_TEST_TARGET_GTEST$(2ND_ART_PHONY_TEST_TARGET_SUFFIX)_RULES :=
758ART_TEST_TARGET_GTEST_RULES :=
759ART_GTEST_TARGET_ANDROID_ROOT :=
760ART_GTEST_class_linker_test_DEX_DEPS :=
761ART_GTEST_compiler_driver_test_DEX_DEPS :=
762ART_GTEST_dex_file_test_DEX_DEPS :=
763ART_GTEST_exception_test_DEX_DEPS :=
764ART_GTEST_elf_writer_test_HOST_DEPS :=
765ART_GTEST_elf_writer_test_TARGET_DEPS :=
766ART_GTEST_jni_compiler_test_DEX_DEPS :=
767ART_GTEST_jni_internal_test_DEX_DEPS :=
768ART_GTEST_oat_file_assistant_test_DEX_DEPS :=
769ART_GTEST_oat_file_assistant_test_HOST_DEPS :=
770ART_GTEST_oat_file_assistant_test_TARGET_DEPS :=
771ART_GTEST_dex2oat_test_DEX_DEPS :=
772ART_GTEST_dex2oat_test_HOST_DEPS :=
773ART_GTEST_dex2oat_test_TARGET_DEPS :=
774ART_GTEST_object_test_DEX_DEPS :=
775ART_GTEST_proxy_test_DEX_DEPS :=
776ART_GTEST_reflection_test_DEX_DEPS :=
777ART_GTEST_stub_test_DEX_DEPS :=
778ART_GTEST_transaction_test_DEX_DEPS :=
779ART_GTEST_dex2oat_environment_tests_DEX_DEPS :=
780ART_VALGRIND_DEPENDENCIES :=
781$(foreach dir,$(GTEST_DEX_DIRECTORIES), $(eval ART_TEST_TARGET_GTEST_$(dir)_DEX :=))
782$(foreach dir,$(GTEST_DEX_DIRECTORIES), $(eval ART_TEST_HOST_GTEST_$(dir)_DEX :=))
783ART_TEST_HOST_GTEST_MainStripped_DEX :=
784ART_TEST_TARGET_GTEST_MainStripped_DEX :=
785GTEST_DEX_DIRECTORIES :=
786LOCAL_PATH :=
787