Skip to content

Commit e3cad25

Browse files
committed
fix mac cross-compile
Signed-off-by: Sebastiaan van Stijn <[email protected]>
1 parent f9b204f commit e3cad25

File tree

1 file changed

+64
-22
lines changed

1 file changed

+64
-22
lines changed

static/Makefile

Lines changed: 64 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,10 @@ ifneq ($(strip $(RUNC_VERSION)),)
2828
DOCKER_BUILD_OPTS +=--build-arg=RUNC_VERSION=$(RUNC_VERSION)
2929
endif
3030

31+
ifeq ($(strip $(TARGETPLATFORM)),)
32+
TARGETPLATFORM=local
33+
endif
34+
3135
.PHONY: help
3236
help: ## show make targets
3337
@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {sub("\\\\n",sprintf("\n%22c"," "), $$2);printf " \033[36m%-20s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST)
@@ -71,11 +75,9 @@ static-linux: static-cli static-engine static-buildx-plugin static-compose-plugi
7175
done
7276
tar -C build/linux -c -z -f build/linux/docker-rootless-extras-$(GEN_STATIC_VER).tgz docker-rootless-extras
7377

74-
# buildx
75-
tar -C $(BUILDX_DIR)/bin -c -z -f build/linux/docker-buildx-plugin-$(DOCKER_BUILDX_REF:v%=%).tgz docker-buildx
76-
77-
# compose
78+
# compose, buildx
7879
tar -C "$(COMPOSE_DIR)"/bin/ -c -z -f build/linux/docker-compose-plugin-"$(DOCKER_COMPOSE_REF:v%=%)".tgz docker-compose
80+
tar -C "$(BUILDX_DIR)"/bin/ -c -z -f build/linux/docker-buildx-plugin-"$(DOCKER_BUILDX_REF:v%=%)".tgz docker-buildx
7981

8082
.PHONY: hash_files
8183
hash_files:
@@ -87,30 +89,65 @@ buildx:
8789
docker buildx inspect | grep -q 'Driver: docker-container' || docker buildx create --use
8890

8991
.PHONY: cross-mac
90-
cross-mac: TARGETPLATFORM=darwin/amd64
91-
cross-mac: buildx static-buildx-plugin
92-
cd $(CLI_DIR) && VERSION=$(GEN_STATIC_VER) docker buildx bake --set binary.platform=darwin/amd64,darwin/arm64 binary
93-
dest=$$PWD/build/mac; cd $(CLI_DIR)/build && for platform in *; do \
94-
arch=$$(echo $$platform | cut -d_ -f2); \
95-
mkdir -p $$dest/$$arch/docker-cli; \
96-
cp $$platform/docker-darwin-* $$dest/$$arch/docker-cli/docker && \
97-
tar -C $$dest/$$arch -c -z -f $$dest/$$arch/docker-cli-$(GEN_STATIC_VER).tgz docker-cli; \
98-
tar -C $(BUILDX_DIR)/bin -c -z -f $$dest/$$arch/docker-buildx-plugin-$(DOCKER_BUILDX_REF:v%=%).tgz docker-buildx; \
99-
done
92+
cross-mac: cross-mac-amd64 cross-mac-arm64
93+
@echo "Cross-compiling mac binaries"
94+
95+
.PHONY: cross-mac-amd64
96+
cross-mac-amd64: TARGETPLATFORM=darwin/amd64
97+
cross-mac-amd64: buildx
98+
# Call make again to forward the target platform, otherwise it'd would be reset
99+
$(MAKE) TARGETPLATFORM=$(TARGETPLATFORM) static-cli
100+
$(MAKE) TARGETPLATFORM=$(TARGETPLATFORM) static-buildx-plugin
101+
$(MAKE) TARGETPLATFORM=$(TARGETPLATFORM) static-compose-plugin
102+
103+
# cli
104+
mkdir -p build/mac/amd64/docker-cli
105+
cp -L $(CLI_DIR)/build/docker build/mac/amd64/docker-cli/docker
106+
tar -C build/mac/amd64/ -c -z -f build/mac/amd64/docker-cli-$(GEN_STATIC_VER).tgz docker-cli
107+
108+
# compose, buildx
109+
tar -C "$(COMPOSE_DIR)"/bin/ -c -z -f build/mac/amd64/docker-compose-plugin-"$(DOCKER_COMPOSE_REF:v%=%)".tgz docker-compose
110+
tar -C "$(BUILDX_DIR)"/bin/ -c -z -f build/mac/amd64/docker-buildx-plugin-"$(DOCKER_BUILDX_REF:v%=%)".tgz docker-buildx
111+
112+
.PHONY: cross-mac-arm64
113+
cross-mac-arm64: TARGETPLATFORM=darwin/arm64
114+
cross-mac-arm64: buildx
115+
# Call make again to forward the target platform, otherwise it'd would be reset
116+
$(MAKE) TARGETPLATFORM=$(TARGETPLATFORM) static-cli
117+
$(MAKE) TARGETPLATFORM=$(TARGETPLATFORM) static-buildx-plugin
118+
$(MAKE) TARGETPLATFORM=$(TARGETPLATFORM) static-compose-plugin
119+
120+
# cli
121+
mkdir -p build/mac/arm64/docker-cli
122+
cp -L $(CLI_DIR)/build/docker build/mac/arm64/docker-cli/docker
123+
tar -C build/mac/arm64/ -c -z -f build/mac/arm64/docker-cli-$(GEN_STATIC_VER).tgz docker-cli
124+
125+
# compose, buildx
126+
tar -C "$(COMPOSE_DIR)"/bin/ -c -z -f build/mac/arm64/docker-compose-plugin-"$(DOCKER_COMPOSE_REF:v%=%)".tgz docker-compose
127+
tar -C "$(BUILDX_DIR)"/bin/ -c -z -f build/mac/arm64/docker-buildx-plugin-"$(DOCKER_BUILDX_REF:v%=%)".tgz docker-buildx
100128

101129
.PHONY: cross-win
102-
cross-win: TARGETPLATFORM=windows/amd64
103-
cross-win: EXT=.exe
104-
cross-win: cross-win-engine static-buildx-plugin
105-
cd $(CLI_DIR) && VERSION=$(GEN_STATIC_VER) docker buildx bake --set binary.platform=windows/amd64 binary
130+
cross-win: TARGETPLATFORM=windows/arm64
131+
cross-win: cross-win-engine
132+
# Call make again to forward the target platform, otherwise it'd would be reset
133+
$(MAKE) TARGETPLATFORM=$(TARGETPLATFORM) static-cli
134+
$(MAKE) TARGETPLATFORM=$(TARGETPLATFORM) EXT=".exe" static-buildx-plugin
135+
$(MAKE) TARGETPLATFORM=$(TARGETPLATFORM) static-compose-plugin
106136
mkdir -p build/win/amd64/docker-cli
107137
mkdir -p build/win/amd64/docker-engine
108138
mkdir -p build/win/amd64/docker-buildx
109-
cp $(CLI_DIR)/build/docker-windows-amd64.exe build/win/amd64/docker-cli/docker.exe
139+
mkdir -p build/win/amd64/docker-compose
140+
cp -L $(CLI_DIR)/build/docker build/win/amd64/docker-cli/docker.exe
110141
cp $(ENGINE_DIR)/bundles/cross/windows/amd64-daemon/dockerd.exe build/win/amd64/docker-engine/dockerd.exe
111142
cp $(ENGINE_DIR)/bundles/cross/windows/amd64-daemon/docker-proxy.exe build/win/amd64/docker-engine/docker-proxy.exe
112143
cp $(BUILDX_DIR)/bin/docker-buildx.exe build/win/amd64/docker-buildx/docker-buildx.exe
113-
docker run --rm -v $(CURDIR)/build/win/amd64:/v -w /v alpine sh -c 'apk update&&apk add zip && zip -r docker-cli-$(GEN_STATIC_VER).zip docker-cli && zip -r docker-engine-$(GEN_STATIC_VER).zip docker-engine && zip -r docker-buildx-plugin--$(DOCKER_BUILDX_REF:v%=%).zip docker-buildx'
144+
cp $(COMPOSE_DIR)/bin/docker-compose/docker-compose.exe build/win/amd64/docker-compose/docker-compose.exe
145+
146+
docker run --rm -v $(CURDIR)/build/win/amd64:/v -w /v alpine sh -c 'apk add --no-cache zip \
147+
&& zip -r docker-cli-$(GEN_STATIC_VER).zip docker-cli \
148+
&& zip -r docker-engine-$(GEN_STATIC_VER).zip docker-engine \
149+
&& zip -r docker-buildx-plugin--$(DOCKER_BUILDX_REF:v%=%).zip docker-buildx \
150+
&& zip -r docker-compose-plugin--$(DOCKER_COMPOSE_REF:v%=%).zip docker-compose'
114151
$(CHOWN) -R $(shell id -u):$(shell id -g) build
115152

116153
.PHONY: cross-arm
@@ -133,14 +170,19 @@ static-buildx-plugin:
133170

134171
.PHONY: static-compose-plugin
135172
static-compose-plugin:
136-
#--platform "$(TARGETPLATFORM)" \
137173
$(RM) -r "$(COMPOSE_DIR)"/bin
138174
docker buildx build "$(COMPOSE_DIR)" \
139175
--target compose-plugin \
140-
--platform local \
176+
--platform "$(or $(TARGETPLATFORM),local)" \
141177
--build-arg GIT_TAG="$(DOCKER_COMPOSE_REF)" \
142178
--output $(COMPOSE_DIR)/bin/docker-compose/
143179

180+
ls -laR $(COMPOSE_DIR)/bin
181+
182+
.PHONY: cross-cli
183+
cross-cli:
184+
cd $(CLI_DIR) && VERSION=$(GEN_STATIC_VER) docker buildx bake --set binary.platform="$(or $(TARGETPLATFORM),local)" binary
185+
144186
.PHONY: cross-all-cli
145187
cross-all-cli:
146188
$(MAKE) -C $(CLI_DIR) -f docker.Makefile VERSION=$(GEN_STATIC_VER) cross

0 commit comments

Comments
 (0)