llama-cpp-sys-2 0.1.0

Low Level Bindings to llama.cpp
Documentation
use std::env;
use std::path::PathBuf;

fn main() {
    println!("cargo:rerun-if-changed=llama.cpp");

    let cublas_enabled = env::var("CARGO_FEATURE_CUBLAS").is_ok();

    let mut cmake_build = cmake::Config::new("llama.cpp");

    if cublas_enabled {
        cmake_build.define("LLAMA_CUBLAS", "ON");
    }

    cmake_build.define("LLAMA_STATIC", "ON");
    cmake_build.build_target("llama");

    let llama = cmake_build.build();

    println!("cargo:rustc-link-lib=dylib=stdc++");

    if cublas_enabled {
        println!("cargo:rustc-link-search=native=/usr/local/cuda/lib64");
        println!("cargo:rustc-link-lib=dylib=cudart");
        println!("cargo:rustc-link-lib=dylib=cublas");
    }

    println!("cargo:rustc-link-search=native={}/build", llama.display());
    println!("cargo:rustc-link-lib=static=llama");

    let header = "llama.cpp/llama.h";

    println!("cargo:rerun-if-changed={header}");

    let bindings = bindgen::builder()
        .header(header)
        .derive_partialeq(true)
        .no_debug("llama_grammar_element")
        .prepend_enum_name(false)
        .derive_eq(true)
        .generate()
        .expect("failed to generate bindings for llama.cpp");

    let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
    bindings
        .write_to_file(out_path.join("bindings.rs"))
        .expect("failed to write bindings to file");
}