From 6a439bc85bbe4076c152ebf86a721d5c827384f8 Mon Sep 17 00:00:00 2001 From: Alex Light Date: Mon, 26 Oct 2015 17:52:36 -0700 Subject: [PATCH] Made run-test 960-964 support being run with jack compiler. They will explicitly check that the jack compiler being used is capable of compiling them before they do however (just to make test-art work better). Change-Id: I6b30c50d4159c2924886886d161479cbe869f4b0 --- test/960-default-smali/build | 23 +++-- test/961-default-iface-resolution-generated/build | 27 ++++-- test/962-iface-static/build | 21 +++-- test/963-default-range-smali/build | 21 +++-- test/964-default-iface-init-generated/build | 21 +++-- test/etc/default-build | 107 +++++++++++++++++----- test/run-test | 4 +- 7 files changed, 167 insertions(+), 57 deletions(-) diff --git a/test/960-default-smali/build b/test/960-default-smali/build index 06692f93b..3946de378 100755 --- a/test/960-default-smali/build +++ b/test/960-default-smali/build @@ -20,14 +20,23 @@ set -e # Generate the smali Main.smali file or fail ${ANDROID_BUILD_TOP}/art/test/utils/python/generate_smali_main.py ./smali -if [[ $@ == *"--jvm"* ]]; then - # Build the Java files if we are running a --jvm test +USES_JAVA="false" +if [[ $ARGS == *"--jvm"* ]]; then + USES_JAVA="true" +elif [[ "$USE_JACK" == "true" ]]; then + if $JACK -D jack.java.source.version=1.8 >& /dev/null; then + USES_JAVA="true" + else + echo "WARNING: Cannot use jack because it does not support JLS 1.8. Falling back to smali" >&2 + fi +fi + +if [[ "$USES_JAVA" == "true" ]]; then + # We are compiling java code, create it. mkdir -p src - mkdir -p classes ${ANDROID_BUILD_TOP}/art/tools/extract-embedded-java ./smali ./src - ${JAVAC} -implicit:none -d classes $(find src -name '*.java') + # Ignore the smali directory. + EXTRA_ARGS="--no-smali" fi -# Build the smali files and make a dex -${SMALI} -JXmx256m ${SMALI_ARGS} --output classes.dex $(find smali -name '*.smali') -zip "$TEST_NAME.jar" classes.dex +./default-build "$@" "$EXTRA_ARGS" --experimental default-methods diff --git a/test/961-default-iface-resolution-generated/build b/test/961-default-iface-resolution-generated/build index 5eb851fa6..03cc62459 100755 --- a/test/961-default-iface-resolution-generated/build +++ b/test/961-default-iface-resolution-generated/build @@ -17,8 +17,6 @@ # make us exit on a failure set -e -mkdir -p ./smali - # We will be making more files than the ulimit is set to allow. Remove it temporarily. OLD_ULIMIT=`ulimit -S` ulimit -S unlimited @@ -28,20 +26,31 @@ restore_ulimit() { } trap 'restore_ulimit' ERR +mkdir -p ./smali + # Generate the smali files and expected.txt or fail ./util-src/generate_smali.py ./smali ./expected.txt -if [[ $@ == *"--jvm"* ]]; then - # Build the Java files if we are running a --jvm test +USES_JAVA="false" +if [[ $ARGS == *"--jvm"* ]]; then + USES_JAVA="true" +elif [[ $USE_JACK == "true" ]]; then + if "$JACK" -D jack.java.source.version=1.8 >& /dev/null; then + USES_JAVA="true" + else + echo "WARNING: Cannot use jack because it does not support JLS 1.8. Falling back to smali" >&2 + fi +fi + +if [[ "$USES_JAVA" == "true" ]]; then + # We are compiling java code, create it. mkdir -p src - mkdir -p classes ${ANDROID_BUILD_TOP}/art/tools/extract-embedded-java ./smali ./src - ${JAVAC} -implicit:none -d classes $(find src -name '*.java') + # Ignore the smali directory. + EXTRA_ARGS="--no-smali" fi -# Build the smali files and make a dex -${SMALI} -JXmx512m ${SMALI_ARGS} --output classes.dex $(find smali -name '*.smali') -zip $TEST_NAME.jar classes.dex +./default-build "$@" "$EXTRA_ARGS" --experimental default-methods # Reset the ulimit back to its initial value restore_ulimit diff --git a/test/962-iface-static/build b/test/962-iface-static/build index 06bb3bdfb..24e2feb22 100755 --- a/test/962-iface-static/build +++ b/test/962-iface-static/build @@ -17,14 +17,23 @@ # make us exit on a failure set -e +USES_JAVA="false" if [[ $@ == *"--jvm"* ]]; then - # Build the Java files if we are running a --jvm test + USES_JAVA="true" +elif [[ "$USE_JACK" == "true" ]]; then + if $JACK -D jack.java.source.version=1.8 2>/dev/null; then + USES_JAVA="true" + else + echo "WARNING: Cannot use jack because it does not support JLS 1.8. Falling back to smali" >&2 + fi +fi + +if [[ "$USES_JAVA" == "true" ]]; then + # We are compiling java code, create it. mkdir -p src - mkdir -p classes ${ANDROID_BUILD_TOP}/art/tools/extract-embedded-java ./smali ./src - ${JAVAC} -implicit:none -d classes $(find src -name '*.java') + # Ignore the smali directory. + EXTRA_ARGS="--no-smali" fi -# Build the smali files and make a dex -${SMALI} -JXmx512m ${SMALI_ARGS} --output classes.dex $(find smali -name '*.smali') -zip $TEST_NAME.jar classes.dex +./default-build "$@" "$EXTRA_ARGS" --experimental default-methods diff --git a/test/963-default-range-smali/build b/test/963-default-range-smali/build index 06bb3bdfb..24e2feb22 100755 --- a/test/963-default-range-smali/build +++ b/test/963-default-range-smali/build @@ -17,14 +17,23 @@ # make us exit on a failure set -e +USES_JAVA="false" if [[ $@ == *"--jvm"* ]]; then - # Build the Java files if we are running a --jvm test + USES_JAVA="true" +elif [[ "$USE_JACK" == "true" ]]; then + if $JACK -D jack.java.source.version=1.8 2>/dev/null; then + USES_JAVA="true" + else + echo "WARNING: Cannot use jack because it does not support JLS 1.8. Falling back to smali" >&2 + fi +fi + +if [[ "$USES_JAVA" == "true" ]]; then + # We are compiling java code, create it. mkdir -p src - mkdir -p classes ${ANDROID_BUILD_TOP}/art/tools/extract-embedded-java ./smali ./src - ${JAVAC} -implicit:none -d classes $(find src -name '*.java') + # Ignore the smali directory. + EXTRA_ARGS="--no-smali" fi -# Build the smali files and make a dex -${SMALI} -JXmx512m ${SMALI_ARGS} --output classes.dex $(find smali -name '*.smali') -zip $TEST_NAME.jar classes.dex +./default-build "$@" "$EXTRA_ARGS" --experimental default-methods diff --git a/test/964-default-iface-init-generated/build b/test/964-default-iface-init-generated/build index b0fbe4bf4..d916f1b8e 100755 --- a/test/964-default-iface-init-generated/build +++ b/test/964-default-iface-init-generated/build @@ -29,17 +29,26 @@ trap 'restore_ulimit' ERR # Generate the smali files and expected.txt or fail ./util-src/generate_smali.py ./smali ./expected.txt +USES_JAVA="false" if [[ $@ == *"--jvm"* ]]; then - # Build the Java files if we are running a --jvm test + USES_JAVA="true" +elif [[ "$USE_JACK" == "true" ]]; then + if $JACK -D jack.java.source.version=1.8 2>/dev/null; then + USES_JAVA="true" + else + echo "WARNING: Cannot use jack because it does not support JLS 1.8. Falling back to smali" >&2 + fi +fi + +if [[ "$USES_JAVA" == "true" ]]; then + # We are compiling java code, create it. mkdir -p src - mkdir -p classes ${ANDROID_BUILD_TOP}/art/tools/extract-embedded-java ./smali ./src - ${JAVAC} -implicit:none -d classes $(find src -name '*.java') + # Ignore the smali directory. + EXTRA_ARGS="--no-smali" fi -# Build the smali files and make a dex -${SMALI} -JXmx512m ${SMALI_ARGS} --output classes.dex $(find smali -name '*.smali') -zip $TEST_NAME.jar classes.dex +./default-build "$@" "$EXTRA_ARGS" --experimental default-methods # Reset the ulimit back to its initial value restore_ulimit diff --git a/test/etc/default-build b/test/etc/default-build index 47432168d..7242428f1 100755 --- a/test/etc/default-build +++ b/test/etc/default-build @@ -17,8 +17,45 @@ # Stop if something fails. set -e +# Set default values for directories. +if [ -d smali ]; then + HAS_SMALI=true +else + HAS_SMALI=false +fi + +if [ -d src ]; then + HAS_SRC=true +else + HAS_SRC=false +fi + +if [ -d src2 ]; then + HAS_SRC2=true +else + HAS_SRC2=false +fi + +if [ -d src-multidex ]; then + HAS_SRC_MULTIDEX=true +else + HAS_SRC_MULTIDEX=false +fi + +if [ -d src-ex ]; then + HAS_SRC_EX=true +else + HAS_SRC_EX=false +fi + DX_FLAGS="" SKIP_DX_MERGER="false" +EXPERIMENTAL="" + +# Setup experimental flag mappings in a bash associative array. +declare -A JACK_EXPERIMENTAL_ARGS +JACK_EXPERIMENTAL_ARGS["default-methods"]="-D jack.java.source.version=1.8" +JACK_EXPERIMENTAL_ARGS["lambdas"]="-D jack.java.source.version=1.8" while true; do if [ "x$1" = "x--dx-option" ]; then @@ -28,6 +65,25 @@ while true; do shift elif [ "x$1" = "x--jvm" ]; then shift + elif [ "x$1" = "x--no-src" ]; then + HAS_SRC=false + shift + elif [ "x$1" = "x--no-src2" ]; then + HAS_SRC2=false + shift + elif [ "x$1" = "x--no-src-multidex" ]; then + HAS_SRC_MULTIDEX=false + shift + elif [ "x$1" = "x--no-src-ex" ]; then + HAS_SRC_EX=false + shift + elif [ "x$1" = "x--no-smali" ]; then + HAS_SMALI=false + shift + elif [ "x$1" = "x--experimental" ]; then + shift + EXPERIMENTAL="${EXPERIMENTAL} $1" + shift elif expr "x$1" : "x--" >/dev/null 2>&1; then echo "unknown $0 option: $1" 1>&2 exit 1 @@ -36,17 +92,22 @@ while true; do fi done +# Add args from the experimental mappings. +for experiment in ${EXPERIMENTAL}; do + JACK_ARGS="${JACK_ARGS} ${JACK_EXPERIMENTAL_ARGS[${experiment}]}" +done + if [ -e classes.dex ]; then zip $TEST_NAME.jar classes.dex exit 0 fi -if ! [ -d src ] && ! [ -d src2 ]; then +if ! [ "${HAS_SRC}" = "true" ] && ! [ "${HAS_SRC2}" = "true" ]; then # No src directory? Then forget about trying to run dx. SKIP_DX_MERGER="true" fi -if [ -d src-multidex ]; then +if [ "${HAS_SRC_MULTIDEX}" = "true" ]; then # Jack does not support this configuration unless we specify how to partition the DEX file # with a .jpp file. USE_JACK="false" @@ -54,27 +115,29 @@ fi if [ ${USE_JACK} = "true" ]; then # Jack toolchain - if [ -d src ]; then - ${JACK} --output-jack src.jack src + if [ "${HAS_SRC}" = "true" ]; then + ${JACK} ${JACK_ARGS} --output-jack src.jack src imported_jack_files="--import src.jack" fi - if [ -d src2 ]; then - ${JACK} --output-jack src2.jack src2 + if [ "${HAS_SRC2}" = "true" ]; then + ${JACK} ${JACK_ARGS} --output-jack src2.jack src2 imported_jack_files="--import src2.jack ${imported_jack_files}" fi # Compile jack files into a DEX file. We set jack.import.type.policy=keep-first to consider # class definitions from src2 first. - ${JACK} ${imported_jack_files} -D jack.import.type.policy=keep-first --output-dex . + if [ "${HAS_SRC}" = "true" ] || [ "${HAS_SRC2}" = "true" ]; then + ${JACK} ${JACK_ARGS} ${imported_jack_files} -D jack.import.type.policy=keep-first --output-dex . + fi else # Legacy toolchain with javac+dx - if [ -d src ]; then + if [ "${HAS_SRC}" = "true" ]; then mkdir classes - ${JAVAC} -implicit:none -classpath src-multidex -d classes `find src -name '*.java'` + ${JAVAC} ${JAVAC_ARGS} -implicit:none -classpath src-multidex -d classes `find src -name '*.java'` fi - if [ -d src-multidex ]; then + if [ "${HAS_SRC_MULTIDEX}" = "true" ]; then mkdir classes2 ${JAVAC} -implicit:none -classpath src -d classes2 `find src-multidex -name '*.java'` if [ ${NEED_DEX} = "true" ]; then @@ -83,20 +146,22 @@ else fi fi - if [ -d src2 ]; then + if [ "${HAS_SRC2}" = "true" ]; then mkdir -p classes - ${JAVAC} -d classes `find src2 -name '*.java'` + ${JAVAC} ${JAVAC_ARGS} -d classes `find src2 -name '*.java'` fi - if [ ${NEED_DEX} = "true" -a ${SKIP_DX_MERGER} = "false" ]; then - ${DX} -JXmx256m --debug --dex --dump-to=classes.lst --output=classes.dex \ - --dump-width=1000 ${DX_FLAGS} classes + if [ "${HAS_SRC}" = "true" ] || [ "${HAS_SRC2}" = "true" ]; then + if [ ${NEED_DEX} = "true" -a ${SKIP_DX_MERGER} = "false" ]; then + ${DX} -JXmx256m --debug --dex --dump-to=classes.lst --output=classes.dex \ + --dump-width=1000 ${DX_FLAGS} classes + fi fi fi -if [ -d smali ]; then +if [ "${HAS_SMALI}" = "true" ]; then # Compile Smali classes - ${SMALI} -JXmx256m ${SMALI_ARGS} --output smali_classes.dex `find smali -name '*.smali'` + ${SMALI} -JXmx512m ${SMALI_ARGS} --output smali_classes.dex `find smali -name '*.smali'` # Don't bother with dexmerger if we provide our own main function in a smali file. if [ ${SKIP_DX_MERGER} = "false" ]; then @@ -106,18 +171,18 @@ if [ -d smali ]; then fi fi -if [ -d src-ex ]; then +if [ ${HAS_SRC_EX} = "true" ]; then if [ ${USE_JACK} = "true" ]; then # Rename previous "classes.dex" so it is not overwritten. mv classes.dex classes-1.dex #TODO find another way to append src.jack to the jack classpath - ${JACK}:src.jack --output-dex . src-ex + ${JACK}:src.jack ${JACK_ARGS} --output-dex . src-ex zip $TEST_NAME-ex.jar classes.dex # Restore previous "classes.dex" so it can be zipped. mv classes-1.dex classes.dex else mkdir classes-ex - ${JAVAC} -d classes-ex -cp classes `find src-ex -name '*.java'` + ${JAVAC} ${JAVAC_ARGS} -d classes-ex -cp classes `find src-ex -name '*.java'` if [ ${NEED_DEX} = "true" ]; then ${DX} -JXmx256m --debug --dex --dump-to=classes-ex.lst --output=classes-ex.dex \ --dump-width=1000 ${DX_FLAGS} classes-ex @@ -133,7 +198,7 @@ if [ -d src-ex ]; then fi # Create a single jar with two dex files for multidex. -if [ -d src-multidex ]; then +if [ ${HAS_SRC_MULTIDEX} = "true" ]; then zip $TEST_NAME.jar classes.dex classes2.dex elif [ ${NEED_DEX} = "true" ]; then zip $TEST_NAME.jar classes.dex diff --git a/test/run-test b/test/run-test index 5a43fb05c..30c8f5b41 100755 --- a/test/run-test +++ b/test/run-test @@ -85,7 +85,7 @@ fi # If JACK_CLASSPATH is not set, assume it only contains core-libart. if [ -z "$JACK_CLASSPATH" ]; then - export JACK_CLASSPATH="$ANDROID_BUILD_TOP/out/host/common/obj/JAVA_LIBRARIES/core-libart-hostdex_intermediates/classes.jack" + export JACK_CLASSPATH="${OUT_DIR:-$ANDROID_BUILD_TOP/out}/host/common/obj/JAVA_LIBRARIES/core-libart-hostdex_intermediates/classes.jack" fi # If JILL_JAR is not set, assume it is located in the prebuilts directory. @@ -440,7 +440,7 @@ elif [ "$runtime" = "art" ]; then if [ "$target_mode" = "no" ]; then # ANDROID_HOST_OUT is not set in a build environment. if [ -z "$ANDROID_HOST_OUT" ]; then - export ANDROID_HOST_OUT=$ANDROID_BUILD_TOP/out/host/linux-x86 + export ANDROID_HOST_OUT=${OUT_DIR:-$ANDROID_BUILD_TOP/out/}host/linux-x86 fi guess_host_arch_name run_args="${run_args} --boot ${ANDROID_HOST_OUT}/framework/core${image_suffix}${pic_image_suffix}.art" -- 2.11.0