yggdrasil/.cargo/config.toml
xfy a4331bd813 feat(build): add FreeBSD x86_64 cross-compile support
方案 A(clang + lld + 本地 sysroot)。rustc 为 freebsd target 链接的系统库
(libc/libexecinfo/libgcc_s/libthr)及 sysinfo 依赖的 freebsd 专有库
(libkvm/libmemstat/libprocstat/libdevstat)需 FreeBSD 运行时,无法纯靠
clang+lld 无 sysroot 完成;故从 FreeBSD 15.1 base.txz 解出 crt 对象 + 系统库
到 .freebsd-sysroot/(gitignored,machine-local)。

- .cargo/config.toml: freebsd target 配置作为注释模板(sysroot 路径机器相关,
  不硬编码进仓库);linker 经 rustflags 的 -C linker=clang 设置,使 Makefile
  能用 CARGO_TARGET_*_RUSTFLAGS 环境变量整体注入。
- Makefile: 新增 freebsd-sysroot(幂等下载+解压 base.txz)与 build-freebsd
  (release server 二进制交叉编译)target。server 用 cargo 直出而非 dx CLI,
  因 dx 对该 target 的支持未经验证。
- .gitignore: 忽略 .freebsd-sysroot/。
- AGENTS.md: 补充构建命令说明。

实测 release 二进制 16MB,stripped ELF for FreeBSD 15.1,动态依赖均为
FreeBSD base 自带库(libc.so.7 libthr.so.3 libkvm.so.7 等)。
2026-07-01 13:40:00 +08:00

37 lines
1.7 KiB
TOML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Workaround for Dioxus 0.7.9 leaking the wasm_js getrandom backend cfg
# into the server build. We disable DX's automatic flag in the Makefile
# and set it only for the wasm32 target here.
[target.wasm32-unknown-unknown]
rustflags = ["--cfg", "getrandom_backend=\"wasm_js\""]
# Uncomment and adjust after installing a musl C toolchain:
[target.x86_64-unknown-linux-musl]
linker = "x86_64-linux-musl-gcc"
# FreeBSD x86_64 交叉编译(方案 Aclang + lld + 本地 sysroot
#
# rustc 为 freebsd target 链接的系统库libc/libexecinfo/libgcc_s/libthr 等)及 sysinfo
# 依赖的 freebsd 专有库libkvm/libmemstat/libprocstat/libdevstat需 FreeBSD 运行时,
# 因此除 clang + lld 外还需一个本地 sysroot由 base.txz 解出,见 .freebsd-sysroot/)。
# ringC + 预生成 ELF 汇编freebsd 归入 LINUX_ABI与 zstd-sysbundled C用 clang 编译。
#
# sysroot 路径与机器绑定,故此 target 配置默认注释;`make build-freebsd` 会用环境变量
# CARGO_TARGET_X86_64_UNKNOWN_FREEBSD_RUSTFLAGS 注入当前机器的 sysroot 路径。
#
# 准备步骤:
# 1. pacman -S clang lld # 或 apt install clang lld
# 2. rustup target add x86_64-unknown-freebsd
# 3. make freebsd-sysroot # 下载 base.txz 并解压到 .freebsd-sysroot/
# 4. make build-freebsd # 交叉编译 release server 二进制
#
# 手动调用Makefile 之外)时取消注释并把 <SYSROOT> 改成实际路径:
# [target.x86_64-unknown-freebsd]
# linker = "clang"
# rustflags = [
# "-C", "link-arg=--target=x86_64-unknown-freebsd",
# "-C", "link-arg=-fuse-ld=lld",
# "-C", "link-arg=--sysroot=<SYSROOT>",
# "-C", "link-arg=-L<SYSROOT>/usr/lib",
# "-C", "link-arg=-L<SYSROOT>/lib",
# ]