diff --git a/Dockerfile b/Dockerfile index e84ad706c103cc3394fa1680d9cc5af807731dc5..16650b4364c202ee83c79eedb7470b461f0329ac 100644 --- a/Dockerfile +++ b/Dockerfile @@ -354,6 +354,7 @@ FROM binary-base AS build-cross ARG DOCKER_CROSSPLATFORMS RUN --mount=type=cache,target=/root/.cache/go-build \ --mount=type=bind,target=/go/src/github.com/docker/docker \ + --mount=type=tmpfs,target=/go/src/github.com/docker/docker/autogen \ hack/make.sh cross FROM scratch AS binary diff --git a/Makefile b/Makefile index cfac707590eec07309689af69e51a159fad4c449..0fdf674ac5321660b4ce9155a6bd09d8cb357ef3 100644 --- a/Makefile +++ b/Makefile @@ -172,7 +172,14 @@ cross: ## cross build the binaries for darwin, freebsd and\nwindows cross: BUILD_OPTS += --build-arg CROSS=true --build-arg DOCKER_CROSSPLATFORMS -binary dynbinary cross: buildx +# This is only used to work around read-only bind mounts of the source code into +# binary build targets. We end up mounting a tmpfs over autogen which allows us +# to write build-time generated assets even though the source is mounted read-only +# ...But in order to do so, this dir needs to already exist. +autogen: + mkdir -p autogen + +binary dynbinary cross: buildx autogen $(BUILD_CMD) $(BUILD_OPTS) --output=bundles/ --target=$@ $(VERSION_AUTOGEN_ARGS) . build: target = --target=final diff --git a/hack/make/.go-autogen b/hack/make/.go-autogen index 79f092c3aeadac150b0fa4d2b913d20b5e7febcb..a48b64a20e9efb961b1997d95ebc6a5667839d73 100644 --- a/hack/make/.go-autogen +++ b/hack/make/.go-autogen @@ -1,6 +1,6 @@ #!/usr/bin/env bash -rm -rf autogen +rm -rf autogen/* source hack/dockerfile/install/runc.installer source hack/dockerfile/install/tini.installer