42 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			42 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
| #!/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 $*"
 |