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
2321efc4b8b2d0e40ae0a5905c13323a7ec752faacPaul Duffinjdwp_test_classpath_target := /data/jdwp/apache-harmony-jdwp-tests.jar:/data/junit/junit.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
57b4b3136dd8205b8c5017b750fe3d4b14eba75962Ying Wang    jdwp_tests_target_abis := 32
58b4b3136dd8205b8c5017b750fe3d4b14eba75962Ying Wang    $(warning Unsupported multi-target configuration!)
5972f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz  endif
6072f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzelse
6172f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz  ifeq ($(TARGET_IS_64_BIT),true)
6272f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz    jdwp_tests_target_abis := 64
6372f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz  else
6472f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz    jdwp_tests_target_abis := 32
6572f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz  endif
6672f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzendif
6772f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz
6872f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzjdwp_tests_host_dependencies := \
6972f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz  $(HOST_OUT_EXECUTABLES)/art \
7072f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz  $(HOST_OUT_JAVA_LIBRARIES)/apache-harmony-jdwp-tests-hostdex.jar \
7172f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz  $(HOST_OUT_JAVA_LIBRARIES)/junit-hostdex.jar
7272f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz
7372f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzjdwp_tests_target_dependencies := \
7472f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz  $(TARGET_OUT_DATA)/jdwp/apache-harmony-jdwp-tests.jar \
7521efc4b8b2d0e40ae0a5905c13323a7ec752faacPaul Duffin  $(TARGET_OUT_DATA)/junit/junit.jar
7672f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz
7772f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz# Define a JDWP host rule
7872f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz#
7972f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz# $(1) ABI (32 or 64)
8072f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz# $(2) rule name (ex: run-jdwp-tests-host32)
8172f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz# $(3) extra dependency rule (ex: run-jdwp-tests-host-all64)
8272f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzdefine define-jdwp-host-rule
8372f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz.PHONY: $(2)
8472f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz$(2): jdwp_test_runtime_host := $(jdwp_test_runtime_bin_host) --$(1) $(jdwp_test_common_runtime_options)
8572f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz$(2): $(jdwp_tests_host_dependencies) $(3)
8672f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz	$(hide) echo "Running JDWP $(1)-bit host tests"
8772f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz	$$(jdwp_test_runtime_host) -cp $(jdwp_test_classpath_host) \
8872f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz    $(jdwp_test_target_runtime_common_args) \
8972f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz    -Djpda.settings.debuggeeJavaPath='$$(jdwp_test_runtime_host) $(jdwp_test_runtime_options)' \
9072f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz    $(jdwp_test_suite_class_name)
9172f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzendef
9272f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz
9372f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz# Declare all JDWP host rules
9472f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz#
9572f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz# $(1) ABI (32 or 64)
9672f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzdefine declare-jdwp-host-rule
9772f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz  # Declare standalone host rule for the given ABI.
9872f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz  $(eval $(call define-jdwp-host-rule,$(1),run-jdwp-tests-host$(1),))
9972f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz
10072f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz  # Declare variant host rule for run-jdwp-tests-host. It depends on the previous abi rule(s)
10172f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz  # so all ABIs are tested.
10272f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz  $(eval $(call define-jdwp-host-rule,$(1),run-jdwp-tests-host-all$(1),$(jdwp_tests_previous_host_rule)))
10372f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz  jdwp_tests_previous_host_rule := run-jdwp-tests-host-all$(1)
10472f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzendef
10572f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz
10672f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz# Waits for device to boot completely.
10772f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzdefine wait-for-boot-complete
10872f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz$(hide) echo "Wait for boot complete ..."
10972f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz$(hide) while [ `adb wait-for-device shell getprop dev.bootcomplete | grep -c 1` -eq 0 ]; \
11072f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzdo \
11172f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz  sleep 1; \
11272f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzdone
11372f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz$(hide) echo "Boot complete"
11472f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzendef
11572f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz
11672f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz# Define a JDWP target rule
11772f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz#
11872f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz# $(1) ABI (32 or 64)
11972f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz# $(2) rule name (ex: run-jdwp-tests-target32)
12072f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz# $(3) extra dependency rule (ex: run-jdwp-tests-target-all64)
12172f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzdefine define-jdwp-target-rule
12272f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz.PHONY: $(2)
12372f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz$(2): jdwp_test_runtime_target := $(jdwp_test_runtime_bin_target)$(1) $(jdwp_test_common_runtime_options)
12472f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz$(2): $(jdwp_tests_target_dependencies) $(3)
12572f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz	$(hide) echo "Running JDWP $(1)-bit target tests"
12672f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz	adb root
12772f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz	adb wait-for-device shell stop
12872f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz	adb remount
12972f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz	adb sync
13072f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz	adb reboot
13172f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz	$$(call wait-for-boot-complete)
13272f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz	adb shell $$(jdwp_test_runtime_target) -cp $(jdwp_test_classpath_target) \
13372f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz    $(jdwp_test_target_runtime_common_args) \
13472f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz    -Djpda.settings.debuggeeJavaPath='$$(jdwp_test_runtime_target) $(jdwp_test_runtime_options)' \
13572f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz    $(jdwp_test_suite_class_name)
13672f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzendef
13772f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz
13872f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz# Declare all JDWP target rules
13972f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz#
14072f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz# $(1) ABI (32 or 64)
14172f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzdefine declare-jdwp-target-rule
14272f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz  # Declare standalone target rule for the given ABI.
14372f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz  $(eval $(call define-jdwp-target-rule,$(1),run-jdwp-tests-target$(1),))
14472f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz
14572f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz  # Declare variant target rule for run-jdwp-tests-target. It depends on the previous abi rule(s)
14672f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz  # so all ABIs are tested.
14772f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz  $(eval $(call define-jdwp-target-rule,$(1),run-jdwp-tests-target-all$(1),$(jdwp_tests_previous_target_rule)))
14872f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz  jdwp_tests_previous_target_rule := run-jdwp-tests-target-all$(1)
14972f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzendef
15072f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz
15172f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz# Declare host and target rules for each ABI
15272f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz$(foreach abi,$(jdwp_tests_host_abis),$(eval $(call declare-jdwp-host-rule,$(abi))))
15372f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz$(foreach abi,$(jdwp_tests_target_abis),$(eval $(call declare-jdwp-target-rule,$(abi))))
15472f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz
15572f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz# High level host and target rules running tests for each ABI.
15672f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz.PHONY: run-jdwp-tests-host
15772f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzrun-jdwp-tests-host: $(jdwp_tests_previous_host_rule)
15872f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz
15972f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz.PHONY: run-jdwp-tests-target
16072f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzrun-jdwp-tests-target: $(jdwp_tests_previous_target_rule)
16172f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz
16272f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzjdwp_tests_host_abis :=
16372f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzjdwp_tests_target_abis :=
16472f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzjdwp_tests_host_dependencies :=
16572f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzjdwp_tests_target_dependencies :=
16672f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz
16772f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz.PHONY: run-jdwp-tests-ri
16872f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertzrun-jdwp-tests-ri: $(HOST_OUT_JAVA_LIBRARIES)/apache-harmony-jdwp-tests-host.jar $(HOST_OUT_JAVA_LIBRARIES)/junit.jar
16972f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz	$(hide) java -cp $(HOST_OUT_JAVA_LIBRARIES)/apache-harmony-jdwp-tests-host.jar:$(HOST_OUT_JAVA_LIBRARIES)/junit.jar \
17072f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz          -Djpda.settings.verbose=true \
17172f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz          -Djpda.settings.debuggeeJavaPath=java \
17272f0592ec4fa75b8c758f90c18c5766d9e5b368cSebastien Hertz          $(jdwp_test_suite_class_name)
173