Newer
Older
hkj / Dockerfile
@Master-Hash Master-Hash 22 days ago 1 KB fix
# 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-minimal:16.0

COPY --link --from=builder /app/target/final/release/hkj /usr/local/bin/hkj

CMD ["hkj"]