extern crate bindgen; extern crate cmake; use std::env; use std::path::PathBuf; use bindgen::callbacks::{IntKind, ParseCallbacks}; #[derive(Debug)] struct CustomCallbacks; impl ParseCallbacks for CustomCallbacks { fn int_macro(&self, name: &str, _value: i64) -> Option { match name { //"STREAM_CFG_LOCAL" => Some(IntKind::I32), //"STREAM_CFG_REMOTE" => Some(IntKind::I32), //"STREAM_CFG_AUTO" => Some(IntKind::I32), "KEY_ACTION_DOWN" => Some(IntKind::I8), "KEY_ACTION_UP" => Some(IntKind::I8), "BUTTON_ACTION_PRESS" => Some(IntKind::I8), "BUTTON_ACTION_RELEASE" => Some(IntKind::I8), _ => None, // Default behavior for all others } } } fn main() { // Build moonlight-common-c as static library via CMake let dst = cmake::Config::new("moonlight-common-c") .define("CMAKE_POLICY_VERSION_MINIMUM", "3.5") .build(); // Link to static library println!("cargo:rustc-link-search=native={}/build", dst.display()); println!("cargo:rustc-link-lib=moonlight-common-c"); // Configure bindgen for Limelight.h let bindings = bindgen::Builder::default() .header("moonlight-common-c/src/Limelight.h") .clang_arg(format!("-I{}/src", dst.display())) // Include built headers .parse_callbacks(Box::new(CustomCallbacks)) .default_macro_constant_type(bindgen::MacroTypeVariation::Signed) .generate() .expect("Failed to generate bindings"); // Write bindings to output let out_path = PathBuf::from(env::var("OUT_DIR").unwrap()); bindings .write_to_file(out_path.join("bindings.rs")) .expect("Failed to write bindings"); }