/ 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