From fbb001d1f98fef6cc1b38b58350c7cd0c2828461 Mon Sep 17 00:00:00 2001 From: Brian Goff Date: Tue, 16 Apr 2019 15:40:53 -0700 Subject: [PATCH] Add support for setting GOARM in cross target. This adds to the existing format of `/` to allow for `/arm/v` Signed-off-by: Brian Goff --- hack/make/.binary | 1 + hack/make/cross | 10 ++++++++-- project/PACKAGERS.md | 21 +++++++++++++++++++++ 3 files changed, 30 insertions(+), 2 deletions(-) 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