makepad/libs/relax/compiler/tests/cache_warm_capture/run.sh
Admin b22a714840 makepad run: the Rust JIT (libs/relax) and makepad-remote
The JIT that runs makepad apps from source: lexer, front end, type checker,
lazy borrow checker (Gandalf; `--check-first` opts in), codegen, session and
warm/cold caches keyed by compiler stamp, provided crates bound late,
startup images, live patching. User-facing name is `makepad run` (binary
`makepad`, MAKEPAD_RUN_* env, ~/.makepad-run); libs/relax stays the internal
library name. `makepad check` reports rustc-style diagnostics with rustc
error codes and checks a whole workspace (`--workspace`). Runs on macOS,
Linux, Windows and Android. makepad-remote: one tool schema for apps and the
WM (app/1): grabs, captures, traces, frame profiles and tweaks.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-13 12:26:21 +02:00

32 lines
1.4 KiB
Bash
Executable file

#!/bin/bash
# usage: run.sh <makepad binary>: this program twice with one fresh disk cache (cold, then warm). The warm run
# links cached code next to freshly compiled code; it must exit 0 and print the cold run's result line (the bug
# this guards: a closure environment captured by value in one half and read by reference in the other crashed
# warm runs in HashMap probing). Prints "cache_warm_capture: ok" or "cache_warm_capture: FAILED ...".
H=$(cd "$(dirname "$0")" && pwd)
R=$1
C=$(mktemp -d)
chmod 700 "$C"
rc=()
for k in 1 2 3; do
(cd "$H" && MAKEPAD_RUN_CACHE_DIR="$C/cache" MAKEPAD_RUN_STD="$H/../../std" RUSTC_BOOTSTRAP=1 "$R" run --quiet cache-warm-capture) > "$C/run$k.log" 2>&1
rc+=($?)
done
python3 - "$C" "${rc[@]}" <<'PY'
import re, shutil, sys, os
c, rcs = sys.argv[1], sys.argv[2:]
lines = []
for k in (1, 2, 3):
t = open(os.path.join(c, f"run{k}.log"), errors="replace").read()
m = re.search(r"cache_warm_capture result [0-9 ]+", t)
lines.append(m.group(0).strip() if m else None)
bad = []
if any(r != "0" for r in rcs):
bad.append(f"exit codes {rcs}")
if lines[0] is None or lines.count(lines[0]) != 3:
bad.append(f"results differ: {lines}")
print("cache_warm_capture: " + ("ok" if not bad else "FAILED " + "; ".join(bad)) + f" ({lines[0]})")
# the temp dir this script made (mktemp -d), nothing else
if os.path.dirname(c) and os.path.isdir(c) and not os.path.islink(c) and os.path.basename(c).startswith("tmp."):
shutil.rmtree(c)
PY