ART: Use d8 as dexer for tests not using desugar
Preliminary step for removing desugar from ART tests.
Test: art/test.py --host --64 -r
Bug: 110150973
Change-Id: I52a9a38f4877593d25860238c157f66b2d8402dd
diff --git a/test/etc/default-build b/test/etc/default-build
index c8993c6..39f1a25 100755
--- a/test/etc/default-build
+++ b/test/etc/default-build
@@ -119,12 +119,13 @@
# The key for default arguments if no experimental things are enabled.
DEFAULT_EXPERIMENT="no-experiment"
-# Setup experimental flag mappings in a bash associative array.
-declare -A SMALI_EXPERIMENTAL_ARGS
-SMALI_EXPERIMENTAL_ARGS["default-methods"]="--api 24"
-SMALI_EXPERIMENTAL_ARGS["method-handles"]="--api 26"
-SMALI_EXPERIMENTAL_ARGS["var-handles"]="--api 26"
-SMALI_EXPERIMENTAL_ARGS["agents"]="--api 26"
+# Setup experimental API level mappings in a bash associative array.
+declare -A EXPERIMENTAL_API_LEVEL
+EXPERIMENTAL_API_LEVEL["default-methods"]="24"
+EXPERIMENTAL_API_LEVEL["parameter-annotations"]="25"
+EXPERIMENTAL_API_LEVEL["agents"]="26"
+EXPERIMENTAL_API_LEVEL["method-handles"]="26"
+EXPERIMENTAL_API_LEVEL["var-handles"]="28"
declare -A JAVAC_EXPERIMENTAL_ARGS
JAVAC_EXPERIMENTAL_ARGS["default-methods"]="-source 1.8 -target 1.8"
@@ -135,11 +136,6 @@
JAVAC_EXPERIMENTAL_ARGS[${DEFAULT_EXPERIMENT}]="-source 1.8 -target 1.8"
JAVAC_EXPERIMENTAL_ARGS["agents"]="-source 1.8 -target 1.8"
-declare -A DX_EXPERIMENTAL_ARGS
-DX_EXPERIMENTAL_ARGS["method-handles"]="--min-sdk-version=26"
-DX_EXPERIMENTAL_ARGS["parameter-annotations"]="--min-sdk-version=25"
-DX_EXPERIMENTAL_ARGS["var-handles"]="--min-sdk-version=28"
-
while true; do
if [ "x$1" = "x--dx-option" ]; then
shift
@@ -216,14 +212,15 @@
HAS_SRC_ART=false
fi
-# Be sure to get any default arguments if not doing any experiments.
-EXPERIMENTAL="${EXPERIMENTAL} ${DEFAULT_EXPERIMENT}"
-
# Add args from the experimental mappings.
-for experiment in ${EXPERIMENTAL}; do
- SMALI_ARGS="${SMALI_ARGS} ${SMALI_EXPERIMENTAL_ARGS[${experiment}]}"
+for experiment in ${EXPERIMENTAL} ${DEFAULT_EXPERIMENT}; do
JAVAC_ARGS="${JAVAC_ARGS} ${JAVAC_EXPERIMENTAL_ARGS[${experiment}]}"
- DX_FLAGS="${DX_FLAGS} ${DX_EXPERIMENTAL_ARGS[${experiment}]}"
+done
+
+for experiment in ${EXPERIMENTAL}; do
+ SMALI_ARGS="${SMALI_ARGS} --api ${EXPERIMENTAL_API_LEVEL[${experiment}]}"
+ DX_FLAGS="${DX_FLAGS} --min-sdk-version=${EXPERIMENTAL_API_LEVEL[${experiment}]}"
+ D8_FLAGS="--min-api ${EXPERIMENTAL_API_LEVEL[${experiment}]}"
done
#########################################
@@ -289,25 +286,33 @@
local name="$1"
local dx_input
- if [[ "$USE_DESUGAR" == "true" ]]; then
- # Make a jar first so desugar doesn't need every .class file individually.
- jar cf "$name.before-desugar.jar" -C "$name" .
-
- dx_input="${name}.desugar.jar"
-
- # Make desugared JAR.
- desugar --input "$name.before-desugar.jar" --output "$dx_input"
- else
- dx_input="${name}"
+ if [[ "$USE_DESUGAR" != "true" ]]; then
+ # Use d8 with --no-desugaring for the 3 tests that opt out of desugaring (b/110150973).
+ local d8_inputs=$(find classes -name '*.class' -type f)
+ ${D8} ${D8_FLAGS} --debug --no-desugaring --output ${name}.jar $d8_inputs && \
+ jar -xf ${name}.jar ${name}.dex && \
+ rm ${name}.jar
+ return $?
fi
+ # Make a jar first so desugar doesn't need every .class file individually.
+ jar cf "$name.before-desugar.jar" -C "$name" .
+
+ # Make desugared JAR.
+ dx_input="${name}.desugar.jar"
+ desugar --input "$name.before-desugar.jar" --output "$dx_input"
+
local dexer="${DX}"
if [[ "${USE_D8}" != "false" ]]; then
dexer="${ANDROID_HOST_OUT}/bin/d8-compat-dx"
fi
# Make dex file from desugared JAR.
- ${dexer} -JXmx256m ${DX_VM_FLAGS} --debug --dex --output=${name}.dex ${DX_FLAGS} "${dx_input}"
+ local dexer_flags="${DX_FLAGS} --debug --dex"
+ if [ $DEV_MODE = "yes" ]; then
+ echo ${dexer} -JXmx256m ${DX_VM_FLAGS} $dexer_flags --output=${name}.dex "${dx_input}"
+ fi
+ ${dexer} -JXmx256m ${DX_VM_FLAGS} $dexer_flags --output=${name}.dex "${dx_input}"
}
# Merge all the dex files in $1..$N into $1. Skip non-existing files, but at least 1 file must exist.
@@ -432,8 +437,7 @@
# Compile Jasmin classes as if they were part of the classes.dex file.
make_jasmin jasmin_classes $(find 'jasmin' -name '*.j')
if [[ "${NEED_DEX}" == "true" ]]; then
- # Disable desugar because it won't handle intentional linkage errors.
- USE_DESUGAR=false make_dex jasmin_classes
+ make_dex jasmin_classes
make_dexmerge classes.dex jasmin_classes.dex
else
# Move jasmin classes into classes directory so that they are picked up with -cp classes.
@@ -458,10 +462,7 @@
make_jasmin jasmin_classes2 $(find 'jasmin-multidex' -name '*.j')
if [[ "${NEED_DEX}" == "true" ]]; then
- # Disable desugar because it won't handle intentional linkage errors.
- USE_DESUGAR=false make_dex jasmin_classes2
-
- # Merge jasmin_classes2.dex into classes2.dex
+ make_dex jasmin_classes2
make_dexmerge classes2.dex jasmin_classes2.dex
else
# Move jasmin classes into classes2 directory so that they are picked up with -cp classes2.