Switch the webrtc-audio-processing dep from the 2.x git source (bundled mode) back to crates.io 0.3, and link against Debian's apt package libwebrtc-audio-processing-dev (0.3-1+b1 on Bookworm). The 2.x path fails because both the crates.io tarball and the upstream git main branch of webrtc-audio-processing-sys 2.0.3 have a build.rs bug where \`meson setup --reconfigure\` is passed unconditionally, panicking on first-run empty build dirs with "Directory does not contain a valid build tree". The 0.x line sidesteps bundled mode entirely by linking the apt-provided library. Trade-off: we get AEC2 (the older generation) instead of AEC3, but it's the same algorithm family and is what PulseAudio's module-echo-cancel and PipeWire's filter-chain use on current Debian-family distros. Fine for shipping — we can revisit AEC3 once the 2.x bundled build is fixed upstream. API changes: - 0.3's Processor::process_capture_frame and process_render_frame take &mut self, so wrap the module-level processor in a Mutex. Capture and playback threads each lock briefly (sub-ms per 10 ms frame); contention is minimal. - Import NUM_SAMPLES_PER_FRAME from the crate directly instead of hardcoding 480, so the code tracks whatever sample rate the upstream C++ lib exposes (currently 48 kHz hardcoded -> 480). - Helper fns drain_frames_through_apm / tee_render_samples / etc. take &Mutex<Processor> instead of &Processor. - Use explicit EchoCancellationSuppressionLevel and NoiseSuppressionLevel imports rather than fully-qualified paths. Dockerfile: - Drop meson / ninja-build / python3 (only needed for bundled build). - Add libwebrtc-audio-processing-dev for the system link path. - Keep clang (may be needed by the bindgen step in some versions). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
60 lines
2.8 KiB
Docker
60 lines
2.8 KiB
Docker
# =============================================================================
|
|
# WZ Phone — Linux x86_64 Tauri desktop build image
|
|
#
|
|
# Thin extension of wzp-android-builder that adds the GTK3 + WebKit2GTK 4.1 +
|
|
# libsoup-3.0 + AppIndicator dev packages needed to build the Tauri desktop
|
|
# app for Linux. Everything else (Rust, Node.js, cmake, pkg-config, cpal
|
|
# libasound deps, tauri-cli) is inherited from the base image.
|
|
#
|
|
# Build:
|
|
# docker build -t wzp-linux-desktop-builder -f Dockerfile.linux-desktop-builder .
|
|
#
|
|
# Run: driven by scripts/build-linux-desktop-docker.sh (see that file).
|
|
# =============================================================================
|
|
FROM wzp-android-builder
|
|
|
|
USER root
|
|
|
|
# Tauri 2.x Linux dependencies.
|
|
# - libwebkit2gtk-4.1-dev: the WebView backend. Tauri 2.x uses 4.1 (not 4.0).
|
|
# - libsoup-3.0-dev: HTTP client used by webkit2gtk. Must match its major.
|
|
# - libgtk-3-dev: GTK3 headers (webkit2gtk still uses GTK3).
|
|
# - libayatana-appindicator3-dev: system tray / status icon. Optional at
|
|
# runtime but tauri-build's feature-detection includes it.
|
|
# - librsvg2-dev: SVG rendering in the menu/icon code.
|
|
# - libglib2.0-dev: GObject introspection headers (transitive, but explicit).
|
|
# - patchelf: used by the tauri bundler to rewrite rpaths in the final binary.
|
|
# - file: already in the base, but tauri-build checks for it by name.
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
libwebkit2gtk-4.1-dev \
|
|
libsoup-3.0-dev \
|
|
libgtk-3-dev \
|
|
libayatana-appindicator3-dev \
|
|
librsvg2-dev \
|
|
libglib2.0-dev \
|
|
patchelf \
|
|
libwebrtc-audio-processing-dev \
|
|
clang \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# ── webrtc-audio-processing build requirements ──────────────────────────────
|
|
# The `webrtc-audio-processing` Rust crate (0.3.x line) links against Debian
|
|
# Bookworm's `libwebrtc-audio-processing-dev` apt package (0.3-1+b1), which
|
|
# provides the PulseAudio fork of the WebRTC audio processing module. This is
|
|
# the library that Pulse's module-echo-cancel and PipeWire's filter-chain
|
|
# use for their AEC modes — same algorithm family, runtime-linked via
|
|
# pkg-config at cargo build time.
|
|
#
|
|
# An attempt was made to use the 2.x line with the `bundled` sub-feature
|
|
# (which would give AEC3 instead of AEC2) but both the crates.io tarball
|
|
# and the upstream git `main` branch hit a `meson setup --reconfigure` bug
|
|
# that panics on first-run empty build dirs. The 0.3 line avoids the
|
|
# bundled build path entirely and is what we ship for now.
|
|
#
|
|
# `clang` is listed explicitly because the Rust crate's bindgen may need
|
|
# it at compile time depending on the version of the underlying
|
|
# webrtc-audio-processing-sys build script.
|
|
|
|
USER builder
|
|
WORKDIR /build/source
|