# https://github.com/f2calv/multi-arch-container-rust/blob/main/Dockerfile
# sudo docker buildx build --platform linux/amd64,linux/arm64 -t hkj:latest --output type=image,compression=zstd .
FROM --platform=${BUILDPLATFORM} registry.opensuse.org/opensuse/bci/gcc:latest AS common
# ENV RUSTUP_DIST_SERVER=https://mirrors.tuna.tsinghua.edu.cn/rustup
RUN zypper in -y cmake rustup && rustup install stable
FROM common AS builder
ARG TARGETPLATFORM
ARG BUILDPLATFORM
WORKDIR /app
COPY Cargo.toml Cargo.lock ./
RUN cargo fetch
RUN if [ "${TARGETPLATFORM}" != "${BUILDPLATFORM}" ]; then \
if [ "${TARGETPLATFORM}" == "linux/amd64" ]; then \
zypper in -y cross-x86_64-gcc15 ; \
rustup target add x86_64-unknown-linux-gnu ; \
elif [ "${TARGETPLATFORM}" == "linux/arm64" ]; then \
zypper in -y cross-aarch64-gcc15 ; \
rustup target add aarch64-unknown-linux-gnu ; \
fi; \
fi
COPY src ./src
RUN if [ "${TARGETPLATFORM}" == "linux/amd64" ]; then \
export CARGO_BUILD_TARGET=x86_64-unknown-linux-gnu ; \
export CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER=x86_64-suse-linux-gcc-15 ; \
export CC_X86_64_UNKNOWN_LINUX_GNU=x86_64-suse-linux-gcc-15 ; \
export CXX_X86_64_UNKNOWN_LINUX_GNU=x86_64-suse-linux-g++-15 ; \
export CC=x86_64-suse-linux-gcc-15 ; \
export CXX=x86_64-suse-linux-g++-15 ; \
elif [ "${TARGETPLATFORM}" == "linux/arm64" ]; then \
export CARGO_BUILD_TARGET=aarch64-unknown-linux-gnu ; \
export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-suse-linux-gcc-15 ; \
export CC_AARCH64_UNKNOWN_LINUX_GNU=aarch64-suse-linux-gcc-15 ; \
export CXX_AARCH64_UNKNOWN_LINUX_GNU=aarch64-suse-linux-g++-15 ; \
export CC=aarch64-suse-linux-gcc-15 ; \
export CXX=aarch64-suse-linux-g++-15 ; \
fi && cargo build --release && mv "/app/target/${CARGO_BUILD_TARGET}" /app/target/final
FROM registry.suse.com/bci/bci-micro:16.0
COPY --link --from=builder /app/target/final/release/hkj /usr/local/bin/hkj
CMD ["hkj"]