Zigc aims to provide the basic functionality for compiling and linking Zig libraries into your Rust projects.

Disclaimer

zig is a requirement to compile .zig files with this crate.

Usage

Given the following function definition as an example:

```zig // main.zig const std = @import("std");

export fn add(a: cint, b: cint) callconv(.C) c_int { return a + b; } ```

  1. Import the zigc and libc crates:

```toml [dependencies] libc = "*"

[build-dependencies] zigc = "*" ```

  1. Specify the .zig source file in your build script and zigc automatically compiles it into the right directory and links the artifacts into your rust binary.

rust /* build.rs */ fn main() { zigc::Build::new() .file("./src/main.zig") .finish(); }

  1. Import the functions in your Rust source code.

```rust /* main.rs */ extern crate libc; use libc::c_int;

[link(name = "main", kind = "dylib")]

extern "C" { fn add(a: cint, b: cint) -> c_int; }

fn main() { let res = unsafe { add(2, 2) }; println!("{res}"); } ```

  1. Build/run your crate.

$ cargo run 4

Roadmap

Contribute

Any discovered issues, feature requests, and pull request are highly encouraged and appreciated! :)