93 lines
3.3 KiB
Bash
Executable file
93 lines
3.3 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
# Sanity-check every installed tool. Exits non-zero if anything is missing.
|
|
|
|
set -euo pipefail
|
|
source "$(dirname "$0")/common.sh"
|
|
|
|
fails=0
|
|
|
|
check() {
|
|
local label="$1"; shift
|
|
if "$@" >/dev/null 2>&1; then
|
|
printf ' [ OK ] %s\n' "$label"
|
|
else
|
|
printf ' [FAIL] %s (%s)\n' "$label" "$*"
|
|
fails=$((fails + 1))
|
|
fi
|
|
}
|
|
|
|
log "verifying toolchain"
|
|
|
|
# Build tools
|
|
check "cmake" cmake --version
|
|
check "ninja" ninja --version
|
|
check "clang (host)" clang --version
|
|
check "git" git --version
|
|
|
|
# llvm-mos source + SDK
|
|
check "llvm-mos source tree" test -d "$TOOLS_DIR/llvm-mos/.git"
|
|
check "llvm-mos-sdk extracted" test -x "$TOOLS_DIR/llvm-mos-sdk/bin/mos-common-clang"
|
|
|
|
# W65816 backend integration
|
|
check "W65816 source symlinked into llvm-mos" \
|
|
test -L "$TOOLS_DIR/llvm-mos/llvm/lib/Target/W65816/W65816ISelLowering.cpp"
|
|
check "W65816 clang built" test -x "$TOOLS_DIR/llvm-mos-build/bin/clang"
|
|
check "W65816 llc built" test -x "$TOOLS_DIR/llvm-mos-build/bin/llc"
|
|
check "W65816 llvm-mc built" test -x "$TOOLS_DIR/llvm-mos-build/bin/llvm-mc"
|
|
check "llc lists w65816 target" \
|
|
bash -c "'$TOOLS_DIR/llvm-mos-build/bin/llc' --version 2>/dev/null | grep -q '^[[:space:]]*w65816[[:space:]]'"
|
|
|
|
# link816 + omfEmit
|
|
check "link816 binary" test -x "$TOOLS_DIR/link816"
|
|
check "omfEmit binary" test -x "$TOOLS_DIR/omfEmit"
|
|
|
|
# Runtime libraries (built objects we link into every program)
|
|
check "runtime/crt0.o" test -s "$PROJECT_ROOT/runtime/crt0.o"
|
|
check "runtime/libc.o" test -s "$PROJECT_ROOT/runtime/libc.o"
|
|
check "runtime/libgcc.o" test -s "$PROJECT_ROOT/runtime/libgcc.o"
|
|
check "runtime/softFloat.o" test -s "$PROJECT_ROOT/runtime/softFloat.o"
|
|
check "runtime/softDouble.o" test -s "$PROJECT_ROOT/runtime/softDouble.o"
|
|
|
|
# MAME + ROMs
|
|
check "mame binary" command -v mame
|
|
check "mame Lua console support" bash -c "mame -showusage 2>&1 | grep -q -- '-console'"
|
|
check "rom: apple2gs.zip" test -s "$TOOLS_DIR/mame/roms/apple2gs.zip"
|
|
check "rom: apple2gsr1.zip" test -s "$TOOLS_DIR/mame/roms/apple2gsr1.zip"
|
|
|
|
# Calypsi benchmark (optional; --skip-calypsi at install skips this).
|
|
if [ -d "$TOOLS_DIR/calypsi" ]; then
|
|
check "calypsi cc65816" \
|
|
test -x "$TOOLS_DIR/calypsi/usr/local/lib/calypsi-65816-5.16/bin/cc65816"
|
|
fi
|
|
|
|
# ORCA/C reference (optional; --skip-orca skips this).
|
|
if [ -d "$TOOLS_DIR/orca-c" ]; then
|
|
check "orca-c source" test -d "$TOOLS_DIR/orca-c/.git"
|
|
fi
|
|
|
|
# End-to-end smoke: compile a tiny C program for W65816 to prove the
|
|
# toolchain actually produces machine code.
|
|
echo
|
|
log "end-to-end compile check"
|
|
tmp=$(mktemp -d -t llvm816-verify.XXXXXX)
|
|
trap "rm -rf '$tmp'" EXIT
|
|
cat > "$tmp/hello.c" <<'EOF'
|
|
int answer(void) { return 42; }
|
|
EOF
|
|
if "$TOOLS_DIR/llvm-mos-build/bin/clang" --target=w65816 -O2 -c "$tmp/hello.c" \
|
|
-o "$tmp/hello.o" 2>/dev/null \
|
|
&& "$TOOLS_DIR/llvm-mos-build/bin/llvm-objdump" --triple=w65816 -d "$tmp/hello.o" 2>/dev/null \
|
|
| grep -q "lda"; then
|
|
printf ' [ OK ] C -> w65816 .o compile produces lda instruction\n'
|
|
else
|
|
printf ' [FAIL] end-to-end compile failed\n'
|
|
fails=$((fails + 1))
|
|
fi
|
|
|
|
echo
|
|
if [ "$fails" -eq 0 ]; then
|
|
log "all checks passed"
|
|
exit 0
|
|
else
|
|
die "$fails check(s) failed"
|
|
fi
|