1#
2# Copyright (C) 2015 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# Debug configuration (development and continuous testing)
18#
19# We run in debug mode to get more error checking and enable JDWP verbose logs
20# to investigate failures during testing.
21
22# Target settings
23jdwp_test_classpath_target := /data/jdwp/apache-harmony-jdwp-tests.jar:/data/junit/junit-targetdex.jar
24jdwp_test_runtime_bin_target := dalvikvm
25
26# Host settings
27jdwp_test_classpath_host := $(HOST_OUT_JAVA_LIBRARIES)/apache-harmony-jdwp-tests-hostdex.jar:$(HOST_OUT_JAVA_LIBRARIES)/junit-hostdex.jar
28jdwp_test_runtime_bin_host := $(HOST_OUT_EXECUTABLES)/art
29
30# Common runtime settings for runner and debuggee.
31jdwp_test_common_runtime_options := -XXlib:libartd.so -Xcompiler-option --debuggable
32
33# Debuggee runtime options
34jdwp_test_runtime_options := -verbose:jdwp
35#jdwp_test_runtime_options += -Xint # interpret-only mode
36#jdwp_test_runtime_options += -Xnoimage-dex2oat # imageless mode
37#jdwp_test_runtime_options += -Xcompiler-option --compiler-backend=Optimizing # optimizing compiler
38#jdwp_test_runtime_options += -verbose:threads
39
40# Test suite class name
41jdwp_test_suite_class_name := org.apache.harmony.jpda.tests.share.AllTests
42
43# The lists of ABIs supported on host and target.
44jdwp_tests_host_abis :=
45jdwp_tests_target_abis :=
46
47ifneq ($(HOST_PREFER_32_BIT),true)
48  jdwp_tests_host_abis := 64 32
49else
50  jdwp_tests_host_abis := 32
51endif
52
53ifdef TARGET_2ND_ARCH
54  ifeq ($(TARGET_IS_64_BIT),true)
55    jdwp_tests_target_abis := 64 32
56  else
57    $(error Unsupported multi-target configuration!)
58  endif
59else
60  ifeq ($(TARGET_IS_64_BIT),true)
61    jdwp_tests_target_abis := 64
62  else
63    jdwp_tests_target_abis := 32
64  endif
65endif
66
67jdwp_tests_host_dependencies := \
68  $(HOST_OUT_EXECUTABLES)/art \
69  $(HOST_OUT_JAVA_LIBRARIES)/apache-harmony-jdwp-tests-hostdex.jar \
70  $(HOST_OUT_JAVA_LIBRARIES)/junit-hostdex.jar
71
72jdwp_tests_target_dependencies := \
73  $(TARGET_OUT_DATA)/jdwp/apache-harmony-jdwp-tests.jar \
74  $(TARGET_OUT_DATA)/junit/junit-targetdex.jar
75
76# Define a JDWP host rule
77#
78# $(1) ABI (32 or 64)
79# $(2) rule name (ex: run-jdwp-tests-host32)
80# $(3) extra dependency rule (ex: run-jdwp-tests-host-all64)
81define define-jdwp-host-rule
82.PHONY: $(2)
83$(2): jdwp_test_runtime_host := $(jdwp_test_runtime_bin_host) --$(1) $(jdwp_test_common_runtime_options)
84$(2): $(jdwp_tests_host_dependencies) $(3)
85	$(hide) echo "Running JDWP $(1)-bit host tests"
86	$$(jdwp_test_runtime_host) -cp $(jdwp_test_classpath_host) \
87    $(jdwp_test_target_runtime_common_args) \
88    -Djpda.settings.debuggeeJavaPath='$$(jdwp_test_runtime_host) $(jdwp_test_runtime_options)' \
89    $(jdwp_test_suite_class_name)
90endef
91
92# Declare all JDWP host rules
93#
94# $(1) ABI (32 or 64)
95define declare-jdwp-host-rule
96  # Declare standalone host rule for the given ABI.
97  $(eval $(call define-jdwp-host-rule,$(1),run-jdwp-tests-host$(1),))
98
99  # Declare variant host rule for run-jdwp-tests-host. It depends on the previous abi rule(s)
100  # so all ABIs are tested.
101  $(eval $(call define-jdwp-host-rule,$(1),run-jdwp-tests-host-all$(1),$(jdwp_tests_previous_host_rule)))
102  jdwp_tests_previous_host_rule := run-jdwp-tests-host-all$(1)
103endef
104
105# Waits for device to boot completely.
106define wait-for-boot-complete
107$(hide) echo "Wait for boot complete ..."
108$(hide) while [ `adb wait-for-device shell getprop dev.bootcomplete | grep -c 1` -eq 0 ]; \
109do \
110  sleep 1; \
111done
112$(hide) echo "Boot complete"
113endef
114
115# Define a JDWP target rule
116#
117# $(1) ABI (32 or 64)
118# $(2) rule name (ex: run-jdwp-tests-target32)
119# $(3) extra dependency rule (ex: run-jdwp-tests-target-all64)
120define define-jdwp-target-rule
121.PHONY: $(2)
122$(2): jdwp_test_runtime_target := $(jdwp_test_runtime_bin_target)$(1) $(jdwp_test_common_runtime_options)
123$(2): $(jdwp_tests_target_dependencies) $(3)
124	$(hide) echo "Running JDWP $(1)-bit target tests"
125	adb root
126	adb wait-for-device shell stop
127	adb remount
128	adb sync
129	adb reboot
130	$$(call wait-for-boot-complete)
131	adb shell $$(jdwp_test_runtime_target) -cp $(jdwp_test_classpath_target) \
132    $(jdwp_test_target_runtime_common_args) \
133    -Djpda.settings.debuggeeJavaPath='$$(jdwp_test_runtime_target) $(jdwp_test_runtime_options)' \
134    $(jdwp_test_suite_class_name)
135endef
136
137# Declare all JDWP target rules
138#
139# $(1) ABI (32 or 64)
140define declare-jdwp-target-rule
141  # Declare standalone target rule for the given ABI.
142  $(eval $(call define-jdwp-target-rule,$(1),run-jdwp-tests-target$(1),))
143
144  # Declare variant target rule for run-jdwp-tests-target. It depends on the previous abi rule(s)
145  # so all ABIs are tested.
146  $(eval $(call define-jdwp-target-rule,$(1),run-jdwp-tests-target-all$(1),$(jdwp_tests_previous_target_rule)))
147  jdwp_tests_previous_target_rule := run-jdwp-tests-target-all$(1)
148endef
149
150# Declare host and target rules for each ABI
151$(foreach abi,$(jdwp_tests_host_abis),$(eval $(call declare-jdwp-host-rule,$(abi))))
152$(foreach abi,$(jdwp_tests_target_abis),$(eval $(call declare-jdwp-target-rule,$(abi))))
153
154# High level host and target rules running tests for each ABI.
155.PHONY: run-jdwp-tests-host
156run-jdwp-tests-host: $(jdwp_tests_previous_host_rule)
157
158.PHONY: run-jdwp-tests-target
159run-jdwp-tests-target: $(jdwp_tests_previous_target_rule)
160
161jdwp_tests_host_abis :=
162jdwp_tests_target_abis :=
163jdwp_tests_host_dependencies :=
164jdwp_tests_target_dependencies :=
165
166.PHONY: run-jdwp-tests-ri
167run-jdwp-tests-ri: $(HOST_OUT_JAVA_LIBRARIES)/apache-harmony-jdwp-tests-host.jar $(HOST_OUT_JAVA_LIBRARIES)/junit.jar
168	$(hide) java -cp $(HOST_OUT_JAVA_LIBRARIES)/apache-harmony-jdwp-tests-host.jar:$(HOST_OUT_JAVA_LIBRARIES)/junit.jar \
169          -Djpda.settings.verbose=true \
170          -Djpda.settings.syncPort=34016 \
171          -Djpda.settings.debuggeeJavaPath=java \
172          $(jdwp_test_suite_class_name)
173
174