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.
42 lines
1.3 KiB
42 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}/goroot/src/${PWD#${goroot}/src/}"
|
|
fi
|
|
|
|
# Set GOROOT, and forward some environment variables to the remote shell.
|
|
vars="GOROOT=${tmpdir}/goroot"
|
|
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} ${GOLOADER} ${tmpdir}/a.out $*"
|