blob: 34d9e799c1872511c1b17df98640682a540c0f3a [file] [log] [blame]
#!/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 $*"