1# Copyright (C) 2011 The Android Open Source Project
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7#      http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14#
15
16LOCAL_PATH := $(call my-dir)
17
18include art/build/Android.common_test.mk
19
20# Dependencies for actually running a run-test.
21TEST_ART_RUN_TEST_DEPENDENCIES := \
22  $(HOST_OUT_EXECUTABLES)/dx \
23  $(HOST_OUT_EXECUTABLES)/d8 \
24  $(HOST_OUT_EXECUTABLES)/hiddenapi \
25  $(HOST_OUT_EXECUTABLES)/jasmin \
26  $(HOST_OUT_EXECUTABLES)/smali
27
28# We need the ART Testing APEX (which is a superset of the Release
29# and Debug APEXes) -- which contains dex2oat, dalvikvm, their
30# dependencies and ART gtests -- on the target, as well as the core
31# images (all images as we sync only once).
32ART_TEST_TARGET_RUN_TEST_DEPENDENCIES := $(TESTING_ART_APEX) $(TARGET_CORE_IMG_OUTS)
33
34# Also need libartagent.
35ART_TEST_TARGET_RUN_TEST_DEPENDENCIES += libartagent-target libartagentd-target
36
37# Also need libtiagent.
38ART_TEST_TARGET_RUN_TEST_DEPENDENCIES += libtiagent-target libtiagentd-target
39
40# Also need libtistress.
41ART_TEST_TARGET_RUN_TEST_DEPENDENCIES += libtistress-target libtistressd-target
42
43# Also need libarttest.
44ART_TEST_TARGET_RUN_TEST_DEPENDENCIES += libarttest-target libarttestd-target
45
46# Also need libnativebridgetest.
47ART_TEST_TARGET_RUN_TEST_DEPENDENCIES += libnativebridgetest-target libnativebridgetestd-target
48
49# Also need signal_dumper.
50ART_TEST_TARGET_RUN_TEST_DEPENDENCIES += signal_dumper-target
51
52ART_TEST_TARGET_RUN_TEST_DEPENDENCIES += \
53  $(foreach jar,$(TARGET_TEST_CORE_JARS),$(TARGET_OUT_JAVA_LIBRARIES)/$(jar).jar)
54
55# All tests require the host executables. The tests also depend on the core images, but on
56# specific version depending on the compiler.
57ART_TEST_HOST_RUN_TEST_DEPENDENCIES := \
58  $(ART_HOST_EXECUTABLES) \
59  $(HOST_OUT_EXECUTABLES)/hprof-conv \
60  $(HOST_OUT_EXECUTABLES)/signal_dumper \
61  $(ART_TEST_LIST_host_$(ART_HOST_ARCH)_libtiagent) \
62  $(ART_TEST_LIST_host_$(ART_HOST_ARCH)_libtiagentd) \
63  $(ART_TEST_LIST_host_$(ART_HOST_ARCH)_libtistress) \
64  $(ART_TEST_LIST_host_$(ART_HOST_ARCH)_libtistressd) \
65  $(ART_TEST_LIST_host_$(ART_HOST_ARCH)_libartagent) \
66  $(ART_TEST_LIST_host_$(ART_HOST_ARCH)_libartagentd) \
67  $(ART_TEST_LIST_host_$(ART_HOST_ARCH)_libarttest) \
68  $(ART_TEST_LIST_host_$(ART_HOST_ARCH)_libarttestd) \
69  $(ART_TEST_LIST_host_$(ART_HOST_ARCH)_libnativebridgetest) \
70  $(ART_TEST_LIST_host_$(ART_HOST_ARCH)_libnativebridgetestd) \
71  $(ART_HOST_OUT_SHARED_LIBRARIES)/libicu_jni$(ART_HOST_SHLIB_EXTENSION) \
72  $(ART_HOST_OUT_SHARED_LIBRARIES)/libjavacore$(ART_HOST_SHLIB_EXTENSION) \
73  $(ART_HOST_OUT_SHARED_LIBRARIES)/libopenjdk$(ART_HOST_SHLIB_EXTENSION) \
74  $(ART_HOST_OUT_SHARED_LIBRARIES)/libopenjdkd$(ART_HOST_SHLIB_EXTENSION) \
75  $(ART_HOST_OUT_SHARED_LIBRARIES)/libopenjdkjvmti$(ART_HOST_SHLIB_EXTENSION) \
76  $(ART_HOST_OUT_SHARED_LIBRARIES)/libopenjdkjvmtid$(ART_HOST_SHLIB_EXTENSION) \
77  $(HOST_CORE_DEX_LOCATIONS) \
78
79ifneq ($(HOST_PREFER_32_BIT),true)
80ART_TEST_HOST_RUN_TEST_DEPENDENCIES += \
81  $(ART_TEST_LIST_host_$(2ND_ART_HOST_ARCH)_libtiagent) \
82  $(ART_TEST_LIST_host_$(2ND_ART_HOST_ARCH)_libtiagentd) \
83  $(ART_TEST_LIST_host_$(2ND_ART_HOST_ARCH)_libtistress) \
84  $(ART_TEST_LIST_host_$(2ND_ART_HOST_ARCH)_libtistressd) \
85  $(ART_TEST_LIST_host_$(2ND_ART_HOST_ARCH)_libartagent) \
86  $(ART_TEST_LIST_host_$(2ND_ART_HOST_ARCH)_libartagentd) \
87  $(ART_TEST_LIST_host_$(2ND_ART_HOST_ARCH)_libarttest) \
88  $(ART_TEST_LIST_host_$(2ND_ART_HOST_ARCH)_libarttestd) \
89  $(ART_TEST_LIST_host_$(2ND_ART_HOST_ARCH)_libnativebridgetest) \
90  $(ART_TEST_LIST_host_$(2ND_ART_HOST_ARCH)_libnativebridgetestd) \
91  $(2ND_ART_HOST_OUT_SHARED_LIBRARIES)/libicu_jni$(ART_HOST_SHLIB_EXTENSION) \
92  $(2ND_ART_HOST_OUT_SHARED_LIBRARIES)/libjavacore$(ART_HOST_SHLIB_EXTENSION) \
93  $(2ND_ART_HOST_OUT_SHARED_LIBRARIES)/libopenjdk$(ART_HOST_SHLIB_EXTENSION) \
94  $(2ND_ART_HOST_OUT_SHARED_LIBRARIES)/libopenjdkd$(ART_HOST_SHLIB_EXTENSION) \
95  $(2ND_ART_HOST_OUT_SHARED_LIBRARIES)/libopenjdkjvmti$(ART_HOST_SHLIB_EXTENSION) \
96  $(2ND_ART_HOST_OUT_SHARED_LIBRARIES)/libopenjdkjvmtid$(ART_HOST_SHLIB_EXTENSION) \
97
98endif
99
100# Host executables.
101host_prereq_rules := $(ART_TEST_HOST_RUN_TEST_DEPENDENCIES)
102
103# Required for jasmin and smali.
104host_prereq_rules += $(TEST_ART_RUN_TEST_DEPENDENCIES)
105
106define core-image-dependencies
107  image_suffix := $(3)
108  ifeq ($(3),regalloc_gc)
109    image_suffix:=optimizing
110  else
111    ifeq ($(3),jit)
112      image_suffix:=interpreter
113    endif
114  endif
115  ifeq ($(2),no-image)
116    $(1)_prereq_rules += $$($(call to-upper,$(1))_CORE_IMAGE_$$(image_suffix)_$(4))
117  else
118    ifeq ($(2),picimage)
119      $(1)_prereq_rules += $$($(call to-upper,$(1))_CORE_IMAGE_$$(image_suffix)_$(4))
120    else
121      ifeq ($(2),multipicimage)
122        $(1)_prereq_rules += $$($(call to-upper,$(1))_CORE_IMAGE_$$(image_suffix)_multi_$(4))
123      endif
124    endif
125  endif
126endef
127
128TARGET_TYPES := host target
129COMPILER_TYPES := jit interpreter optimizing regalloc_gc jit interp-ac speed-profile
130IMAGE_TYPES := picimage no-image multipicimage
131ALL_ADDRESS_SIZES := 64 32
132
133# Add core image dependencies required for given target - HOST or TARGET,
134# IMAGE_TYPE, COMPILER_TYPE and ADDRESS_SIZE to the prereq_rules.
135$(foreach target, $(TARGET_TYPES), \
136  $(foreach image, $(IMAGE_TYPES), \
137    $(foreach compiler, $(COMPILER_TYPES), \
138      $(foreach address_size, $(ALL_ADDRESS_SIZES), $(eval \
139        $(call core-image-dependencies,$(target),$(image),$(compiler),$(address_size)))))))
140
141test-art-host-run-test-dependencies : $(host_prereq_rules)
142.PHONY: test-art-host-run-test-dependencies
143test-art-target-run-test-dependencies :
144.PHONY: test-art-target-run-test-dependencies
145test-art-run-test-dependencies : test-art-host-run-test-dependencies test-art-target-run-test-dependencies
146.PHONY: test-art-run-test-dependencies
147
148# Create a rule to build and run a test group of the following form:
149# test-art-{1: host target}-run-test
150define define-test-art-host-or-target-run-test-group
151  build_target := test-art-$(1)-run-test
152  .PHONY: $$(build_target)
153
154  $$(build_target) : args := --$(1) --verbose
155  $$(build_target) : test-art-$(1)-run-test-dependencies
156	./art/test/testrunner/testrunner.py $$(args)
157  build_target :=
158  args :=
159endef  # define-test-art-host-or-target-run-test-group
160
161$(foreach target, $(TARGET_TYPES), $(eval \
162  $(call define-test-art-host-or-target-run-test-group,$(target))))
163
164test-art-run-test : test-art-host-run-test test-art-target-run-test
165
166host_prereq_rules :=
167core-image-dependencies :=
168define-test-art-host-or-target-run-test-group :=
169TARGET_TYPES :=
170COMPILER_TYPES :=
171IMAGE_TYPES :=
172ALL_ADDRESS_SIZES :=
173LOCAL_PATH :=
174