oxy-bridge 0.1.0

Rust-to-CEF CXX bridge for OxyBlink — safe FFI layer between Rust and Chromium Embedded Framework
fn main() {
    let mut build = cxx_build::bridge("src/lib.rs");
    build
        .file("../../bridge/cpp/src/engine.cc")
        .file("../../bridge/cpp/src/page.cc")
        .file("../../bridge/cpp/src/navigation.cc")
        .file("../../bridge/cpp/src/dom.cc")
        .file("../../bridge/cpp/src/eval.cc")
        .file("../../bridge/cpp/src/error.cc")
        .file("../../bridge/cpp/src/input.cc")
        .include("../../bridge/cpp/include")
        .include("../../engine/cef")
        .flag_if_supported("-std=c++20");

    let profile = std::env::var("PROFILE").unwrap_or_else(|_| "debug".to_string());
    if profile == "release" {
        build.flag_if_supported("-flto");
        build.flag_if_supported("-Oz"); // Optimize for size heavily
        build.flag_if_supported("-fvisibility=hidden");
        // Strip symbols from native C++ code to save space
        println!("cargo:rustc-link-arg=-Wl,-x");
        println!("cargo:rustc-link-arg=-Wl,-S");
        // For macOS specifically:
        println!("cargo:rustc-link-arg=-Wl,-dead_strip"); 
    }

    // Force parallel compilation matching cores
    if let Ok(cores) = std::thread::available_parallelism() {
        std::env::set_var("NUM_JOBS", cores.get().to_string());
    }

    build.compile("oxyblink_bridge");

    println!("cargo:rerun-if-changed=src/lib.rs");
    println!("cargo:rerun-if-changed=../../bridge/cpp/include/oxyblink_bridge.h");
    println!("cargo:rerun-if-changed=../../bridge/cpp/src/");
}