fn main() { if std::env::var("CARGO_CFG_TARGET_OS").as_deref() == Ok("macos") { build_navigation(); } tauri_build::build(); } fn build_navigation() { use std::{env, path::PathBuf, process::Command}; println!("cargo:rerun-if-changed=src/navigation.m"); let output = PathBuf::from(env::var_os("OUT_DIR").unwrap()); let object = output.join("navigation.o"); let archive = output.join("libkanban_navigation.a"); let arch = match env::var("CARGO_CFG_TARGET_ARCH").unwrap().as_str() { "aarch64" => "arm64", "x86_64" => "x86_64", _ => panic!("Unsupported macOS architecture"), }; assert!(Command::new("xcrun") .args([ "--sdk", "macosx", "clang", "-fobjc-arc", "-fblocks", "-Wall", "-Werror", "-mmacosx-version-min=14.0", "-arch", arch, "-c", "src/navigation.m", "-o" ]) .arg(&object) .status() .expect("Xcode clang is required") .success()); assert!(Command::new("xcrun") .args(["ar", "crs"]) .arg(&archive) .arg(&object) .status() .expect("Xcode ar is required") .success()); println!("cargo:rustc-link-search=native={}", output.display()); println!("cargo:rustc-link-lib=static=kanban_navigation"); println!("cargo:rustc-link-lib=framework=AppKit"); println!("cargo:rustc-link-lib=framework=WebKit"); }