Embed runtime source so a self-contained joltc can build apps
`joltc build` inlines the runtime (host/chez/rt.ss and everything it loads, the seed, compile-eval, loader, ffi, the vendored irregex) into each app binary by reading those files off disk. That works from a jolt checkout but not from the installed self-contained binary, which has no source tree: joltc build -m app.core => Exception in call-with-input-file: failed for host/chez/rt.ss: no such file build-joltc now bakes the exact transitive closure of files the build inlines into the binary as embedded resources (keyed by the path the `(load "…")` forms use), and build.ss/dce.ss read runtime source through bld-source-string, which takes the embedded copy when present and falls back to disk otherwise. So the same joltc builds apps both from a checkout and standalone. The release workflow now smoke-tests a self-contained build (compile a tiny app from an isolated dir, run it) — this is exactly what shipped broken, so it now gates the release. buildsmoke/shakesmoke/staticnativesmoke unchanged and green. Build tooling only — no re-mint, no runtime change.
This commit is contained in:
parent
f6bd2c6de5
commit
db08ecc1bc
4 changed files with 65 additions and 7 deletions
16
.github/workflows/release.yml
vendored
16
.github/workflows/release.yml
vendored
|
|
@ -93,6 +93,22 @@ jobs:
|
|||
out="$(./target/release/joltc -e '(reduce + (range 10))')"
|
||||
test "$out" = "45" || { echo "joltc -e gave '$out', want 45"; exit 1; }
|
||||
|
||||
# The binary is a self-contained COMPILER: it must `build` an app with no
|
||||
# jolt source on disk. Run from an isolated dir (nothing but the tiny app)
|
||||
# so a build that reaches for host/chez/*.ss on the filesystem fails here,
|
||||
# not on a user's machine.
|
||||
- name: Smoke a self-contained build
|
||||
run: |
|
||||
joltc="$(pwd)/target/release/joltc"
|
||||
work="$(mktemp -d)"
|
||||
mkdir -p "$work/app/src/app"
|
||||
printf '{:paths ["src"]}\n' > "$work/app/deps.edn"
|
||||
printf '(ns app.core)\n(defn -main [& _] (println "built:" (reduce + (range 10))))\n' \
|
||||
> "$work/app/src/app/core.clj"
|
||||
( cd "$work/app" && "$joltc" build -m app.core -o app )
|
||||
out="$("$work/app/app")"
|
||||
test "$out" = "built: 45" || { echo "self-contained build ran '$out', want 'built: 45'"; exit 1; }
|
||||
|
||||
- name: Package
|
||||
run: |
|
||||
ver="${GITHUB_REF_NAME}"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue