Pretty much cross-compile doesn't work because of this:
> profiles/seccomp/seccomp.go:13:2: build constraints exclude all Go files in /go/src/github.com/docker/docker/vendor/github.com/seccomp/libseccomp-golang
This changes adds a new Dockerfile target for cross compilation with the
neccesary arch specific libseccomp packages and CC toolchains.
Signed-off-by: Brian Goff <cpuguy83@gmail.com>
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
| ... | ... |
@@ -24,6 +24,8 @@ |
| 24 | 24 |
# the case. Therefore, you don't have to disable it anymore. |
| 25 | 25 |
# |
| 26 | 26 |
|
| 27 |
+ARG CROSS="false" |
|
| 28 |
+ |
|
| 27 | 29 |
FROM golang:1.12.3 AS base |
| 28 | 30 |
# allow replacing httpredir or deb mirror |
| 29 | 31 |
ARG APT_MIRROR=deb.debian.org |
| ... | ... |
@@ -93,11 +95,31 @@ RUN /download-frozen-image-v2.sh /build \ |
| 93 | 93 |
# See also ensureFrozenImagesLinux() in "integration-cli/fixtures_linux_daemon_test.go" (which needs to be updated when adding images to this list) |
| 94 | 94 |
|
| 95 | 95 |
# Just a little hack so we don't have to install these deps twice, once for runc and once for dockerd |
| 96 |
-FROM base AS runtime-dev |
|
| 96 |
+FROM base AS runtime-dev-cross-false |
|
| 97 | 97 |
RUN apt-get update && apt-get install -y \ |
| 98 | 98 |
libapparmor-dev \ |
| 99 | 99 |
libseccomp-dev |
| 100 | 100 |
|
| 101 |
+FROM runtime-dev-cross-false AS runtime-dev-cross-true |
|
| 102 |
+RUN dpkg --add-architecture armhf |
|
| 103 |
+RUN dpkg --add-architecture arm64 |
|
| 104 |
+RUN dpkg --add-architecture armel |
|
| 105 |
+# These crossbuild packages rely on gcc-<arch>, but this doesn't want to install |
|
| 106 |
+# on non-amd64 systems. |
|
| 107 |
+# Additionally, the crossbuild-amd64 is currently only on debian:buster, so |
|
| 108 |
+# other architectures cannnot crossbuild amd64. |
|
| 109 |
+RUN if [ "$(go env GOHOSTARCH)" = "amd64" ]; then \ |
|
| 110 |
+ apt-get update \ |
|
| 111 |
+ && apt-get install -y \ |
|
| 112 |
+ crossbuild-essential-armhf \ |
|
| 113 |
+ crossbuild-essential-arm64 \ |
|
| 114 |
+ crossbuild-essential-armel \ |
|
| 115 |
+ libseccomp-dev:armhf \ |
|
| 116 |
+ libseccomp-dev:arm64 \ |
|
| 117 |
+ libseccomp-dev:armel; \ |
|
| 118 |
+ fi |
|
| 119 |
+ |
|
| 120 |
+FROM runtime-dev-cross-${CROSS} AS runtime-dev
|
|
| 101 | 121 |
|
| 102 | 122 |
FROM base AS tomlv |
| 103 | 123 |
ENV INSTALL_BINARY_NAME=tomlv |
| ... | ... |
@@ -117,9 +117,6 @@ INTERACTIVE := $(shell [ -t 0 ] && echo 1 || echo 0) |
| 117 | 117 |
ifeq ($(INTERACTIVE), 1) |
| 118 | 118 |
DOCKER_FLAGS += -t |
| 119 | 119 |
endif |
| 120 |
-ifeq ($(BIND_DIR), .) |
|
| 121 |
- DOCKER_BUILD_OPTS += --target=dev |
|
| 122 |
-endif |
|
| 123 | 120 |
|
| 124 | 121 |
DOCKER_RUN_DOCKER := $(DOCKER_FLAGS) "$(DOCKER_IMAGE)" |
| 125 | 122 |
|
| ... | ... |
@@ -134,6 +131,21 @@ binary: build ## build the linux binaries |
| 134 | 134 |
dynbinary: build ## build the linux dynbinaries |
| 135 | 135 |
$(DOCKER_RUN_DOCKER) hack/make.sh dynbinary |
| 136 | 136 |
|
| 137 |
+ |
|
| 138 |
+ |
|
| 139 |
+cross: DOCKER_CROSS := true |
|
| 140 |
+cross: build ## cross build the binaries for darwin, freebsd and\nwindows |
|
| 141 |
+ $(DOCKER_RUN_DOCKER) hack/make.sh dynbinary binary cross |
|
| 142 |
+ |
|
| 143 |
+ifdef DOCKER_CROSSPLATFORMS |
|
| 144 |
+build: DOCKER_CROSS := true |
|
| 145 |
+else |
|
| 146 |
+build: DOCKER_CROSS ?= false |
|
| 147 |
+endif |
|
| 148 |
+ifeq ($(BIND_DIR), .) |
|
| 149 |
+build: DOCKER_BUILD_OPTS += --target=dev |
|
| 150 |
+endif |
|
| 151 |
+build: DOCKER_BUILD_ARGS += --build-arg=CROSS=$(DOCKER_CROSS) |
|
| 137 | 152 |
build: DOCKER_BUILDKIT ?= 1 |
| 138 | 153 |
build: bundles |
| 139 | 154 |
$(warning The docker client CLI has moved to github.com/docker/cli. For a dev-test cycle involving the CLI, run:${\n} DOCKER_CLI_PATH=/host/path/to/cli/binary make shell ${\n} then change the cli and compile into a binary at the same location.${\n})
|
| ... | ... |
@@ -149,9 +161,6 @@ clean: clean-cache |
| 149 | 149 |
clean-cache: |
| 150 | 150 |
docker volume rm -f docker-dev-cache |
| 151 | 151 |
|
| 152 |
-cross: build ## cross build the binaries for darwin, freebsd and\nwindows |
|
| 153 |
- $(DOCKER_RUN_DOCKER) hack/make.sh dynbinary binary cross |
|
| 154 |
- |
|
| 155 | 152 |
help: ## this help |
| 156 | 153 |
@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z0-9_-]+:.*?## / {gsub("\\\\n",sprintf("\n%22c",""), $$2);printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST)
|
| 157 | 154 |
|
| ... | ... |
@@ -47,6 +47,26 @@ if [ "$(go env GOOS)/$(go env GOARCH)" != "$(go env GOHOSTOS)/$(go env GOHOSTARC |
| 47 | 47 |
export CC=x86_64-w64-mingw32-gcc |
| 48 | 48 |
export CGO_ENABLED=1 |
| 49 | 49 |
;; |
| 50 |
+ linux/arm) |
|
| 51 |
+ case "${GOARM}" in
|
|
| 52 |
+ 5|"") |
|
| 53 |
+ export CC=arm-linux-gnueabi-gcc |
|
| 54 |
+ export CGO_ENABLED=1 |
|
| 55 |
+ ;; |
|
| 56 |
+ 7) |
|
| 57 |
+ export CC=arm-linux-gnueabihf-gcc |
|
| 58 |
+ export CGO_ENABLED=1 |
|
| 59 |
+ ;; |
|
| 60 |
+ esac |
|
| 61 |
+ ;; |
|
| 62 |
+ linux/arm64) |
|
| 63 |
+ export CC=aarch64-linux-gnu-gcc |
|
| 64 |
+ export CGO_ENABLED=1 |
|
| 65 |
+ ;; |
|
| 66 |
+ linux/amd64) |
|
| 67 |
+ export CC=x86_64-linux-gnu-gcc |
|
| 68 |
+ export CGO_ENABLED=1 |
|
| 69 |
+ ;; |
|
| 50 | 70 |
esac |
| 51 | 71 |
fi |
| 52 | 72 |
|