github.com/walkingsparrow/docker@v1.4.2-0.20151218153551-b708a2249bfa/hack/make/binary (about)

     1  #!/bin/bash
     2  set -e
     3  
     4  BINARY_NAME="docker-$VERSION"
     5  BINARY_EXTENSION="$(binary_extension)"
     6  BINARY_FULLNAME="$BINARY_NAME$BINARY_EXTENSION"
     7  
     8  source "${MAKEDIR}/.go-autogen"
     9  
    10  (
    11  if [ "$(go env GOOS)/$(go env GOARCH)" != "$(go env GOHOSTOS)/$(go env GOHOSTARCH)" ]; then
    12  	# must be cross-compiling!
    13  	case "$(go env GOOS)/$(go env GOARCH)" in
    14  		windows/amd64)
    15  			export CC=x86_64-w64-mingw32-gcc
    16  			export CGO_ENABLED=1
    17  			export LDFLAGS_STATIC_DOCKER="$LDFLAGS_STATIC_DOCKER -linkmode internal -extld=${CC}"
    18  			;;
    19  	esac
    20  fi
    21  
    22  if [ "$(go env GOHOSTOS)/$(go env GOHOSTARCH)" == "windows/amd64" ] && [ "$(go env GOOS)" == "windows" ]; then
    23  	# native compilation of Windows on Windows with golang 1.5+ needs linkmode internal
    24  	# https://github.com/golang/go/issues/13070
    25  	export LDFLAGS_STATIC_DOCKER="$LDFLAGS_STATIC_DOCKER -linkmode=internal"
    26  fi
    27  
    28  if [ "$(go env GOOS)" == "linux" ] ; then
    29  	case "$(go env GOARCH)" in
    30  		arm*|386)
    31  			# linking for Linux on arm or x86 needs external linking to avoid
    32  			# https://github.com/golang/go/issues/9510 until we move to Go 1.6
    33  			if [ "$IAMSTATIC" == "true" ] ; then
    34  				export EXTLDFLAGS_STATIC="$EXTLDFLAGS_STATIC -zmuldefs"
    35  				export LDFLAGS_STATIC_DOCKER="$LDFLAGS_STATIC -extldflags \"$EXTLDFLAGS_STATIC\""
    36  
    37  			else
    38  				export LDFLAGS="$LDFLAGS -extldflags -zmuldefs"
    39  			fi
    40  			;;
    41  	esac
    42  fi
    43  
    44  if [ "$IAMSTATIC" == "true" ] && [ "$(go env GOHOSTOS)" == "linux" ] && [ "$DOCKER_EXPERIMENTAL" ]; then
    45  	if  [ "${GOOS}/${GOARCH}" == "darwin/amd64" ]; then
    46  		export CGO_ENABLED=1
    47  		export CC=o64-clang
    48  		export LDFLAGS='-linkmode external -s'
    49  		export LDFLAGS_STATIC_DOCKER='-extld='${CC}
    50  	else
    51  		export BUILDFLAGS=( "${BUILDFLAGS[@]/pkcs11 /}" ) # we cannot dlopen in pkcs11 in a static binary
    52  	fi
    53  fi
    54  
    55  echo "Building: $DEST/$BINARY_FULLNAME"
    56  go build \
    57  	-o "$DEST/$BINARY_FULLNAME" \
    58  	"${BUILDFLAGS[@]}" \
    59  	-ldflags "
    60  		$LDFLAGS
    61  		$LDFLAGS_STATIC_DOCKER
    62  	" \
    63  	./docker
    64  )
    65  
    66  echo "Created binary: $DEST/$BINARY_FULLNAME"
    67  ln -sf "$BINARY_FULLNAME" "$DEST/docker$BINARY_EXTENSION"
    68  
    69  hash_files "$DEST/$BINARY_FULLNAME"