14 releases

0.1.18 Feb 13, 2025
0.1.16 Jul 5, 2021
0.1.12 Jun 11, 2021
0.1.8 May 28, 2021
0.1.0 Jan 28, 2018

#462 in Development tools

Download history 4/week @ 2024-10-29 6/week @ 2024-11-05 2/week @ 2024-11-12 9/week @ 2024-11-19 11/week @ 2024-11-26 8/week @ 2024-12-03 37/week @ 2024-12-10 4/week @ 2024-12-17 119/week @ 2025-02-11

119 downloads per month
Used in 8 crates (6 directly)

Apache-2.0

7KB

Ligen

Ligen (Language Interface Generator - IPA: /ˈliɡən/) is an extensible multi-language binding generator

Features

  • Zero-effort binding generation
  • Supports multiple programming languages

Getting started


lib.rs:

Ligen

Ligen (Language Interface Generator) is an extensible macro-based multi-language binding generator.

We officially support ligen-c, a binding generator for the Programming Language C.

Requirements

cargo install cargo-ligen

How to use

Here is an library on how to use the C generator and the CMake library generator in your crate: Cargo.toml

[dev-dependencies]
ligen       = "0.1"
ligen-c     = "0.1"
ligen-cmake = "0.1"

Now you can use it in your build.rs file as following:

use ligen::prelude::*;
use ligen_c::Generator as CGenerator;
use ligen_cmake::Generator as CMakeGenerator;

fn main() {
    if let Ok(library) = Library::read() {
        let c_generator = CGenerator::default();
        let cmake_generator = CMakeGenerator::default();
        cmake_generator.generate(&library).expect("Couldn't generate CMake library.");
        c_generator.generate(&library).expect("Couldn't generate C bindings");
    }
}

Then to generate the language bindings run: cargo ligen

cargo ligen passes all its extra parameters to cargo build, so you can use cargo ligen --release to generate a library with optimized production code (--debug is default).

Getting started

Here are a few links to get started:

Dependencies

~9.5MB
~183K SLoC