use std::env;
use std::fs;
use std::path::PathBuf;
fn generate_config_cmake() {
let out_dir = PathBuf::from(env::var("OUT_DIR").expect("OUT_DIR not set"));
let cmake_build_dir = out_dir.join("build");
let _ = fs::create_dir_all(&cmake_build_dir);
let path = cmake_build_dir.join("config.cmake");
let contents = "set(XGRAMMAR_BUILD_PYTHON_BINDINGS OFF CACHE BOOL \"\" FORCE)\n";
fs::write(&path, contents).expect("write config.cmake failed");
}
fn main() {
generate_config_cmake();
#[cfg(target_arch = "x86_64")]
let cxx_flags: &str = "-Wno-deprecated-declarations";
#[cfg(not(target_arch = "x86_64"))]
let cxx_flags: &str = "-Wno-deprecated-declarations -fno-lto";
let xgrammar = cmake::Config::new("thirdparty/xgrammar")
.define("CMAKE_CXX_COMPILER", "clang++")
.define("CMAKE_CXX_FLAGS", cxx_flags)
.build_target("xgrammar")
.build();
println!("cargo:rustc-link-search=native={}/build", xgrammar.display());
println!("cargo:rustc-link-lib=static=xgrammar");
let mut config = cpp_build::Config::new();
config
.include("thirdparty/xgrammar/include/")
.include("thirdparty/xgrammar/3rdparty/dlpack/include/")
.include("thirdparty/xgrammar/3rdparty/picojson/")
.flag("-std=c++17");
config.build("src/lib.rs");
println!("cargo:rerun-if-changed=build.rs");
println!("cargo:rerun-if-changed=src/lib.rs");
println!("cargo:rerun-if-changed=thirdparty/xgrammar/include/xgrammar/");
println!("cargo:rerun-if-changed=thirdparty/xgrammar/3rdparty/dlpack/include/dlpack/");
println!("cargo:rerun-if-changed=thirdparty/xgrammar/3rdparty/picojson/");
}