65816-llvm-mos/tests/lua/runLuaTest.sh
2026-05-25 21:00:32 -05:00

48 lines
1.8 KiB
Bash
Executable file

#!/usr/bin/env bash
# Build + link + run the Lua smoke test under MAME.
set -eu
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
CLANG="$PROJECT_ROOT/tools/llvm-mos-build/bin/clang"
LINK="$PROJECT_ROOT/tools/link816"
LUA_OBJ="$SCRIPT_DIR/build"
RT="$PROJECT_ROOT/runtime"
cd "$SCRIPT_DIR"
# Ensure Lua is built.
if [ ! -d "$LUA_OBJ" ] || [ -z "$(ls $LUA_OBJ/*.o 2>/dev/null)" ]; then
bash "$SCRIPT_DIR/build.sh"
fi
# Build the test wrapper.
"$CLANG" -target w65816 -O2 -ffunction-sections \
-I "$RT/include" -I "$SCRIPT_DIR/lua-5.1.5/src" \
-c luaTest.c -o luaTest.o
# Link with full runtime + all Lua objects + the test. Multi-segment
# layout: text packs into 48KB chunks starting in bank 0, additional
# segments at bank 1+.
"$LINK" -o luaTest.bin --text-base 0x1000 \
--segment-cap 0xB000 \
--segment-bank-base 0x040000 \
--manifest luaTest.manifest.json \
"$RT/crt0.o" \
"$RT/libc.o" "$RT/libgcc.o" "$RT/softFloat.o" "$RT/softDouble.o" \
"$RT/math.o" "$RT/strtol.o" "$RT/snprintf.o" "$RT/sscanf.o" \
"$RT/qsort.o" "$RT/strtok.o" "$RT/timeExt.o" "$RT/extras.o" \
$LUA_OBJ/*.o luaTest.o
ls -la luaTest*.bin luaTest*.json 2>&1 | head
echo ""
echo "Running under MAME (this may take longer than typical smoke tests —"
echo "Lua interpretation overhead is significant on a 1 MHz IIgs)..."
# Lua interp is slow — give it plenty of frames. Multi-segment program
# needs the runMultiSeg.sh loader (reads the manifest, places each
# segment at its declared bank-aligned address). Image paths in the
# manifest are relative to the script's directory.
MAME_CHECK_FRAME=1200 MAME_SECS=30 MAME_TIMEOUT=180 MAME_RAMSIZE=8M \
bash "$PROJECT_ROOT/scripts/runMultiSeg.sh" \
"$SCRIPT_DIR/luaTest.manifest.json" \
0x025000 c0de