Skip to main content

Compile Cargo project with zig as linker

Project description

cargo-zigbuild

CI Crates.io docs.rs PyPI Docker Image

🚀 Help me to become a full-time open-source developer by sponsoring me on GitHub

Compile Cargo project with zig as linker for easier cross compiling.

Installation

cargo install cargo-zigbuild

You can also install it using pip which will also install ziglang automatically:

pip install cargo-zigbuild

We also provide a Docker image which has macOS SDK pre-installed in addition to cargo-zigbuild and Rust, for example to build for 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

Usage

  1. Install zig following the official documentation, on macOS, Windows and Linux you can also install zig from PyPI via pip3 install ziglang
  2. Install Rust target via rustup, for example, rustup target add aarch64-unknown-linux-gnu
  3. Run cargo zigbuild, for example, cargo zigbuild --target aarch64-unknown-linux-gnu

Specify glibc version

cargo zigbuild supports passing glibc version in --target option, for example, to compile for glibc 2.17 with the aarch64-unknown-linux-gnu target:

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

macOS universal2 target

cargo zigbuild supports a special universal2-apple-darwin target for building macOS universal2 binaries/libraries on Rust 1.64.0 and later.

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

Note

Note that Cargo --message-format option doesn't work with universal2 target currently.

Caveats

  1. Currently only Linux, macOS and Windows gnu targets are supported, other target platforms can be added if you can make it work, pull requests are welcome.
  2. Only current Rust stable and nightly versions are regularly tested on CI, other versions may not work.

Known upstream zig issues:

  1. zig cc: parse -target and -mcpu/-march/-mtune flags according to clang: Some Rust targets aren't recognized by zig cc, for example armv7-unknown-linux-gnueabihf, workaround by using -mcpu=generic and explicitly passing target features in #58
  2. glibc 2.27 or older: fcntl64 not found, but zig's glibc headers refer it: workaround by using linker script in #14
  3. ability to link against darwin frameworks (such as CoreFoundation) when cross compiling: Set the SDKROOT environment variable to a macOS SDK path to workaround it
  4. zig misses some compiler_rt functions that may lead to undefined symbol error for certain targets.

License

This work is released under the MIT license. A copy of the license is provided in the LICENSE file.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

cargo_zigbuild-0.16.4-py3-none-win_arm64.whl (850.6 kB view details)

Uploaded Python 3 Windows ARM64

cargo_zigbuild-0.16.4-py3-none-win_amd64.whl (896.2 kB view details)

Uploaded Python 3 Windows x86-64

cargo_zigbuild-0.16.4-py3-none-win32.whl (839.2 kB view details)

Uploaded Python 3 Windows x86

cargo_zigbuild-0.16.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (882.6 kB view details)

Uploaded Python 3 manylinux: glibc 2.17+ ARMv7l

cargo_zigbuild-0.16.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (928.9 kB view details)

Uploaded Python 3 manylinux: glibc 2.17+ ARM64

cargo_zigbuild-0.16.4-py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl (1.0 MB view details)

Uploaded Python 3 manylinux: glibc 2.5+ x86-64

cargo_zigbuild-0.16.4-py3-none-manylinux_2_5_i686.manylinux1_i686.whl (1.0 MB view details)

Uploaded Python 3 manylinux: glibc 2.5+ i686

cargo_zigbuild-0.16.4-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl (1.9 MB view details)

Uploaded Python 3 macOS 10.9+ universal2 (ARM64, x86-64) macOS 10.9+ x86-64 macOS 11.0+ ARM64

File details

Details for the file cargo_zigbuild-0.16.4-py3-none-win_arm64.whl.

File metadata

File hashes

Hashes for cargo_zigbuild-0.16.4-py3-none-win_arm64.whl
Algorithm Hash digest
SHA256 ac46a36aefd7dd34c45bc56dba57904cc71c629ff5f481841efd1dba3dd41981
MD5 5196bfc4f94dd9b47120de79fa71ee57
BLAKE2b-256 24240f0b3ed950b35bded478ab75d1f624852d35b29e05d4d7859031f0e57824

See more details on using hashes here.

File details

Details for the file cargo_zigbuild-0.16.4-py3-none-win_amd64.whl.

File metadata

File hashes

Hashes for cargo_zigbuild-0.16.4-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 d825e5a9f029e7942ef4e416bcbc26e429afdc39dcb5f24b0950e4d5ab12e1c1
MD5 d26517ca7d43d0f646c50fe5d7c6ab2b
BLAKE2b-256 51872559cfb91ad14ecdba6c6a783e578ee1e4e592d2d97f7192b63178751252

See more details on using hashes here.

File details

Details for the file cargo_zigbuild-0.16.4-py3-none-win32.whl.

File metadata

File hashes

Hashes for cargo_zigbuild-0.16.4-py3-none-win32.whl
Algorithm Hash digest
SHA256 9bcea56c24363e403f5e78c01e9487e8f1b67e15b4f6cc9bf748d141d7547a34
MD5 fa175736221c355f98fa99e19270ae68
BLAKE2b-256 246d205f332e8365ab1d637223811d6b84fbba0452440104483c1047db02c6ac

See more details on using hashes here.

File details

Details for the file cargo_zigbuild-0.16.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for cargo_zigbuild-0.16.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 090f1c0078045e20e602fe8b7dd9cc626616adf7067a0522b289605695d2548a
MD5 38e20f584d7b605776ba44a8933dd297
BLAKE2b-256 904289b5e1b21fea2f71baf240fc36ca8902f034f773d8ac187da4ae26555bda

See more details on using hashes here.

File details

Details for the file cargo_zigbuild-0.16.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for cargo_zigbuild-0.16.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 999b4fd46fcd03a1da8d201c1955f40c6ee52f03d507932c5d7e5d0a927ad238
MD5 a65742090a454dc4eadec9672340f0ef
BLAKE2b-256 ee7b71c6b4258800971541a05323490c2e90e9f57c76c7b56aa6490decf03c16

See more details on using hashes here.

File details

Details for the file cargo_zigbuild-0.16.4-py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for cargo_zigbuild-0.16.4-py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 5ce88fffb6624cb9f21f552fbeb63e5827d41cad344d3f71ae8592be4dbfc8ca
MD5 8e2a5f26304509cf68bae852a0b1eff2
BLAKE2b-256 bb9d65b7b10acfce859aad5781bba5edc815157bb1183fe19d33cec4f11179f3

See more details on using hashes here.

File details

Details for the file cargo_zigbuild-0.16.4-py3-none-manylinux_2_5_i686.manylinux1_i686.whl.

File metadata

File hashes

Hashes for cargo_zigbuild-0.16.4-py3-none-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 1fdb648043b2fb0a83157d6ed206ffcbe45ed77b1b341e303dead43bba734743
MD5 a0aabd6c56a78cd6c8f6cc2543b68072
BLAKE2b-256 5738a00bfd798169e547409651e58c09535a92b987b9aae62d32c0d8bc445063

See more details on using hashes here.

File details

Details for the file cargo_zigbuild-0.16.4-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for cargo_zigbuild-0.16.4-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 f7e11005a403ba0fa7c7f585e88f9aa8ba31f17ca0b3280c56643e1b6736a621
MD5 eb6531f23353b2285233d9b3430bed43
BLAKE2b-256 4dd94ddc1d302936324d08d52d80a946f9c09f2d71248142c351a751ec7c67f6

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page