host-run-test-jar revision 0dff3f4d41ce8308d1973f317463941abbf79b81
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#
6# Options:
7#   --quiet       -- don't chatter
8#   --debug       -- wait for debugger to attach
9#   --interpreter -- enable interpreter only mode (off by default)
10#   --no-verify   -- turn off verification (on by default)
11#   --no-optimize -- turn off optimization (on by default)
12
13msg() {
14    if [ "$QUIET" = "n" ]; then
15        echo "$@"
16    fi
17}
18
19DEBUG="n"
20GDB="n"
21INTERPRETER="n"
22VERIFY="y"
23OPTIMIZE="y"
24INVOKE_WITH=""
25DEV_MODE="n"
26QUIET="n"
27OATEXEC="oatexecd"
28
29while true; do
30    if [ "x$1" = "x--quiet" ]; then
31        QUIET="y"
32        shift
33    elif [ "x$1" = "x-O" ]; then
34        OATEXEC="oatexec"
35        shift
36    elif [ "x$1" = "x--debug" ]; then
37        DEBUG="y"
38        shift
39    elif [ "x$1" = "x--gdb" ]; then
40        GDB="y"
41        shift
42    elif [ "x$1" = "x--invoke-with" ]; then
43        shift
44        INVOKE_WITH="$1"
45        shift
46    elif [ "x$1" = "x--dev" ]; then
47        DEV_MODE="y"
48        shift
49    elif [ "x$1" = "x--interpreter" ]; then
50        INTERPRETER="y"
51        shift
52    elif [ "x$1" = "x--no-verify" ]; then
53        VERIFY="n"
54        shift
55    elif [ "x$1" = "x--no-optimize" ]; then
56        OPTIMIZE="n"
57        shift
58    elif [ "x$1" = "x--" ]; then
59        shift
60        break
61    elif expr "x$1" : "x--" >/dev/null 2>&1; then
62        echo "unknown $0 option: $1" 1>&2
63        exit 1
64    else
65        break
66    fi
67done
68
69msg "------------------------------"
70
71mkdir $DEX_LOCATION/art-cache
72[[ $? -ne 0 ]] && exit
73
74export ANDROID_PRINTF_LOG=brief
75if [ "$DEV_MODE" = "y" ]; then
76    export ANDROID_LOG_TAGS='*:d'
77else
78    export ANDROID_LOG_TAGS='*:s'
79fi
80export ANDROID_DATA="$DEX_LOCATION"
81export ANDROID_ROOT="${ANDROID_HOST_OUT}"
82export LD_LIBRARY_PATH="${ANDROID_ROOT}/lib"
83export DYLD_LIBRARY_PATH="${ANDROID_ROOT}/lib"
84unset ANDROID_PRODUCT_OUT # avoid defaulting dex2oat --host-prefix to target output
85
86exe="${ANDROID_ROOT}/bin/${OATEXEC}"
87
88if [ "$DEBUG" = "y" ]; then
89    PORT=8000
90    msg "Waiting for jdb to connect:"
91    msg "    jdb -attach localhost:$PORT"
92    DEBUG_OPTS="-agentlib:jdwp=transport=dt_socket,address=$PORT,server=y,suspend=y"
93fi
94
95if [ "$GDB" = "y" ]; then
96    gdb=gdb
97    gdbargs="--args $exe"
98fi
99
100if [ "$INTERPRETER" = "y" ]; then
101    INT_OPTS="-Xint"
102fi
103
104JNI_OPTS="-Xjnigreflimit:512 -Xcheck:jni"
105
106cd $ANDROID_BUILD_TOP
107$INVOKE_WITH $gdb $exe $gdbargs -Ximage:$ANDROID_ROOT/framework/core.art \
108    $JNI_OPTS $INT_OPTS $DEBUG_OPTS \
109    -cp $DEX_LOCATION/$TEST_NAME.jar Main "$@"
110