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日 |
#22 在 Cargo 插件 中
69,458 每月下载量
用于 5 个crate(3 个直接使用)
95KB
2K SLoC
cargo-zigbuild
🚀 帮助我成为一名全职开源开发者,通过 在 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
使用方法
- 按照 官方文档 安装 zig,在 macOS、Windows 和 Linux 上,您也可以通过
pip3 install ziglang
从 PyPI 安装 zig - 通过 rustup 安装 Rust 目标,例如,
rustup target add aarch64-unknown-linux-gnu
- 运行
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目标不兼容。
注意事项
- 当前仅支持Linux、macOS和Windows的gnu目标,如果可以使其他目标平台工作,可以添加其他目标平台,欢迎提交拉取请求。
- 仅定期在CI上测试当前Rust 稳定 和 夜间 版本,其他版本可能不兼容。
已知的上游zig 问题
- zig cc: 根据clang解析
-target
和-mcpu
/-march
/-mtune
标志:某些Rust目标不被zig cc
识别,例如armv7-unknown-linux-gnueabihf
,通过使用-mcpu=generic
并在 #58 中显式传递目标功能作为解决方案 - 在交叉编译时能够链接到darwin框架(如CoreFoundation)的能力:将
SDKROOT
环境变量设置为macOS SDK路径以解决这个问题 - zig缺少一些
compiler_rt
函数,这可能导致某些目标出现未定义符号错误。另请参阅:[!WARNING] zig compiler-rt 状态。 - CPU功能不会传递给clang
许可证
本作品根据MIT许可证发布。许可证副本包含在 LICENSE 文件中。
依赖项
~6–18MB
~237K SLoC