• Stars
    star
    317
  • Rank 132,216 (Top 3 %)
  • Language
    Rust
  • License
    MIT License
  • Created almost 3 years ago
  • Updated over 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Compile Cargo project with zig as linker

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.

More Repositories

1

aliyundrive-webdav

้˜ฟ้‡Œไบ‘็›˜ WebDAV ๆœๅŠก
Rust
9,586
star
2

aliyundrive-fuse

้˜ฟ้‡Œไบ‘็›˜ FUSE ็ฃ็›˜ๆŒ‚่ฝฝ
Rust
969
star
3

homebrew-macos-cross-toolchains

macOS cross compiler toolchains
Ruby
857
star
4

jieba-rs

The Jieba Chinese Word Segmentation Implemented in Rust
Rust
723
star
5

rust-musl-cross

Docker images for compiling static Rust binaries using musl-cross
Shell
277
star
6

nh3

Python binding to Ammonia HTML sanitizer Rust crate
Rust
233
star
7

wechat-bot

A robot of wechat based on python (Not maintained)
Python
180
star
8

dav-server-rs

Rust WebDAV server library. A fork of the webdav-handler crate.
Rust
120
star
9

typst-py

Python binding to typst
Rust
102
star
10

mupdf-rs

Rust binding to mupdf
Rust
100
star
11

openwrt-netbird

OpenWrt package for netbird
Makefile
99
star
12

rocketmq-python

RocketMQ Python client
Python
94
star
13

cargo-xwin

Cross compile Cargo project to Windows MSVC target with ease
Rust
60
star
14

fasttext-serving

fastText model serving service
Rust
59
star
15

fasttext-rs

fastText Rust binding
Rust
53
star
16

multi-lsp-proxy

A LSP proxy to multiple language servers
Rust
48
star
17

otpauth-rs

Two-step verification of HOTP/TOTP for Rust.
Rust
32
star
18

crfs-rs

Pure Rust port of CRFsuite: a fast implementation of Conditional Random Fields (CRFs)
Rust
27
star
19

leptos_sse

Leptos server signals synced through Server-Sent-Events (SSE)
Rust
25
star
20

unidiff-rs

Unified diff parsing/metadata extraction library for Rust
Rust
24
star
21

crfsuite-rs

Rust binding to crfsuite
Rust
24
star
22

fat-macho-rs

Mach-O Fat Binary Reader and Writer
Rust
22
star
23

libtailscale-rs

Rust binding to libtailscale
Rust
22
star
24

fasttext-wheel

Build and upload fastText Python wheels to PyPI
Shell
21
star
25

rocketmq-rs

Rust client for Apache RocketMQ
Rust
21
star
26

lddtree-rs

Read the ELF dependency tree
Rust
21
star
27

rjieba-py

jieba-rs Python binding
Python
20
star
28

APUE-Learning

Learning Advanced Programming in the UNIX Environment
C
20
star
29

wechat-rs

WeChat SDK for Rust. [WIP]
Rust
18
star
30

robotparser-rs

robots.txt parser for Rust.
Rust
17
star
31

cjieba-py

Python cffi binding to CppJieba
Python
15
star
32

py-promql-parser

PromQL parser for Python
Rust
15
star
33

auditwheel-symbols

Find out which symbols are causing auditwheel too-recent versioned symbols error.
Rust
14
star
34

chinese-ner-rs

A CRF based Chinese Named-entity Recognition Library written in Rust
Rust
14
star
35

sanic-gunicorn

Gunicorn worker for Sanic
Python
12
star
36

bosonnlp-rs

BosonNLP SDK for Rust
Rust
11
star
37

rust-lunardate

A Chinese Calendar Library in Rust
Rust
10
star
38

manylinux-cross

manylinux2014 and manylinux_2_24 aarch64/armv7l/s390x/ppc64/ppc64le cross compilation docker image
Dockerfile
10
star
39

rjsonnet-py

Python bindings to Rust jrsonnet crate(a Rust implementation of Jsonnet language)
Rust
9
star
40

lingua-py

lingua-rs Python binding
Rust
9
star
41

llvm-bitcode-rs

LLVM Bitcode parser in Rust
Rust
8
star
42

mmseg-rs

Chinese word segmentation algorithm MMSEG in Rust
Rust
7
star
43

huaweicloud-github-runner

GitHub Action for automatic create and register Huawei Cloud ECS instance as a GitHub Actions self-hosted runner
JavaScript
7
star
44

rust-jieba

Rust binding to cppjieba
Rust
7
star
45

optionaldict

A dict-like object that ignore NoneType values for Python
Python
6
star
46

images2video

Python images to video library using OpenCV
Python
6
star
47

caiyun

