ARG PYTHON_VERSION=3.12 FROM --platform=$BUILDPLATFORM python:${PYTHON_VERSION}-slim AS builder ARG TARGETPLATFORM ARG NAVIGATOR_VERSION ENV PATH="/root/.cargo/bin:${PATH}" ENV SETUPTOOLS_SCM_PRETEND_VERSION=${NAVIGATOR_VERSION} RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential \ curl \ gcc \ gcc-aarch64-linux-gnu \ gcc-x86-64-linux-gnu \ libc6-dev \ libc6-dev-arm64-cross \ libc6-dev-amd64-cross \ pkg-config \ libssl-dev \ && rm -rf /var/lib/apt/lists/* RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y RUN rustup target add x86_64-unknown-linux-gnu aarch64-unknown-linux-gnu RUN pip install --no-cache-dir maturin WORKDIR /build COPY . . RUN case "${TARGETPLATFORM}" in \ "linux/amd64") \ export CARGO_BUILD_TARGET="x86_64-unknown-linux-gnu" \ && export CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER="x86_64-linux-gnu-gcc" ;; \ "linux/arm64") \ export CARGO_BUILD_TARGET="aarch64-unknown-linux-gnu" \ && export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER="aarch64-linux-gnu-gcc" ;; \ *) \ echo "Unsupported TARGETPLATFORM: ${TARGETPLATFORM}" >&2 \ && exit 1 ;; \ esac \ && maturin build --release --target "${CARGO_BUILD_TARGET}" --out /wheels FROM scratch AS wheels COPY --from=builder /wheels/*.whl /