62 lines
2.1 KiB
Bash
Executable file
62 lines
2.1 KiB
Bash
Executable file
#!/usr/bin/env bash
|
||
# Build Lua 5.1.5 for the W65816 target. Most files compile at -O2;
|
||
# ldebug.c (symbexec) and ltablib.c (auxsort) hit a register-allocation
|
||
# limit at -O1+ and need -O0. Outputs object files under build/.
|
||
|
||
set -eu
|
||
|
||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||
LUA_SRC="$SCRIPT_DIR/lua-5.1.5/src"
|
||
OUT="$SCRIPT_DIR/build"
|
||
CLANG="$PROJECT_ROOT/tools/llvm-mos-build/bin/clang"
|
||
|
||
mkdir -p "$OUT"
|
||
|
||
LAYER2=()
|
||
for arg in "$@"; do
|
||
case "$arg" in
|
||
--layer2) LAYER2=(-mllvm -w65816-dbr-safe-ptrs) ;;
|
||
esac
|
||
done
|
||
|
||
CFLAGS=(-target w65816 -O2 -ffunction-sections -DLUA_USE_C89
|
||
-I "$PROJECT_ROOT/runtime/include" -I "$LUA_SRC"
|
||
"${LAYER2[@]}")
|
||
# These functions exceed greedy regalloc's complexity budget — fall back
|
||
# to basic regalloc which is simpler but always terminates. Code is
|
||
# slower but stays at -O2 so the resulting object is ~3.5× smaller
|
||
# than -O0 (lvm.o: 220KB → 63KB).
|
||
SLOW_FILES="ldebug ltablib lvm"
|
||
if [ ${#LAYER2[@]} -gt 0 ]; then
|
||
SLOW_FILES="$SLOW_FILES lstrlib"
|
||
fi
|
||
SLOW_FLAGS="-mllvm -regalloc=basic"
|
||
|
||
# Core Lua: VM, parser, GC, string/table libs. Skip: liolib (no FILE*
|
||
# backing in mfs-only mode), loslib (no time), loadlib (no dlsym),
|
||
# ldblib (debug interface), linit (registers stripped libs), lua.c
|
||
# (standalone main), luac.c (compiler binary), print.c (luac aux).
|
||
CORE="lapi lcode ldebug ldo ldump lfunc lgc llex lmem lobject lopcodes
|
||
lparser lstate lstring ltable ltm lundump lvm lzio lauxlib
|
||
lbaselib lstrlib ltablib lmathlib"
|
||
|
||
for f in $CORE; do
|
||
o="$OUT/${f}.o"
|
||
cflags=("${CFLAGS[@]}")
|
||
if echo " $SLOW_FILES " | grep -q " $f "; then
|
||
# shellcheck disable=SC2206
|
||
cflags=("${cflags[@]}" $SLOW_FLAGS)
|
||
echo " CC $f.c (basic regalloc)"
|
||
else
|
||
echo " CC $f.c"
|
||
fi
|
||
"$CLANG" "${cflags[@]}" -c "$LUA_SRC/${f}.c" -o "$o"
|
||
done
|
||
|
||
# Stubs for libc functions Lua needs that our libc doesn't provide.
|
||
"$CLANG" "${CFLAGS[@]}" -c "$SCRIPT_DIR/luaStubs.c" -o "$OUT/luaStubs.o"
|
||
echo " CC luaStubs.c"
|
||
|
||
echo ""
|
||
echo "Lua built: $(ls "$OUT"/*.o | wc -l) objects, $(du -sh "$OUT" | cut -f1) total"
|