fix(bootstrap): smoke_test provides RTL source for source-built-RTL commits
The rolling-bootstrap smoke probe ran `$cc --source s.pas --output s` with no unit-path, relying on the binary finding the RTL beside itself. That worked while the RTL was an archive (FindRTL looks beside the binary), but once a commit makes the compiler source-build the RTL, the boot/carried binary is not beside its compiler/ source tree, so RTLSourceDir (binary-relative, then CWD-relative) misses and the probe fails with "RTL source directory not found". Point the probe at the worktree's RTL source via $BLAISE_RTL_SRC and the unit path. Backward-compatible: pre-source-build commits ignore $BLAISE_RTL_SRC and still link the archive copied beside the binary; the extra unit paths are harmless for a program that uses no units.
This commit is contained in:
parent
773d773008
commit
e9030563ea
|
|
@ -202,7 +202,7 @@ build_step() {
|
|||
}
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# smoke_test <compiler-binary> <rtl-archive>
|
||||
# smoke_test <compiler-binary> <rtl-archive> <worktree>
|
||||
# Compiles + runs a trivial program to prove the freshly-built binary is
|
||||
# functional (source -> native backend -> internal assembler + linker ->
|
||||
# runs -> correct stdout). Kept deliberately feature-agnostic: it must pass
|
||||
|
|
@ -210,7 +210,7 @@ build_step() {
|
|||
# not any specific later feature.
|
||||
# ---------------------------------------------------------------------------
|
||||
smoke_test() {
|
||||
local cc="$1" rtl="$2"
|
||||
local cc="$1" rtl="$2" wt="$3"
|
||||
local d; d="$(mktemp -d)"
|
||||
cat > "$d/s.pas" <<'PAS'
|
||||
program P;
|
||||
|
|
@ -220,11 +220,19 @@ begin
|
|||
WriteLn(X)
|
||||
end.
|
||||
PAS
|
||||
# FindRTL looks beside the compiler binary; ensure the matching archive is
|
||||
# there so the internal linker finds it.
|
||||
# Pre-source-build commits link the RTL archive (FindRTL beside the binary);
|
||||
# later commits source-build the RTL. Provide BOTH so this probe works across
|
||||
# the whole range: copy the archive beside the binary AND point the source
|
||||
# build at the RTL source in the worktree ($BLAISE_RTL_SRC short-circuits
|
||||
# RTLSourceDir, which is binary-relative and would otherwise miss because the
|
||||
# carried binary is not beside its compiler/ tree).
|
||||
cp "$rtl" "$(dirname "$cc")/blaise_rtl.a" 2>/dev/null || true
|
||||
local ok=1
|
||||
if "$cc" --source "$d/s.pas" --output "$d/s" 2>"$d/s.err"; then
|
||||
if BLAISE_RTL_SRC="$wt/compiler/src/main/pascal" \
|
||||
"$cc" --source "$d/s.pas" \
|
||||
--unit-path "$wt/compiler/src/main/pascal" \
|
||||
--unit-path "$wt/stdlib/src/main/pascal" \
|
||||
--output "$d/s" 2>"$d/s.err"; then
|
||||
[ "$("$d/s" 2>/dev/null)" = "42" ] && ok=0
|
||||
fi
|
||||
rm -rf "$d"
|
||||
|
|
@ -255,7 +263,7 @@ for sha in "${COMMITS[@]}"; do
|
|||
exit 2
|
||||
fi
|
||||
|
||||
if ! smoke_test "$WT/_boot/blaise" "$WT/_boot/blaise_rtl.a"; then
|
||||
if ! smoke_test "$WT/_boot/blaise" "$WT/_boot/blaise_rtl.a" "$WT"; then
|
||||
echo
|
||||
echo "SMOKE_FAILED at $short ($subj)"
|
||||
echo " The binary built but produced wrong output for the local-const-array"
|
||||
|
|
|
|||
Loading…
Reference in a new issue