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. 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
  3. zig misses some compiler_rt functions that may lead to undefined symbol error for certain targets. See also: zig compiler-rt status.
  4. CPU features are not passed to clang

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.17.1-py3-none-win_arm64.whl (875.8 kB view details)

Uploaded Python 3 Windows ARM64

cargo_zigbuild-0.17.1-py3-none-win_amd64.whl (917.8 kB view details)

Uploaded Python 3 Windows x86-64

cargo_zigbuild-0.17.1-py3-none-win32.whl (860.1 kB view details)

Uploaded Python 3 Windows x86

cargo_zigbuild-0.17.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (926.8 kB view details)

Uploaded Python 3 manylinux: glibc 2.17+ ARMv7l

cargo_zigbuild-0.17.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (960.6 kB view details)

Uploaded Python 3 manylinux: glibc 2.17+ ARM64

cargo_zigbuild-0.17.1-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.17.1-py3-none-manylinux_2_5_i686.manylinux1_i686.whl (1.1 MB view details)

Uploaded Python 3 manylinux: glibc 2.5+ i686

cargo_zigbuild-0.17.1-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl (2.0 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.17.1-py3-none-win_arm64.whl.

File metadata

File hashes

Hashes for cargo_zigbuild-0.17.1-py3-none-win_arm64.whl
Algorithm Hash digest
SHA256 a299994ebefdd0c04a86d6658cc73680d2cc95fe3f61a7b255d6554eeca066b4
MD5 294ec5ebee6453d70b71453530a28b55
BLAKE2b-256 e4e21e07c93ffea2db868b3b9b208ef040bf618389f6b937672d1f8df92fd7ff

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cargo_zigbuild-0.17.1-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 295070b06e754d2040838de7324a795e9367549aae396f2ea577fbcf0555eae2
MD5 27e7eb715d7ba173512028eaeae17a68
BLAKE2b-256 53299002ffa13c4e10d3fa5314b6e2644544d729ae1272058a30d2e93da5fd1f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cargo_zigbuild-0.17.1-py3-none-win32.whl
Algorithm Hash digest
SHA256 28f803b22a56f0189dc7b1bd243116b3e753a746b51004712e3ae3adea851086
MD5 7b5ff0a79465892d94cd9b98f93650cd
BLAKE2b-256 3d16660cd967d3fd38d571abea5d27830e956e266a2b4177ca67cd5f7a15a673

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cargo_zigbuild-0.17.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 bd996995cb8d1ac79df4eeaca6433b007827c3e11a3e34169f8a085a71a347b5
MD5 fb6a3bdf1028758db558b4f05686d9ac
BLAKE2b-256 b4acf896aee40b3db79aacc177c8a7f959f3433946affe6633649a6c8e3737e0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cargo_zigbuild-0.17.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 5f60dd4f342f2e0ab7693613af242357fa4194f8664b169bc7886c064038e66f
MD5 22561eb53a848a869c03579aa0e7f367
BLAKE2b-256 246e05281738bb37d06b7e446486b1270358b92972c0d91aeb88090b6a43ac22

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cargo_zigbuild-0.17.1-py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 66cbe50d537cb638a9929a96eac0017b1f411261d8c46ecc445b9956f0966e61
MD5 ef754aff560be495419131d77c4f6c0b
BLAKE2b-256 4fbc5f2422790a1a0aab3fe978920763076c439070a3b767fa828f0489771048

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cargo_zigbuild-0.17.1-py3-none-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 48ecad7155ad720594c54be1135bf4a2511de8f3fa500870780fdff8f89dba4d
MD5 654790489b12141c4ca5bb2c1093e12f
BLAKE2b-256 58d83d4383b59c9683a31c22dc8d338fe00d55ced44abf871d7abd9d3a21029a

See more details on using hashes here.

File details

Details for the file cargo_zigbuild-0.17.1-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.17.1-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 4a06f76b70ef6ec5fefb6d7f79e5ecd9f6b1fc0f12bb12b5661c1027c6615786
MD5 6c540576f9913ec6ece3b1198b2328a8
BLAKE2b-256 1863989c122b472dd86c8bec0b3d40d9b0bed12845c21fbc2ffda35b6ce87bee

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