diff --git a/build.rs b/build.rs index 8a3551f..72f7559 100644 --- a/build.rs +++ b/build.rs @@ -1,11 +1,29 @@ extern crate cc; +use std::env; + +const DEPLOYMENT_TARGET_VAR: &str = "MACOSX_DEPLOYMENT_TARGET"; fn main() { if cfg!(target_os = "macos") { + let min_version = match env::var(DEPLOYMENT_TARGET_VAR) { + Ok(ver) => ver, + Err(_) => String::from(match env::var("CARGO_CFG_TARGET_ARCH").unwrap().as_str() { + "x86_64" => "10.8", // NSUserNotificationCenter first showed up here. + "aarch64" => "11.0", // Apple silicon started here. + arch => panic!("unknown arch: {}", arch), + }), + }; + cc::Build::new() .file("objc/notify.m") .flag("-fmodules") - .warnings(false) + .flag("-Wno-deprecated-declarations") + // `cc` doesn't try to pick up on this automatically, but `clang` needs it to + // generate a "correct" Objective-C symbol table which better matches XCode. + // See https://github.com/h4llow3En/mac-notification-sys/issues/45. + .flag(&format!("-mmacos-version-min={}", min_version)) .compile("notify"); + + println!("cargo:rerun-if-env-changed={}", DEPLOYMENT_TARGET_VAR); } }