Docker, Cargo: Add multi-arch builds for arm64, x86_64

Builds static binaries instead to be runnable from scratch. This eases
the build process, as we don't have to depend on docker's buildx.
Now images for both arm64 and x86_64 can be built on x86_64 platform
alone.

Signed-off-by: Gunwant Jain <mail@wantguns.dev>
This commit is contained in:
Gunwant Jain 2022-01-18 10:03:04 +05:30
parent 33583b71d4
commit e17a5f7cdb
2 changed files with 30 additions and 5 deletions

7
.cargo/config.toml Normal file
View File

@ -0,0 +1,7 @@
[build]
target = "x86_64-unknown-linux-gnu"
rustflags = ["-C", "target-feature=+crt-static"]
[target.aarch64-unknown-linux-gnu]
linker = "aarch64-linux-gnu-gcc"
rustflags = ["-C", "target-feature=+crt-static"]

View File

@ -1,12 +1,30 @@
FROM rust:1 as builder
###### Builder Image
FROM rust as builder
WORKDIR /app
COPY . .
RUN RUSTFLAGS='-C target-feature=+crt-static' cargo install --target x86_64-unknown-linux-gnu --path .
# scratch does not have the mkdir binary, so we create a folder here
RUN mkdir -p empty_upload
ARG ARCH
RUN __ARCH="$(dpkg --print-architecture)"; \
[ -z $ARCH ] || __ARCH=$ARCH; \
case "$__ARCH" in \
arm64) \
export __TARGET='aarch64-unknown-linux-gnu'; \
apt update && apt upgrade -y; \
apt install -y gcc-aarch64-linux-gnu; \
rustup target add aarch64-unknown-linux-gnu; \
;; \
amd64) export __TARGET='x86_64-unknown-linux-gnu' ;; \
esac; \
cargo install --target $__TARGET --path .;
RUN cargo clean
FROM debian:buster-slim as runner
WORKDIR /app
RUN mkdir -p upload
###### Runner Image
FROM scratch as runner
COPY --from=builder /app/empty_upload upload
COPY ./client upload/client
COPY ./templates templates
COPY ./static static