# The third-party graph, as one manifest for reindeer to vendor and generate # BUCK targets from. Every external crate the workspace's four members depend # on appears here once, with the union of the features they ask for; first-party # crates keep their own BUCK files and depend on `//third-party/rust:`. # # Android-only dependencies are at the bottom, in a target section, so their # features are resolved for the device and unified into nothing else. [package] name = "jolt-native-third-party" version = "0.0.0" edition = "2021" publish = false # Its own workspace: reindeer resolves this graph on its own, and the root # workspace must not try to make it a member. [workspace] # Nothing is compiled from here; the manifest exists to pin a graph. [lib] path = "lib.rs" [dependencies] anyhow = "1" # cpal's cross-platform sample trait; see the note above the patch table. dasp_sample = "0.11" # `image-data` is the clipboard path for a pasted picture; egui does not deliver # one. Desktop only — arboard has no Android backend. arboard = { version = "3", default-features = false, features = ["image-data"] } # Without cpal's `pipewire` feature, which is on by default under cargo: it # builds libspa-sys, which wants pkg-config and PipeWire's headers on the build # machine — the one system dependency the zig toolchain cannot stand in for. # The buck2 build is therefore `--no-default-features` shaped for now: ALSA PCM # names only, everything else equal. cpal = { path = "cpal" } # `default_fonts` because a shared library has no host app to install a font set # for it. vidya-core turns egui's defaults off; the union is what gets built. egui = { version = "0.31", features = ["default_fonts"] } egui-winit = "0.31" egui_glow = "0.31" env_logger = "0.11" glow = "0.16" glutin = "0.32" glutin-winit = "0.5" # JPEG only — the V4L2 path converts MJPEG frames, and nothing here reads or # writes a picture file. image = { version = "0.25", default-features = false, features = ["jpeg"] } iroh-live = { git = "https://github.com/n0-computer/iroh-live", rev = "edd9bcc530a615f3ab3a6919e96790a077905376", default-features = false, features = [ "opus", "h264", "capture-camera", ] } libc = "0.2" log = "0.4" moq-lite = { git = "https://github.com/Frando/moq", branch = "deps/iroh-main" } moq-native = { git = "https://github.com/Frando/moq", branch = "deps/iroh-main", default-features = false, features = [ "noq", "websocket", "aws-lc-rs", ] } mp4 = "0.14" n0-future = "0.3" # C++, which is why the toolchain needs both halves of zig. openh264 = { version = "0.9", default-features = false, features = ["source"] } png = "0.17" rand = "0.8" # aws-lc-rs rather than ring, to match what moq-native and iroh already pull in. rustls = { version = "0.23", default-features = false, features = ["aws-lc-rs"] } tokio = { version = "1", features = ["rt-multi-thread", "macros", "sync", "time"] } # One query parameter (`inst=`) needs escaping. That is the whole use. urlencoding = "2" url = "2" # V4L2 capture: the fallback path for cameras rusty-capture mishandles. v4l2r = "0.0.7" winit = "0.30" zip = { version = "2", default-features = false, features = ["deflate"] } # Carried over from the workspace root verbatim: iroh-live wants an unreleased # iroh 0.97, and the revs are the ones freeq locks. They travel together and are # not independently bumpable. # cpal's own dependencies, named here so reindeer gives them public aliases: # the hand-written target in cpal/BUCK lives in a different package, and # reindeer only makes top-level deps visible outside its own. [target.'cfg(any(target_os = "linux", target_os = "dragonfly", target_os = "freebsd", target_os = "netbsd"))'.dependencies] alsa = "0.11" [target.'cfg(target_vendor = "apple")'.dependencies] coreaudio-rs = { version = "0.14", default-features = false, features = ["core_audio", "audio_toolbox"] } mach2 = "0.5" objc2 = "0.6" objc2-audio-toolbox = { version = "0.3", default-features = false, features = ["std", "AUComponent", "AudioUnitProperties"] } objc2-core-audio = { version = "0.3", default-features = false, features = ["std", "AudioHardware", "AudioHardwareDeprecated", "objc2", "objc2-foundation"] } objc2-core-audio-types = { version = "0.3", default-features = false, features = ["std", "CoreAudioBaseTypes"] } objc2-core-foundation = "0.3" objc2-foundation = "0.3" # The device. libjoltmoq does not cross — the media plane is V4L2 and PipeWire — # so this is libvidya's half of the graph and nothing else. [target.'cfg(target_os = "android")'.dependencies] # `vidya_open_url` is an ACTION_VIEW intent there, which is a JNI call against # the activity the glue holds. # # Renamed because cpal wants jni 0.21 on the same platform, and cpal is a path # dependency above — so reindeer gives its deps public aliases too, and two # crates called `jni` cannot both have one. The consumer says `named_deps`. jni-0-22 = { package = "jni", version = "0.22" } # The feature is what pulls in android-activity, and android-activity is what # owns the event loop: the APK's NativeActivity has no Java main to call into, # so the glue is the entry point. Without it the crate compiles to a backend of # no platform at all and fails on its own imports. winit = { version = "0.30", features = ["android-native-activity"] } [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 = { 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 no longer compiles against the iroh-live rev pinned above. # The vendored copy is the last commit that does — 63ea9ff upstream, per its # .cargo_vcs_info.json. It has to be a path rather than that rev: cargo # canonicalises the URL, so naming the same repo without `.git` is still "the # same source", which a patch may not retarget. [patch."https://github.com/RustAudio/cpal.git"] cpal = { path = "cpal" }