Skip to content

Commit ed4d82b

Browse files
committed
Makefile.cli: make CLI compilation parallelizable
Our CLI release/compilation was always a bit slow because it could be started in parallel. Signed-off-by: Mahe Tardy <[email protected]>
1 parent 2454a3a commit ed4d82b

File tree

1 file changed

+34
-31
lines changed

1 file changed

+34
-31
lines changed

Makefile.cli

Lines changed: 34 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -4,51 +4,54 @@
44
CLI_GO_BUILD = CGO_ENABLED=0 $(GO) build
55
# renovate: datasource=docker
66
GO_IMAGE = docker.io/library/golang:1.25.4-alpine@sha256:d3f0cf7723f3429e3f9ed846243970b20a2de7bae6a5b66fc5914e228d831bbb
7-
TARGET=tetra
7+
TARGET = tetra
8+
9+
RELEASE_FOLDER = release
10+
# Avoid shooting yourself in the foot with rm in cli-clean or
11+
# creating/overwriting files from the root folder
12+
ifeq ($(strip $(RELEASE_FOLDER)),)
13+
$(error RELEASE_FOLDER is not set or is empty)
14+
endif
15+
16+
RELEASES := \
17+
$(RELEASE_FOLDER)/$(TARGET)-darwin-arm64.tar.gz \
18+
$(RELEASE_FOLDER)/$(TARGET)-darwin-amd64.tar.gz \
19+
$(RELEASE_FOLDER)/$(TARGET)-linux-arm64.tar.gz \
20+
$(RELEASE_FOLDER)/$(TARGET)-linux-amd64.tar.gz \
21+
$(RELEASE_FOLDER)/$(TARGET)-windows-arm64.tar.gz \
22+
$(RELEASE_FOLDER)/$(TARGET)-windows-amd64.tar.gz
823

924
RELEASE_UID ?= $(shell id -u)
1025
RELEASE_GID ?= $(shell id -g)
1126

1227
##@ CLI
1328

1429
.PHONY: cli-release
15-
cli-release: ## Compile tetra CLI release binaries.
30+
cli-release: ## Compile tetra CLI release binaries with Docker
1631
docker run \
1732
--rm \
1833
--workdir /tetragon \
1934
--volume `pwd`:/tetragon $(GO_IMAGE) \
2035
sh -c "apk add --no-cache make git setpriv && \
2136
/bin/setpriv --reuid=$(RELEASE_UID) --regid=$(RELEASE_GID) --clear-groups \
22-
make GOCACHE=/tmp/cache cli-local-release VERSION=${VERSION}"
37+
make -j$$(nproc) GOCACHE=/tmp/cache cli-local-release VERSION=${VERSION}"
38+
2339

2440
.PHONY: cli-local-release
25-
cli-local-release: cli-clean
26-
set -o errexit; \
27-
for OS in darwin linux windows; do \
28-
EXT=; \
29-
ARCHS=; \
30-
case $$OS in \
31-
darwin) \
32-
ARCHS='arm64 amd64'; \
33-
;; \
34-
linux) \
35-
ARCHS='arm64 amd64'; \
36-
;; \
37-
windows) \
38-
ARCHS='arm64 amd64'; \
39-
EXT='.exe'; \
40-
;; \
41-
esac; \
42-
for ARCH in $$ARCHS; do \
43-
echo Building release binary for $$OS/$$ARCH...; \
44-
test -d release/$$OS/$$ARCH|| mkdir -p release/$$OS/$$ARCH; \
45-
env GOOS=$$OS GOARCH=$$ARCH $(CLI_GO_BUILD) -ldflags="$(GO_BUILD_LDFLAGS)" -o release/$$OS/$$ARCH/$(TARGET)$$EXT ./cmd/tetra; \
46-
tar -czf release/$(TARGET)-$$OS-$$ARCH.tar.gz -C release/$$OS/$$ARCH $(TARGET)$$EXT; \
47-
(cd release && sha256sum $(TARGET)-$$OS-$$ARCH.tar.gz > $(TARGET)-$$OS-$$ARCH.tar.gz.sha256sum); \
48-
done; \
49-
rm -r release/$$OS; \
50-
done; \
41+
cli-local-release: $(RELEASES) ## Compile tetra CLI release binaries locally
42+
43+
$(RELEASE_FOLDER)/$(TARGET)-%.tar.gz: cli-clean
44+
@{ \
45+
OS=$(word 1,$(subst -, ,$*)); \
46+
ARCH=$(word 2,$(subst -, ,$*)); \
47+
EXT=""; if [ "$$OS" = "windows" ]; then EXT=".exe"; fi; \
48+
mkdir -p $(RELEASE_FOLDER)/$$OS/$$ARCH; \
49+
echo "Building for $$OS/$$ARCH..."; \
50+
env GOOS=$$OS GOARCH=$$ARCH $(CLI_GO_BUILD) -ldflags="$(GO_BUILD_LDFLAGS)" -o $(RELEASE_FOLDER)/$$OS/$$ARCH/$(TARGET)$$EXT ./cmd/tetra; \
51+
tar -czf $@ -C $(RELEASE_FOLDER)/$$OS/$$ARCH $(TARGET)$$EXT; \
52+
sha256sum $@ > [email protected]; \
53+
}
5154

5255
.PHONY: cli-clean
53-
cli-clean:
54-
rm -rf ./release
56+
cli-clean: ## Clean CLI release binaries
57+
rm -rf ./$(RELEASE_FOLDER)

0 commit comments

Comments
 (0)