nandi/jolt-nativepublic Fork 0
a78520161e25e26b1bb67e2553889eeaaf58d5ab
Commits
Clone
git clone https://git.rickub.com/nandi/jolt-native.git
git clone ssh://git@rickub.com/nandi/jolt-native.git

Host key fingerprint (ed25519): SHA256:iycHnxEyq0Q7uyVpB7JlznP0G7JrTPXLYRcAU5CSLhc — verify it before your first connect.

Paint the same tree into a terminal, for the machines with no window a7f6202 · on a78520161e25e26b1bb67e2553889eeaaf58d5ab · nandi · 17d ago
Cargo.toml · 170 lines · 8.8 KBTOML Blame HistoryRaw
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
# 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:<name>`.
#
# 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.
# The terminal jolt-tui paints into. `events` only: the crate's default set
# reaches for a Windows console API and a serde derive, and neither the reader
# nor the writer here wants either.
crossterm = { version = "0.28", default-features = false, features = ["events"] }
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"] }
# `capture-camera` is NOT here: features declared on a shared dependency are
# resolved for every platform, and rusty-capture is V4L2 and friends. It goes in
# the desktop target section below, so the phone's graph never reaches it.
iroh-live = { git = "https://github.com/n0-computer/iroh-live", rev = "edd9bcc530a615f3ab3a6919e96790a077905376", default-features = false, features = [
    "opus",
    "h264",
] }
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 camera, on a machine that has one behind an ioctl. See the note on the
# shared `iroh-live` above for why the feature is here rather than there.
[target.'cfg(not(target_os = "android"))'.dependencies]
iroh-live = { git = "https://github.com/n0-computer/iroh-live", rev = "edd9bcc530a615f3ab3a6919e96790a077905376", default-features = false, features = [
    "capture-camera",
] }

# The device. Both objects cross now: libvidya for the UI, and libjoltmoq for
# the media plane, whose camera is Camera2 over JNI rather than V4L2 and whose
# audio is cpal's AAudio host rather than PipeWire.
[target.'cfg(target_os = "android")'.dependencies]
# NOT `capture-camera`, for the reason given on the shared `iroh-live` above.
# `android` is a different feature and a needed one: it links `ndk`, which
# rusty-codecs' format.rs references under cfg(android) for the MediaCodec path,
# and without it the crate fails on its own imports.
iroh-live = { git = "https://github.com/n0-computer/iroh-live", rev = "edd9bcc530a615f3ab3a6919e96790a077905376", default-features = false, features = [
    "android",
] }
# `vidya_open_url` is an ACTION_VIEW intent there, which is a JNI call against
# the activity the glue holds; libjoltmoq's Camera2 bridge is the other caller.
#
# 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" }
# cpal's AAudio host, and the crates it reaches it through. cpal is a path
# dependency, so its own manifest cannot give these public aliases — they are
# named here for the same reason the alsa and coreaudio rows above are, and
# ../cpal/BUCK's Android row is what consumes them.
#
# `audio` is the AAudio binding itself and `api-level-26` is the floor it needs;
# without either, cpal's android host compiles against imports that are not
# there. This unions with the plain `ndk` iroh-live asks for above.
ndk = { version = "0.9", default-features = false, features = [
    "audio",
    "api-level-26",
] }
ndk-context = "0.1"
# The unrenamed one, and cpal's: 0.21, not the 0.22 above.
jni = "0.21"
num-derive = "0.4"
num-traits = "0.2"
# 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" }