820f37b1a6
Without these compile flags, Delve is unable to report the value of some variables and it's not possible to jump into inlined code. As the contributing docs already mention that `DOCKER_DEBUG` should disable "build optimizations", the env var is reused here instead of introducing a new one. Signed-off-by: Albin Kerouanton <albinker@gmail.com>
88 lines
2.7 KiB
Bash
88 lines
2.7 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_EXTENSION="$(binary_extension)"
|
|
BINARY_FULLNAME="$BINARY_NAME$BINARY_EXTENSION"
|
|
|
|
source "${MAKEDIR}/.go-autogen"
|
|
|
|
(
|
|
export GOGC=${DOCKER_BUILD_GOGC:-1000}
|
|
|
|
if [ "$(go env GOOS)/$(go env GOARCH)" != "$(go env GOHOSTOS)/$(go env GOHOSTARCH)" ]; then
|
|
# must be cross-compiling!
|
|
if [ "$(go env GOOS)/$(go env GOARCH)" = "linux/arm" ]; then
|
|
# specify name of the target ARM architecture
|
|
case "$(go env GOARM)" in
|
|
5)
|
|
export CGO_CFLAGS="-march=armv5t"
|
|
export CGO_CXXFLAGS="-march=armv5t"
|
|
;;
|
|
6)
|
|
export CGO_CFLAGS="-march=armv6"
|
|
export CGO_CXXFLAGS="-march=armv6"
|
|
;;
|
|
7)
|
|
export CGO_CFLAGS="-march=armv7-a"
|
|
export CGO_CXXFLAGS="-march=armv7-a"
|
|
;;
|
|
esac
|
|
fi
|
|
fi
|
|
|
|
# -buildmode=pie is not supported on Windows arm64 and Linux mips*, ppc64be
|
|
# https://github.com/golang/go/blob/go1.19.4/src/cmd/internal/sys/supported.go#L125-L132
|
|
if ! [ "$DOCKER_STATIC" = "1" ]; then
|
|
# -buildmode=pie not supported when -race is enabled
|
|
if [[ " $BUILDFLAGS " != *" -race "* ]]; then
|
|
case "$(go env GOOS)/$(go env GOARCH)" in
|
|
windows/arm64 | linux/mips* | linux/ppc64) ;;
|
|
*)
|
|
BUILDFLAGS+=("-buildmode=pie")
|
|
;;
|
|
esac
|
|
fi
|
|
fi
|
|
|
|
# XXX: Disable netgo on Windows and use Window's system resolver instead.
|
|
#
|
|
# go1.19 and newer added support for netgo on Windows (https://go.dev/doc/go1.19#net),
|
|
# which won't ask Windows for DNS results, and hence may be ignoring
|
|
# custom "C:\Windows\System32\drivers\etc\hosts".
|
|
# See https://github.com/moby/moby/issues/45251#issuecomment-1561001817
|
|
# https://github.com/moby/moby/issues/45251, and
|
|
# https://go-review.googlesource.com/c/go/+/467335
|
|
if [ "$(go env GOOS)" = "windows" ]; then
|
|
BUILDFLAGS=("${BUILDFLAGS[@]/netgo/}")
|
|
fi
|
|
|
|
# only necessary for non-sandboxed invocation where TARGETPLATFORM is empty
|
|
PLATFORM_NAME=$TARGETPLATFORM
|
|
if [ -z "$PLATFORM_NAME" ]; then
|
|
PLATFORM_NAME="$(go env GOOS)/$(go env GOARCH)"
|
|
if [ -n "$(go env GOARM)" ]; then
|
|
PLATFORM_NAME+="/v$(go env GOARM)"
|
|
elif [ -n "$(go env GOAMD64)" ] && [ "$(go env GOAMD64)" != "v1" ]; then
|
|
PLATFORM_NAME+="/$(go env GOAMD64)"
|
|
fi
|
|
fi
|
|
|
|
if [ -n "${DOCKER_DEBUG}" ]; then
|
|
GCFLAGS="all=-N -l"
|
|
fi
|
|
|
|
echo "Building $([ "$DOCKER_STATIC" = "1" ] && echo "static" || echo "dynamic") $DEST/$BINARY_FULLNAME ($PLATFORM_NAME)..."
|
|
if [ -n "$DOCKER_DEBUG" ]; then
|
|
set -x
|
|
fi
|
|
./hack/with-go-mod.sh go build -mod=vendor -modfile=vendor.mod -o "$DEST/$BINARY_FULLNAME" "${BUILDFLAGS[@]}" -ldflags "$LDFLAGS $LDFLAGS_STATIC $DOCKER_LDFLAGS" -gcflags="${GCFLAGS}" "$GO_PACKAGE"
|
|
)
|
|
|
|
echo "Created binary: $DEST/$BINARY_FULLNAME"
|