#!/bin/sh # # Run the code in test.jar on a host-local virtual machine. The jar should # contain a top-level class named Main to run. # # Options: # --quiet -- don't chatter # --fast -- use the fast interpreter (the default) # --jit -- use the jit # --portable -- use the portable interpreter # --debug -- wait for debugger to attach # --valgrind -- use valgrind # --no-verify -- turn off verification (on by default) # --no-optimize -- turn off optimization (on by default) msg() { if [ "$QUIET" = "n" ]; then echo "$@" fi } INTERP="" DEBUG="n" GDB="n" VERIFY="y" OPTIMIZE="y" VALGRIND="n" DEV_MODE="n" QUIET="n" PRECISE="y" while true; do if [ "x$1" = "x--quiet" ]; then QUIET="y" shift elif [ "x$1" = "x--jit" ]; then INTERP="jit" msg "Using jit" shift elif [ "x$1" = "x--fast" ]; then INTERP="fast" msg "Using fast interpreter" shift elif [ "x$1" = "x--portable" ]; then INTERP="portable" msg "Using portable interpreter" shift elif [ "x$1" = "x--debug" ]; then DEBUG="y" shift elif [ "x$1" = "x--gdb" ]; then GDB="y" shift elif [ "x$1" = "x--valgrind" ]; then VALGRIND="y" shift elif [ "x$1" = "x--dev" ]; then DEV_MODE="y" shift elif [ "x$1" = "x--no-verify" ]; then VERIFY="n" shift elif [ "x$1" = "x--no-optimize" ]; then OPTIMIZE="n" shift elif [ "x$1" = "x--no-precise" ]; then PRECISE="n" shift elif [ "x$1" = "x--" ]; then shift break elif expr "x$1" : "x--" >/dev/null 2>&1; then echo "unknown option: $1" 1>&2 exit 1 else break fi done if [ "x$INTERP" = "x" ]; then INTERP="fast" msg "Using fast interpreter by default" fi if [ "$OPTIMIZE" = "y" ]; then if [ "$VERIFY" = "y" ]; then DEX_OPTIMIZE="-Xdexopt:verified" else DEX_OPTIMIZE="-Xdexopt:all" fi msg "Performing optimizations" else DEX_OPTIMIZE="-Xdexopt:none" msg "Skipping optimizations" fi if [ "$VERIFY" = "y" ]; then DEX_VERIFY="" msg "Performing verification" else DEX_VERIFY="-Xverify:none" msg "Skipping verification" fi if [ "$VALGRIND" = "y" ]; then msg "Running with valgrind" valgrind_cmd="valgrind" #valgrind_cmd="valgrind --leak-check=full" else valgrind_cmd="" fi if [ "$PRECISE" = "y" ]; then GC_OPTS="-Xgc:precise -Xgenregmap" else GC_OPTS="-Xgc:noprecise" fi msg "------------------------------" BASE="$OUT" # from build environment DATA_DIR=/tmp DEBUG_OPTS="-Xcheck:jni -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n" export ANDROID_PRINTF_LOG=brief if [ "$DEV_MODE" = "y" ]; then export ANDROID_LOG_TAGS='*:d' else export ANDROID_LOG_TAGS='*:s' fi export ANDROID_DATA="$DATA_DIR" export ANDROID_ROOT="${BASE}/system" export LD_LIBRARY_PATH="${BASE}/system/lib" export DYLD_LIBRARY_PATH="${BASE}/system/lib" exe="${BASE}/system/bin/dalvikvm" framework="${BASE}/system/framework" bpath="${framework}/core.jar:${framework}/ext.jar:${framework}/framework.jar" if [ "$DEBUG" = "y" ]; then PORT=8000 msg "Waiting for debugger to connect on localhost:$PORT" DEX_DEBUG="-agentlib:jdwp=transport=dt_socket,addres=$PORT,server=y,suspend=y" fi if [ "$GDB" = "y" ]; then gdb=gdb gdbargs="--args $exe" fi $valgrind_cmd $gdb $exe $gdbargs "-Xbootclasspath:${bpath}" \ $DEX_VERIFY $DEX_OPTIMIZE $DEX_DEBUG $GC_OPTS "-Xint:${INTERP}" -ea \ -cp test.jar Main "$@"