12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- #!/usr/bin/env bash
- # Copyright 2010 The Go Authors. All rights reserved.
- # Use of this source code is governed by a BSD-style
- # license that can be found in the LICENSE file.
- # This is a small script for executing go binaries on the android platform.
- #
- # example:
- # ./a 5.out foo bar baz
- #
- # The script exports the local values of GOARCH, GOTRACEBACK and GOGC
- # to the android environment.
- #
- # Known issues:
- # The script fails unless the last character output by the program is "\n"
- #
- # TODO(kaib): add gdb bridge support
- exp ()
- {
- if [ ${!1} ]; then
- echo "export $1=\"${!1}\"; "
- fi
- }
- # adb does not correctly return the exit value of the executed program. use this
- # wrapper to manually extract the exit value
- rloc=/data/local/tmp/retval
- rsize=$(adb shell "ls -l $rloc"|tr -s ' '|cut -d' ' -f4)
- rcheck=38
- if [ "$rsize" != "$rcheck" ]; then
- # echo "debug: retval size incorrect want $rcheck, got $rsize. uploading"
- echo >/tmp/adb.retval '#!/system/bin/sh
- "$@"
- echo RETVAL: $?'
- adb push /tmp/adb.retval $rloc >/dev/null 2>&1
- adb shell chmod 755 $rloc
- fi
- # run the main binary
- if [ "-g" == "$1" ]; then
- adb forward tcp:$2 tcp:$2
- args=$(echo $*| cut -d' ' -f4-)
- adb push $3 /data/local/tmp/$3 >/dev/null 2>&1
- adb shell "$(exp GOARCH) $(exp GOTRACEBACK) $(exp GOGC) \
- gdbserver :$2 /data/local/tmp/retval /data/local/tmp/$3 $args" \
- 2>&1|tr -d '\r' |tee /tmp/adb.out|grep -v RETVAL
- else
- if [ "$*" != "$1" ]; then
- args=$(echo $*| cut -d' ' -f2-)
- fi
- adb push $1 /data/local/tmp/$1 >/dev/null 2>&1
- adb shell "$(exp GOARCH) $(exp GOTRACEBACK) $(exp GOGC) \
- /data/local/tmp/retval /data/local/tmp/$1 $args" \
- 2>&1|tr -d '\r' |tee /tmp/adb.out|grep -v RETVAL
- fi
- exit $(grep RETVAL /tmp/adb.out|tr -d '\n\r'| cut -d' ' -f2)
|