.binary 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #!/usr/bin/env bash
  2. set -e
  3. # a helper to provide ".exe" when it's appropriate
  4. binary_extension() {
  5. if [ "$(go env GOOS)" = 'windows' ]; then
  6. echo -n '.exe'
  7. fi
  8. }
  9. BINARY_EXTENSION="$(binary_extension)"
  10. BINARY_FULLNAME="$BINARY_NAME$BINARY_EXTENSION"
  11. source "${MAKEDIR}/.go-autogen"
  12. (
  13. export GOGC=${DOCKER_BUILD_GOGC:-1000}
  14. if [ "$(go env GOOS)/$(go env GOARCH)" != "$(go env GOHOSTOS)/$(go env GOHOSTARCH)" ]; then
  15. # must be cross-compiling!
  16. if [ "$(go env GOOS)/$(go env GOARCH)" = "linux/arm" ]; then
  17. # specify name of the target ARM architecture
  18. case "$(go env GOARM)" in
  19. 5)
  20. export CGO_CFLAGS="-march=armv5t"
  21. export CGO_CXXFLAGS="-march=armv5t"
  22. ;;
  23. 6)
  24. export CGO_CFLAGS="-march=armv6"
  25. export CGO_CXXFLAGS="-march=armv6"
  26. ;;
  27. 7)
  28. export CGO_CFLAGS="-march=armv7-a"
  29. export CGO_CXXFLAGS="-march=armv7-a"
  30. ;;
  31. esac
  32. fi
  33. fi
  34. # -buildmode=pie is not supported on Windows arm64 and Linux mips*, ppc64be
  35. # https://github.com/golang/go/blob/go1.19.4/src/cmd/internal/sys/supported.go#L125-L132
  36. if ! [ "$DOCKER_STATIC" = "1" ]; then
  37. # -buildmode=pie not supported when -race is enabled
  38. if [[ " $BUILDFLAGS " != *" -race "* ]]; then
  39. case "$(go env GOOS)/$(go env GOARCH)" in
  40. windows/arm64 | linux/mips* | linux/ppc64) ;;
  41. *)
  42. BUILDFLAGS+=("-buildmode=pie")
  43. ;;
  44. esac
  45. fi
  46. fi
  47. # XXX: Disable netgo on Windows and use Window's system resolver instead.
  48. #
  49. # go1.19 and newer added support for netgo on Windows (https://go.dev/doc/go1.19#net),
  50. # which won't ask Windows for DNS results, and hence may be ignoring
  51. # custom "C:\Windows\System32\drivers\etc\hosts".
  52. # See https://github.com/moby/moby/issues/45251#issuecomment-1561001817
  53. # https://github.com/moby/moby/issues/45251, and
  54. # https://go-review.googlesource.com/c/go/+/467335
  55. if [ "$(go env GOOS)" = "windows" ]; then
  56. BUILDFLAGS=("${BUILDFLAGS[@]/netgo/}")
  57. fi
  58. # only necessary for non-sandboxed invocation where TARGETPLATFORM is empty
  59. PLATFORM_NAME=$TARGETPLATFORM
  60. if [ -z "$PLATFORM_NAME" ]; then
  61. PLATFORM_NAME="$(go env GOOS)/$(go env GOARCH)"
  62. if [ -n "$(go env GOARM)" ]; then
  63. PLATFORM_NAME+="/v$(go env GOARM)"
  64. elif [ -n "$(go env GOAMD64)" ] && [ "$(go env GOAMD64)" != "v1" ]; then
  65. PLATFORM_NAME+="/$(go env GOAMD64)"
  66. fi
  67. fi
  68. if [ -n "${DOCKER_DEBUG}" ]; then
  69. GCFLAGS="all=-N -l"
  70. fi
  71. echo "Building $([ "$DOCKER_STATIC" = "1" ] && echo "static" || echo "dynamic") $DEST/$BINARY_FULLNAME ($PLATFORM_NAME)..."
  72. if [ -n "$DOCKER_DEBUG" ]; then
  73. set -x
  74. fi
  75. ./hack/with-go-mod.sh go build -mod=vendor -modfile=vendor.mod -o "$DEST/$BINARY_FULLNAME" "${BUILDFLAGS[@]}" -ldflags "$LDFLAGS $LDFLAGS_STATIC $DOCKER_LDFLAGS" -gcflags="${GCFLAGS}" "$GO_PACKAGE"
  76. )
  77. echo "Created binary: $DEST/$BINARY_FULLNAME"