17dc44a1c9a37d528f080eb51739da80696bb1f05buzbee#!/bin/sh
27dc44a1c9a37d528f080eb51739da80696bb1f05buzbee#
37dc44a1c9a37d528f080eb51739da80696bb1f05buzbee# Run the code in test.jar using the host-mode virtual machine. The jar should
47dc44a1c9a37d528f080eb51739da80696bb1f05buzbee# contain a top-level class named Main to run.
57dc44a1c9a37d528f080eb51739da80696bb1f05buzbee#
67dc44a1c9a37d528f080eb51739da80696bb1f05buzbee# Options:
77dc44a1c9a37d528f080eb51739da80696bb1f05buzbee#   --quiet       -- don't chatter
87dc44a1c9a37d528f080eb51739da80696bb1f05buzbee#   --fast        -- use the fast interpreter (the default)
97dc44a1c9a37d528f080eb51739da80696bb1f05buzbee#   --jit         -- use the jit
107dc44a1c9a37d528f080eb51739da80696bb1f05buzbee#   --portable    -- use the portable interpreter
117dc44a1c9a37d528f080eb51739da80696bb1f05buzbee#   --debug       -- wait for debugger to attach
127dc44a1c9a37d528f080eb51739da80696bb1f05buzbee#   --valgrind    -- use valgrind
137dc44a1c9a37d528f080eb51739da80696bb1f05buzbee#   --no-verify   -- turn off verification (on by default)
147dc44a1c9a37d528f080eb51739da80696bb1f05buzbee#   --no-optimize -- turn off optimization (on by default)
157dc44a1c9a37d528f080eb51739da80696bb1f05buzbee
167dc44a1c9a37d528f080eb51739da80696bb1f05buzbeemsg() {
177dc44a1c9a37d528f080eb51739da80696bb1f05buzbee    if [ "$QUIET" = "n" ]; then
187dc44a1c9a37d528f080eb51739da80696bb1f05buzbee        echo "$@"
197dc44a1c9a37d528f080eb51739da80696bb1f05buzbee    fi
207dc44a1c9a37d528f080eb51739da80696bb1f05buzbee}
217dc44a1c9a37d528f080eb51739da80696bb1f05buzbee
227dc44a1c9a37d528f080eb51739da80696bb1f05buzbeeINTERP=""
237dc44a1c9a37d528f080eb51739da80696bb1f05buzbeeDEBUG="n"
247dc44a1c9a37d528f080eb51739da80696bb1f05buzbeeGDB="n"
257dc44a1c9a37d528f080eb51739da80696bb1f05buzbeeVERIFY="y"
267dc44a1c9a37d528f080eb51739da80696bb1f05buzbeeOPTIMIZE="y"
277dc44a1c9a37d528f080eb51739da80696bb1f05buzbeeVALGRIND="n"
287dc44a1c9a37d528f080eb51739da80696bb1f05buzbeeDEV_MODE="n"
297dc44a1c9a37d528f080eb51739da80696bb1f05buzbeeQUIET="n"
307dc44a1c9a37d528f080eb51739da80696bb1f05buzbeePRECISE="y"
317dc44a1c9a37d528f080eb51739da80696bb1f05buzbee
327dc44a1c9a37d528f080eb51739da80696bb1f05buzbeewhile true; do
337dc44a1c9a37d528f080eb51739da80696bb1f05buzbee    if [ "x$1" = "x--quiet" ]; then
347dc44a1c9a37d528f080eb51739da80696bb1f05buzbee        QUIET="y"
357dc44a1c9a37d528f080eb51739da80696bb1f05buzbee        shift
367dc44a1c9a37d528f080eb51739da80696bb1f05buzbee    elif [ "x$1" = "x--jit" ]; then
377dc44a1c9a37d528f080eb51739da80696bb1f05buzbee        INTERP="jit"
387dc44a1c9a37d528f080eb51739da80696bb1f05buzbee        msg "Using jit"
397dc44a1c9a37d528f080eb51739da80696bb1f05buzbee        shift
407dc44a1c9a37d528f080eb51739da80696bb1f05buzbee    elif [ "x$1" = "x--fast" ]; then
417dc44a1c9a37d528f080eb51739da80696bb1f05buzbee        INTERP="fast"
427dc44a1c9a37d528f080eb51739da80696bb1f05buzbee        msg "Using fast interpreter"
437dc44a1c9a37d528f080eb51739da80696bb1f05buzbee        shift
447dc44a1c9a37d528f080eb51739da80696bb1f05buzbee    elif [ "x$1" = "x--portable" ]; then
457dc44a1c9a37d528f080eb51739da80696bb1f05buzbee        INTERP="portable"
467dc44a1c9a37d528f080eb51739da80696bb1f05buzbee        msg "Using portable interpreter"
477dc44a1c9a37d528f080eb51739da80696bb1f05buzbee        shift
487dc44a1c9a37d528f080eb51739da80696bb1f05buzbee    elif [ "x$1" = "x--debug" ]; then
497dc44a1c9a37d528f080eb51739da80696bb1f05buzbee        DEBUG="y"
507dc44a1c9a37d528f080eb51739da80696bb1f05buzbee        shift
517dc44a1c9a37d528f080eb51739da80696bb1f05buzbee    elif [ "x$1" = "x--gdb" ]; then
527dc44a1c9a37d528f080eb51739da80696bb1f05buzbee        GDB="y"
537dc44a1c9a37d528f080eb51739da80696bb1f05buzbee        shift
547dc44a1c9a37d528f080eb51739da80696bb1f05buzbee    elif [ "x$1" = "x--valgrind" ]; then
557dc44a1c9a37d528f080eb51739da80696bb1f05buzbee        VALGRIND="y"
567dc44a1c9a37d528f080eb51739da80696bb1f05buzbee        shift
577dc44a1c9a37d528f080eb51739da80696bb1f05buzbee    elif [ "x$1" = "x--dev" ]; then
587dc44a1c9a37d528f080eb51739da80696bb1f05buzbee        DEV_MODE="y"
597dc44a1c9a37d528f080eb51739da80696bb1f05buzbee        shift
607dc44a1c9a37d528f080eb51739da80696bb1f05buzbee    elif [ "x$1" = "x--no-verify" ]; then
617dc44a1c9a37d528f080eb51739da80696bb1f05buzbee        VERIFY="n"
627dc44a1c9a37d528f080eb51739da80696bb1f05buzbee        shift
637dc44a1c9a37d528f080eb51739da80696bb1f05buzbee    elif [ "x$1" = "x--no-optimize" ]; then
647dc44a1c9a37d528f080eb51739da80696bb1f05buzbee        OPTIMIZE="n"
657dc44a1c9a37d528f080eb51739da80696bb1f05buzbee        shift
667dc44a1c9a37d528f080eb51739da80696bb1f05buzbee    elif [ "x$1" = "x--no-precise" ]; then
677dc44a1c9a37d528f080eb51739da80696bb1f05buzbee        PRECISE="n"
687dc44a1c9a37d528f080eb51739da80696bb1f05buzbee        shift
697dc44a1c9a37d528f080eb51739da80696bb1f05buzbee    elif [ "x$1" = "x--" ]; then
707dc44a1c9a37d528f080eb51739da80696bb1f05buzbee        shift
717dc44a1c9a37d528f080eb51739da80696bb1f05buzbee        break
727dc44a1c9a37d528f080eb51739da80696bb1f05buzbee    elif expr "x$1" : "x--" >/dev/null 2>&1; then
737dc44a1c9a37d528f080eb51739da80696bb1f05buzbee        echo "unknown option: $1" 1>&2
747dc44a1c9a37d528f080eb51739da80696bb1f05buzbee        exit 1
757dc44a1c9a37d528f080eb51739da80696bb1f05buzbee    else
767dc44a1c9a37d528f080eb51739da80696bb1f05buzbee        break
777dc44a1c9a37d528f080eb51739da80696bb1f05buzbee    fi
787dc44a1c9a37d528f080eb51739da80696bb1f05buzbeedone
797dc44a1c9a37d528f080eb51739da80696bb1f05buzbee
807dc44a1c9a37d528f080eb51739da80696bb1f05buzbeeif [ "x$INTERP" = "x" ]; then
810c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen    INTERP="jit"
820c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen    msg "Using jit by default"
837dc44a1c9a37d528f080eb51739da80696bb1f05buzbeefi
847dc44a1c9a37d528f080eb51739da80696bb1f05buzbee
857dc44a1c9a37d528f080eb51739da80696bb1f05buzbeeif [ "$OPTIMIZE" = "y" ]; then
867dc44a1c9a37d528f080eb51739da80696bb1f05buzbee    if [ "$VERIFY" = "y" ]; then
877dc44a1c9a37d528f080eb51739da80696bb1f05buzbee        DEX_OPTIMIZE="-Xdexopt:verified"
887dc44a1c9a37d528f080eb51739da80696bb1f05buzbee    else
897dc44a1c9a37d528f080eb51739da80696bb1f05buzbee        DEX_OPTIMIZE="-Xdexopt:all"
907dc44a1c9a37d528f080eb51739da80696bb1f05buzbee    fi
917dc44a1c9a37d528f080eb51739da80696bb1f05buzbee    msg "Performing optimizations"
927dc44a1c9a37d528f080eb51739da80696bb1f05buzbeeelse
937dc44a1c9a37d528f080eb51739da80696bb1f05buzbee    DEX_OPTIMIZE="-Xdexopt:none"
947dc44a1c9a37d528f080eb51739da80696bb1f05buzbee    msg "Skipping optimizations"
957dc44a1c9a37d528f080eb51739da80696bb1f05buzbeefi
967dc44a1c9a37d528f080eb51739da80696bb1f05buzbee
977dc44a1c9a37d528f080eb51739da80696bb1f05buzbeeif [ "$VERIFY" = "y" ]; then
987dc44a1c9a37d528f080eb51739da80696bb1f05buzbee    DEX_VERIFY=""
997dc44a1c9a37d528f080eb51739da80696bb1f05buzbee    msg "Performing verification"
1007dc44a1c9a37d528f080eb51739da80696bb1f05buzbeeelse
1017dc44a1c9a37d528f080eb51739da80696bb1f05buzbee    DEX_VERIFY="-Xverify:none"
1027dc44a1c9a37d528f080eb51739da80696bb1f05buzbee    msg "Skipping verification"
1037dc44a1c9a37d528f080eb51739da80696bb1f05buzbeefi
1047dc44a1c9a37d528f080eb51739da80696bb1f05buzbee
1057dc44a1c9a37d528f080eb51739da80696bb1f05buzbeeif [ "$VALGRIND" = "y" ]; then
1067dc44a1c9a37d528f080eb51739da80696bb1f05buzbee    msg "Running with valgrind"
1077dc44a1c9a37d528f080eb51739da80696bb1f05buzbee    valgrind_cmd="valgrind"
1087dc44a1c9a37d528f080eb51739da80696bb1f05buzbee    #valgrind_cmd="valgrind --leak-check=full"
1097dc44a1c9a37d528f080eb51739da80696bb1f05buzbeeelse
1107dc44a1c9a37d528f080eb51739da80696bb1f05buzbee    valgrind_cmd=""
1117dc44a1c9a37d528f080eb51739da80696bb1f05buzbeefi
1127dc44a1c9a37d528f080eb51739da80696bb1f05buzbee
1137dc44a1c9a37d528f080eb51739da80696bb1f05buzbeeif [ "$PRECISE" = "y" ]; then
1147dc44a1c9a37d528f080eb51739da80696bb1f05buzbee    GC_OPTS="-Xgc:precise -Xgenregmap"
1157dc44a1c9a37d528f080eb51739da80696bb1f05buzbeeelse
1167dc44a1c9a37d528f080eb51739da80696bb1f05buzbee    GC_OPTS="-Xgc:noprecise"
1177dc44a1c9a37d528f080eb51739da80696bb1f05buzbeefi
1187dc44a1c9a37d528f080eb51739da80696bb1f05buzbee
1197dc44a1c9a37d528f080eb51739da80696bb1f05buzbeemsg "------------------------------"
1207dc44a1c9a37d528f080eb51739da80696bb1f05buzbee
1217dc44a1c9a37d528f080eb51739da80696bb1f05buzbeeHOSTBASE="${ANDROID_BUILD_TOP}/out/host"
1227dc44a1c9a37d528f080eb51739da80696bb1f05buzbeeBASE="$OUT" # from build environment
1237dc44a1c9a37d528f080eb51739da80696bb1f05buzbeeDATA_DIR=/tmp
1247dc44a1c9a37d528f080eb51739da80696bb1f05buzbeeDEBUG_OPTS="-Xcheck:jni -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"
1257dc44a1c9a37d528f080eb51739da80696bb1f05buzbee
126719e14a06a328597b773fe347ca4ffb962716da5Carl Shapiroif [ ! -d $DATA_DIR/dalvik-cache ]; then
127719e14a06a328597b773fe347ca4ffb962716da5Carl Shapiro    mkdir -p $DATA_DIR/dalvik-cache
128719e14a06a328597b773fe347ca4ffb962716da5Carl Shapiro    [[ $? -ne 0 ]] && exit
129719e14a06a328597b773fe347ca4ffb962716da5Carl Shapirofi
130719e14a06a328597b773fe347ca4ffb962716da5Carl Shapiro
1317dc44a1c9a37d528f080eb51739da80696bb1f05buzbeeexport ANDROID_PRINTF_LOG=brief
1327dc44a1c9a37d528f080eb51739da80696bb1f05buzbeeif [ "$DEV_MODE" = "y" ]; then
1337dc44a1c9a37d528f080eb51739da80696bb1f05buzbee    export ANDROID_LOG_TAGS='*:d'
1347dc44a1c9a37d528f080eb51739da80696bb1f05buzbeeelse
1357dc44a1c9a37d528f080eb51739da80696bb1f05buzbee    export ANDROID_LOG_TAGS='*:s'
1367dc44a1c9a37d528f080eb51739da80696bb1f05buzbeefi
1377dc44a1c9a37d528f080eb51739da80696bb1f05buzbeeexport ANDROID_DATA="$DATA_DIR"
1387dc44a1c9a37d528f080eb51739da80696bb1f05buzbeeexport ANDROID_ROOT="${HOSTBASE}/linux-x86"
1397dc44a1c9a37d528f080eb51739da80696bb1f05buzbeeexport LD_LIBRARY_PATH="${ANDROID_ROOT}/lib"
1407dc44a1c9a37d528f080eb51739da80696bb1f05buzbeeexport DYLD_LIBRARY_PATH="${ANDROID_ROOT}/lib"
1417dc44a1c9a37d528f080eb51739da80696bb1f05buzbee
1427dc44a1c9a37d528f080eb51739da80696bb1f05buzbeeexe="${ANDROID_ROOT}/bin/dalvikvm"
1437dc44a1c9a37d528f080eb51739da80696bb1f05buzbeeframework="${BASE}/system/framework"
1445dedc95f562c09c29657ddf340af499af7c65abdElliott Hughesbpath="${framework}/core.jar:${framework}/conscrypt.jar:${framework}/ext.jar:${framework}/framework.jar"
1457dc44a1c9a37d528f080eb51739da80696bb1f05buzbee
1467dc44a1c9a37d528f080eb51739da80696bb1f05buzbeeif [ "$DEBUG" = "y" ]; then
1477dc44a1c9a37d528f080eb51739da80696bb1f05buzbee    PORT=8000
1487dc44a1c9a37d528f080eb51739da80696bb1f05buzbee    msg "Waiting for debugger to connect on localhost:$PORT"
1497dc44a1c9a37d528f080eb51739da80696bb1f05buzbee    DEX_DEBUG="-agentlib:jdwp=transport=dt_socket,addres=$PORT,server=y,suspend=y"
1507dc44a1c9a37d528f080eb51739da80696bb1f05buzbeefi
1517dc44a1c9a37d528f080eb51739da80696bb1f05buzbee
1527dc44a1c9a37d528f080eb51739da80696bb1f05buzbeeif [ "$GDB" = "y" ]; then
1537dc44a1c9a37d528f080eb51739da80696bb1f05buzbee    gdb=gdb
1547dc44a1c9a37d528f080eb51739da80696bb1f05buzbee    gdbargs="--args $exe"
1557dc44a1c9a37d528f080eb51739da80696bb1f05buzbeefi
1567dc44a1c9a37d528f080eb51739da80696bb1f05buzbee
1577dc44a1c9a37d528f080eb51739da80696bb1f05buzbee$valgrind_cmd $gdb $exe $gdbargs "-Xbootclasspath:${bpath}" \
1587dc44a1c9a37d528f080eb51739da80696bb1f05buzbee    $DEX_VERIFY $DEX_OPTIMIZE $DEX_DEBUG $GC_OPTS "-Xint:${INTERP}" -ea \
1597dc44a1c9a37d528f080eb51739da80696bb1f05buzbee    -cp test.jar Main "$@"
160