#cargo-build #cargo #zig #链接器 #交叉编译 #目标 #版本

bin+lib cargo-zigbuild

使用 zig 作为链接器编译 Cargo 项目

90 个版本

0.19.1 2024年7月9日
0.18.4 2024年4月24日
0.18.3 2024年1月26日
0.18.1 2023年12月3日
0.7.1 2022年3月31日

#22Cargo 插件

Download history 10910/week @ 2024-05-04 9906/week @ 2024-05-11 9696/week @ 2024-05-18 9351/week @ 2024-05-25 9485/week @ 2024-06-01 9403/week @ 2024-06-08 9468/week @ 2024-06-15 11072/week @ 2024-06-22 8639/week @ 2024-06-29 10552/week @ 2024-07-06 11556/week @ 2024-07-13 14453/week @ 2024-07-20 16021/week @ 2024-07-27 14971/week @ 2024-08-03 16960/week @ 2024-08-10 19368/week @ 2024-08-17

69,458 每月下载量
用于 5 个crate(3 个直接使用)

MIT 许可证

95KB
2K SLoC

cargo-zigbuild

CI Crates.io docs.rs PyPI Docker Image

🚀 帮助我成为一名全职开源开发者,通过 在 GitHub 上赞助我

使用 zig 作为 链接器简化交叉编译 编译 Cargo 项目。

安装

cargo install --locked cargo-zigbuild

您也可以使用 pip 安装它,这也会自动安装 ziglang

pip install cargo-zigbuild

我们还提供了一个 Docker 镜像,它除了包含 cargo-zigbuild 和 Rust,还预装了 macOS SDK,例如用于构建 x86_64 macOS

docker run --rm -it -v $(pwd):/io -w /io messense/cargo-zigbuild \
  cargo zigbuild --release --target x86_64-apple-darwin

Packaging status

使用方法

  1. 按照 官方文档 安装 zig,在 macOS、Windows 和 Linux 上,您也可以通过 pip3 install ziglang 从 PyPI 安装 zig
  2. 通过 rustup 安装 Rust 目标,例如,rustup target add aarch64-unknown-linux-gnu
  3. 运行 cargo zigbuild,例如,cargo zigbuild --target aarch64-unknown-linux-gnu

指定 glibc 版本

cargo zigbuild 支持 --target 选项传递 glibc 版本,例如,使用 aarch64-unknown-linux-gnu 目标编译 glibc 2.17

cargo zigbuild --target aarch64-unknown-linux-gnu.2.17

[注意] 使用针对glibc版本的特性时存在各种[!WARNING] 注意事项

  • 如果您没有提供 --target,则Zig不会被使用,命令实际上运行的是一个常规的 cargo build
  • 如果您指定了无效的glibc版本,cargo zigbuild 不会传递来自 zig cc 的关于所选回退版本的警告。
  • 此功能不一定与在构建主机上动态链接到特定版本的glibc的行为相匹配。
    • 可以指定2.32版本,但运行在只有2.31可用的主机上时应该错误退出。
    • 同时指定2.33将在运行在具有glibc 2.31的主机上时正确地检测到不兼容。
  • 某些 RUSTFLAGS,如 -C 链接器 会使Zig退出,而 -L 路径/to/files 将使Zig忽略 -C 目标-功能=+crt-静态
  • 将glibc版本静态链接到 -C 目标-功能=+crt-静态 不受[!WARNING]支持([!WARNING]上游 zig cc 缺乏支持)

macOS universal2目标

cargo zigbuild 支持一个特殊的 universal2-apple-darwin 目标,用于在Rust 1.64.0及以后版本上构建macOS universal2二进制文件/库。

rustup target add x86_64-apple-darwin
rustup target add aarch64-apple-darwin
cargo zigbuild --target universal2-apple-darwin

注意

请注意,当前Cargo --message-format 选项与universal2目标不兼容。

注意事项

  1. 当前仅支持Linux、macOS和Windows的gnu目标,如果可以使其他目标平台工作,可以添加其他目标平台,欢迎提交拉取请求。
  2. 仅定期在CI上测试当前Rust 稳定夜间 版本,其他版本可能不兼容。

已知的上游zig 问题

  1. zig cc: 根据clang解析 -target-mcpu/-march/-mtune 标志:某些Rust目标不被 zig cc 识别,例如 armv7-unknown-linux-gnueabihf,通过使用 -mcpu=generic 并在 #58 中显式传递目标功能作为解决方案
  2. 在交叉编译时能够链接到darwin框架(如CoreFoundation)的能力:将 SDKROOT 环境变量设置为macOS SDK路径以解决这个问题
  3. zig缺少一些 compiler_rt 函数,这可能导致某些目标出现未定义符号错误。另请参阅:[!WARNING] zig compiler-rt 状态
  4. CPU功能不会传递给clang

许可证

本作品根据MIT许可证发布。许可证副本包含在 LICENSE 文件中。

依赖项

~6–18MB
~237K SLoC