• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
12DEBUGGER="n"
13PREBUILD="n"
14GDB="n"
15ISA="x86"
16INTERPRETER="n"
17VERIFY="y"
18RELOCATE="y"
19OPTIMIZE="y"
20INVOKE_WITH=""
21DEV_MODE="n"
22QUIET="n"
23FLAGS=""
24COMPILER_FLAGS=""
25BUILD_BOOT_OPT=""
26SECONDARY_DEX=""
27exe="${ANDROID_HOST_OUT}/bin/dalvikvm32"
28main="Main"
29DEX_VERIFY=""
30DEX2OAT_SWAP="n"
31
32while true; do
33    if [ "x$1" = "x--quiet" ]; then
34        QUIET="y"
35        shift
36    elif [ "x$1" = "x--prebuild" ]; then
37        PREBUILD="y"
38        shift
39    elif [ "x$1" = "x--lib" ]; then
40        shift
41        if [ "x$1" = "x" ]; then
42            echo "$0 missing argument to --lib" 1>&2
43            exit 1
44        fi
45        LIB="$1"
46        if [ `uname` = "Darwin" ]; then
47            LIB=${LIB/%so/dylib}
48        fi
49        shift
50    elif [ "x$1" = "x--boot" ]; then
51        shift
52        option="$1"
53        BOOT_OPT="$option"
54        BUILD_BOOT_OPT="--boot-image=${option#-Ximage:}"
55        shift
56    elif [ "x$1" = "x--debug" ]; then
57        DEBUGGER="y"
58        shift
59    elif [ "x$1" = "x--gdb" ]; then
60        GDB="y"
61        DEV_MODE="y"
62        shift
63    elif [ "x$1" = "x--invoke-with" ]; then
64        shift
65        if [ "x$1" = "x" ]; then
66            echo "$0 missing argument to --invoke-with" 1>&2
67            exit 1
68        fi
69        if [ "x$INVOKE_WITH" = "x" ]; then
70            INVOKE_WITH="$1"
71        else
72            INVOKE_WITH="$INVOKE_WITH $1"
73        fi
74        shift
75    elif [ "x$1" = "x--dev" ]; then
76        DEV_MODE="y"
77        shift
78    elif [ "x$1" = "x--interpreter" ]; then
79        INTERPRETER="y"
80        shift
81    elif [ "x$1" = "x--64" ]; then
82        ISA="x86_64"
83        exe="${ANDROID_HOST_OUT}/bin/dalvikvm64"
84        shift
85    elif [ "x$1" = "x--no-verify" ]; then
86        VERIFY="n"
87        shift
88    elif [ "x$1" = "x--no-optimize" ]; then
89        OPTIMIZE="n"
90        shift
91    elif [ "x$1" = "x--no-relocate" ]; then
92        RELOCATE="n"
93        shift
94    elif [ "x$1" = "x--relocate" ]; then
95        RELOCATE="y"
96        shift
97    elif [ "x$1" = "x--secondary" ]; then
98        SECONDARY_DEX=":$DEX_LOCATION/$TEST_NAME-ex.jar"
99        shift
100    elif [ "x$1" = "x-Xcompiler-option" ]; then
101        shift
102        option="$1"
103        FLAGS="${FLAGS} -Xcompiler-option $option"
104        COMPILER_FLAGS="${COMPILER_FLAGS} $option"
105        shift
106    elif [ "x$1" = "x--runtime-option" ]; then
107        shift
108        option="$1"
109        FLAGS="${FLAGS} $option"
110        shift
111    elif [ "x$1" = "x--dex2oat-swap" ]; then
112        DEX2OAT_SWAP="y"
113        shift
114    elif [ "x$1" = "x--" ]; then
115        shift
116        break
117    elif expr "x$1" : "x--" >/dev/null 2>&1; then
118        echo "unknown $0 option: $1" 1>&2
119        exit 1
120    else
121        break
122    fi
123done
124
125if [ "x$1" = "x" ] ; then
126  main="Main"
127else
128  main="$1"
129fi
130
131msg "------------------------------"
132
133export ANDROID_PRINTF_LOG=brief
134if [ "$DEV_MODE" = "y" ]; then
135    export ANDROID_LOG_TAGS='*:d'
136else
137    export ANDROID_LOG_TAGS='*:s'
138fi
139export ANDROID_DATA="$DEX_LOCATION"
140export ANDROID_ROOT="${ANDROID_HOST_OUT}"
141export LD_LIBRARY_PATH="${ANDROID_ROOT}/lib"
142export DYLD_LIBRARY_PATH="${ANDROID_ROOT}/lib"
143
144if [ "$DEX2OAT_SWAP" = "y" ]; then
145  COMPILER_FLAGS="${COMPILER_FLAGS} --swap-file=$ANDROID_DATA/dex2oat.swap"
146fi
147
148if [ "$DEBUGGER" = "y" ]; then
149    PORT=8000
150    msg "Waiting for jdb to connect:"
151    msg "    jdb -attach localhost:$PORT"
152    DEBUGGER_OPTS="-agentlib:jdwp=transport=dt_socket,address=$PORT,server=y,suspend=y"
153fi
154
155if [ "$GDB" = "y" ]; then
156    if [ `uname` = "Darwin" ]; then
157        gdb=lldb
158        gdbargs="-- $exe"
159        exe=
160    else
161        gdb=gdb
162        gdbargs="--args $exe"
163        # Enable for Emacs "M-x gdb" support. TODO: allow extra gdb arguments on command line.
164        # gdbargs="--annotate=3 $gdbargs"
165    fi
166fi
167
168if [ "$INTERPRETER" = "y" ]; then
169    INT_OPTS="-Xint"
170    if [ "$VERIFY" = "y" ] ; then
171      COMPILER_FLAGS="${COMPILER_FLAGS} --compiler-filter=interpret-only"
172    else
173      COMPILER_FLAGS="${COMPILER_FLAGS} --compiler-filter=verify-none"
174      DEX_VERIFY="${DEX_VERIFY} -Xverify:none"
175    fi
176fi
177
178if [ "$RELOCATE" = "y" ]; then
179  FLAGS="${FLAGS} -Xrelocate"
180  COMPILER_FLAGS="${COMPILER_FLAGS} --runtime-arg -Xnorelocate --include-patch-information"
181  # Run test sets a fairly draconian ulimit that we will likely blow right over
182  # since we are relocating. Get the total size of the /system/framework directory
183  # in 512 byte blocks and set it as the ulimit. This should be more than enough
184  # room.
185  if [ ! `uname` = "Darwin" ]; then  # TODO: Darwin doesn't support "du -B..."
186    ulimit -S $(du -c -B512 ${ANDROID_ROOT}/framework | tail -1 | cut -f1) || exit 1
187  fi
188else
189  FLAGS="${FLAGS} -Xnorelocate"
190  COMPILER_FLAGS="${COMPILER_FLAGS} --runtime-arg -Xnorelocate --no-include-patch-information"
191fi
192
193mkdir_cmd="mkdir -p ${DEX_LOCATION}/dalvik-cache/$ISA"
194if [ "$PREBUILD" = "y" ]; then
195  prebuild_cmd="${ANDROID_HOST_OUT}/bin/dex2oatd $COMPILER_FLAGS --instruction-set=$ISA $BUILD_BOOT_OPT --dex-file=$DEX_LOCATION/$TEST_NAME.jar --oat-file=$DEX_LOCATION/dalvik-cache/$ISA/$(echo $DEX_LOCATION/$TEST_NAME.jar/classes.dex | cut -d/ -f 2- | sed "s:/:@:g")"
196else
197  prebuild_cmd="true"
198fi
199
200JNI_OPTS="-Xjnigreflimit:512 -Xcheck:jni"
201cmdline="$INVOKE_WITH $gdb $exe $gdbargs -XXlib:$LIB $DEX_VERIFY $JNI_OPTS $FLAGS $INT_OPTS $DEBUGGER_OPTS $BOOT_OPT -cp $DEX_LOCATION/$TEST_NAME.jar$SECONDARY_DEX $main"
202if [ "$DEV_MODE" = "y" ]; then
203  if [ "$PREBUILD" = "y" ]; then
204    echo "$mkdir_cmd && $prebuild_cmd && $cmdline"
205  elif [ "$RELOCATE" = "y" ]; then
206    echo "$mkdir_cmd && $cmdline"
207  else
208    echo $cmdline
209  fi
210fi
211
212cd $ANDROID_BUILD_TOP
213$mkdir_cmd && $prebuild_cmd && $cmdline "$@"
214