summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Igor Murashkin <iam@google.com> 2017-06-19 14:33:06 -0700
committer Igor Murashkin <iam@google.com> 2017-06-21 08:19:34 -0700
commit1c843e9caf5a5e3b73275fc4845d4bdbc8f3a03a (patch)
tree9d51b8d84acb2387ca5795fb4ebf840c49a35bbc
parent4db66ab6ea7ba0b7c08bbecd20b8f3df0e7ba648 (diff)
test: enable javac/dx to import libcore on the bootclasspath
Fixes 12 tests with javac/dx. Previously, javac with the default bootclasspath (unspecified) was used, meaning that it would usually pickup rt.jar from a developer's JDK system install. With javac-helper.sh, libcore is used for the javac -bootclasspath, enabling art tests to load libcore-specific packages such as libcore or dalvik (in particular, it uses the output of art/tools/bootjars.sh which calculates the correct bootclasspath from the build artifacts). To get libcore on the bootclasspath, source files must be placed in a 'art/test/$TESTNAME/src-art' directory. Otherwise the old behavior is kept to encourage tests to be cross-platform compatible. The minimal set of tests that relied on 'import dalvik/import libcore' had their src directories renamed to src-art, and are now building successfully. Test: ANDROID_COMPILE_WITH_JACK=false art/test.py Bug: 36902714 Change-Id: Iafd245de9e04c312c5ac107897e34d7b97191726
-rw-r--r--test/004-NativeAllocations/src-art/Main.java (renamed from test/004-NativeAllocations/src/Main.java)0
-rw-r--r--test/138-duplicate-classes-check/src-art/A.java (renamed from test/138-duplicate-classes-check/src/A.java)0
-rw-r--r--test/138-duplicate-classes-check/src-art/Main.java (renamed from test/138-duplicate-classes-check/src/Main.java)0
-rw-r--r--test/146-bad-interface/src-art/Main.java (renamed from test/146-bad-interface/src/Main.java)0
-rw-r--r--test/157-void-class/src-art/Main.java (renamed from test/157-void-class/src/Main.java)0
-rw-r--r--test/596-monitor-inflation/src-art/Main.java (renamed from test/596-monitor-inflation/src/Main.java)0
-rw-r--r--test/612-jit-dex-cache/src-art/A.java (renamed from test/612-jit-dex-cache/src/A.java)0
-rw-r--r--test/612-jit-dex-cache/src-art/B.java (renamed from test/612-jit-dex-cache/src/B.java)0
-rw-r--r--test/612-jit-dex-cache/src-art/Main.java (renamed from test/612-jit-dex-cache/src/Main.java)0
-rw-r--r--test/613-inlining-dex-cache/src-art/B.java (renamed from test/613-inlining-dex-cache/src/B.java)0
-rw-r--r--test/613-inlining-dex-cache/src-art/Main.java (renamed from test/613-inlining-dex-cache/src/Main.java)0
-rw-r--r--test/909-attach-agent/src-art/Main.java (renamed from test/909-attach-agent/src/Main.java)0
-rw-r--r--test/912-classes/src-art/Main.java (renamed from test/912-classes/src/Main.java)0
-rw-r--r--test/912-classes/src-art/art/DexData.java (renamed from test/912-classes/src/art/DexData.java)0
-rw-r--r--test/912-classes/src-art/art/Main.java (renamed from test/912-classes/src/art/Main.java)0
-rw-r--r--test/912-classes/src-art/art/Test912.java (renamed from test/912-classes/src/art/Test912.java)0
-rw-r--r--test/912-classes/src-art/art/Test912Art.java (renamed from test/912-classes/src/art/Test912Art.java)0
-rw-r--r--test/952-invoke-custom/src-art/Main.java (renamed from test/952-invoke-custom/src/Main.java)0
-rw-r--r--test/952-invoke-custom/src-art/TestDataInvokeCustomWithConcurrentThreads.java (renamed from test/952-invoke-custom/src/TestDataInvokeCustomWithConcurrentThreads.java)0
-rw-r--r--test/952-invoke-custom/src-art/TestDataLinkerMethodMinimalArguments.java (renamed from test/952-invoke-custom/src/TestDataLinkerMethodMinimalArguments.java)0
-rw-r--r--test/952-invoke-custom/src-art/TestDataLinkerMethodMultipleArgumentTypes.java (renamed from test/952-invoke-custom/src/TestDataLinkerMethodMultipleArgumentTypes.java)0
-rw-r--r--test/958-methodhandle-stackframe/src-art/Main.java (renamed from test/958-methodhandle-stackframe/src/Main.java)0
-rw-r--r--test/981-dedup-original-dex/src-art/Main.java (renamed from test/981-dedup-original-dex/src/Main.java)0
-rw-r--r--test/981-dedup-original-dex/src-art/art/Redefinition.java (renamed from test/981-dedup-original-dex/src/art/Redefinition.java)0
-rw-r--r--test/981-dedup-original-dex/src-art/art/Test981.java (renamed from test/981-dedup-original-dex/src/art/Test981.java)0
-rw-r--r--test/Android.run-test-jvmti-java-library.mk6
-rwxr-xr-xtest/etc/default-build46
-rw-r--r--test/knownfailures.json14
-rwxr-xr-xtools/javac-helper.sh87
29 files changed, 131 insertions, 22 deletions
diff --git a/test/004-NativeAllocations/src/Main.java b/test/004-NativeAllocations/src-art/Main.java
index 8712755125..8712755125 100644
--- a/test/004-NativeAllocations/src/Main.java
+++ b/test/004-NativeAllocations/src-art/Main.java
diff --git a/test/138-duplicate-classes-check/src/A.java b/test/138-duplicate-classes-check/src-art/A.java
index e1773e5bc6..e1773e5bc6 100644
--- a/test/138-duplicate-classes-check/src/A.java
+++ b/test/138-duplicate-classes-check/src-art/A.java
diff --git a/test/138-duplicate-classes-check/src/Main.java b/test/138-duplicate-classes-check/src-art/Main.java
index b32f0bcc46..b32f0bcc46 100644
--- a/test/138-duplicate-classes-check/src/Main.java
+++ b/test/138-duplicate-classes-check/src-art/Main.java
diff --git a/test/146-bad-interface/src/Main.java b/test/146-bad-interface/src-art/Main.java
index 958ec7c3c4..958ec7c3c4 100644
--- a/test/146-bad-interface/src/Main.java
+++ b/test/146-bad-interface/src-art/Main.java
diff --git a/test/157-void-class/src/Main.java b/test/157-void-class/src-art/Main.java
index 322b705f1d..322b705f1d 100644
--- a/test/157-void-class/src/Main.java
+++ b/test/157-void-class/src-art/Main.java
diff --git a/test/596-monitor-inflation/src/Main.java b/test/596-monitor-inflation/src-art/Main.java
index d97c7667e9..d97c7667e9 100644
--- a/test/596-monitor-inflation/src/Main.java
+++ b/test/596-monitor-inflation/src-art/Main.java
diff --git a/test/612-jit-dex-cache/src/A.java b/test/612-jit-dex-cache/src-art/A.java
index 415c712477..415c712477 100644
--- a/test/612-jit-dex-cache/src/A.java
+++ b/test/612-jit-dex-cache/src-art/A.java
diff --git a/test/612-jit-dex-cache/src/B.java b/test/612-jit-dex-cache/src-art/B.java
index 46c878b572..46c878b572 100644
--- a/test/612-jit-dex-cache/src/B.java
+++ b/test/612-jit-dex-cache/src-art/B.java
diff --git a/test/612-jit-dex-cache/src/Main.java b/test/612-jit-dex-cache/src-art/Main.java
index 89ebe09827..89ebe09827 100644
--- a/test/612-jit-dex-cache/src/Main.java
+++ b/test/612-jit-dex-cache/src-art/Main.java
diff --git a/test/613-inlining-dex-cache/src/B.java b/test/613-inlining-dex-cache/src-art/B.java
index 6e7e55d430..6e7e55d430 100644
--- a/test/613-inlining-dex-cache/src/B.java
+++ b/test/613-inlining-dex-cache/src-art/B.java
diff --git a/test/613-inlining-dex-cache/src/Main.java b/test/613-inlining-dex-cache/src-art/Main.java
index 31ab1d2bfa..31ab1d2bfa 100644
--- a/test/613-inlining-dex-cache/src/Main.java
+++ b/test/613-inlining-dex-cache/src-art/Main.java
diff --git a/test/909-attach-agent/src/Main.java b/test/909-attach-agent/src-art/Main.java
index 25ebd57236..25ebd57236 100644
--- a/test/909-attach-agent/src/Main.java
+++ b/test/909-attach-agent/src-art/Main.java
diff --git a/test/912-classes/src/Main.java b/test/912-classes/src-art/Main.java
index 395cf6fb98..395cf6fb98 100644
--- a/test/912-classes/src/Main.java
+++ b/test/912-classes/src-art/Main.java
diff --git a/test/912-classes/src/art/DexData.java b/test/912-classes/src-art/art/DexData.java
index 7d150322ca..7d150322ca 100644
--- a/test/912-classes/src/art/DexData.java
+++ b/test/912-classes/src-art/art/DexData.java
diff --git a/test/912-classes/src/art/Main.java b/test/912-classes/src-art/art/Main.java
index 8b01920638..8b01920638 100644
--- a/test/912-classes/src/art/Main.java
+++ b/test/912-classes/src-art/art/Main.java
diff --git a/test/912-classes/src/art/Test912.java b/test/912-classes/src-art/art/Test912.java
index 9896eacfeb..9896eacfeb 100644
--- a/test/912-classes/src/art/Test912.java
+++ b/test/912-classes/src-art/art/Test912.java
diff --git a/test/912-classes/src/art/Test912Art.java b/test/912-classes/src-art/art/Test912Art.java
index a1e7ff2005..a1e7ff2005 100644
--- a/test/912-classes/src/art/Test912Art.java
+++ b/test/912-classes/src-art/art/Test912Art.java
diff --git a/test/952-invoke-custom/src/Main.java b/test/952-invoke-custom/src-art/Main.java
index 2abc3122fa..2abc3122fa 100644
--- a/test/952-invoke-custom/src/Main.java
+++ b/test/952-invoke-custom/src-art/Main.java
diff --git a/test/952-invoke-custom/src/TestDataInvokeCustomWithConcurrentThreads.java b/test/952-invoke-custom/src-art/TestDataInvokeCustomWithConcurrentThreads.java
index 076acd71d2..076acd71d2 100644
--- a/test/952-invoke-custom/src/TestDataInvokeCustomWithConcurrentThreads.java
+++ b/test/952-invoke-custom/src-art/TestDataInvokeCustomWithConcurrentThreads.java
diff --git a/test/952-invoke-custom/src/TestDataLinkerMethodMinimalArguments.java b/test/952-invoke-custom/src-art/TestDataLinkerMethodMinimalArguments.java
index 443a7af187..443a7af187 100644
--- a/test/952-invoke-custom/src/TestDataLinkerMethodMinimalArguments.java
+++ b/test/952-invoke-custom/src-art/TestDataLinkerMethodMinimalArguments.java
diff --git a/test/952-invoke-custom/src/TestDataLinkerMethodMultipleArgumentTypes.java b/test/952-invoke-custom/src-art/TestDataLinkerMethodMultipleArgumentTypes.java
index b96e18486f..b96e18486f 100644
--- a/test/952-invoke-custom/src/TestDataLinkerMethodMultipleArgumentTypes.java
+++ b/test/952-invoke-custom/src-art/TestDataLinkerMethodMultipleArgumentTypes.java
diff --git a/test/958-methodhandle-stackframe/src/Main.java b/test/958-methodhandle-stackframe/src-art/Main.java
index f739d47d08..f739d47d08 100644
--- a/test/958-methodhandle-stackframe/src/Main.java
+++ b/test/958-methodhandle-stackframe/src-art/Main.java
diff --git a/test/981-dedup-original-dex/src/Main.java b/test/981-dedup-original-dex/src-art/Main.java
index f90c15ce8a..f90c15ce8a 100644
--- a/test/981-dedup-original-dex/src/Main.java
+++ b/test/981-dedup-original-dex/src-art/Main.java
diff --git a/test/981-dedup-original-dex/src/art/Redefinition.java b/test/981-dedup-original-dex/src-art/art/Redefinition.java
index 56d2938a01..56d2938a01 100644
--- a/test/981-dedup-original-dex/src/art/Redefinition.java
+++ b/test/981-dedup-original-dex/src-art/art/Redefinition.java
diff --git a/test/981-dedup-original-dex/src/art/Test981.java b/test/981-dedup-original-dex/src-art/art/Test981.java
index 3a97268ef9..3a97268ef9 100644
--- a/test/981-dedup-original-dex/src/art/Test981.java
+++ b/test/981-dedup-original-dex/src-art/art/Test981.java
diff --git a/test/Android.run-test-jvmti-java-library.mk b/test/Android.run-test-jvmti-java-library.mk
index da28b4c4bd..55553226b3 100644
--- a/test/Android.run-test-jvmti-java-library.mk
+++ b/test/Android.run-test-jvmti-java-library.mk
@@ -45,8 +45,8 @@ LOCAL_SRC_FILES += \
911-get-stack-trace/src/art/Recurse.java \
911-get-stack-trace/src/art/SameThread.java \
911-get-stack-trace/src/art/ThreadListTraces.java \
- 912-classes/src/art/Test912.java \
- 912-classes/src/art/DexData.java \
+ 912-classes/src-art/art/Test912.java \
+ 912-classes/src-art/art/DexData.java \
913-heaps/src/art/Test913.java \
914-hello-obsolescence/src/art/Test914.java \
915-obsolete-2/src/art/Test915.java \
@@ -71,7 +71,7 @@ LOCAL_SRC_FILES += \
945-obsolete-native/src/art/Test945.java \
947-reflect-method/src/art/Test947.java \
951-threaded-obsolete/src/art/Test951.java \
- 981-dedup-original-dex/src/art/Test981.java \
+ 981-dedup-original-dex/src-art/art/Test981.java \
982-ok-no-retransform/src/art/Test982.java \
984-obsolete-invoke/src/art/Test984.java \
985-re-obsolete/src/art/Test985.java \
diff --git a/test/etc/default-build b/test/etc/default-build
index a88ef924a6..977b07189b 100755
--- a/test/etc/default-build
+++ b/test/etc/default-build
@@ -30,6 +30,13 @@ else
HAS_SRC=false
fi
+# .java files in src-art get compiled with libcore on the bootclasspath
+if [ -d src-art ]; then
+ HAS_SRC_ART=true
+else
+ HAS_SRC_ART=false
+fi
+
if [ -d src2 ]; then
HAS_SRC2=true
else
@@ -225,6 +232,20 @@ function desugar() {
"$DESUGAR" --core-only $desugar_args "$@"
}
+# Like regular javac but includes libcore on the bootclasspath.
+function javac_with_bootclasspath {
+ local javac_args=--mode=host
+ if [[ $BUILD_MODE == target ]]; then
+ javac_args=--mode=target
+ fi
+
+ if [[ $DEV_MODE == yes ]]; then
+ javac_args="$javac_args --show-commands"
+ fi
+
+ "$ANDROID_BUILD_TOP/art/tools/javac-helper.sh" --core-only $javac_args "$@"
+}
+
# Make a "dex" file given a directory of classes in $1.
# Also calls desugar on the classes first to convert lambdas.
function make_dex() {
@@ -247,12 +268,20 @@ function make_dex() {
${DX} -JXmx256m ${DX_VM_FLAGS} --debug --dex --dump-to=${name}.lst --output=${name}.dex --dump-width=1000 ${DX_FLAGS} "${dx_input}"
}
+# Print the directory name only if it exists.
+function maybe_dir() {
+ local dirname="$1"
+ if [[ -d "$dirname" ]]; then
+ echo "$dirname"
+ fi
+}
+
if [ -e classes.dex ]; then
zip $TEST_NAME.jar classes.dex
exit 0
fi
-if ! [ "${HAS_SRC}" = "true" ] && ! [ "${HAS_SRC2}" = "true" ]; then
+if ! [ "${HAS_SRC}" = "true" ] && ! [ "${HAS_SRC2}" = "true" ] && ! [ "${HAS_SRC_ART}" = "true" ]; then
# No src directory? Then forget about trying to run dx.
SKIP_DX_MERGER="true"
fi
@@ -280,16 +309,16 @@ if [ ${HAS_SRC_DEX2OAT_UNRESOLVED} = "true" ]; then
else
if [ ${USE_JACK} = "true" ]; then
# Jack toolchain
- if [ "${HAS_SRC}" = "true" ]; then
+ if [[ "$HAS_SRC" == true || "$HAS_SRC_ART" == true ]]; then
if [ "${HAS_SRC_MULTIDEX}" = "true" ]; then
# Compile src and src-multidex in the same .jack file. We will apply multidex partitioning
# when creating the output .dex file.
- ${JACK} ${JACK_ARGS} --output-jack src.jack src src src-multidex
+ ${JACK} ${JACK_ARGS} --output-jack src.jack $(maybe_dir src) src-multidex $(maybe_dir src-art)
jack_extra_args="${jack_extra_args} -D jack.dex.output.policy=minimal-multidex"
jack_extra_args="${jack_extra_args} -D jack.preprocessor=true"
jack_extra_args="${jack_extra_args} -D jack.preprocessor.file=multidex.jpp"
else
- ${JACK} ${JACK_ARGS} --output-jack src.jack src
+ ${JACK} ${JACK_ARGS} --output-jack src.jack $(maybe_dir src) $(maybe_dir src-art)
fi
jack_extra_args="${jack_extra_args} --import src.jack"
fi
@@ -303,7 +332,7 @@ else
fi
# Compile jack files into a DEX file.
- if [ "${HAS_SRC}" = "true" ] || [ "${HAS_SRC2}" = "true" ]; then
+ if [ "${HAS_SRC}" = "true" ] || [ "${HAS_SRC2}" = "true" ] || [ "${HAS_SRC_ART}" ]; then
${JACK} ${JACK_ARGS} ${jack_extra_args} --output-dex .
fi
else
@@ -313,6 +342,11 @@ else
${JAVAC} ${JAVAC_ARGS} -implicit:none -classpath src-multidex -d classes `find src -name '*.java'`
fi
+ if [ "${HAS_SRC_ART}" = "true" ]; then
+ mkdir -p classes
+ javac_with_bootclasspath ${JAVAC_ARGS} -implicit:none -classpath src-multidex -d classes `find src-art -name '*.java'`
+ fi
+
if [ "${HAS_SRC_MULTIDEX}" = "true" ]; then
mkdir classes2
${JAVAC} -implicit:none -classpath src -d classes2 `find src-multidex -name '*.java'`
@@ -326,7 +360,7 @@ else
${JAVAC} ${JAVAC_ARGS} -d classes `find src2 -name '*.java'`
fi
- if [ "${HAS_SRC}" = "true" ] || [ "${HAS_SRC2}" = "true" ]; then
+ if [[ "${HAS_SRC}" == "true" || "${HAS_SRC2}" == "true" || "${HAS_SRC_ART}" == "true" ]]; then
if [ ${NEED_DEX} = "true" -a ${SKIP_DX_MERGER} = "false" ]; then
make_dex classes
fi
diff --git a/test/knownfailures.json b/test/knownfailures.json
index a4b8be9091..3a211bdce5 100644
--- a/test/knownfailures.json
+++ b/test/knownfailures.json
@@ -596,30 +596,18 @@
},
{
"tests": [
- "004-NativeAllocations",
"004-ReferenceMap",
"004-StackWalk",
"089-many-methods",
- "138-duplicate-classes-check",
- "146-bad-interface",
- "157-void-class",
"580-checker-string-fact-intrinsics",
- "596-monitor-inflation",
- "612-jit-dex-cache",
- "613-inlining-dex-cache",
"616-cha-interface-default",
"636-wrong-static-access",
- "909-attach-agent",
"910-methods",
"911-get-stack-trace",
- "912-classes",
"913-heaps",
"948-change-annotations",
- "952-invoke-custom",
"953-invoke-polymorphic-compiler",
- "958-methodhandle-stackframe",
- "960-default-smali",
- "981-dedup-original-dex"
+ "958-methodhandle-stackframe"
],
"description": "The tests above fail with --build-with-javac-dx.",
"env_vars": {"ANDROID_COMPILE_WITH_JACK": "false"},
diff --git a/tools/javac-helper.sh b/tools/javac-helper.sh
new file mode 100755
index 0000000000..2d71d35d75
--- /dev/null
+++ b/tools/javac-helper.sh
@@ -0,0 +1,87 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 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.
+
+#
+# Calls javac with the -bootclasspath values passed in automatically.
+# (This avoids having to manually set a boot class path).
+#
+#
+# Script-specific args:
+# --mode=[host|target]: Select between host or target bootclasspath (default target).
+# --core-only: Use only "core" bootclasspath (e.g. do not include framework).
+# --show-commands: Print the desugar command being executed.
+# --help: Print above list of args.
+#
+# All other args are forwarded to javac
+#
+
+DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+TOP=$DIR/../..
+
+if [[ -z $JAVAC ]]; then
+ JAVAC=javac
+fi
+
+bootjars_args=
+mode=target
+showcommands=n
+while true; do
+ case $1 in
+ --help)
+ echo "Usage: $0 [--mode=host|target] [--core-only] [--show-commands] <javac args>"
+ exit 0
+ ;;
+ --mode=host)
+ bootjars_args="$bootjars_args --host"
+ ;;
+ --mode=target)
+ bootjars_args="$bootjars_args --target"
+ ;;
+ --core-only)
+ bootjars_args="$bootjars_args --core"
+ ;;
+ --show-commands)
+ showcommands=y
+ ;;
+ *)
+ break
+ ;;
+ esac
+ shift
+done
+
+javac_bootclasspath=()
+boot_class_path_list=$($TOP/art/tools/bootjars.sh $bootjars_args --path)
+
+
+for path in $boot_class_path_list; do
+ javac_bootclasspath+=("$path")
+done
+
+if [[ ${#javac_bootclasspath[@]} -eq 0 ]]; then
+ echo "FATAL: Missing bootjars.sh file path list" >&2
+ exit 1
+fi
+
+function join_by { local IFS="$1"; shift; echo "$*"; }
+bcp_arg="$(join_by ":" "${javac_bootclasspath[@]}")"
+javac_args=(-bootclasspath "$bcp_arg")
+
+if [[ $showcommands == y ]]; then
+ echo ${JAVAC} "${javac_args[@]}" "$@"
+fi
+
+${JAVAC} "${javac_args[@]}" "$@"