[workspace] resolver = "2" members = [ "crates/punktfunk-core", "crates/punktfunk-host", "crates/punktfunk-host/vendor/usbip-sim", "crates/punktfunk-tray", "crates/pf-client-core", "crates/pf-presenter", "crates/pf-console-ui", "crates/pf-ffvk", "crates/pf-driver-proto", "clients/probe", "clients/linux", "clients/session", "clients/windows", "clients/android/native", "tools/latency-probe", "tools/loss-harness", ] # Standalone PoC (built on its own; pulls usbip/tokio/libusb we don't want in the workspace). # The vendored `ndk` is a [patch.crates-io] source, not a member: it only compiles for the # `*-linux-android` targets, so workspace membership would break host `cargo build --workspace`. exclude = [ "packaging/linux/steam-deck-gadget/usbip-poc", "clients/android/native/vendor/ndk", ] # ndk 0.9.0 verbatim from crates.io plus ONE visibility change: `MediaCodec::as_ptr` made public # (upstream keeps it private and exposes no frame-rendered binding), so the Android client can # call `AMediaCodec_setOnFrameRenderedCallback` via ndk-sys for the HUD's `display` stage # (design/stats-unification.md). Drop the patch when upstream exposes the pointer or the callback. [patch.crates-io] ndk = { path = "clients/android/native/vendor/ndk" } [workspace.package] version = "0.8.4" edition = "2021" rust-version = "1.82" license = "MIT OR Apache-2.0" authors = ["unom"] repository = "https://git.unom.io/unom/punktfunk" [profile.release] opt-level = 3 lto = "thin" codegen-units = 1 # NOTE: deliberately NOT `panic = "abort"`. punktfunk-core ships as a cdylib/staticlib into # third-party apps (Swift/Kotlin/C) and its C ABI catches panics at the boundary # (`catch_unwind` → `PunktfunkStatus::Panic`). `panic = "abort"` would make that guard a # no-op and let a stray panic abort the embedding application. Unwinding keeps the # documented isolation guarantee real. # The per-frame hot path must stay fast even in dev builds. [profile.dev.package."*"] opt-level = 2