#!/bin/sh
#
# Run the code in test.jar using the host-mode virtual machine. The jar should
# contain a top-level class named Main to run.
#
# Options:
#   --quiet       -- don't chatter
#   --debug       -- wait for debugger to attach
#   --no-verify   -- turn off verification (on by default)
#   --no-optimize -- turn off optimization (on by default)

msg() {
    if [ "$QUIET" = "n" ]; then
        echo "$@"
    fi
}

DEBUG="n"
GDB="n"
VERIFY="y"
OPTIMIZE="y"
INVOKE_WITH=""
DEV_MODE="n"
QUIET="n"

while true; do
    if [ "x$1" = "x--quiet" ]; then
        QUIET="y"
        shift
    elif [ "x$1" = "x--debug" ]; then
        DEBUG="y"
        shift
    elif [ "x$1" = "x--gdb" ]; then
        GDB="y"
        shift
    elif [ "x$1" = "x--invoke-with" ]; then
        shift
        INVOKE_WITH="$1"
        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--" ]; then
        shift
        break
    elif expr "x$1" : "x--" >/dev/null 2>&1; then
        echo "unknown $0 option: $1" 1>&2
        exit 1
    else
        break
    fi
done

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

msg "------------------------------"

HOSTBASE="${ANDROID_BUILD_TOP}/out/host"
BASE="$OUT" # from build environment
DATA_DIR=/tmp
DEBUG_OPTS="-Xcheck:jni -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"

if [ ! -d $DATA_DIR/dalvik-cache ]; then
    mkdir -p $DATA_DIR/dalvik-cache
    [[ $? -ne 0 ]] && exit
fi

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="${HOSTBASE}/linux-x86"
export LD_LIBRARY_PATH="${ANDROID_ROOT}/lib"
export DYLD_LIBRARY_PATH="${ANDROID_ROOT}/lib"

exe="${ANDROID_ROOT}/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

$INVOKE_WITH $gdb $exe $gdbargs "-Xbootclasspath:${bpath}" \
    $DEX_VERIFY $DEX_OPTIMIZE $DEX_DEBUG ${DEBUG_OPTS} -ea \
    -cp test.jar Main "$@"