ๅญ—ๅน•็ป„่ต„ๆบ็ฆป็บฟไธ‹่ฝฝ่‡ณ็™พๅบฆไบ‘็›˜ (Not Maintained)
Python
6
star
48

douban2kindle

่ฑ†็“ฃ้˜…่ฏปๅ›พไนฆๆŽจ้€ Kindle
Python
6
star
49

cargo-options

Reusable common Cargo command line options
Rust
5
star
50

vim-python-ide

Vim configuration files for developing Python projects
Vim Script
4
star
51

cfasttext

A fastText C wrapper
C++
4
star
52

rjmespath-py

jmespath.rs Python binding
Python
4
star
53

douappbook

Crawl book and rating infomations from Douban App
Python
4
star
54

everbean

Sync notes from book.douban.com to Evernote
Python
4
star
55

murmurhash2-py

murmurhash2 for Python
Rust
4
star
56

implib-rs

Generate Windows import library from module definition file in Rust
Rust
4
star
57

data-structure-learning

ๆ•ฐๆฎ็ป“ๆž„ๅญฆไน ๏ผŒไฝœไธšไปฃ็ 
C
4
star
58

rfiletype-py

Infer file and MIME type by checking the magic number signature, Python binding of https://github.com/bojand/infer
Rust
4
star
59

homebrew-tap

Personal Homebrew formulaes
Ruby
3
star
60

opencc-rs

OpenCC binding for Rust.
Rust
3
star
61

py-dissimilar

A diff library with semantic cleanup
Rust
3
star
62

is-minified-js

Detecting minified javascript files
Python
3
star
63

cython-abseil-sample

Using abseil-cpp with Cython project sample
Cython
3
star
64

rocket-lenient-json

A rocket_contrib::Json copy which removes the Content-Type check
Rust
2
star
65

jieba-rpc

Simple jieba RPC server based on msgpack-rpc-python
Python
2
star
66

crate-wheels

Build Python ๐Ÿ wheels ๐ŸŽก for some Rust crates ๐Ÿ“ฆย  on GitHub Actions.
Rust
2
star
67

rusted-rs

Simple tool to highlight rustc --explain output
Rust
2
star
68

python-sysconfig-collector

Collect Python sysconfig on GitHub Actions for maturin
Python
2
star
69

github-widget

A jQuery plugin to show your Github repositories.
CSS
2
star
70

cqdb-sys

Low level Rust binding to Constant Quark Database (CQDB)
C
2
star
71

django-mako

Django mako
Python
1
star
72

python3-config-rs

Read Python 3 sysconfigdata in Rust
Rust
1
star
73

Flask-DjangoQuery

DjangoQuery extension for Flask-SQLAlchemy
Python
1
star
74

liblbfgs-sys

Low level Rust binding to libLBFGS: a library of Limited-memory Broyden-Fletcher-Goldfarb-Shanno (L-BFGS)
Rust
1
star
75

nvim-config

My neovim configuration
Lua
1
star
76

cmake-toolchain-rs

Auto-generate CMake toolchain file
Rust
1
star
77

maturin-ci-playground

Playground for `maturin generate-ci`
Rust
1
star
78

serde-single-key-map

Unwrap a single key map with serde
Rust
1
star
79

messense

1
star
80

rpi

Raspberry Pi scripts
Python
1
star
81

rusted

Simple tool to highlight rustc --explain output
Python
1
star
82

cqdb-rs

Constant Quark Database in Rust
Rust
1
star
83

extender

A simple plug-in/extension system on Python
Python
1
star
84

pyo3-issue-71

Python
1
star
85

flake8-network-timeout

Python
1
star
86

cppjieba-cabi

Idiomatic C ABI for CppJieba
C++
1
star
87

catsup-theme-seven

A theme for Catsup
CSS
1
star
88

catsup-theme-lingonberry

A theme for Catsup. WIP
CSS
1
star
89

doubookcrawler

Douban book ratings infomation crawler.
Python
1
star
90

rocket-validator

Validator data guard for Rocket
Rust
1
star
91

tree-sitter-py

Experimental Python binding to tree-sitter. Don't use it.
Rust
1
star
92

stacktracer

Stack tracer for multi-threaded applications
Python
1
star
93

wiki

Personal wiki
CSS
1
star
94

sccache-wheel

Python wheels for sccache
1
star
95

CMCCLogin

A CMCC WLAN Client for OS X
Objective-C
1
star
96

jbig2dec-rs

Rust binding to jbig2dec
Rust
1
star
97

algorithm-learning

Codes I wrote when I was learning algorithm
C
1
star
98

sha512-crypt

Python binding to Rust sha-crypt password hashing crate
Python
1
star
99

dirty-json-rs

Fix up dirty JSON string
Rust
1
star