windows(desktop): gate coreaudio / VoiceProcessingIO to macOS-only targets
First step of the Windows x86_64 desktop build: stop pulling
coreaudio-rs into the Windows dependency graph so the project can at
least run `cargo check --target x86_64-pc-windows-msvc`. Software AEC
is already disabled in engine.rs so there's nothing else to stub — the
macOS-specific VPIO path is skipped via #[cfg(target_os = "macos")] on
both sides and Windows falls through to the plain CPAL
AudioCapture/AudioPlayback branch that already existed.
crates/wzp-client/Cargo.toml
- coreaudio-rs optional dep moved under [target.'cfg(target_os = "macos")']
- `vpio` feature now uses `dep:coreaudio-rs` syntax and the gated dep
- Enabling `vpio` on Windows/Linux is a no-op at resolution time
crates/wzp-client/src/lib.rs
- `pub mod audio_vpio` is now #[cfg(all(feature = "vpio", target_os = "macos"))]
- Previously `vpio` alone was enough to try to compile the Core Audio
bindings, which would fail on non-Apple targets the moment the
feature flag was flipped on
desktop/src-tauri/Cargo.toml
- [target.'cfg(not(target_os = "android"))'] removed — was leaking
vpio into Windows/Linux via the catch-all.
- macOS: wzp-client with features = ["audio", "vpio"]
- Windows: wzp-client with features = ["audio"]
- Linux: wzp-client with features = ["audio"]
- Android: wzp-client with default-features = false (unchanged)
- Dropped the unused direct coreaudio-rs = "0.11" dep on macOS —
wzp-desktop's own sources never call Core Audio directly.
Verified via `cargo tree --target x86_64-pc-windows-msvc -p wzp-desktop`
that the Windows target now resolves wzp-client with cpal but without
coreaudio-rs. macOS target still resolves with coreaudio (direct via
vpio feature and transitively via cpal). macOS `cargo check` still
builds cleanly.
Cross-compile from macOS hit a cargo-xwin + llvm-lib setup issue in
ring's build.rs, so the actual `cargo check --target
x86_64-pc-windows-msvc` did not complete locally. Build verification
belongs on the user's Windows x86_64 host where MSVC is present
natively.
See tasks #23 (this one), #24 (Voice Capture DSP / WASAPI Communications
for OS-level AEC on Windows), and #25 (aarch64-pc-windows-msvc support).
This commit is contained in:
3
Cargo.lock
generated
3
Cargo.lock
generated
@@ -7202,8 +7202,9 @@ name = "wzp-desktop"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"coreaudio-rs",
|
||||
"jni",
|
||||
"libloading 0.8.9",
|
||||
"ndk-context",
|
||||
"rustls",
|
||||
"serde",
|
||||
"serde_json",
|
||||
|
||||
@@ -23,13 +23,21 @@ serde_json = "1"
|
||||
chrono = "0.4"
|
||||
rustls = { version = "0.23", default-features = false, features = ["ring", "std"] }
|
||||
cpal = { version = "0.15", optional = true }
|
||||
coreaudio-rs = { version = "0.11", optional = true }
|
||||
libc = "0.2"
|
||||
|
||||
# coreaudio-rs is Apple-framework-only; gate it to macOS so enabling
|
||||
# the `vpio` feature from a non-macOS target builds cleanly instead of
|
||||
# pulling in a crate that can only link against Apple frameworks.
|
||||
[target.'cfg(target_os = "macos")'.dependencies]
|
||||
coreaudio-rs = { version = "0.11", optional = true }
|
||||
|
||||
[features]
|
||||
default = []
|
||||
audio = ["cpal"]
|
||||
vpio = ["coreaudio-rs"]
|
||||
# vpio enables coreaudio-rs but that dep is itself gated to macOS above,
|
||||
# so enabling this feature on Windows/Linux is a no-op (the audio_vpio
|
||||
# module is also #[cfg(target_os = "macos")] in lib.rs).
|
||||
vpio = ["dep:coreaudio-rs"]
|
||||
|
||||
[[bin]]
|
||||
name = "wzp-client"
|
||||
|
||||
@@ -10,7 +10,10 @@
|
||||
pub mod audio_io;
|
||||
#[cfg(feature = "audio")]
|
||||
pub mod audio_ring;
|
||||
#[cfg(feature = "vpio")]
|
||||
// VoiceProcessingIO is an Apple Core Audio API — only compile the module
|
||||
// when the `vpio` feature is on AND we're targeting macOS. Enabling the
|
||||
// feature on Windows/Linux was previously silently broken.
|
||||
#[cfg(all(feature = "vpio", target_os = "macos"))]
|
||||
pub mod audio_vpio;
|
||||
pub mod bench;
|
||||
pub mod call;
|
||||
|
||||
@@ -51,16 +51,29 @@ wzp-fec = { path = "../../crates/wzp-fec" }
|
||||
wzp-crypto = { path = "../../crates/wzp-crypto" }
|
||||
wzp-transport = { path = "../../crates/wzp-transport" }
|
||||
|
||||
# wzp-client pulls CPAL + (on macOS) VoiceProcessingIO — desktop only.
|
||||
# Android gets an oboe/AAudio backend in Step 3 of the Tauri mobile rewrite.
|
||||
[target.'cfg(not(target_os = "android"))'.dependencies]
|
||||
# wzp-client pulls in CPAL on every desktop target and, additionally on
|
||||
# macOS, VoiceProcessingIO (coreaudio-rs behind the "vpio" feature). The
|
||||
# vpio feature MUST NOT be enabled on Windows / Linux because coreaudio-rs
|
||||
# is Apple-framework-only and will fail to build. Task #24 will add a
|
||||
# matching Windows Voice Capture DSP path behind its own feature; until
|
||||
# then, Windows desktops use plain CPAL with AEC disabled.
|
||||
|
||||
# macOS: CPAL + VoiceProcessingIO (hardware AEC via Core Audio).
|
||||
[target.'cfg(target_os = "macos")'.dependencies]
|
||||
wzp-client = { path = "../../crates/wzp-client", features = ["audio", "vpio"] }
|
||||
|
||||
# Step B: depend on wzp-client on Android WITHOUT the audio/vpio features,
|
||||
# so we pull in only the platform-independent modules (call, handshake,
|
||||
# audio_ring, codec bindings). Deliberately no imports in lib.rs yet — we
|
||||
# only want to verify that compiling + linking these crates on android
|
||||
# doesn't regress the working build.
|
||||
# Windows: CPAL only. Windows AEC (WASAPI Communications / MF Voice
|
||||
# Capture DSP) lands in a follow-up task. See task #24.
|
||||
[target.'cfg(target_os = "windows")'.dependencies]
|
||||
wzp-client = { path = "../../crates/wzp-client", features = ["audio"] }
|
||||
|
||||
# Linux: same as Windows for now — plain CPAL.
|
||||
[target.'cfg(target_os = "linux")'.dependencies]
|
||||
wzp-client = { path = "../../crates/wzp-client", features = ["audio"] }
|
||||
|
||||
# Android: no CPAL, no vpio — audio goes through the standalone wzp-native
|
||||
# cdylib that we dlopen via libloading at runtime. See the wzp_native
|
||||
# module in src/.
|
||||
[target.'cfg(target_os = "android")'.dependencies]
|
||||
wzp-client = { path = "../../crates/wzp-client", default-features = false }
|
||||
# libloading: runtime dlopen of libwzp_native.so — the standalone cdylib
|
||||
@@ -75,10 +88,6 @@ libloading = "0.8"
|
||||
jni = "0.21"
|
||||
ndk-context = "0.1"
|
||||
|
||||
# Platform-specific
|
||||
[target.'cfg(target_os = "macos")'.dependencies]
|
||||
coreaudio-rs = "0.11"
|
||||
|
||||
[features]
|
||||
default = ["custom-protocol"]
|
||||
custom-protocol = ["tauri/custom-protocol"]
|
||||
|
||||
Reference in New Issue
Block a user