172f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz#
272f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz# Copyright (C) 2015 The Android Open Source Project
372f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz#
472f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz# Licensed under the Apache License, Version 2.0 (the "License");
572f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz# you may not use this file except in compliance with the License.
672f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz# You may obtain a copy of the License at
772f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz#
872f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz#      http://www.apache.org/licenses/LICENSE-2.0
972f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz#
1072f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz# Unless required by applicable law or agreed to in writing, software
1172f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz# distributed under the License is distributed on an "AS IS" BASIS,
1272f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1372f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz# See the License for the specific language governing permissions and
1472f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz# limitations under the License.
1572f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz#
1672f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz
1772f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz# Debug configuration (development and continuous testing)
1872f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz#
1972f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz# We run in debug mode to get more error checking and enable JDWP verbose logs
2072f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz# to investigate failures during testing.
2172f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz
2272f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz# Target settings
2372f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzjdwp_test_classpath_target := /data/jdwp/apache-harmony-jdwp-tests.jar:/data/junit/junit-targetdex.jar
2472f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzjdwp_test_runtime_bin_target := dalvikvm
2572f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz
2672f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz# Host settings
2772f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzjdwp_test_classpath_host := $(HOST_OUT_JAVA_LIBRARIES)/apache-harmony-jdwp-tests-hostdex.jar:$(HOST_OUT_JAVA_LIBRARIES)/junit-hostdex.jar
2872f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzjdwp_test_runtime_bin_host := $(HOST_OUT_EXECUTABLES)/art
2972f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz
3072f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz# Common runtime settings for runner and debuggee.
312bb476ac3c4d738766d8fc9b64ffd672346bda54Sebastien Hertzjdwp_test_common_runtime_options := -XXlib:libartd.so -Xcompiler-option --debuggable
3272f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz
3372f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz# Debuggee runtime options
3472f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzjdwp_test_runtime_options := -verbose:jdwp
3572f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz#jdwp_test_runtime_options += -Xint # interpret-only mode
3672f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz#jdwp_test_runtime_options += -Xnoimage-dex2oat # imageless mode
3772f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz#jdwp_test_runtime_options += -Xcompiler-option --compiler-backend=Optimizing # optimizing compiler
3872f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz#jdwp_test_runtime_options += -verbose:threads
3972f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz
4072f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz# Test suite class name
4172f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzjdwp_test_suite_class_name := org.apache.harmony.jpda.tests.share.AllTests
4272f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz
4372f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz# The lists of ABIs supported on host and target.
4472f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzjdwp_tests_host_abis :=
4572f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzjdwp_tests_target_abis :=
4672f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz
4772f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzifneq ($(HOST_PREFER_32_BIT),true)
4872f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz  jdwp_tests_host_abis := 64 32
4972f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzelse
5072f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz  jdwp_tests_host_abis := 32
5172f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzendif
5272f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz
5372f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzifdef TARGET_2ND_ARCH
5472f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz  ifeq ($(TARGET_IS_64_BIT),true)
5572f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz    jdwp_tests_target_abis := 64 32
5672f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz  else
5772f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz    $(error Unsupported multi-target configuration!)
5872f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz  endif
5972f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzelse
6072f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz  ifeq ($(TARGET_IS_64_BIT),true)
6172f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz    jdwp_tests_target_abis := 64
6272f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz  else
6372f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz    jdwp_tests_target_abis := 32
6472f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz  endif
6572f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzendif
6672f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz
6772f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzjdwp_tests_host_dependencies := \
6872f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz  $(HOST_OUT_EXECUTABLES)/art \
6972f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz  $(HOST_OUT_JAVA_LIBRARIES)/apache-harmony-jdwp-tests-hostdex.jar \
7072f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz  $(HOST_OUT_JAVA_LIBRARIES)/junit-hostdex.jar
7172f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz
7272f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzjdwp_tests_target_dependencies := \
7372f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz  $(TARGET_OUT_DATA)/jdwp/apache-harmony-jdwp-tests.jar \
7472f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz  $(TARGET_OUT_DATA)/junit/junit-targetdex.jar
7572f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz
7672f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz# Define a JDWP host rule
7772f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz#
7872f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz# $(1) ABI (32 or 64)
7972f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz# $(2) rule name (ex: run-jdwp-tests-host32)
8072f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz# $(3) extra dependency rule (ex: run-jdwp-tests-host-all64)
8172f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzdefine define-jdwp-host-rule
8272f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz.PHONY: $(2)
8372f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz$(2): jdwp_test_runtime_host := $(jdwp_test_runtime_bin_host) --$(1) $(jdwp_test_common_runtime_options)
8472f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz$(2): $(jdwp_tests_host_dependencies) $(3)
8572f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz	$(hide) echo "Running JDWP $(1)-bit host tests"
8672f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz	$$(jdwp_test_runtime_host) -cp $(jdwp_test_classpath_host) \
8772f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz    $(jdwp_test_target_runtime_common_args) \
8872f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz    -Djpda.settings.debuggeeJavaPath='$$(jdwp_test_runtime_host) $(jdwp_test_runtime_options)' \
8972f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz    $(jdwp_test_suite_class_name)
9072f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzendef
9172f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz
9272f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz# Declare all JDWP host rules
9372f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz#
9472f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz# $(1) ABI (32 or 64)
9572f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzdefine declare-jdwp-host-rule
9672f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz  # Declare standalone host rule for the given ABI.
9772f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz  $(eval $(call define-jdwp-host-rule,$(1),run-jdwp-tests-host$(1),))
9872f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz
9972f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz  # Declare variant host rule for run-jdwp-tests-host. It depends on the previous abi rule(s)
10072f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz  # so all ABIs are tested.
10172f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz  $(eval $(call define-jdwp-host-rule,$(1),run-jdwp-tests-host-all$(1),$(jdwp_tests_previous_host_rule)))
10272f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz  jdwp_tests_previous_host_rule := run-jdwp-tests-host-all$(1)
10372f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzendef
10472f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz
10572f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz# Waits for device to boot completely.
10672f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzdefine wait-for-boot-complete
10772f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz$(hide) echo "Wait for boot complete ..."
10872f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz$(hide) while [ `adb wait-for-device shell getprop dev.bootcomplete | grep -c 1` -eq 0 ]; \
10972f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzdo \
11072f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz  sleep 1; \
11172f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzdone
11272f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz$(hide) echo "Boot complete"
11372f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzendef
11472f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz
11572f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz# Define a JDWP target rule
11672f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz#
11772f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz# $(1) ABI (32 or 64)
11872f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz# $(2) rule name (ex: run-jdwp-tests-target32)
11972f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz# $(3) extra dependency rule (ex: run-jdwp-tests-target-all64)
12072f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzdefine define-jdwp-target-rule
12172f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz.PHONY: $(2)
12272f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz$(2): jdwp_test_runtime_target := $(jdwp_test_runtime_bin_target)$(1) $(jdwp_test_common_runtime_options)
12372f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz$(2): $(jdwp_tests_target_dependencies) $(3)
12472f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz	$(hide) echo "Running JDWP $(1)-bit target tests"
12572f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz	adb root
12672f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz	adb wait-for-device shell stop
12772f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz	adb remount
12872f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz	adb sync
12972f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz	adb reboot
13072f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz	$$(call wait-for-boot-complete)
13172f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz	adb shell $$(jdwp_test_runtime_target) -cp $(jdwp_test_classpath_target) \
13272f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz    $(jdwp_test_target_runtime_common_args) \
13372f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz    -Djpda.settings.debuggeeJavaPath='$$(jdwp_test_runtime_target) $(jdwp_test_runtime_options)' \
13472f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz    $(jdwp_test_suite_class_name)
13572f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzendef
13672f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz
13772f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz# Declare all JDWP target rules
13872f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz#
13972f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz# $(1) ABI (32 or 64)
14072f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzdefine declare-jdwp-target-rule
14172f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz  # Declare standalone target rule for the given ABI.
14272f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz  $(eval $(call define-jdwp-target-rule,$(1),run-jdwp-tests-target$(1),))
14372f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz
14472f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz  # Declare variant target rule for run-jdwp-tests-target. It depends on the previous abi rule(s)
14572f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz  # so all ABIs are tested.
14672f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz  $(eval $(call define-jdwp-target-rule,$(1),run-jdwp-tests-target-all$(1),$(jdwp_tests_previous_target_rule)))
14772f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz  jdwp_tests_previous_target_rule := run-jdwp-tests-target-all$(1)
14872f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzendef
14972f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz
15072f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz# Declare host and target rules for each ABI
15172f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz$(foreach abi,$(jdwp_tests_host_abis),$(eval $(call declare-jdwp-host-rule,$(abi))))
15272f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz$(foreach abi,$(jdwp_tests_target_abis),$(eval $(call declare-jdwp-target-rule,$(abi))))
15372f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz
15472f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz# High level host and target rules running tests for each ABI.
15572f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz.PHONY: run-jdwp-tests-host
15672f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzrun-jdwp-tests-host: $(jdwp_tests_previous_host_rule)
15772f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz
15872f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz.PHONY: run-jdwp-tests-target
15972f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzrun-jdwp-tests-target: $(jdwp_tests_previous_target_rule)
16072f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz
16172f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzjdwp_tests_host_abis :=
16272f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzjdwp_tests_target_abis :=
16372f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzjdwp_tests_host_dependencies :=
16472f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzjdwp_tests_target_dependencies :=
16572f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz
16672f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz.PHONY: run-jdwp-tests-ri
16772f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzrun-jdwp-tests-ri: $(HOST_OUT_JAVA_LIBRARIES)/apache-harmony-jdwp-tests-host.jar $(HOST_OUT_JAVA_LIBRARIES)/junit.jar
16872f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz	$(hide) java -cp $(HOST_OUT_JAVA_LIBRARIES)/apache-harmony-jdwp-tests-host.jar:$(HOST_OUT_JAVA_LIBRARIES)/junit.jar \
16972f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz          -Djpda.settings.verbose=true \
17072f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz          -Djpda.settings.syncPort=34016 \
17172f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz          -Djpda.settings.debuggeeJavaPath=java \
17272f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz          $(jdwp_test_suite_class_name)
17372f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz
174