#language #generator

ligen

Ligen (Language Interface Generator) is an extensible automatic binding generator ecosystem

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

#175 in Procedural macros

39 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

~6.5–8.5MB
~161K SLoC