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

Uploaded Python 3 Windows ARM64

cargo_zigbuild-0.17.5-py3-none-win_amd64.whl (907.1 kB view details)

Uploaded Python 3 Windows x86-64

cargo_zigbuild-0.17.5-py3-none-win32.whl (847.4 kB view details)

Uploaded Python 3 Windows x86

cargo_zigbuild-0.17.5-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (933.0 kB view details)

Uploaded Python 3 manylinux: glibc 2.17+ ARMv7l

cargo_zigbuild-0.17.5-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (979.7 kB view details)

Uploaded Python 3 manylinux: glibc 2.17+ ARM64

cargo_zigbuild-0.17.5-py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl (1.1 MB view details)

Uploaded Python 3 manylinux: glibc 2.5+ x86-64

cargo_zigbuild-0.17.5-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.5-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.5-py3-none-win_arm64.whl.

File metadata

File hashes

Hashes for cargo_zigbuild-0.17.5-py3-none-win_arm64.whl
Algorithm Hash digest
SHA256 3fe1004715c74d231775f6e4a4d94555282f88e2ff67c5ae9a4b4c6072636025
MD5 ade0dfc807d4814d8f5316f713e62370
BLAKE2b-256 c0d0e3b217ac6e519b8fa2d0bad351172ed9e714770927bcb97e9c2e3a091665

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cargo_zigbuild-0.17.5-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 6700ceb27b53e3cee0f19a41275db367a98ee31d18da2a56ea77fe72d3639451
MD5 358905fff9104d3cc21383f8fd80303b
BLAKE2b-256 6c963676793f160b961d794eeb1fb9e2eae47c37ce1a09f15fd083251b98c10c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cargo_zigbuild-0.17.5-py3-none-win32.whl
Algorithm Hash digest
SHA256 7393d3d1e2bf30346d5f791968473a350cad8030727709aca19f8c8cb97f0319
MD5 ae92fabd6b497295baf70362be21879b
BLAKE2b-256 2775f0523085fd614dc9fc01e78c0233ca4ebaad91f35139d44b485baafcb780

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cargo_zigbuild-0.17.5-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 52f994f4cdcecfc7a81a5b0a72da0fd0c85875e2815cec2e715012505f3e013a
MD5 6d098fc06e9a39b8b11d0fe5bdb6c118
BLAKE2b-256 314372b9f4ec4c4cfc08e2bbf494ac576d9f2bc7b70ca9248744f331f267a134

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cargo_zigbuild-0.17.5-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 10ce351dd4ef26fa10cf25e08d2e18385841867b06120151afc2447916e6bbc0
MD5 0613fbbe040f8213083dafe734a41826
BLAKE2b-256 3cdb0929b9710002c9361494b9099380a1d59c3194dc90ea0ebfbe1b307381a0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cargo_zigbuild-0.17.5-py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 cd39ae96f9daa559f7719bc944dd78ba213a78e2b7e3c5a956b1284a6eae9831
MD5 7fac9b005cb96b1513f4b075c9e108c8
BLAKE2b-256 622e4f4eb82aebbc5d3f9b78ca8fafb55996b17d77f928a5a0bb6fd10ea8d556

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cargo_zigbuild-0.17.5-py3-none-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 0d64de0d905b3f4ca2e4b2ec15fc12ed6827eb4d4bcc0e5f1b3adab9d10ef4f2
MD5 a41e175fc56012c7ddfcaccca585150f
BLAKE2b-256 cad10e7b3fec78c73d0282b3590ffc5f195b35bd2bb9db2fbf5c799fbcdd34b6

See more details on using hashes here.

File details

Details for the file cargo_zigbuild-0.17.5-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.5-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 59581f9577b42567bc131cde5fa5cf3722e8a6a6dc142aa52af6758144194146
MD5 9ef64e3cad54d1f83f424f851ded2f33
BLAKE2b-256 2ab4298a33e2801887bbfaedfc2c3dad4d449ed1424dd1c1b2c424d2915c42eb

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