#
# Copyright (C) 2015 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Debug configuration (development and continuous testing)
#
# We run in debug mode to get more error checking and enable JDWP verbose logs
# to investigate failures during testing.
# Target settings
jdwp_test_classpath_target := /data/jdwp/apache-harmony-jdwp-tests.jar:/data/junit/junit-targetdex.jar
jdwp_test_runtime_bin_target := dalvikvm
# Host settings
jdwp_test_classpath_host := $(HOST_OUT_JAVA_LIBRARIES)/apache-harmony-jdwp-tests-hostdex.jar:$(HOST_OUT_JAVA_LIBRARIES)/junit-hostdex.jar
jdwp_test_runtime_bin_host := $(HOST_OUT_EXECUTABLES)/art
# Common runtime settings for runner and debuggee.
jdwp_test_common_runtime_options := -XXlib:libartd.so -Xcompiler-option --debuggable
# Debuggee runtime options
jdwp_test_runtime_options := -verbose:jdwp
#jdwp_test_runtime_options += -Xint # interpret-only mode
#jdwp_test_runtime_options += -Xnoimage-dex2oat # imageless mode
#jdwp_test_runtime_options += -Xcompiler-option --compiler-backend=Optimizing # optimizing compiler
#jdwp_test_runtime_options += -verbose:threads
# Test suite class name
jdwp_test_suite_class_name := org.apache.harmony.jpda.tests.share.AllTests
# The lists of ABIs supported on host and target.
jdwp_tests_host_abis :=
jdwp_tests_target_abis :=
ifneq ($(HOST_PREFER_32_BIT),true)
jdwp_tests_host_abis := 64 32
else
jdwp_tests_host_abis := 32
endif
ifdef TARGET_2ND_ARCH
ifeq ($(TARGET_IS_64_BIT),true)
jdwp_tests_target_abis := 64 32
else
$(error Unsupported multi-target configuration!)
endif
else
ifeq ($(TARGET_IS_64_BIT),true)
jdwp_tests_target_abis := 64
else
jdwp_tests_target_abis := 32
endif
endif
jdwp_tests_host_dependencies := \
$(HOST_OUT_EXECUTABLES)/art \
$(HOST_OUT_JAVA_LIBRARIES)/apache-harmony-jdwp-tests-hostdex.jar \
$(HOST_OUT_JAVA_LIBRARIES)/junit-hostdex.jar
jdwp_tests_target_dependencies := \
$(TARGET_OUT_DATA)/jdwp/apache-harmony-jdwp-tests.jar \
$(TARGET_OUT_DATA)/junit/junit-targetdex.jar
# Define a JDWP host rule
#
# $(1) ABI (32 or 64)
# $(2) rule name (ex: run-jdwp-tests-host32)
# $(3) extra dependency rule (ex: run-jdwp-tests-host-all64)
define define-jdwp-host-rule
.PHONY: $(2)
$(2): jdwp_test_runtime_host := $(jdwp_test_runtime_bin_host) --$(1) $(jdwp_test_common_runtime_options)
$(2): $(jdwp_tests_host_dependencies) $(3)
$(hide) echo "Running JDWP $(1)-bit host tests"
$$(jdwp_test_runtime_host) -cp $(jdwp_test_classpath_host) \
$(jdwp_test_target_runtime_common_args) \
-Djpda.settings.debuggeeJavaPath='$$(jdwp_test_runtime_host) $(jdwp_test_runtime_options)' \
$(jdwp_test_suite_class_name)
endef
# Declare all JDWP host rules
#
# $(1) ABI (32 or 64)
define declare-jdwp-host-rule
# Declare standalone host rule for the given ABI.
$(eval $(call define-jdwp-host-rule,$(1),run-jdwp-tests-host$(1),))
# Declare variant host rule for run-jdwp-tests-host. It depends on the previous abi rule(s)
# so all ABIs are tested.
$(eval $(call define-jdwp-host-rule,$(1),run-jdwp-tests-host-all$(1),$(jdwp_tests_previous_host_rule)))
jdwp_tests_previous_host_rule := run-jdwp-tests-host-all$(1)
endef
# Waits for device to boot completely.
define wait-for-boot-complete
$(hide) echo "Wait for boot complete ..."
$(hide) while [ `adb wait-for-device shell getprop dev.bootcomplete | grep -c 1` -eq 0 ]; \
do \
sleep 1; \
done
$(hide) echo "Boot complete"
endef
# Define a JDWP target rule
#
# $(1) ABI (32 or 64)
# $(2) rule name (ex: run-jdwp-tests-target32)
# $(3) extra dependency rule (ex: run-jdwp-tests-target-all64)
define define-jdwp-target-rule
.PHONY: $(2)
$(2): jdwp_test_runtime_target := $(jdwp_test_runtime_bin_target)$(1) $(jdwp_test_common_runtime_options)
$(2): $(jdwp_tests_target_dependencies) $(3)
$(hide) echo "Running JDWP $(1)-bit target tests"
adb root
adb wait-for-device shell stop
adb remount
adb sync
adb reboot
$$(call wait-for-boot-complete)
adb shell $$(jdwp_test_runtime_target) -cp $(jdwp_test_classpath_target) \
$(jdwp_test_target_runtime_common_args) \
-Djpda.settings.debuggeeJavaPath='$$(jdwp_test_runtime_target) $(jdwp_test_runtime_options)' \
$(jdwp_test_suite_class_name)
endef
# Declare all JDWP target rules
#
# $(1) ABI (32 or 64)
define declare-jdwp-target-rule
# Declare standalone target rule for the given ABI.
$(eval $(call define-jdwp-target-rule,$(1),run-jdwp-tests-target$(1),))
# Declare variant target rule for run-jdwp-tests-target. It depends on the previous abi rule(s)
# so all ABIs are tested.
$(eval $(call define-jdwp-target-rule,$(1),run-jdwp-tests-target-all$(1),$(jdwp_tests_previous_target_rule)))
jdwp_tests_previous_target_rule := run-jdwp-tests-target-all$(1)
endef
# Declare host and target rules for each ABI
$(foreach abi,$(jdwp_tests_host_abis),$(eval $(call declare-jdwp-host-rule,$(abi))))
$(foreach abi,$(jdwp_tests_target_abis),$(eval $(call declare-jdwp-target-rule,$(abi))))
# High level host and target rules running tests for each ABI.
.PHONY: run-jdwp-tests-host
run-jdwp-tests-host: $(jdwp_tests_previous_host_rule)
.PHONY: run-jdwp-tests-target
run-jdwp-tests-target: $(jdwp_tests_previous_target_rule)
jdwp_tests_host_abis :=
jdwp_tests_target_abis :=
jdwp_tests_host_dependencies :=
jdwp_tests_target_dependencies :=
.PHONY: run-jdwp-tests-ri
run-jdwp-tests-ri: $(HOST_OUT_JAVA_LIBRARIES)/apache-harmony-jdwp-tests-host.jar $(HOST_OUT_JAVA_LIBRARIES)/junit.jar
$(hide) java -cp $(HOST_OUT_JAVA_LIBRARIES)/apache-harmony-jdwp-tests-host.jar:$(HOST_OUT_JAVA_LIBRARIES)/junit.jar \
-Djpda.settings.verbose=true \
-Djpda.settings.debuggeeJavaPath=java \
$(jdwp_test_suite_class_name)