nandi/frqpublic Fork 0
dd6723379af757893126636240beb2e911a81d58
Commits
Clone
git clone https://git.rickub.com/nandi/frq.git
git clone ssh://git@rickub.com/nandi/frq.git

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

Split the tree three ways, and let the phone be Flutter's 7070931 · on dd6723379af757893126636240beb2e911a81d58 · nandi · 7d ago
deps.edn · 105 lines · 5.6 KBClojure 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
{;; 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"}}