github.com/docker/docker@v299999999.0.0-20200612211812-aaf470eca7b5+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  GO_PACKAGE='github.com/docker/docker/cmd/dockerd'
    12  BINARY_SHORT_NAME='dockerd'
    13  BINARY_NAME="$BINARY_SHORT_NAME-$VERSION"
    14  BINARY_EXTENSION="$(binary_extension)"
    15  BINARY_FULLNAME="$BINARY_NAME$BINARY_EXTENSION"
    16  
    17  source "${MAKEDIR}/.go-autogen"
    18  
    19  hash_files() {
    20  	while [ $# -gt 0 ]; do
    21  		f="$1"
    22  		shift
    23  		dir="$(dirname "$f")"
    24  		base="$(basename "$f")"
    25  		for hashAlgo in md5 sha256; do
    26  			if command -v "${hashAlgo}sum" &> /dev/null; then
    27  				(
    28  					# subshell and cd so that we get output files like:
    29  					#   $HASH docker-$VERSION
    30  					# instead of:
    31  					#   $HASH /go/src/github.com/.../$VERSION/binary/docker-$VERSION
    32  					cd "$dir"
    33  					"${hashAlgo}sum" "$base" > "$base.$hashAlgo"
    34  				)
    35  			fi
    36  		done
    37  	done
    38  }
    39  
    40  (
    41  	export GOGC=${DOCKER_BUILD_GOGC:-1000}
    42  
    43  	if [ "$(go env GOOS)/$(go env GOARCH)" != "$(go env GOHOSTOS)/$(go env GOHOSTARCH)" ]; then
    44  		# must be cross-compiling!
    45  		case "$(go env GOOS)/$(go env GOARCH)" in
    46  			windows/amd64)
    47  				export CC="${CC:-x86_64-w64-mingw32-gcc}"
    48  				export CGO_ENABLED=1
    49  				;;
    50  			linux/arm)
    51  				case "${GOARM}" in
    52  					5 | "")
    53  						export CC="${CC:-arm-linux-gnueabi-gcc}"
    54  						export CGO_ENABLED=1
    55  						;;
    56  					7)
    57  						export CC="${CC:-arm-linux-gnueabihf-gcc}"
    58  						export CGO_ENABLED=1
    59  						;;
    60  				esac
    61  				;;
    62  			linux/arm64)
    63  				export CC="${CC:-aarch64-linux-gnu-gcc}"
    64  				export CGO_ENABLED=1
    65  				;;
    66  			linux/amd64)
    67  				export CC="${CC:-x86_64-linux-gnu-gcc}"
    68  				export CGO_ENABLED=1
    69  				;;
    70  		esac
    71  	fi
    72  
    73  	# -buildmode=pie is not supported on Windows and Linux on mips and riscv64.
    74  	case "$(go env GOOS)/$(go env GOARCH)" in
    75  		windows/* | linux/mips* | linux/riscv*) ;;
    76  
    77  		*)
    78  			BUILDFLAGS+=("-buildmode=pie")
    79  			;;
    80  	esac
    81  
    82  	echo "Building: $DEST/$BINARY_FULLNAME"
    83  	echo "GOOS=\"${GOOS}\" GOARCH=\"${GOARCH}\" GOARM=\"${GOARM}\""
    84  	go build \
    85  		-o "$DEST/$BINARY_FULLNAME" \
    86  		"${BUILDFLAGS[@]}" \
    87  		-ldflags "
    88  		$LDFLAGS
    89  		$LDFLAGS_STATIC_DOCKER
    90  		$DOCKER_LDFLAGS
    91  	" \
    92  		${GO_PACKAGE}
    93  )
    94  
    95  echo "Created binary: $DEST/$BINARY_FULLNAME"
    96  ln -sf "$BINARY_FULLNAME" "$DEST/$BINARY_SHORT_NAME$BINARY_EXTENSION"
    97  
    98  hash_files "$DEST/$BINARY_FULLNAME"