Take glimmer-vidya from gitlab, so a stranger can build this
Both Jolt dependencies are git coordinates now. glimmer-vidya was a path into a sibling checkout, which is a build only someone with that checkout could do; it lives in one repo with the two shared objects, so it comes from there, at the commit the objects were built from. `just lib` clones jolt-native when there is no sibling checkout, and a sibling still wins — working on the two together is unchanged. What it cannot supply is a Rust toolchain: the shared objects are still built from source. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
5c40e75 parent: 3043efe modified
.gitignore +3 -0 | @@ -1,6 +1,9 @@ | ||
| 1 | 1 | # Build outputs: the boot image, the staged libraries, the APK. |
| 2 | 2 | /android/build/ |
| 3 | 3 | |
| 4 | +# jolt-native, cloned by `just lib` when there is no sibling checkout. | |
| 5 | +/.jolt-native/ | |
| 6 | + | |
| 4 | 7 | # Tool caches. |
| 5 | 8 | /.jolt/ |
| 6 | 9 | /.lsp/ |
| @@ -1,6 +1,9 @@ | |||
| 1 | # Build outputs: the boot image, the staged libraries, the APK. | 1 | # Build outputs: the boot image, the staged libraries, the APK. |
| 2 | /android/build/ | 2 | /android/build/ |
| 3 | 3 | ||
| 4 | +# jolt-native, cloned by `just lib` when there is no sibling checkout. | ||
| 5 | +/.jolt-native/ | ||
| 6 | + | ||
| 4 | # Tool caches. | 7 | # Tool caches. |
| 5 | /.jolt/ | 8 | /.jolt/ |
| 6 | /.lsp/ | 9 | /.lsp/ |
modified
README.md +5 -4 | @@ -42,10 +42,11 @@ just run | ||
| 42 | 42 | ``` |
| 43 | 43 | |
| 44 | 44 | `just lib` builds [jolt-native](https://gitlab.com/nandithebull/jolt-native), |
| 45 | -which is where every shared object this client loads comes from: `libvidya`, | |
| 46 | -the retained-tree ABI glimmer paints through, and `libjoltmoq`, the AV media | |
| 47 | -plane. They come out of one directory, and `just run` puts that one directory | |
| 48 | -on the loader path. | |
| 45 | +cloning it into `.jolt-native` at the pinned commit unless you already have a | |
| 46 | +sibling checkout, which wins. That repo is where every shared object this | |
| 47 | +client loads comes from: `libvidya`, the retained-tree ABI glimmer paints | |
| 48 | +through, and `libjoltmoq`, the AV media plane. They come out of one directory, | |
| 49 | +and `just run` puts that one directory on the loader path. | |
| 49 | 50 | |
| 50 | 51 | `just run` is `jolt -M:frq` with `LD_LIBRARY_PATH` pointed at the built |
| 51 | 52 | library. It connects to `irc.freeq.at:6697` over TLS and joins `#test`. Untick |
| @@ -42,10 +42,11 @@ just run | |||
| 42 | ``` | 42 | ``` |
| 43 | 43 | ||
| 44 | `just lib` builds [jolt-native](https://gitlab.com/nandithebull/jolt-native), | 44 | `just lib` builds [jolt-native](https://gitlab.com/nandithebull/jolt-native), |
| 45 | -which is where every shared object this client loads comes from: `libvidya`, | 45 | +cloning it into `.jolt-native` at the pinned commit unless you already have a |
| 46 | -the retained-tree ABI glimmer paints through, and `libjoltmoq`, the AV media | 46 | +sibling checkout, which wins. That repo is where every shared object this |
| 47 | -plane. They come out of one directory, and `just run` puts that one directory | 47 | +client loads comes from: `libvidya`, the retained-tree ABI glimmer paints |
| 48 | -on the loader path. | 48 | +through, and `libjoltmoq`, the AV media plane. They come out of one directory, |
| 49 | +and `just run` puts that one directory on the loader path. | ||
| 49 | 50 | ||
| 50 | `just run` is `jolt -M:frq` with `LD_LIBRARY_PATH` pointed at the built | 51 | `just run` is `jolt -M:frq` with `LD_LIBRARY_PATH` pointed at the built |
| 51 | library. It connects to `irc.freeq.at:6697` over TLS and joins `#test`. Untick | 52 | library. It connects to `irc.freeq.at:6697` over TLS and joins `#test`. Untick |
modified
deps.edn +4 -2 | @@ -12,7 +12,9 @@ | ||
| 12 | 12 | ;; widget. |
| 13 | 13 | :deps {jolt-lang/glimmer {:git/url "https://gitlab.com/nandithebull/glimmer" |
| 14 | 14 | :git/sha "399df371c790d690fb6e4560c3d4d7f838502857"} |
| 15 | - nandi/glimmer-vidya {:local/root "../jolt-native/jolt/glimmer-vidya"}} | |
| 15 | + nandi/glimmer-vidya {:git/url "https://gitlab.com/nandithebull/jolt-native" | |
| 16 | + :git/sha "70072e8e48ad396caeab6f6bd18b999cf449ec8f" | |
| 17 | + :deps/root "jolt/glimmer-vidya"}} | |
| 16 | 18 | |
| 17 | 19 | ;; Both objects come from gitlab.com/nandithebull/jolt-native, one crate each, |
| 18 | 20 | ;; out of one target directory: |
| @@ -24,7 +26,7 @@ | ||
| 24 | 26 | ;; lives in src/frq/av.jolt; the media half is three thousand lines of codec |
| 25 | 27 | ;; and transport that would only be written badly a second time here. |
| 26 | 28 | ;; |
| 27 | - ;; cd ../jolt-native && just build | |
| 29 | + ;; just lib | |
| 28 | 30 | :jolt/native [{:name "vidya" |
| 29 | 31 | :darwin ["libvidya.dylib"] |
| 30 | 32 | :linux ["libvidya.so"]} |
| @@ -12,7 +12,9 @@ | |||
| 12 | ;; widget. | 12 | ;; widget. |
| 13 | :deps {jolt-lang/glimmer {:git/url "https://gitlab.com/nandithebull/glimmer" | 13 | :deps {jolt-lang/glimmer {:git/url "https://gitlab.com/nandithebull/glimmer" |
| 14 | :git/sha "399df371c790d690fb6e4560c3d4d7f838502857"} | 14 | :git/sha "399df371c790d690fb6e4560c3d4d7f838502857"} |
| 15 | - nandi/glimmer-vidya {:local/root "../jolt-native/jolt/glimmer-vidya"}} | 15 | + nandi/glimmer-vidya {:git/url "https://gitlab.com/nandithebull/jolt-native" |
| 16 | + :git/sha "70072e8e48ad396caeab6f6bd18b999cf449ec8f" | ||
| 17 | + :deps/root "jolt/glimmer-vidya"}} | ||
| 16 | 18 | ||
| 17 | ;; Both objects come from gitlab.com/nandithebull/jolt-native, one crate each, | 19 | ;; Both objects come from gitlab.com/nandithebull/jolt-native, one crate each, |
| 18 | ;; out of one target directory: | 20 | ;; out of one target directory: |
| @@ -24,7 +26,7 @@ | |||
| 24 | ;; lives in src/frq/av.jolt; the media half is three thousand lines of codec | 26 | ;; lives in src/frq/av.jolt; the media half is three thousand lines of codec |
| 25 | ;; and transport that would only be written badly a second time here. | 27 | ;; and transport that would only be written badly a second time here. |
| 26 | ;; | 28 | ;; |
| 27 | - ;; cd ../jolt-native && just build | 29 | + ;; just lib |
| 28 | :jolt/native [{:name "vidya" | 30 | :jolt/native [{:name "vidya" |
| 29 | :darwin ["libvidya.dylib"] | 31 | :darwin ["libvidya.dylib"] |
| 30 | :linux ["libvidya.so"]} | 32 | :linux ["libvidya.so"]} |
modified
justfile +26 -2 | @@ -7,16 +7,40 @@ set shell := ["bash", "-euo", "pipefail", "-c"] | ||
| 7 | 7 | # thing that answers the same in a worktree as it does in the checkout it came |
| 8 | 8 | # from. |
| 9 | 9 | checkout := parent_directory(`git rev-parse --path-format=absolute --git-common-dir`) |
| 10 | -jolt_native := checkout / "../jolt-native" | |
| 10 | + | |
| 11 | +# jolt-native holds both shared objects. A sibling checkout wins, so anyone | |
| 12 | +# working on the two repos together builds what they are editing; everyone else | |
| 13 | +# gets a clone of the gitlab repo under .jolt-native, pinned to the same commit | |
| 14 | +# deps.edn takes glimmer-vidya from. | |
| 15 | +jolt_native_url := "https://gitlab.com/nandithebull/jolt-native.git" | |
| 16 | +jolt_native_sha := "70072e8e48ad396caeab6f6bd18b999cf449ec8f" | |
| 17 | +jolt_native := ` | |
| 18 | + checkout="$(dirname "$(git rev-parse --path-format=absolute --git-common-dir)")" | |
| 19 | + if [ -d "$checkout/../jolt-native" ]; then | |
| 20 | + cd "$checkout/../jolt-native" && pwd | |
| 21 | + else | |
| 22 | + echo "$checkout/.jolt-native" | |
| 23 | + fi | |
| 24 | +` | |
| 11 | 25 | |
| 12 | 26 | default: |
| 13 | 27 | @just --list |
| 14 | 28 | |
| 15 | 29 | # Both native libraries: libvidya (the tree ABI glimmer-vidya binds) and |
| 16 | 30 | # libjoltmoq (the AV media plane). One workspace, one target directory. |
| 17 | -lib: | |
| 31 | +lib: fetch | |
| 18 | 32 | cd {{jolt_native}} && just build |
| 19 | 33 | |
| 34 | +# Clone jolt-native at the pinned commit, unless it is already here — which it | |
| 35 | +# is whenever the sibling checkout exists, since that is what jolt_native then | |
| 36 | +# points at. | |
| 37 | +[private] | |
| 38 | +fetch: | |
| 39 | + if [ ! -d {{quote(jolt_native)}} ]; then \ | |
| 40 | + git clone {{jolt_native_url}} {{quote(jolt_native)}}; \ | |
| 41 | + cd {{quote(jolt_native)}} && git checkout --detach {{jolt_native_sha}}; \ | |
| 42 | + fi | |
| 43 | + | |
| 20 | 44 | # The app. |
| 21 | 45 | run *args: |
| 22 | 46 | LD_LIBRARY_PATH="{{jolt_native}}/target/release" jolt -M:frq {{args}} |
| @@ -7,16 +7,40 @@ set shell := ["bash", "-euo", "pipefail", "-c"] | |||
| 7 | # thing that answers the same in a worktree as it does in the checkout it came | 7 | # thing that answers the same in a worktree as it does in the checkout it came |
| 8 | # from. | 8 | # from. |
| 9 | checkout := parent_directory(`git rev-parse --path-format=absolute --git-common-dir`) | 9 | checkout := parent_directory(`git rev-parse --path-format=absolute --git-common-dir`) |
| 10 | -jolt_native := checkout / "../jolt-native" | 10 | + |
| 11 | +# jolt-native holds both shared objects. A sibling checkout wins, so anyone | ||
| 12 | +# working on the two repos together builds what they are editing; everyone else | ||
| 13 | +# gets a clone of the gitlab repo under .jolt-native, pinned to the same commit | ||
| 14 | +# deps.edn takes glimmer-vidya from. | ||
| 15 | +jolt_native_url := "https://gitlab.com/nandithebull/jolt-native.git" | ||
| 16 | +jolt_native_sha := "70072e8e48ad396caeab6f6bd18b999cf449ec8f" | ||
| 17 | +jolt_native := ` | ||
| 18 | + checkout="$(dirname "$(git rev-parse --path-format=absolute --git-common-dir)")" | ||
| 19 | + if [ -d "$checkout/../jolt-native" ]; then | ||
| 20 | + cd "$checkout/../jolt-native" && pwd | ||
| 21 | + else | ||
| 22 | + echo "$checkout/.jolt-native" | ||
| 23 | + fi | ||
| 24 | +` | ||
| 11 | 25 | ||
| 12 | default: | 26 | default: |
| 13 | @just --list | 27 | @just --list |
| 14 | 28 | ||
| 15 | # Both native libraries: libvidya (the tree ABI glimmer-vidya binds) and | 29 | # Both native libraries: libvidya (the tree ABI glimmer-vidya binds) and |
| 16 | # libjoltmoq (the AV media plane). One workspace, one target directory. | 30 | # libjoltmoq (the AV media plane). One workspace, one target directory. |
| 17 | -lib: | 31 | +lib: fetch |
| 18 | cd {{jolt_native}} && just build | 32 | cd {{jolt_native}} && just build |
| 19 | 33 | ||
| 34 | +# Clone jolt-native at the pinned commit, unless it is already here — which it | ||
| 35 | +# is whenever the sibling checkout exists, since that is what jolt_native then | ||
| 36 | +# points at. | ||
| 37 | +[private] | ||
| 38 | +fetch: | ||
| 39 | + if [ ! -d {{quote(jolt_native)}} ]; then \ | ||
| 40 | + git clone {{jolt_native_url}} {{quote(jolt_native)}}; \ | ||
| 41 | + cd {{quote(jolt_native)}} && git checkout --detach {{jolt_native_sha}}; \ | ||
| 42 | + fi | ||
| 43 | + | ||
| 20 | # The app. | 44 | # The app. |
| 21 | run *args: | 45 | run *args: |
| 22 | LD_LIBRARY_PATH="{{jolt_native}}/target/release" jolt -M:frq {{args}} | 46 | LD_LIBRARY_PATH="{{jolt_native}}/target/release" jolt -M:frq {{args}} |