diff --git a/src-tauri/build.rs b/src-tauri/build.rs index fbaa9e8c9..fd9c60598 100644 --- a/src-tauri/build.rs +++ b/src-tauri/build.rs @@ -14,6 +14,18 @@ fn main() { .with_package("BerdAirPodsBridge", "swift/BerdAirPodsBridge") .link(); + // swift-rs expects SwiftPM's `-apple-macosx/` layout, but the + // swiftbuild system in newer Xcode writes `out/Products/` instead. + let config = if std::env::var("DEBUG").as_deref() == Ok("true") { + "Debug" + } else { + "Release" + }; + println!( + "cargo:rustc-link-search=native={}/swift-rs/BerdAirPodsBridge/out/Products/{config}", + std::env::var("OUT_DIR").unwrap() + ); + // Swift packages linked into a Rust executable use @rpath for the // system Swift runtime, which is available from this stable path. println!("cargo:rustc-link-arg=-Wl,-rpath,/usr/lib/swift"); diff --git a/src-tauri/crates/berd-call/build.rs b/src-tauri/crates/berd-call/build.rs index 16244a377..a255a24d2 100644 --- a/src-tauri/crates/berd-call/build.rs +++ b/src-tauri/crates/berd-call/build.rs @@ -11,6 +11,18 @@ fn main() { swift_rs::SwiftLinker::new("14.0") .with_package("BerdMacSpeechBridge", "swift/BerdMacSpeechBridge") .link(); + + // swift-rs expects SwiftPM's `-apple-macosx/` layout, but the + // swiftbuild system in newer Xcode writes `out/Products/` instead. + let config = if std::env::var("DEBUG").as_deref() == Ok("true") { + "Debug" + } else { + "Release" + }; + println!( + "cargo:rustc-link-search=native={}/swift-rs/BerdMacSpeechBridge/out/Products/{config}", + std::env::var("OUT_DIR").unwrap() + ); for framework in ["Foundation", "AVFoundation", "AudioToolbox", "CoreAudio"] { println!("cargo:rustc-link-lib=framework={framework}"); }