You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
1.3 KiB
41 lines
1.3 KiB
#!/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 $*"
|
|
|