summaryrefslogtreecommitdiff
path: root/Dockerfile
diff options
context:
space:
mode:
authorKevin Alvarez <crazy-max@users.noreply.github.com>2023-01-18 18:41:16 +0100
committerCrazyMax <crazy-max@users.noreply.github.com>2023-01-18 18:46:52 +0100
commitf676dab8dc58c9eaa83b260c631a92d95a7a0b10 (patch)
treeca1c3319fb7ffb54188c16cfb458ce0e5c7edc66 /Dockerfile
parent4f716c731ab775a11a89e3366f4c52ff057538d1 (diff)
downloaddocker-f676dab8dc58c9eaa83b260c631a92d95a7a0b10.tar.gz
Dockerfile: use clang to build dockerd/docker-proxy
Static binaries for dockerd are broken on armhf and armel (32-bit). It seems to be an issue with GCC as building using clang solves this issue. Also adds extra instruction to prefer ld for cross-compiling arm64 in bullseye otherwise it doesn't link. Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
Diffstat (limited to 'Dockerfile')
-rw-r--r--Dockerfile12
1 files changed, 12 insertions, 0 deletions
diff --git a/Dockerfile b/Dockerfile
index 08b48f97fe..1abd6c2230 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -547,6 +547,12 @@ WORKDIR /go/src/github.com/docker/docker
ENV GO111MODULE=off
ENV CGO_ENABLED=1
ARG DEBIAN_FRONTEND
+RUN --mount=type=cache,sharing=locked,id=moby-build-aptlib,target=/var/lib/apt \
+ --mount=type=cache,sharing=locked,id=moby-build-aptcache,target=/var/cache/apt \
+ apt-get update && apt-get install --no-install-recommends -y \
+ clang \
+ lld \
+ llvm
ARG TARGETPLATFORM
RUN --mount=type=cache,sharing=locked,id=moby-build-aptlib,target=/var/lib/apt \
--mount=type=cache,sharing=locked,id=moby-build-aptcache,target=/var/cache/apt \
@@ -573,6 +579,12 @@ ARG PACKAGER_NAME
# PREFIX overrides DEST dir in make.sh script otherwise it fails because of
# read only mount in current work dir
ENV PREFIX=/tmp
+RUN <<EOT
+ # in bullseye arm64 target does not link with lld so configure it to use ld instead
+ if xx-info is-cross && [ "$(xx-info arch)" = "arm64" ]; then
+ XX_CC_PREFER_LINKER=ld xx-clang --setup-target-triple
+ fi
+EOT
RUN --mount=type=bind,target=. \
--mount=type=tmpfs,target=cli/winresources/dockerd \
--mount=type=tmpfs,target=cli/winresources/docker-proxy \