Skip to content

Commit 66448e0

Browse files
committed
Add build support for arm64-linux
Adds support for arm64-linux. Uses buildx to build multi-platform image. Spawned by: googleforgames#611
1 parent 00345be commit 66448e0

File tree

3 files changed

+19
-9
lines changed

3 files changed

+19
-9
lines changed

.dockerignore

+2-1
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
*.exe
4141
*.rlib
4242

43-
!target/image/quilkin
43+
!target/image/linux/arm64/quilkin
44+
!target/image/linux/amd64/quilkin
4445
!dependencies-src.zip
4546
!image/quilkin.yaml

build/Makefile

+15-7
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ gcloud_mount_args := -v $(build_path)/.config/gcloud:/root/.config/gcloud
5757
cargo_build_x86_64_linux := build --profile=lto --target x86_64-unknown-linux-gnu
5858
cargo_build_x86_64_apple := build --release --target x86_64-apple-darwin
5959
cargo_build_aarch64-apple := build --release --target aarch64-apple-darwin
60+
cargo_build_aarch64_linux := build --profile=lto --target aarch64-unknown-linux-gnu
6061
cargo_build_x86_64_windows := build --release --target x86_64-pc-windows-gnu
6162

6263
# _____ _
@@ -135,14 +136,18 @@ binary-archive: ensure-build-image build-licence-report build-all-binaries
135136
docker run --rm $(common_rust_args) -w $(CARGO_TARGET_DIR) \
136137
--entrypoint=bash $(BUILD_IMAGE_TAG) -c 'cp ../../license.html . && zip ../../quilkin-$(package_version).zip ./*/lto/quilkin ./*/lto/quilkin.exe ./license.html'
137138

138-
# Build binary for x86_64-unknown-linux-gnu.
139+
# Build binary for x86_64-unknown-linux-gnu and aarch64-unknown-linux-gnu
139140
# Use BUILD_LOCAL=1 to build through local cargo rather than through the build container.
140141
build-linux-binary: ensure-build-image gen-protobuf
141142
ifdef BUILD_LOCAL
142143
cargo $(cargo_build_x86_64_linux)
144+
cargo $(cargo_build_aarch64_linux)
143145
else
144-
docker run --rm $(common_rust_args) -e "CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER=/usr/bin/x86_64-linux-gnu-gcc" \
145-
--entrypoint=cargo $(BUILD_IMAGE_TAG) $(cargo_build_x86_64_linux)
146+
docker run --rm $(common_rust_args) \
147+
-e "CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER=/usr/bin/x86_64-linux-gnu-gcc" \
148+
-e "CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=/usr/bin/aarch64-linux-gnu-gcc" \
149+
$(BUILD_IMAGE_TAG) \
150+
sh -c "cargo $(cargo_build_x86_64_linux) && cargo $(cargo_build_aarch64_linux) --no-default-features"
146151
endif
147152

148153
# Build binary for x86_64-pc-windows-gnu
@@ -179,15 +184,18 @@ endif
179184
# Use BUILD_LOCAL=1 to build the binary through local cargo rather than through the build container.
180185
build-image: ensure-build-image build-licence-report build-linux-binary
181186
build-image:
182-
-mkdir -p "$(project_path)/target/image/"
187+
-mkdir -p "$(project_path)/target/image/linux/amd64"
188+
-mkdir -p "$(project_path)/target/image/linux/arm64"
183189
ifdef BUILD_LOCAL
184-
cp "$(project_path)/target/x86_64-unknown-linux-gnu/lto/quilkin" "$(project_path)/target/image/"
190+
cp "$(project_path)/target/x86_64-unknown-linux-gnu/lto/quilkin" "$(project_path)/target/image/linux/amd64/"
191+
cp "$(project_path)/target/aarch64-unknown-linux-gnu/lto/quilkin" "$(project_path)/target/image/linux/arm64/"
185192
else
186-
cp "$(project_path)/target/build-image/x86_64-unknown-linux-gnu/lto/quilkin" "$(project_path)/target/image/"
193+
cp "$(project_path)/target/build-image/x86_64-unknown-linux-gnu/lto/quilkin" "$(project_path)/target/image/linux/amd64/"
194+
cp "$(project_path)/target/build-image/aarch64-unknown-linux-gnu/lto/quilkin" "$(project_path)/target/image/linux/arm64/"
187195
endif
188196
docker run --rm $(common_rust_args) \
189197
--entrypoint=bash $(BUILD_IMAGE_TAG) -c './image/archive_dependencies.sh'
190-
docker build --platform=linux/amd64 -t $(IMAGE_TAG) -f $(project_path)/image/Dockerfile $(project_path)
198+
docker buildx build --platform=linux/amd64,linux/arm64 -t $(IMAGE_TAG) -f $(project_path)/image/Dockerfile $(project_path)
191199

192200
# Generates the HTML report of all open source licence dependencies
193201
build-licence-report: ensure-build-image

image/Dockerfile

+2-1
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,10 @@
1414

1515
FROM gcr.io/distroless/cc-debian12:nonroot as base
1616
WORKDIR /
17+
ARG TARGETPLATFORM
1718
COPY ./license.html .
1819
COPY ./dependencies-src.zip .
19-
COPY --chown=nonroot:nonroot ./target/image/quilkin .
20+
COPY --chown=nonroot:nonroot ./target/image/${TARGETPLATFORM}/quilkin .
2021

2122
USER nonroot:nonroot
2223
ENTRYPOINT ["/quilkin"]

0 commit comments

Comments
 (0)