fix: make cpal/ALSA optional — headless Linux builds work without libasound

- cpal is now behind an 'audio' feature flag (off by default)
- --live mode requires --features audio at build time
- --send-tone and --record work on headless servers without audio libs
- Linux build script no longer installs libasound2-dev

Build for headless: cargo build --release
Build with mic/speakers: cargo build --release --features audio

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Siavash Sameni
2026-03-27 16:24:44 +04:00
parent 708fb268bc
commit df80ad5343
4 changed files with 18 additions and 4 deletions

View File

@@ -18,7 +18,11 @@ tracing-subscriber = { workspace = true }
async-trait = { workspace = true }
bytes = { workspace = true }
anyhow = "1"
cpal = "0.15"
cpal = { version = "0.15", optional = true }
[features]
default = []
audio = ["cpal"]
[[bin]]
name = "wzp-client"

View File

@@ -134,7 +134,14 @@ async fn main() -> anyhow::Result<()> {
let transport = Arc::new(wzp_transport::QuinnTransport::new(connection));
if cli.live {
run_live(transport).await
#[cfg(feature = "audio")]
{
return run_live(transport).await;
}
#[cfg(not(feature = "audio"))]
{
anyhow::bail!("--live requires the 'audio' feature (build with: cargo build --features audio)");
}
} else if cli.send_tone_secs.is_some() || cli.record_file.is_some() {
run_file_mode(transport, cli.send_tone_secs, cli.record_file).await
} else {
@@ -326,6 +333,7 @@ async fn run_file_mode(
}
/// Live mode: capture from mic, encode, send; receive, decode, play.
#[cfg(feature = "audio")]
async fn run_live(transport: Arc<wzp_transport::QuinnTransport>) -> anyhow::Result<()> {
use wzp_client::audio_io::{AudioCapture, AudioPlayback};

View File

@@ -6,11 +6,13 @@
//!
//! Targets: Android (JNI), Windows desktop, macOS/Linux (testing)
#[cfg(feature = "audio")]
pub mod audio_io;
pub mod bench;
pub mod call;
pub mod handshake;
#[cfg(feature = "audio")]
pub use audio_io::{AudioCapture, AudioPlayback};
pub use call::{CallConfig, CallDecoder, CallEncoder};
pub use handshake::perform_handshake;