github.com/Prakhar-Agarwal-byte/moby@v0.0.0-20231027092010-a14e3e8ab87e/hack/make/.binary (about) 1 #!/usr/bin/env bash 2 set -e 3 4 # a helper to provide ".exe" when it's appropriate 5 binary_extension() { 6 if [ "$(go env GOOS)" = 'windows' ]; then 7 echo -n '.exe' 8 fi 9 } 10 11 BINARY_EXTENSION="$(binary_extension)" 12 BINARY_FULLNAME="$BINARY_NAME$BINARY_EXTENSION" 13 14 source "${MAKEDIR}/.go-autogen" 15 16 ( 17 export GOGC=${DOCKER_BUILD_GOGC:-1000} 18 19 if [ "$(go env GOOS)/$(go env GOARCH)" != "$(go env GOHOSTOS)/$(go env GOHOSTARCH)" ]; then 20 # must be cross-compiling! 21 if [ "$(go env GOOS)/$(go env GOARCH)" = "linux/arm" ]; then 22 # specify name of the target ARM architecture 23 case "$(go env GOARM)" in 24 5) 25 export CGO_CFLAGS="-march=armv5t" 26 export CGO_CXXFLAGS="-march=armv5t" 27 ;; 28 6) 29 export CGO_CFLAGS="-march=armv6" 30 export CGO_CXXFLAGS="-march=armv6" 31 ;; 32 7) 33 export CGO_CFLAGS="-march=armv7-a" 34 export CGO_CXXFLAGS="-march=armv7-a" 35 ;; 36 esac 37 fi 38 fi 39 40 # -buildmode=pie is not supported on Windows arm64 and Linux mips*, ppc64be 41 # https://github.com/golang/go/blob/go1.19.4/src/cmd/internal/sys/supported.go#L125-L132 42 if ! [ "$DOCKER_STATIC" = "1" ]; then 43 # -buildmode=pie not supported when -race is enabled 44 if [[ " $BUILDFLAGS " != *" -race "* ]]; then 45 case "$(go env GOOS)/$(go env GOARCH)" in 46 windows/arm64 | linux/mips* | linux/ppc64) ;; 47 *) 48 BUILDFLAGS+=("-buildmode=pie") 49 ;; 50 esac 51 fi 52 fi 53 54 # XXX: Disable netgo on Windows and use Window's system resolver instead. 55 # 56 # go1.19 and newer added support for netgo on Windows (https://go.dev/doc/go1.19#net), 57 # which won't ask Windows for DNS results, and hence may be ignoring 58 # custom "C:\Windows\System32\drivers\etc\hosts". 59 # See https://github.com/moby/moby/issues/45251#issuecomment-1561001817 60 # https://github.com/moby/moby/issues/45251, and 61 # https://go-review.googlesource.com/c/go/+/467335 62 if [ "$(go env GOOS)" = "windows" ]; then 63 BUILDFLAGS=("${BUILDFLAGS[@]/netgo/}") 64 fi 65 66 # only necessary for non-sandboxed invocation where TARGETPLATFORM is empty 67 PLATFORM_NAME=$TARGETPLATFORM 68 if [ -z "$PLATFORM_NAME" ]; then 69 PLATFORM_NAME="$(go env GOOS)/$(go env GOARCH)" 70 if [ -n "$(go env GOARM)" ]; then 71 PLATFORM_NAME+="/v$(go env GOARM)" 72 elif [ -n "$(go env GOAMD64)" ] && [ "$(go env GOAMD64)" != "v1" ]; then 73 PLATFORM_NAME+="/$(go env GOAMD64)" 74 fi 75 fi 76 77 if [ -n "${DOCKER_DEBUG}" ]; then 78 GCFLAGS="all=-N -l" 79 fi 80 81 echo "Building $([ "$DOCKER_STATIC" = "1" ] && echo "static" || echo "dynamic") $DEST/$BINARY_FULLNAME ($PLATFORM_NAME)..." 82 if [ -n "$DOCKER_DEBUG" ]; then 83 set -x 84 fi 85 ./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" 86 ) 87 88 echo "Created binary: $DEST/$BINARY_FULLNAME"