diff options
author | 2017-06-19 14:33:06 -0700 | |
---|---|---|
committer | 2017-06-21 08:19:34 -0700 | |
commit | 1c843e9caf5a5e3b73275fc4845d4bdbc8f3a03a (patch) | |
tree | 9d51b8d84acb2387ca5795fb4ebf840c49a35bbc | |
parent | 4db66ab6ea7ba0b7c08bbecd20b8f3df0e7ba648 (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.mk | 6 | ||||
-rwxr-xr-x | test/etc/default-build | 46 | ||||
-rw-r--r-- | test/knownfailures.json | 14 | ||||
-rwxr-xr-x | tools/javac-helper.sh | 87 |
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[@]}" "$@" |