跳转到主要内容

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

项目描述

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镜像,它预装了macOS SDK,包括cargo-zigbuild和Rust,例如用于构建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

[!NOTE] 使用glibc版本目标功能存在各种注意事项

  • 如果您不提供--target,则Zig不会被使用,命令实际上运行了一个常规的cargo build
  • 如果您指定了无效的glibc版本,cargo zigbuild将不会传递来自zig cc的关于选择回退版本的警告。
  • 此功能不一定匹配在构建主机上动态链接到特定版本的 glibc 的行为。
    • 可以指定版本 2.32,但应在主机上只有 2.31 可用的情况下出错而不是运行。
    • 同时,指定 2.33 将会在运行在 glibc 2.31 的主机上正确检测为不兼容。
  • 某些 RUSTFLAGS,如 -C linker,会禁用 Zig,而 -L path/to/files 将使 Zig 忽略 -C target-feature=+crt-static
  • 静态链接到 glibc 版本的 -C target-feature=+crt-static 不受支持(上游 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 目标,如果可以使其工作,可以添加其他目标平台,欢迎提交拉取请求。
  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 函数,这可能导致某些目标出现未定义符号错误。另请参阅:[zig compiler-rt 状态](https://github.com/ziglang/zig/blob/master/lib/compiler_rt/README.md)
  4. 不将 CPU 功能传递给 clang

许可证

此作品根据 MIT 许可证发布。许可文件的副本在 LICENSE 文件中提供。

项目详情


发布历史 发布通知 | RSS 源

下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

此版本没有可用的源分布文件。请参阅生成分布存档的教程。

构建分布

cargo_zigbuild-0.19.3-py3-none-win_arm64.whl (1.2 MB 查看哈希)

上传时间: Python 3 Windows ARM64

cargo_zigbuild-0.19.3-py3-none-win_amd64.whl (1.3 MB 查看哈希)

上传时间: Python 3 Windows x86-64

cargo_zigbuild-0.19.3-py3-none-win32.whl (1.2 MB 查看哈希)

上传时间: Python 3 Windows x86

cargo_zigbuild-0.19.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.5 MB 查看哈希)

上传时间: Python 3 manylinux: glibc 2.17+ ARMv7l

cargo_zigbuild-0.19.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.6 MB 查看哈希)

上传时间: Python 3 manylinux: glibc 2.17+ ARM64

cargo_zigbuild-0.19.3-py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl (1.6 MB 查看哈希)

上传时间: Python 3 manylinux: glibc 2.5+ x86-64

cargo_zigbuild-0.19.3-py3-none-manylinux_2_5_i686.manylinux1_i686.whl (1.6 MB 查看哈希)

上传时间: Python 3 manylinux: glibc 2.5+ i686

cargo_zigbuild-0.19.3-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (2.7 MB 查看哈希)

上传时间: Python 3 macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64