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"