build.rs

 1use std::{env, path::PathBuf};
 2
 3fn main() {
 4    generate_dispatch_bindings();
 5    compile_context_predicate_parser();
 6}
 7
 8fn generate_dispatch_bindings() {
 9    println!("cargo:rustc-link-lib=framework=System");
10    println!("cargo:rerun-if-changed=src/platform/mac/dispatch.h");
11
12    let bindings = bindgen::Builder::default()
13        .header("src/platform/mac/dispatch.h")
14        .whitelist_var("_dispatch_main_q")
15        .whitelist_function("dispatch_async_f")
16        .parse_callbacks(Box::new(bindgen::CargoCallbacks))
17        .generate()
18        .expect("unable to generate bindings");
19
20    let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
21    bindings
22        .write_to_file(out_path.join("dispatch_sys.rs"))
23        .expect("couldn't write bindings");
24}
25
26fn compile_context_predicate_parser() {
27    let dir = PathBuf::from("./grammars/context-predicate/src");
28    let parser_c = dir.join("parser.c");
29
30    println!("cargo:rerun-if-changed={}", &parser_c.to_str().unwrap());
31    cc::Build::new()
32        .include(&dir)
33        .file(parser_c)
34        .compile("tree_sitter_context_predicate");
35}