ci: build Chez from source so buildsmoke links a real binary
The apt chezscheme package ships petite+scheme only — no kernel dev files — so the standalone-binary gate skipped on CI, leaving the whole jolt build pipeline and the --opt inference passes uncovered on Linux. Build Chez v10.4.1 from source (cached) to get libkernel.a + scheme.h, install the libs the kernel links against, and set the Linux link flags. buildsmoke now runs for real in CI.
This commit is contained in:
parent
a2146c0f0d
commit
339cd4b691
2 changed files with 42 additions and 15 deletions
52
.github/workflows/tests.yml
vendored
52
.github/workflows/tests.yml
vendored
|
|
@ -14,18 +14,42 @@ jobs:
|
||||||
with:
|
with:
|
||||||
submodules: recursive # vendor/irregex, used by the Chez regex shim
|
submodules: recursive # vendor/irregex, used by the Chez regex shim
|
||||||
|
|
||||||
- name: Install Chez Scheme
|
# Build Chez from source rather than the distro package: the apt
|
||||||
|
# chezscheme ships petite+scheme only, with no kernel dev files
|
||||||
|
# (libkernel.a, scheme.h), so `jolt build` (the buildsmoke gate) can't link
|
||||||
|
# a binary and would skip. The source build provides them, plus the libs the
|
||||||
|
# kernel links against.
|
||||||
|
- name: Install build dependencies
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get install -y chezscheme
|
sudo apt-get install -y build-essential git liblz4-dev zlib1g-dev libncurses-dev uuid-dev
|
||||||
# the gate invokes `chez`; Debian/Ubuntu installs it as `scheme`. A symlink
|
|
||||||
# won't do — Chez derives its boot-file name from argv0, so `chez` would look
|
- name: Cache Chez Scheme
|
||||||
# for a nonexistent chez.boot. A wrapper that exec's `scheme` keeps argv0.
|
id: cache-chez
|
||||||
if ! command -v chez >/dev/null 2>&1; then
|
uses: actions/cache@v4
|
||||||
printf '#!/bin/sh\nexec scheme "$@"\n' | sudo tee /usr/local/bin/chez >/dev/null
|
with:
|
||||||
sudo chmod +x /usr/local/bin/chez
|
path: /opt/chez
|
||||||
fi
|
key: chez-${{ runner.os }}-v10.4.1
|
||||||
chez --version || true
|
|
||||||
|
- name: Build Chez Scheme from source
|
||||||
|
if: steps.cache-chez.outputs.cache-hit != 'true'
|
||||||
|
run: |
|
||||||
|
git clone --depth 1 --branch v10.4.1 https://github.com/cisco/ChezScheme.git /tmp/chez-src
|
||||||
|
cd /tmp/chez-src
|
||||||
|
./configure --installprefix=/opt/chez --threads
|
||||||
|
make -j"$(nproc)"
|
||||||
|
sudo make install
|
||||||
|
sudo chown -R "$USER" /opt/chez
|
||||||
|
|
||||||
|
- name: Put chez on PATH
|
||||||
|
run: |
|
||||||
|
# Installed as `scheme`; the gate invokes `chez`. A wrapper that execs
|
||||||
|
# scheme keeps argv0 so Chez finds its boot files. Placed next to scheme
|
||||||
|
# so build.ss derives the csv dir (libkernel.a/scheme.h) from it.
|
||||||
|
printf '#!/bin/sh\nexec /opt/chez/bin/scheme "$@"\n' > /opt/chez/bin/chez
|
||||||
|
chmod +x /opt/chez/bin/chez
|
||||||
|
echo '/opt/chez/bin' >> "$GITHUB_PATH"
|
||||||
|
/opt/chez/bin/chez --version
|
||||||
|
|
||||||
- name: Install JDK + Clojure (certify oracle)
|
- name: Install JDK + Clojure (certify oracle)
|
||||||
run: |
|
run: |
|
||||||
|
|
@ -35,7 +59,9 @@ jobs:
|
||||||
clojure --version
|
clojure --version
|
||||||
|
|
||||||
- name: Gate
|
- name: Gate
|
||||||
# `make ci` runs the behavior gates (corpus/unit/smoke/sci/certify). The
|
# `make ci` runs the behavior gates (corpus/unit/smoke/buildsmoke/sci/
|
||||||
# self-host byte-fixpoint (make selfhost) is a dev-machine check — it only
|
# certify). buildsmoke now links a real binary (the source-built Chez has
|
||||||
# holds on the Chez that minted the seed. See jolt-8479.
|
# the kernel dev files). The self-host byte-fixpoint (make selfhost) is a
|
||||||
|
# dev-machine check — it only holds on the Chez that minted the seed. See
|
||||||
|
# jolt-8479.
|
||||||
run: make ci
|
run: make ci
|
||||||
|
|
|
||||||
|
|
@ -86,8 +86,9 @@
|
||||||
(string-append
|
(string-append
|
||||||
(if (> (string-length lz4) 0) (string-append "-L" lz4 "/lib ") "")
|
(if (> (string-length lz4) 0) (string-append "-L" lz4 "/lib ") "")
|
||||||
"-llz4 -lz -lncurses -framework Foundation -liconv -lm"))
|
"-llz4 -lz -lncurses -framework Foundation -liconv -lm"))
|
||||||
;; Best-effort Linux/other; untested here.
|
;; Linux: the Chez kernel pulls in compression (lz4/z), the expression
|
||||||
"-llz4 -lz -lncurses -ldl -lpthread -lm"))
|
;; editor (ncurses + terminfo), threads, dlopen, libuuid, and clock_gettime.
|
||||||
|
"-llz4 -lz -lncurses -ltinfo -ldl -lm -lpthread -luuid -lrt"))
|
||||||
|
|
||||||
;; --- runtime manifest (mirrors host/chez/cli.ss's load order) ---------------
|
;; --- runtime manifest (mirrors host/chez/cli.ss's load order) ---------------
|
||||||
(define bld-runtime-manifest
|
(define bld-runtime-manifest
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue