# syntax=docker/dockerfile:1 # FreeBSD 15.1 sysroot used only for headers and target libraries. FROM ubuntu:24.04 AS sysroot ARG FREEBSD_RELEASE=15.1-RELEASE ARG FREEBSD_MIRROR=https://download.freebsd.org/releases/amd64/amd64 RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ ca-certificates wget xz-utils \ && rm -rf /var/lib/apt/lists/* WORKDIR /tmp/freebsd RUN set -eux; \ url="${FREEBSD_MIRROR}/${FREEBSD_RELEASE}"; \ wget -q "${url}/base.txz" -O base.txz; \ wget -q "${url}/MANIFEST" -O MANIFEST; \ expected="$(awk '$1 == "base.txz" { print $2; exit }' MANIFEST)"; \ test -n "$expected"; \ echo "$expected base.txz" | sha256sum -c -; \ mkdir -p /freebsd-sysroot; \ tar -xJf base.txz -C /freebsd-sysroot ./lib ./usr/include ./usr/lib # RustProxy requires rust-version = 1.88. FROM rust:1.88-slim-bookworm AS builder RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ ca-certificates clang lld llvm file git perl pkg-config python3 \ && rm -rf /var/lib/apt/lists/* COPY --from=sysroot /freebsd-sysroot /opt/freebsd-sysroot RUN rustup target add x86_64-unknown-freebsd ENV CARGO_TARGET_X86_64_UNKNOWN_FREEBSD_LINKER=clang \ CC_x86_64_unknown_freebsd=clang \ CXX_x86_64_unknown_freebsd=clang++ \ AR_x86_64_unknown_freebsd=llvm-ar \ RANLIB_x86_64_unknown_freebsd=llvm-ranlib \ RUST_PROXY_PYTHON=python3 \ CFLAGS_x86_64_unknown_freebsd="--target=x86_64-unknown-freebsd15.1 --sysroot=/opt/freebsd-sysroot" \ CXXFLAGS_x86_64_unknown_freebsd="--target=x86_64-unknown-freebsd15.1 --sysroot=/opt/freebsd-sysroot" \ CARGO_TARGET_X86_64_UNKNOWN_FREEBSD_RUSTFLAGS="-C link-arg=--target=x86_64-unknown-freebsd15.1 -C link-arg=--sysroot=/opt/freebsd-sysroot -C link-arg=-fuse-ld=lld" WORKDIR /src CMD ["bash"]