| #!/bin/bash |
| set -e -o pipefail |
| |
| # This wrapper copies an executable to a target device and executes it there. |
| # |
| # Usage: go_target_exec <target> <binary> <args>... |
| # |
| # This script can work with both ChromeOS/Android devices. |
| # |
| # It uses "target_tmpdir" to get the path to the temporary directory on the device. |
| # It uses "target_cp" to copy the binary to the temporary directory on the device. |
| # It uses "target_sh" to execute the binary remotely and get the output/exitcode. |
| |
| target="$1" |
| shift |
| |
| binary="$1" |
| shift |
| |
| # Get path to temporary directory on device and copy the binary over. |
| tmpdir="$(target_tmpdir)" |
| target_cp ${binary} ${target}:${tmpdir}/a.out |
| |
| # If current directory is inside GOROOT, then execute the binary in the |
| # corresponding directory inside GOROOT on the device. |
| targetdir="${tmpdir}" |
| goroot="$(go_${target} env GOROOT)" |
| if [[ "${PWD}" == ${goroot}/src/* ]] |
| then |
| targetdir="${tmpdir}/go/src/${PWD#${goroot}/src/}" |
| fi |
| |
| # Set GOROOT, and forward some environment variables to the remote shell. |
| vars="GOROOT=${tmpdir}/go" |
| vars+="${GOOS:+ GOOS=${GOOS}}" |
| vars+="${GOARCH:+ GOARCH=${GOARCH}}" |
| vars+="${GOMAXPROCS:+ GOMAXPROCS=${GOMAXPROCS}}" |
| vars+="${GOTRACEBACK:+ GOTRACEBACK=${GOTRACEBACK}}" |
| |
| # Remotely execute the binary using ssh (for ChromeOS) or adb (for Android). |
| target_sh ${target} "cd ${targetdir} && ${vars} ${tmpdir}/a.out $*" |