#链接器 #zig #cargo-build #项目 #编译 #指定 #文件

构建 zigc

一个用于编译和链接 Zig 库到 Rust 项目的工具

5 个版本

0.0.3 2023 年 2 月 2 日
0.0.2 2023 年 2 月 1 日
0.0.1 2023 年 1 月 31 日
0.0.0-alpha0.22023 年 1 月 31 日
0.0.0-alpha0.12023 年 1 月 30 日

构建工具 中排名 396

每月下载 27
用于 zsling

自定义许可证

12KB
252

Zigc 旨在为将 Zig 库编译到您的 Rust 项目提供基本功能。

免责声明

zig 是编译此crate中的 .zig 文件所必需的。

用法

以下是一个示例函数定义

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

export fn add(a: c_int, b: c_int) callconv(.C) c_int {
    return a + b;
}
  1. 导入 zigclibc crate
[dependencies]
libc = "*"

[build-dependencies]
zigc = "*"
  1. 在您的构建脚本中指定 .zig 源文件,zigc 将自动将其编译到正确的目录,并将工件链接到您的 Rust 二进制文件中。
/* build.rs */
fn main() {
    zigc::Build::new()
        .file("./src/main.zig")
        .finish();
}
  1. 在您的 Rust 源代码中导入函数。
/* 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. 构建/运行您的 crate。
$ cargo run
4

路线图

  • 基本的 .zig 编译
  • MVP 将 .so 文件链接到 cargo 项目。
  • 添加日志。
  • 使用 cargo 的 TARGET 标志自动指定目标。
  • Build 添加更多选项
    • 添加额外的标志(-cflags-target-mcpu 等)
    • 命名输出库文件。
    • 指定额外的 include
  • 允许编译和链接静态 Zig 库。
  • 能够编译和链接多个 .zig 文件。

贡献

鼓励并感谢您发现的任何问题、功能请求和 pull request! :)

依赖项

~475–770KB
~14K SLoC