47 lines
1.9 KiB
Docker
47 lines
1.9 KiB
Docker
# 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
|
|
|
|
ENV RUSTUP_TOOLCHAIN=1.88.0
|
|
|
|
RUN rustup target add \
|
|
--toolchain 1.88.0 \
|
|
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"]
|