1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#!/bin/sh
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#
3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# Run the code in test.jar on the device. The jar should contain a top-level
4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# class named Main to run.
5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# Options:
7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#   --quiet       -- don't chatter
8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#   --fast        -- use the fast interpreter (the default)
938329f5678fd7a4879528b02a0ab60322d38a897Ben Cheng#   --jit         -- use the jit
10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#   --portable    -- use the portable interpreter
11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#   --debug       -- wait for debugger to attach
1285fb8ea16262c7c2cc1348fa0e86d92fadf3fef9Ben Cheng#   --dev         -- development mode (print the vm invocation cmdline)
13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#   --no-verify   -- turn off verification (on by default)
14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#   --no-optimize -- turn off optimization (on by default)
1509e83b719ff743b715b971b8355715c4ea6838e4Andy McFadden#   --no-precise  -- turn off precise GC (on by default)
16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectmsg() {
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    if [ "$QUIET" = "n" ]; then
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        echo "$@"
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fi
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectINTERP=""
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectDEBUG="n"
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectVERIFY="y"
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectOPTIMIZE="y"
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectQUIET="n"
2849a71d1bc49146fb663e2d26fba56cb6cb6c8505Andy McFaddenPRECISE="y"
2985fb8ea16262c7c2cc1348fa0e86d92fadf3fef9Ben ChengDEV_MODE="n"
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectwhile true; do
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    if [ "x$1" = "x--quiet" ]; then
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        QUIET="y"
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        shift
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    elif [ "x$1" = "x--fast" ]; then
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        INTERP="fast"
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        msg "Using fast interpreter"
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        shift
3938329f5678fd7a4879528b02a0ab60322d38a897Ben Cheng    elif [ "x$1" = "x--jit" ]; then
4038329f5678fd7a4879528b02a0ab60322d38a897Ben Cheng        INTERP="jit"
4138329f5678fd7a4879528b02a0ab60322d38a897Ben Cheng        msg "Using jit"
4238329f5678fd7a4879528b02a0ab60322d38a897Ben Cheng        shift
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    elif [ "x$1" = "x--portable" ]; then
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        INTERP="portable"
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        msg "Using portable interpreter"
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        shift
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    elif [ "x$1" = "x--debug" ]; then
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        DEBUG="y"
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        shift
5009e83b719ff743b715b971b8355715c4ea6838e4Andy McFadden    elif [ "x$1" = "x--dev" ]; then
5185fb8ea16262c7c2cc1348fa0e86d92fadf3fef9Ben Cheng        DEV_MODE="y"
5209e83b719ff743b715b971b8355715c4ea6838e4Andy McFadden        shift
53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    elif [ "x$1" = "x--no-verify" ]; then
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        VERIFY="n"
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        shift
56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    elif [ "x$1" = "x--no-optimize" ]; then
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        OPTIMIZE="n"
58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        shift
5949a71d1bc49146fb663e2d26fba56cb6cb6c8505Andy McFadden    elif [ "x$1" = "x--no-precise" ]; then
6049a71d1bc49146fb663e2d26fba56cb6cb6c8505Andy McFadden        PRECISE="n"
6149a71d1bc49146fb663e2d26fba56cb6cb6c8505Andy McFadden        shift
62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    elif [ "x$1" = "x--" ]; then
63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        shift
64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        break
65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    elif expr "x$1" : "x--" >/dev/null 2>&1; then
66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        echo "unknown option: $1" 1>&2
67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        exit 1
68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    else
69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        break
70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fi
71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectdone
72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
73eb1703442f3fc0577b3395b7eb4d55300b4125dbNick Kralevichif [ "x$INTERP" = "x" ]; then
74eb1703442f3fc0577b3395b7eb4d55300b4125dbNick Kralevich    INTERP="jit"
75eb1703442f3fc0577b3395b7eb4d55300b4125dbNick Kralevich    msg "Using jit by default"
76eb1703442f3fc0577b3395b7eb4d55300b4125dbNick Kralevichfi
77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
78eb1703442f3fc0577b3395b7eb4d55300b4125dbNick Kralevichif [ "$OPTIMIZE" = "y" ]; then
79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    if [ "$VERIFY" = "y" ]; then
80eb1703442f3fc0577b3395b7eb4d55300b4125dbNick Kralevich        DEX_OPTIMIZE="-Xdexopt:verified"
81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    else
82eb1703442f3fc0577b3395b7eb4d55300b4125dbNick Kralevich        DEX_OPTIMIZE="-Xdexopt:all"
83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fi
84eb1703442f3fc0577b3395b7eb4d55300b4125dbNick Kralevich    msg "Performing optimizations"
85eb1703442f3fc0577b3395b7eb4d55300b4125dbNick Kralevichelse
86eb1703442f3fc0577b3395b7eb4d55300b4125dbNick Kralevich    DEX_OPTIMIZE="-Xdexopt:none"
87eb1703442f3fc0577b3395b7eb4d55300b4125dbNick Kralevich    msg "Skipping optimizations"
88eb1703442f3fc0577b3395b7eb4d55300b4125dbNick Kralevichfi
89eb1703442f3fc0577b3395b7eb4d55300b4125dbNick Kralevich
90eb1703442f3fc0577b3395b7eb4d55300b4125dbNick Kralevichif [ "$VERIFY" = "y" ]; then
91eb1703442f3fc0577b3395b7eb4d55300b4125dbNick Kralevich    DEX_VERIFY=""
92eb1703442f3fc0577b3395b7eb4d55300b4125dbNick Kralevich    msg "Performing verification"
93eb1703442f3fc0577b3395b7eb4d55300b4125dbNick Kralevichelse
94eb1703442f3fc0577b3395b7eb4d55300b4125dbNick Kralevich    DEX_VERIFY="-Xverify:none"
95eb1703442f3fc0577b3395b7eb4d55300b4125dbNick Kralevich    msg "Skipping verification"
96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectfi
97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectmsg "------------------------------"
99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectif [ "$QUIET" = "n" ]; then
101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    adb push test.jar /data
102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    adb push test-ex.jar /data
103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectelse
104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    adb push test.jar /data >/dev/null 2>&1
105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    adb push test-ex.jar /data >/dev/null 2>&1
106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectfi
107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectif [ "$DEBUG" = "y" ]; then
109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    DEX_DEBUG="-agentlib:jdwp=transport=dt_android_adb,server=y,suspend=y"
110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectfi
111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
11249a71d1bc49146fb663e2d26fba56cb6cb6c8505Andy McFaddenif [ "$PRECISE" = "y" ]; then
11349a71d1bc49146fb663e2d26fba56cb6cb6c8505Andy McFadden    GC_OPTS="-Xgc:precise -Xgenregmap"
11449a71d1bc49146fb663e2d26fba56cb6cb6c8505Andy McFaddenelse
11549a71d1bc49146fb663e2d26fba56cb6cb6c8505Andy McFadden    GC_OPTS="-Xgc:noprecise"
11649a71d1bc49146fb663e2d26fba56cb6cb6c8505Andy McFaddenfi
11749a71d1bc49146fb663e2d26fba56cb6cb6c8505Andy McFadden
118eb1703442f3fc0577b3395b7eb4d55300b4125dbNick Kralevichcmdline="cd /data; dalvikvm $DEX_VERIFY $DEX_OPTIMIZE $DEX_DEBUG \
119eb1703442f3fc0577b3395b7eb4d55300b4125dbNick Kralevich    $GC_OPTS -cp test.jar -Xint:${INTERP} -ea Main"
120eb1703442f3fc0577b3395b7eb4d55300b4125dbNick Kralevichif [ "$DEV_MODE" = "y" ]; then
121eb1703442f3fc0577b3395b7eb4d55300b4125dbNick Kralevich    echo $cmdline "$@"
122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectfi
123eb1703442f3fc0577b3395b7eb4d55300b4125dbNick Kralevichadb shell $cmdline "$@"
124