fn main() {
#[cfg(target_vendor = "apple")]
{
use std::env;
let target = env::var("TARGET").unwrap();
let is_ios_family = target.contains("ios") || target.contains("vision");
let enable_asan = env::var("CARGO_FEATURE_ASAN").is_ok() || env::var("ENABLE_ASAN").is_ok();
let mut config = cmake::Config::new("rack-sys");
config
.define("CMAKE_BUILD_TYPE", "Release")
.define("BUILD_TESTS", "OFF");
if enable_asan {
config.define("ENABLE_ASAN", "ON");
eprintln!("Building with AddressSanitizer enabled");
}
let dst = config.build();
let lib_name = "rack_sys";
println!("cargo:rustc-link-search=native={}/lib", dst.display());
println!("cargo:rustc-link-lib=static={}", lib_name);
println!("cargo:rustc-link-lib=c++");
if enable_asan {
println!("cargo:rustc-link-arg=-fsanitize=address");
println!("cargo:rustc-link-arg=-fno-optimize-sibling-calls");
println!("cargo:rustc-link-arg=-fsanitize-address-use-after-scope");
println!("cargo:rustc-link-arg=-fno-omit-frame-pointer");
}
println!("cargo:rustc-link-lib=framework=AudioToolbox");
println!("cargo:rustc-link-lib=framework=CoreAudio");
println!("cargo:rustc-link-lib=framework=CoreFoundation");
println!("cargo:rustc-link-lib=framework=CoreAudioKit");
if is_ios_family {
println!("cargo:rustc-link-lib=framework=UIKit");
eprintln!("Building rack-sys for iOS/visionOS (GUI provided by app extensions)");
} else {
println!("cargo:rustc-link-lib=framework=AppKit");
eprintln!("Building rack-sys for macOS (GUI enabled)");
}
println!("cargo:rerun-if-changed=rack-sys/src");
println!("cargo:rerun-if-changed=rack-sys/include");
println!("cargo:rerun-if-changed=rack-sys/CMakeLists.txt");
eprintln!("Building rack-sys for target: {}", target);
}
}