host-run-test-jar revision 9ca7a1fdd0daa546b790adb6a24dbc13c22df76a
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#   --valgrind    -- use valgrind
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"
21VERIFY="y"
22OPTIMIZE="y"
23VALGRIND="n"
24DEV_MODE="n"
25QUIET="n"
26PRECISE="y"
27
28while true; do
29    if [ "x$1" = "x--quiet" ]; then
30        QUIET="y"
31        shift
32    elif [ "x$1" = "x--debug" ]; then
33        DEBUG="y"
34        shift
35    elif [ "x$1" = "x--gdb" ]; then
36        GDB="y"
37        shift
38    elif [ "x$1" = "x--valgrind" ]; then
39        VALGRIND="y"
40        shift
41    elif [ "x$1" = "x--dev" ]; then
42        DEV_MODE="y"
43        shift
44    elif [ "x$1" = "x--no-verify" ]; then
45        VERIFY="n"
46        shift
47    elif [ "x$1" = "x--no-optimize" ]; then
48        OPTIMIZE="n"
49        shift
50    elif [ "x$1" = "x--no-precise" ]; then
51        PRECISE="n"
52        shift
53    elif [ "x$1" = "x--" ]; then
54        shift
55        break
56    elif expr "x$1" : "x--" >/dev/null 2>&1; then
57        echo "unknown option: $1" 1>&2
58        exit 1
59    else
60        break
61    fi
62done
63
64if [ "$OPTIMIZE" = "y" ]; then
65    if [ "$VERIFY" = "y" ]; then
66        DEX_OPTIMIZE="-Xdexopt:verified"
67    else
68        DEX_OPTIMIZE="-Xdexopt:all"
69    fi
70    msg "Performing optimizations"
71else
72    DEX_OPTIMIZE="-Xdexopt:none"
73    msg "Skipping optimizations"
74fi
75
76if [ "$VERIFY" = "y" ]; then
77    DEX_VERIFY=""
78    msg "Performing verification"
79else
80    DEX_VERIFY="-Xverify:none"
81    msg "Skipping verification"
82fi
83
84if [ "$VALGRIND" = "y" ]; then
85    msg "Running with valgrind"
86    valgrind_cmd="valgrind"
87    #valgrind_cmd="valgrind --leak-check=full"
88else
89    valgrind_cmd=""
90fi
91
92if [ "$PRECISE" = "y" ]; then
93    GC_OPTS="-Xgc:precise -Xgenregmap"
94else
95    GC_OPTS="-Xgc:noprecise"
96fi
97
98msg "------------------------------"
99
100HOSTBASE="${ANDROID_BUILD_TOP}/out/host"
101BASE="$OUT" # from build environment
102DATA_DIR=/tmp
103DEBUG_OPTS="-Xcheck:jni -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"
104
105if [ ! -d $DATA_DIR/dalvik-cache ]; then
106    mkdir -p $DATA_DIR/dalvik-cache
107    [[ $? -ne 0 ]] && exit
108fi
109
110export ANDROID_PRINTF_LOG=brief
111if [ "$DEV_MODE" = "y" ]; then
112    export ANDROID_LOG_TAGS='*:d'
113else
114    export ANDROID_LOG_TAGS='*:s'
115fi
116export ANDROID_DATA="$DATA_DIR"
117export ANDROID_ROOT="${HOSTBASE}/linux-x86"
118export LD_LIBRARY_PATH="${ANDROID_ROOT}/lib"
119export DYLD_LIBRARY_PATH="${ANDROID_ROOT}/lib"
120
121exe="${ANDROID_ROOT}/bin/dalvikvm"
122framework="${BASE}/system/framework"
123bpath="${framework}/core.jar:${framework}/ext.jar:${framework}/framework.jar"
124
125if [ "$DEBUG" = "y" ]; then
126    PORT=8000
127    msg "Waiting for debugger to connect on localhost:$PORT"
128    DEX_DEBUG="-agentlib:jdwp=transport=dt_socket,addres=$PORT,server=y,suspend=y"
129fi
130
131if [ "$GDB" = "y" ]; then
132    gdb=gdb
133    gdbargs="--args $exe"
134fi
135
136$valgrind_cmd $gdb $exe $gdbargs "-Xbootclasspath:${bpath}" \
137    $DEX_VERIFY $DEX_OPTIMIZE $DEX_DEBUG $GC_OPTS -ea \
138    -cp test.jar Main "$@"
139