host-run-test-jar revision fa42b4410d49134a8e63dc2196be4013d286f2d6
1#!/bin/sh
2#
3# Run the code in test.jar using the host-mode virtual machine. The jar should
4# contain a top-level class named Main to run.
5
6msg() {
7    if [ "$QUIET" = "n" ]; then
8        echo "$@"
9    fi
10}
11
12LIB="libartd.so"
13DEBUGGER="n"
14GDB="n"
15INTERPRETER="n"
16VERIFY="y"
17OPTIMIZE="y"
18INVOKE_WITH=""
19DEV_MODE="n"
20QUIET="n"
21
22while true; do
23    if [ "x$1" = "x--quiet" ]; then
24        QUIET="y"
25        shift
26    elif [ "x$1" = "x-lib" ]; then
27        shift
28        LIB="$1"
29    elif [ "x$1" = "x-O" ]; then
30        LIB="libart.so"
31        shift
32    elif [ "x$1" = "x--debug" ]; then
33        DEBUGGER="y"
34        shift
35    elif [ "x$1" = "x--gdb" ]; then
36        GDB="y"
37        DEV_MODE="y"
38        shift
39    elif [ "x$1" = "x--invoke-with" ]; then
40        shift
41        if [ "x$INVOKE_WITH" = "x" ]; then
42            INVOKE_WITH="$1"
43        else
44            INVOKE_WITH="$INVOKE_WITH $1"
45        fi
46        shift
47    elif [ "x$1" = "x--dev" ]; then
48        DEV_MODE="y"
49        shift
50    elif [ "x$1" = "x--interpreter" ]; then
51        INTERPRETER="y"
52        shift
53    elif [ "x$1" = "x--no-verify" ]; then
54        VERIFY="n"
55        shift
56    elif [ "x$1" = "x--no-optimize" ]; then
57        OPTIMIZE="n"
58        shift
59    elif [ "x$1" = "x--" ]; then
60        shift
61        break
62    elif expr "x$1" : "x--" >/dev/null 2>&1; then
63        echo "unknown $0 option: $1" 1>&2
64        exit 1
65    else
66        break
67    fi
68done
69
70msg "------------------------------"
71
72mkdir $DEX_LOCATION/dalvik-cache
73[[ $? -ne 0 ]] && exit
74
75export ANDROID_PRINTF_LOG=brief
76if [ "$DEV_MODE" = "y" ]; then
77    export ANDROID_LOG_TAGS='*:d'
78else
79    export ANDROID_LOG_TAGS='*:s'
80fi
81export ANDROID_DATA="$DEX_LOCATION"
82export ANDROID_ROOT="${ANDROID_HOST_OUT}"
83export LD_LIBRARY_PATH="${ANDROID_ROOT}/lib"
84export DYLD_LIBRARY_PATH="${ANDROID_ROOT}/lib"
85unset ANDROID_PRODUCT_OUT # avoid defaulting dex2oat --host-prefix to target output
86
87exe="${ANDROID_ROOT}/bin/dalvikvm"
88
89if [ "$DEBUGGER" = "y" ]; then
90    PORT=8000
91    msg "Waiting for jdb to connect:"
92    msg "    jdb -attach localhost:$PORT"
93    DEBUGGER_OPTS="-agentlib:jdwp=transport=dt_socket,address=$PORT,server=y,suspend=y"
94fi
95
96if [ "$GDB" = "y" ]; then
97    gdb=gdb
98    gdbargs="--args $exe"
99    # Enable for Emacs "M-x gdb" support. TODO: allow extra gdb arguments on command line.
100    # gdbargs="--annotate=3 $gdbargs"
101fi
102
103if [ "$INTERPRETER" = "y" ]; then
104    INT_OPTS="-Xint"
105fi
106
107JNI_OPTS="-Xjnigreflimit:512 -Xcheck:jni"
108
109cd $ANDROID_BUILD_TOP
110$INVOKE_WITH $gdb $exe $gdbargs -XXlib:$LIB -Ximage:$ANDROID_ROOT/framework/core.art \
111    $JNI_OPTS $INT_OPTS $DEBUGGER_OPTS \
112    -cp $DEX_LOCATION/$TEST_NAME.jar Main "$@"
113