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
|
{;; Two source roots, and the split is the point. `common` is compiled by both
;; jolt and ClojureDart, so nothing in it may mention either — see
;; common/frq/io.cljc. `src` is the jolt half: glimmer, jolt.ffi, and the two
;; desktop backends. The Flutter half is flutter/src and is not on this
;; classpath at all; it has a deps.edn of its own, and it — not jolt — is
;; what builds the APK now.
:paths ["common" "src"]
;; glimmer owns the reactive half (ratom, components, reconciler); which
;; backend paints it is the entry point's business and is not named here.
;; glimmer-cosmic lives inside jolt-native beside the libjoltcosmic.so it
;; binds, so it comes over with -Sdeps from whatever built that object rather
;; than from a git sha that could drift from it — the same reason glimmer-tui
;; is handed over rather than declared. There is no jvui and no vidya here
;; any more: both were experiments, and both are gone.
;;
;; Our fork of glimmer, until the reconciler fixes in it land upstream. A
;; component unmounted between a cell firing and the queued render running
;; used to render anyway, into widgets the backend had already freed and
;; handed out again — which took the message list apart in a busy channel.
;; And replacing a native node with one of another tag left every watcher
;; under it subscribed, so swapping the phone layout for the split one and
;; back shredded the chat: one component's props painted onto another's
;; widget.
:deps {jolt-lang/glimmer {:git/url "https://gitlab.com/nandithebull/glimmer"
:git/sha "399df371c790d690fb6e4560c3d4d7f838502857"}}
;; What the window loads is libjoltcosmic and what the terminal loads is
;; libjolttui; each recipe hands its own over, so neither is named here.
;;
;; Calls used to be the one thing this client could not do in jolt. The media
;; half is `frq.av.plane` now — MoQ over QUIC from libmoq_ffi, Opus from
;; libopus, H.264 from openh264 through a shim, and the devices from V4L2
;; and ALSA. Signaling was always IRC and still lives in src/frq/av.clj.
;;
;; just run
:jolt/native [;; The transport half of a call: MoQ over QUIC, the one
;; piece with no C implementation anywhere. Fetched from
;; moq-ffi's release rather than built — building it means a
;; 1062-crate workspace.
;;
;; The codecs are NOT in it. moq-ffi's `audio` and `video`
;; features are off in every Linux artifact upstream ships,
;; so Opus and H.264 come from their own C libraries below,
;; which is the whole point of doing this over FFI rather
;; than over a Rust facade.
;;
;; No :darwin: :systems is x86_64-linux and aarch64-linux, so
;; a .dylib named here would name a file nothing fetches.
{:name "moq_ffi"
:linux ["libmoq_ffi.so"]}
;; The codecs, as C libraries rather than as somebody's
;; bindings to them. Opus first; openh264 beside it when the
;; video half lands.
;;
;; The SONAME, not the bare .so: a `libopus.so` is the -dev
;; symlink and is not what a runtime closure carries. The
;; loader looks these up by name in one directory, which the
;; flake's `nativeAll` is.
{:name "opus"
:linux ["libopus.so.0"]
:darwin ["libopus.0.dylib"]}
;; H.264, one step removed. openh264's C API is a vtable —
;; `ISVCEncoder` is `const ISVCEncoderVtbl*` — and jolt.ffi
;; can only call a literal C symbol, never a function
;; pointer. c/frq_h264.c walks the vtable and exports flat
;; symbols; this is that. libopenh264 itself comes along as
;; its DT_NEEDED and is never named here.
{:name "frqh264"
:linux ["libfrqh264.so"]
:darwin ["libfrqh264.dylib"]}
;; Audio devices. No :darwin — CoreAudio is the other side of
;; that door and is not this library.
;;
;; V4L2 is deliberately absent from this list: the camera is
;; ioctls against libc and the kernel, so there is nothing to
;; load. See frq.capture.v4l2.
{:name "asound"
:linux ["libasound.so.2"]}]
;; No :frq alias: `frq.app` is the screens and has no -main any more. There
;; is one entry point per backend and each needs its backend handed over, so
;; the recipes are the way in — `just cosmic` for the window, `just tui` for
;; the terminal.
:aliases {;; The same screens in a terminal. glimmer-tui is one backend for
;; the reconciler and glimmer-cosmic is the other — the same tree
;; ABI with cells under it instead of libcosmic — so `frq.tui`
;; requires it after `frq.app` and renders the hiccup that is
;; already written.
;;
;; A path rather than a sha: `just tui` builds jolt-native out of
;; the flake and hands both Jolt halves over with -Sdeps, so this is
;; for a checkout beside the tree and nothing else reads it. The
;; window has no alias of its own for the same reason — see
;; `just cosmic`.
;;
;; just tui
:tui {:extra-deps {nandi/glimmer-tui
{:local/root "../jolt-native/glimmer-backends/glimmer-tui"}}
:main-opts ["-m" "frq.tui"]}}
:tasks {tui "jolt -M:tui"}}
|