github.com/rumpl/bof@v23.0.0-rc.2+incompatible/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 # for non-sandboxed invocation 20 if ! command -v xx-go > /dev/null 2>&1; then 21 if [ "$(go env GOOS)/$(go env GOARCH)" != "$(go env GOHOSTOS)/$(go env GOHOSTARCH)" ]; then 22 # must be cross-compiling! 23 case "$(go env GOOS)/$(go env GOARCH)" in 24 windows/amd64) 25 export CC="${CC:-x86_64-w64-mingw32-gcc}" 26 export CGO_ENABLED=1 27 ;; 28 linux/arm) 29 case "${GOARM}" in 30 5) 31 export CC="${CC:-arm-linux-gnueabi-gcc}" 32 export CGO_ENABLED=1 33 export CGO_CFLAGS="-march=armv5t" 34 export CGO_CXXFLAGS="-march=armv5t" 35 ;; 36 6) 37 export CC="${CC:-arm-linux-gnueabi-gcc}" 38 export CGO_ENABLED=1 39 export CGO_CFLAGS="-march=armv6" 40 export CGO_CXXFLAGS="-march=armv6" 41 ;; 42 7) 43 export CC="${CC:-arm-linux-gnueabihf-gcc}" 44 export CGO_ENABLED=1 45 export CGO_CFLAGS="-march=armv7-a" 46 export CGO_CXXFLAGS="-march=armv7-a" 47 ;; 48 *) 49 export CC="${CC:-arm-linux-gnueabihf-gcc}" 50 export CGO_ENABLED=1 51 ;; 52 esac 53 ;; 54 linux/arm64) 55 export CC="${CC:-aarch64-linux-gnu-gcc}" 56 export CGO_ENABLED=1 57 ;; 58 linux/amd64) 59 export CC="${CC:-x86_64-linux-gnu-gcc}" 60 export CGO_ENABLED=1 61 ;; 62 linux/ppc64le) 63 export CC="${CC:-powerpc64le-linux-gnu-gcc}" 64 export CGO_ENABLED=1 65 ;; 66 linux/s390x) 67 export CC="${CC:-s390x-linux-gnu-gcc}" 68 export CGO_ENABLED=1 69 ;; 70 esac 71 fi 72 fi 73 74 # -buildmode=pie is not supported on Windows arm64 and Linux mips*, ppc64be 75 # https://github.com/golang/go/blob/go1.19.4/src/cmd/internal/sys/supported.go#L125-L132 76 if ! [ "$DOCKER_STATIC" = "1" ]; then 77 # -buildmode=pie not supported when -race is enabled 78 if [[ " $BUILDFLAGS " != *" -race "* ]]; then 79 case "$(go env GOOS)/$(go env GOARCH)" in 80 windows/arm64 | linux/mips* | linux/ppc64) ;; 81 *) 82 BUILDFLAGS+=("-buildmode=pie") 83 ;; 84 esac 85 fi 86 fi 87 88 # only necessary for non-sandboxed invocation where TARGETPLATFORM is empty 89 PLATFORM_NAME=$TARGETPLATFORM 90 if [ -z "$PLATFORM_NAME" ]; then 91 PLATFORM_NAME="$(go env GOOS)/$(go env GOARCH)" 92 if [ -n "$(go env GOARM)" ]; then 93 PLATFORM_NAME+="/$(go env GOARM)" 94 elif [ -n "$(go env GOAMD64)" ] && [ "$(go env GOAMD64)" != "v1" ]; then 95 PLATFORM_NAME+="/$(go env GOAMD64)" 96 fi 97 fi 98 99 echo "Building $([ "$DOCKER_STATIC" = "1" ] && echo "static" || echo "dynamic") $DEST/$BINARY_FULLNAME ($PLATFORM_NAME)..." 100 go build \ 101 -o "$DEST/$BINARY_FULLNAME" \ 102 "${BUILDFLAGS[@]}" \ 103 -ldflags " 104 $LDFLAGS 105 $LDFLAGS_STATIC_DOCKER 106 $DOCKER_LDFLAGS 107 " \ 108 ${GO_PACKAGE} 109 ) 110 111 echo "Created binary: $DEST/$BINARY_FULLNAME"