diff --git a/hack/make/.binary b/hack/make/.binary index 357b456e09..53de6749e5 100644 --- a/hack/make/.binary +++ b/hack/make/.binary @@ -80,6 +80,7 @@ case "$(go env GOOS)/$(go env GOARCH)" in esac echo "Building: $DEST/$BINARY_FULLNAME" +echo "GOOS=\"${GOOS}\" GOARCH=\"${GOARCH}\" GOARM=\"${GOARM}\"" go build \ -o "$DEST/$BINARY_FULLNAME" \ "${BUILDFLAGS[@]}" \ diff --git a/hack/make/cross b/hack/make/cross index 47cb667af2..ab9f0b7445 100644 --- a/hack/make/cross +++ b/hack/make/cross @@ -18,8 +18,14 @@ for platform in ${DOCKER_CROSSPLATFORMS}; do ( export KEEPDEST=1 export DEST="${DEST}/${platform}" # bundles/VERSION/cross/GOOS/GOARCH/docker-VERSION - export GOOS=${platform%/*} - export GOARCH=${platform##*/} + export GOOS=${platform%%/*} + export GOARCH=${platform#*/} + + if [[ "${GOARCH}" = "arm/"* ]]; then + GOARM=${GOARCH##*/v} + GOARCH=${GOARCH%/v*} + export GOARM + fi echo "Cross building: ${DEST}" mkdir -p "${DEST}" diff --git a/project/PACKAGERS.md b/project/PACKAGERS.md index a5b0018b5a..0fb6c20866 100644 --- a/project/PACKAGERS.md +++ b/project/PACKAGERS.md @@ -233,6 +233,27 @@ following: This will create "./bundles/$VERSION/dynbinary-client/docker-$VERSION", which for client-only builds is the important file to grab and install as appropriate. +### Cross Compilation + +Limited cross compilation is supported due to requiring cgo for critical +functionality (such as seccomp support). + +To cross compile run `make cross`. You can specify the platforms to target by +setting the `DOCKER_CROSSPLATFORMS` environment variable to a list of platforms +in the format `/`. Specify multiple platforms by using a space +in between each desired platform. + +For setting arm variants, you can specify the `GOARM` value by append `/v` +to your `/arm`. Example: + +``` +make DOCKER_CROSSPLATFORMS=linux/arm/v7 cross +``` + +This will create a linux binary targeting arm 7. + +See `hack/make/.binary` for supported cross compliation platforms. + ## System Dependencies ### Runtime Dependencies