mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
1dac53860c
This should make sure the link is still meaningful if that file drastically changes (which should make it easier to trace where the interesting block of code moved to and how it changes over time). Also, add TODO items for Go 1.15+ and 1.16+ where we can "pie" more builds. Signed-off-by: Tianon Gravi <admwiggin@gmail.com>
99 lines
2.5 KiB
Bash
99 lines
2.5 KiB
Bash
#!/usr/bin/env bash
|
|
set -e
|
|
|
|
# a helper to provide ".exe" when it's appropriate
|
|
binary_extension() {
|
|
if [ "$(go env GOOS)" = 'windows' ]; then
|
|
echo -n '.exe'
|
|
fi
|
|
}
|
|
|
|
BINARY_NAME="$BINARY_SHORT_NAME-$VERSION"
|
|
BINARY_EXTENSION="$(binary_extension)"
|
|
BINARY_FULLNAME="$BINARY_NAME$BINARY_EXTENSION"
|
|
|
|
source "${MAKEDIR}/.go-autogen"
|
|
|
|
hash_files() {
|
|
while [ $# -gt 0 ]; do
|
|
f="$1"
|
|
shift
|
|
dir="$(dirname "$f")"
|
|
base="$(basename "$f")"
|
|
for hashAlgo in md5 sha256; do
|
|
if command -v "${hashAlgo}sum" &> /dev/null; then
|
|
(
|
|
# subshell and cd so that we get output files like:
|
|
# $HASH docker-$VERSION
|
|
# instead of:
|
|
# $HASH /go/src/github.com/.../$VERSION/binary/docker-$VERSION
|
|
cd "$dir"
|
|
"${hashAlgo}sum" "$base" > "$base.$hashAlgo"
|
|
)
|
|
fi
|
|
done
|
|
done
|
|
}
|
|
|
|
(
|
|
export GOGC=${DOCKER_BUILD_GOGC:-1000}
|
|
|
|
if [ "$(go env GOOS)/$(go env GOARCH)" != "$(go env GOHOSTOS)/$(go env GOHOSTARCH)" ]; then
|
|
# must be cross-compiling!
|
|
case "$(go env GOOS)/$(go env GOARCH)" in
|
|
windows/amd64)
|
|
export CC="${CC:-x86_64-w64-mingw32-gcc}"
|
|
export CGO_ENABLED=1
|
|
;;
|
|
linux/arm)
|
|
case "${GOARM}" in
|
|
5 | "")
|
|
export CC="${CC:-arm-linux-gnueabi-gcc}"
|
|
export CGO_ENABLED=1
|
|
;;
|
|
7)
|
|
export CC="${CC:-arm-linux-gnueabihf-gcc}"
|
|
export CGO_ENABLED=1
|
|
;;
|
|
esac
|
|
;;
|
|
linux/arm64)
|
|
export CC="${CC:-aarch64-linux-gnu-gcc}"
|
|
export CGO_ENABLED=1
|
|
;;
|
|
linux/amd64)
|
|
export CC="${CC:-x86_64-linux-gnu-gcc}"
|
|
export CGO_ENABLED=1
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
# -buildmode=pie is not supported on Windows and Linux on mips, riscv64 and ppc64be.
|
|
# https://github.com/golang/go/blob/77aa209b386a184e7f4b44938f2a05a1b5c5a3cf/src/cmd/internal/sys/supported.go#L89-L99
|
|
case "$(go env GOOS)/$(go env GOARCH)" in
|
|
windows/* | linux/mips* | linux/riscv* | linux/ppc64) ;;
|
|
# TODO remove windows in Go 1.15+: https://github.com/golang/go/commit/95f382139043059a2a0780ba577b53893408f7e4
|
|
# TODO remove riscv64 in Go 1.16+: https://github.com/golang/go/commit/8eb846fd37eb7bded8a1cf6932be2c59069863e5
|
|
|
|
*)
|
|
BUILDFLAGS+=("-buildmode=pie")
|
|
;;
|
|
esac
|
|
|
|
echo "Building: $DEST/$BINARY_FULLNAME"
|
|
echo "GOOS=\"${GOOS}\" GOARCH=\"${GOARCH}\" GOARM=\"${GOARM}\""
|
|
go build \
|
|
-o "$DEST/$BINARY_FULLNAME" \
|
|
"${BUILDFLAGS[@]}" \
|
|
-ldflags "
|
|
$LDFLAGS
|
|
$LDFLAGS_STATIC_DOCKER
|
|
$DOCKER_LDFLAGS
|
|
" \
|
|
${GO_PACKAGE}
|
|
)
|
|
|
|
echo "Created binary: $DEST/$BINARY_FULLNAME"
|
|
ln -sf "$BINARY_FULLNAME" "$DEST/$BINARY_SHORT_NAME$BINARY_EXTENSION"
|
|
|
|
hash_files "$DEST/$BINARY_FULLNAME"
|