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.
83 lines
1.6 KiB
83 lines
1.6 KiB
#!/bin/bash |
|
set -e -o pipefail |
|
|
|
# This script wraps the go cross compilers. |
|
# |
|
# It ensures that Go binaries are linked with an external linker |
|
# by default (cross gcc). Appropriate flags are added to build a |
|
# position independent executable (PIE) for ASLR. |
|
# "export GOPIE=0" to temporarily disable this behavior. |
|
|
|
function pie_enabled() |
|
{ |
|
[[ "${GOPIE}" != "0" ]] |
|
} |
|
|
|
function has_ldflags() |
|
{ |
|
# Check if any linker flags are present in argv. |
|
for arg in "$@" |
|
do |
|
case "${arg}" in |
|
-ldflags | -ldflags=*) return 0 ;; |
|
-linkmode | -linkmode=*) return 0 ;; |
|
-buildmode | -buildmode=*) return 0 ;; |
|
-installsuffix | -installsuffix=*) return 0 ;; |
|
-extld | -extld=*) return 0 ;; |
|
-extldflags | -extldflags=*) return 0 ;; |
|
esac |
|
done |
|
return 1 |
|
} |
|
|
|
pie_flags=() |
|
if pie_enabled && ! has_ldflags "$@" |
|
then |
|
case "$1" in |
|
build | install | run | test) |
|
# Add "-buildmode=pie" to "go build|install|run|test" commands. |
|
pie_flags=( |
|
"$1" |
|
"-buildmode=pie" |
|
) |
|
shift |
|
;; |
|
tool) |
|
case "$2" in |
|
asm) |
|
# Handle direct assembler invocations ("go tool asm <args>"). |
|
pie_flags=( |
|
"$1" |
|
"$2" |
|
"-shared" |
|
) |
|
shift 2 |
|
;; |
|
compile) |
|
# Handle direct compiler invocations ("go tool compile <args>"). |
|
pie_flags=( |
|
"$1" |
|
"$2" |
|
"-shared" |
|
"-installsuffix=shared" |
|
) |
|
shift 2 |
|
;; |
|
link) |
|
# Handle direct linker invocations ("go tool link <args>"). |
|
pie_flags=( |
|
"$1" |
|
"$2" |
|
"-installsuffix=shared" |
|
"-buildmode=pie" |
|
"-extld" |
|
"${CC}" |
|
) |
|
shift 2 |
|
;; |
|
esac |
|
;; |
|
esac |
|
fi |
|
|
|
exec go "${pie_flags[@]}" "$@"
|
|
|