diff --git a/packages/client-proxy/Makefile b/packages/client-proxy/Makefile index 383ea0fc9f..36e0e3d4b1 100644 --- a/packages/client-proxy/Makefile +++ b/packages/client-proxy/Makefile @@ -6,6 +6,13 @@ PREFIX := $(strip $(subst ",,$(PREFIX))) HOSTNAME := $(shell hostname 2> /dev/null || hostnamectl hostname 2> /dev/null) $(if $(HOSTNAME),,$(error Failed to determine hostname: both 'hostname' and 'hostnamectl' failed)) +# Architecture for builds. Defaults to local arch; override for cross-compilation +# (e.g., BUILD_ARCH=amd64 make build-and-upload from an ARM64 host). +BUILD_ARCH ?= $(shell go env GOARCH) +# Docker platform string. Override for multi-arch builds: +# BUILD_PLATFORM=linux/amd64,linux/arm64 make build-and-upload +BUILD_PLATFORM ?= linux/$(BUILD_ARCH) + ifeq ($(PROVIDER),aws) IMAGE_REGISTRY := $(AWS_ACCOUNT_ID).dkr.ecr.$(AWS_REGION).amazonaws.com/$(PREFIX)core/client-proxy else @@ -16,7 +23,7 @@ endif build: # Allow for passing commit sha directly for docker builds $(eval COMMIT_SHA ?= $(shell git rev-parse --short HEAD)) - CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o bin/client-proxy -ldflags "-X=main.commitSHA=$(COMMIT_SHA)" . + CGO_ENABLED=0 GOOS=linux GOARCH=$(BUILD_ARCH) go build -o bin/client-proxy -ldflags "-X=main.commitSHA=$(COMMIT_SHA)" . .PHONY: build-debug build-debug: @@ -26,7 +33,7 @@ build-debug: .PHONY: build-and-upload build-and-upload: $(eval COMMIT_SHA := $(shell git rev-parse --short HEAD)) - @docker buildx build --platform linux/amd64 --tag $(IMAGE_REGISTRY) --push --build-arg COMMIT_SHA="$(COMMIT_SHA)" -f ./Dockerfile .. + @docker buildx build --platform $(BUILD_PLATFORM) --tag $(IMAGE_REGISTRY) --push --build-arg COMMIT_SHA="$(COMMIT_SHA)" -f ./Dockerfile .. .PHONY: run run: diff --git a/packages/envd/Makefile b/packages/envd/Makefile index f073d37ae7..b54f648785 100644 --- a/packages/envd/Makefile +++ b/packages/envd/Makefile @@ -7,6 +7,13 @@ LDFLAGS=-ldflags "-X=main.commitSHA=$(BUILD)" AWS_BUCKET_PREFIX ?= $(PREFIX)$(AWS_ACCOUNT_ID)- GCP_BUCKET_PREFIX ?= $(GCP_PROJECT_ID)- +# Architecture for builds. Defaults to local arch; override for cross-compilation +# (e.g., BUILD_ARCH=amd64 make build from an ARM64 host). +BUILD_ARCH ?= $(shell go env GOARCH) +# Docker platform string. Override for cross-platform builds: +# BUILD_PLATFORM=linux/arm64 make start-docker +BUILD_PLATFORM ?= linux/$(BUILD_ARCH) + .PHONY: init init: brew install protobuf @@ -20,17 +27,17 @@ else endif build: - CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -o bin/envd ${LDFLAGS} + CGO_ENABLED=0 GOOS=linux GOARCH=$(BUILD_ARCH) go build -a -o bin/envd ${LDFLAGS} build-debug: CGO_ENABLED=1 go build -race -gcflags=all="-N -l" -o bin/debug/envd ${LDFLAGS} start-docker: make build - DOCKER_BUILDKIT=1 docker build --platform linux/amd64 -t envd-debug . -f debug.Dockerfile + DOCKER_BUILDKIT=1 docker build --platform $(BUILD_PLATFORM) -t envd-debug . -f debug.Dockerfile docker run \ --name envd \ - --platform linux/amd64 \ + --platform $(BUILD_PLATFORM) \ -p 49983:49983 \ -p 2345:2345 \ -p 9999:9999 \ diff --git a/packages/orchestrator/Makefile b/packages/orchestrator/Makefile index 94da7d669b..5feb4af992 100644 --- a/packages/orchestrator/Makefile +++ b/packages/orchestrator/Makefile @@ -7,6 +7,13 @@ GCP_BUCKET_PREFIX ?= $(GCP_PROJECT_ID)- HOSTNAME := $(shell hostname 2> /dev/null || hostnamectl hostname 2> /dev/null) $(if $(HOSTNAME),,$(error Failed to determine hostname: both 'hostname' and 'hostnamectl' failed)) +# Architecture for builds. Defaults to local arch; override for cross-compilation +# (e.g., BUILD_ARCH=amd64 make build from an ARM64 host). +BUILD_ARCH ?= $(shell go env GOARCH) +# Docker platform string. Override for cross-platform builds: +# BUILD_PLATFORM=linux/arm64 make build +BUILD_PLATFORM ?= linux/$(BUILD_ARCH) + .PHONY: init init: brew install protobuf @@ -18,18 +25,18 @@ generate: .PHONY: build build: $(eval COMMIT_SHA := $(shell git rev-parse --short HEAD)) - @docker build --platform linux/amd64 --output=bin --build-arg COMMIT_SHA="$(COMMIT_SHA)" -f ./Dockerfile .. + @docker build --platform $(BUILD_PLATFORM) --output=bin --build-arg COMMIT_SHA="$(COMMIT_SHA)" -f ./Dockerfile .. .PHONY: build-local build-local: # Allow for passing commit sha directly for docker builds $(eval COMMIT_SHA ?= $(shell git rev-parse --short HEAD)) - CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -o bin/orchestrator -ldflags "-X=main.commitSHA=$(COMMIT_SHA)" . - CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -o bin/clean-nfs-cache -ldflags "-X=main.commitSHA=$(COMMIT_SHA)" ./cmd/clean-nfs-cache + CGO_ENABLED=1 GOOS=linux GOARCH=$(BUILD_ARCH) go build -o bin/orchestrator -ldflags "-X=main.commitSHA=$(COMMIT_SHA)" . + CGO_ENABLED=1 GOOS=linux GOARCH=$(BUILD_ARCH) go build -o bin/clean-nfs-cache -ldflags "-X=main.commitSHA=$(COMMIT_SHA)" ./cmd/clean-nfs-cache .PHONY: build-debug build-debug: - CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -race -gcflags=all="-N -l" -o bin/orchestrator . + CGO_ENABLED=1 GOOS=linux GOARCH=$(BUILD_ARCH) go build -race -gcflags=all="-N -l" -o bin/orchestrator . .PHONY: run-debug run-debug: @@ -100,12 +107,12 @@ test: .PHONY: test-docker test-docker: - @echo "Running orchestrator tests in Docker (AMD64 Linux)..." + @echo "Running orchestrator tests in Docker ($(BUILD_PLATFORM))..." @rm -rf .shared/ @cp -r ../shared .shared/ @rm -rf .clickhouse/ @cp -r ../clickhouse .clickhouse/ - @docker build --platform linux/amd64 -f test.Dockerfile --no-cache-filter runner --progress=plain -t orchestrator-test . + @docker build --platform $(BUILD_PLATFORM) -f test.Dockerfile --no-cache-filter runner --progress=plain -t orchestrator-test . @rm -rf .shared/ @rm -rf .clickhouse/ @echo "Done"