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}