github.com/Heebron/moby@v0.0.0-20221111184709-6eab4f55faf7/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 case "$(go env GOOS)/$(go env GOARCH)" in 22 windows/amd64) 23 export CC="${CC:-x86_64-w64-mingw32-gcc}" 24 export CGO_ENABLED=1 25 ;; 26 linux/arm) 27 case "${GOARM}" in 28 5) 29 export CC="${CC:-arm-linux-gnueabi-gcc}" 30 export CGO_ENABLED=1 31 export CGO_CFLAGS="-march=armv5t" 32 export CGO_CXXFLAGS="-march=armv5t" 33 ;; 34 6) 35 export CC="${CC:-arm-linux-gnueabi-gcc}" 36 export CGO_ENABLED=1 37 export CGO_CFLAGS="-march=armv6" 38 export CGO_CXXFLAGS="-march=armv6" 39 ;; 40 7) 41 export CC="${CC:-arm-linux-gnueabihf-gcc}" 42 export CGO_ENABLED=1 43 export CGO_CFLAGS="-march=armv7-a" 44 export CGO_CXXFLAGS="-march=armv7-a" 45 ;; 46 *) 47 export CC="${CC:-arm-linux-gnueabihf-gcc}" 48 export CGO_ENABLED=1 49 ;; 50 esac 51 ;; 52 linux/arm64) 53 export CC="${CC:-aarch64-linux-gnu-gcc}" 54 export CGO_ENABLED=1 55 ;; 56 linux/amd64) 57 export CC="${CC:-x86_64-linux-gnu-gcc}" 58 export CGO_ENABLED=1 59 ;; 60 linux/ppc64le) 61 export CC="${CC:-powerpc64le-linux-gnu-gcc}" 62 export CGO_ENABLED=1 63 ;; 64 linux/s390x) 65 export CC="${CC:-s390x-linux-gnu-gcc}" 66 export CGO_ENABLED=1 67 ;; 68 esac 69 fi 70 71 # -buildmode=pie is not supported on Windows and Linux on mips, riscv64 and ppc64be. 72 # https://github.com/golang/go/blob/77aa209b386a184e7f4b44938f2a05a1b5c5a3cf/src/cmd/internal/sys/supported.go#L89-L99 73 case "$(go env GOOS)/$(go env GOARCH)" in 74 windows/* | linux/mips* | linux/riscv* | linux/ppc64) ;; 75 # TODO remove windows in Go 1.15+: https://github.com/golang/go/commit/95f382139043059a2a0780ba577b53893408f7e4 76 # TODO remove riscv64 in Go 1.16+: https://github.com/golang/go/commit/8eb846fd37eb7bded8a1cf6932be2c59069863e5 77 78 *) 79 BUILDFLAGS+=("-buildmode=pie") 80 ;; 81 esac 82 83 echo "Building: $DEST/$BINARY_FULLNAME" 84 echo "GOOS=\"${GOOS}\" GOARCH=\"${GOARCH}\" GOARM=\"${GOARM}\"" 85 go build \ 86 -o "$DEST/$BINARY_FULLNAME" \ 87 "${BUILDFLAGS[@]}" \ 88 -ldflags " 89 $LDFLAGS 90 $LDFLAGS_STATIC_DOCKER 91 $DOCKER_LDFLAGS 92 " \ 93 ${GO_PACKAGE} 94 ) 95 96 echo "Created binary: $DEST/$BINARY_FULLNAME"