# One repo, one crate per shared object. # # Every crate here builds a `.so` that a jolt library binds through # `jolt.ffi/defcfn`, plus `jolt-abi`, which is the rules they all keep at the # edge rather than a library anyone loads. # # Deliberately NOT one cdylib with cargo features selecting the parts. Features # are additive within a library, so `graphics` + `moq` would mean one object # carrying egui *and* QUIC, Opus, H.264 and the camera stacks — a chat client # that is not in a call would link the whole media plane to open a window. The # feature unification that comes with it has bitten this code before: enabling # eframe's wayland/x11 features for the desktop build pulled them into the # Android one and made the activity exit on launch. # # A workspace gives the parts of a monorepo worth having — one CI, one release, # shared conventions in `jolt-abi` — while each consumer still links only what # it asked for. jolt's `:jolt/native` is a vector; naming two objects there is # no harder than naming one. [workspace] resolver = "2" members = [ "crates/jolt-abi", "crates/jolt-moq", "crates/jolt-tui", "crates/jolt-vidya", "crates/vidya-core", ] # All that is left under third-party/ is the vendored cpal the [patch] below # retargets — reindeer's generated graph went away with buck2, and Cargo.lock is # the one dependency graph now. It stays excluded because a workspace member is # built with its own default features, and cpal's defaults reach for the Windows # ASIO SDK and fail on Linux. As a path dependency it is built with the features # its consumers ask for instead. exclude = ["third-party/rust"] [workspace.package] version = "0.1.0" edition = "2021" license = "MIT" repository = "https://gitlab.com/nandithebull/jolt-native" # vidya-ffi set opt-level 2 when it was its own workspace: the tree walk and # the texture uploads are hot every frame, and a debug build of them is not # worth looking at. A member cannot set this, so it is set here. [profile.release] opt-level = 2 # 1.5M off the desktop object; opt-level 3 was measured alongside and is larger, # so it stays at 2. lto = "fat" codegen-units = 1 [workspace.dependencies] jolt-abi = { path = "crates/jolt-abi" } log = "0.4" # iroh-live wants an unreleased iroh 0.97 — the released one has no # `tls-aws-lc-rs` feature and resolution fails outright without these. The revs # are the ones freeq locks in its own workspace; they travel together and are # not independently bumpable. [patch.crates-io] iroh = { git = "https://github.com/n0-computer/iroh", rev = "8af8370b" } iroh-base = { git = "https://github.com/n0-computer/iroh", rev = "8af8370b" } iroh-relay = { git = "https://github.com/n0-computer/iroh", rev = "8af8370b" } iroh-gossip = { git = "https://github.com/n0-computer/iroh-gossip", rev = "1038f721" } # noq's main tip is 1.1.0, which breaks iroh 0.97 — pin the rev freeq pins. noq = { git = "https://github.com/n0-computer/noq", rev = "ab042ea7e3f7bae1e43eaba2ac9dba47ddb52e69" } noq-proto = { git = "https://github.com/n0-computer/noq", rev = "ab042ea7e3f7bae1e43eaba2ac9dba47ddb52e69" } noq-udp = { git = "https://github.com/n0-computer/noq", rev = "ab042ea7e3f7bae1e43eaba2ac9dba47ddb52e69" } web-transport-iroh = { git = "https://github.com/Frando/web-transport", rev = "f7a523f1" } web-transport-noq = { git = "https://github.com/Frando/web-transport", rev = "f7a523f1" } web-transport-proto = { git = "https://github.com/Frando/web-transport", rev = "f7a523f1" } web-transport-trait = { git = "https://github.com/Frando/web-transport", rev = "f7a523f1" } # moq-media (inside iroh-live) asks for cpal on `branch = "master"`, which # floats — and master has since removed `StreamError` and `DeviceTrait::name()` # in favour of a unified error API, which does not compile against the # iroh-live rev pinned below. Pin the last commit that does. sleek vendors this # same commit into its tree; a pinned rev says the same thing without carrying # Cargo will not let a patch retarget the same source it replaces, so this has # to be a vendored path rather than a pinned rev of the same URL. Drop the # vendor and this patch when iroh-live moves to the new cpal API. [patch."https://github.com/RustAudio/cpal.git"] cpal = { path = "third-party/rust/cpal" }