65816-llvm-mos/scripts/cDemo.sh
Scott Duensing 873eab4922 Checkpoint.
2026-04-25 17:07:28 -05:00

46 lines
1.4 KiB
Bash
Executable file

#!/usr/bin/env bash
# Compile a small C file with clang -target w65816 and disassemble
# the result. Demonstrates the full toolchain front-to-back.
#
# Usage: scripts/cDemo.sh [source.c]
# Without an argument, compiles a built-in demo program.
set -euo pipefail
source "$(dirname "$0")/common.sh"
BUILD_DIR="$TOOLS_DIR/llvm-mos-build"
CLANG="$BUILD_DIR/bin/clang"
OBJDUMP="$BUILD_DIR/bin/llvm-objdump"
[ -x "$CLANG" ] || die "clang not built; run: ninja -C $BUILD_DIR clang"
[ -x "$OBJDUMP" ] || die "llvm-objdump not built"
src="${1:-}"
if [ -z "$src" ]; then
src="$(mktemp --suffix=.c)"
obj_cleanup_extra="$src"
cat > "$src" <<'EOF'
// Built-in demo: simple integer functions
int counter;
int target = 100;
int get_counter(void) { return counter; }
int set_counter(int v) { counter = v; return v; }
int sum_with_target(int x) { return x + target; }
int doubler(int x) { return x * 2; }
unsigned half(unsigned x) { return x / 2; } // unsigned: uses lsr
int reset(void) { counter = 0; return 0; }
int answer(void) { return 42; }
EOF
log "(no source given; using built-in demo)"
fi
obj="$(mktemp --suffix=.o)"
trap 'rm -f "$obj" ${obj_cleanup_extra:-}' EXIT
log "compiling $src with clang -target w65816 -O2"
"$CLANG" --target=w65816 -O2 -c "$src" -o "$obj"
log "disassembling result:"
echo
"$OBJDUMP" --triple=w65816 -d "$obj"