/ Dockerfile
Dockerfile
1 FROM rust:1.85-bookworm@sha256:e51d0265072d2d9d5d320f6a44dde6b9ef13653b035098febd68cce8fa7c0bc4 2 3 RUN apt-get update && apt-get install -y --no-install-recommends \ 4 musl-tools=1.2.3-1 \ 5 gcc-aarch64-linux-gnu=4:12.2.0-3 \ 6 libc6-dev-arm64-cross=2.36-8cross1 \ 7 gcc-mingw-w64-x86-64=12.2.0-14+25.2 \ 8 clang \ 9 lld \ 10 && rm -rf /var/lib/apt/lists/* 11 12 13 RUN mkdir -p /freebsd && \ 14 curl -fsSL https://download.freebsd.org/releases/amd64/14.3-RELEASE/base.txz | \ 15 tar -xJf - -C /freebsd ./lib ./usr/lib ./usr/include 16 17 18 RUN printf '#!/bin/sh\nexec clang --target=x86_64-unknown-freebsd14 --sysroot=/freebsd -fuse-ld=lld "$@"\n' \ 19 > /usr/local/bin/x86_64-freebsd-clang && chmod +x /usr/local/bin/x86_64-freebsd-clang 20 21 RUN rustup target add \ 22 x86_64-unknown-linux-musl \ 23 aarch64-unknown-linux-musl \ 24 x86_64-pc-windows-gnu \ 25 x86_64-unknown-freebsd 26 27 ENV CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER=aarch64-linux-gnu-gcc \ 28 CC_aarch64_unknown_linux_musl=aarch64-linux-gnu-gcc \ 29 CARGO_TARGET_X86_64_PC_WINDOWS_GNU_LINKER=x86_64-w64-mingw32-gcc \ 30 CARGO_TARGET_X86_64_UNKNOWN_FREEBSD_LINKER=/usr/local/bin/x86_64-freebsd-clang \ 31 CC_x86_64_unknown_freebsd=/usr/local/bin/x86_64-freebsd-clang \ 32 RUSTFLAGS="-C strip=symbols" \ 33 CARGO_INCREMENTAL=0 \ 34 CARGO_NET_RETRY=10 \ 35 CARGO_HTTP_TIMEOUT=120 36 37 WORKDIR /src 38 39 40 COPY Cargo.toml Cargo.lock build.rs ./ 41 RUN mkdir -p src/providers && echo 'fn main(){}' > src/main.rs \ 42 && cargo build --release --target x86_64-unknown-linux-musl \ 43 && cargo build --release --target aarch64-unknown-linux-musl \ 44 && cargo build --release --target x86_64-pc-windows-gnu \ 45 && cargo build --release --target x86_64-unknown-freebsd \ 46 && rm -rf src/ \ 47 && rm -f target/x86_64-unknown-linux-musl/release/bupdate \ 48 && rm -f target/aarch64-unknown-linux-musl/release/bupdate \ 49 && rm -f target/x86_64-pc-windows-gnu/release/bupdate.exe \ 50 && rm -f target/x86_64-unknown-freebsd/release/bupdate 51 52 53 COPY src/ src/ 54 55 ARG SOURCE_DATE_EPOCH=0 56 57 RUN touch src/main.rs build.rs \ 58 && SOURCE_DATE_EPOCH=${SOURCE_DATE_EPOCH} \ 59 cargo build --release --target x86_64-unknown-linux-musl \ 60 && SOURCE_DATE_EPOCH=${SOURCE_DATE_EPOCH} \ 61 cargo build --release --target aarch64-unknown-linux-musl \ 62 && SOURCE_DATE_EPOCH=${SOURCE_DATE_EPOCH} \ 63 cargo build --release --target x86_64-pc-windows-gnu \ 64 && SOURCE_DATE_EPOCH=${SOURCE_DATE_EPOCH} \ 65 cargo build --release --target x86_64-unknown-freebsd \ 66 && mkdir -p /out \ 67 && cp target/x86_64-unknown-linux-musl/release/bupdate /out/bupdate-linux-amd64 \ 68 && cp target/aarch64-unknown-linux-musl/release/bupdate /out/bupdate-linux-arm64 \ 69 && cp target/x86_64-pc-windows-gnu/release/bupdate.exe /out/bupdate-windows-amd64.exe \ 70 && cp target/x86_64-unknown-freebsd/release/bupdate /out/bupdate-freebsd-amd64