Skip to content
/ zigc Public

A tool for compiling and linking Zig libraries to Rust projects.

License

Notifications You must be signed in to change notification settings

emilHof/zigc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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:

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

export fn add(a: c_int, b: c_int) callconv(.C) c_int {
    return a + b;
}
  1. Import the zigc and libc crates:
[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.
/* build.rs */
fn main() {
    zigc::Build::new()
        .file("./src/main.zig")
        .finish();
}
  1. Import the functions in your Rust source code.
/* main.rs */
extern crate libc;
use libc::c_int;

#[link(name = "main", kind = "dylib")]
extern "C" {
    fn add(a: c_int, b: c_int) -> c_int;
}

fn main() {
    let res = unsafe { add(2, 2) };
    println!("{res}");
}
  1. Build/run your crate.
$ cargo run
4

Roadmap

  • Basic .zig compilation
  • MVP linking of .so files to cargo projects.
  • Add logging.
  • Automatic target specification using cargo's TARGET flag.
  • Allow compilation and linking of static Zig libraries.
  • Add more options to Build
    • Additional flags (-cflags, -target, -mcpu, etc)
    • Name output library file.
    • Specify additional include libraries
  • Ability to compile and link multiple .zig files.

Contribute

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

About

A tool for compiling and linking Zig libraries to Rust projects.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages