DJLougen's picture
Upload Qwen3.5-9B-Math-GraphCalc (43-layer zero-gradient WSP + in-weights RV32 graphing calculator)
9b8659b verified
Raw History Blame Contribute Delete
1.58 kB
#!/bin/bash
# Build the Carbon Graphing Calculator RV32IM+Zba+Bignum firmware (run in WSL):
# bash carbon/firmware/build.sh [OUT_DIR]
# Produces:
# OUT_DIR/graphcalc.elf (for compiled Qwen3.5 RV32 chip layers & chipformer.rv.ref.Machine)
# OUT_DIR/graphcalc-qemu.elf (for standalone qemu-riscv32 verification via stdin)
set -euo pipefail
HERE=$(cd "$(dirname "$0")" && pwd)
OUT=$(realpath "${1:-$HERE}")
QWENPUTER=${QWENPUTER:-$HERE/../../../qwenputer}
ENV=$QWENPUTER/experimental/riscv/chipformer/rv/env
CALC_ENV=$ENV/calc
GCC=riscv64-unknown-elf-gcc
MARCH=rv32im_zba
PICO=/usr/lib/picolibc/riscv64-unknown-elf
LIBC=$PICO/lib/release/rv32im/ilp32/libc.a
[ -f "$LIBC" ] || LIBC=$(find /usr/lib/picolibc -path '*rv32im/ilp32/libc.a' | head -n 1)
LIBGCC=$($GCC -march=rv32im -mabi=ilp32 -print-libgcc-file-name)
B=$(mktemp -d)
python3 "$HERE/tables.py" "$B/graphcalc_tables.h" "$B/sled.S"
mkdir -p "$OUT"
for map in rom qemu; do
name=$([ $map = rom ] && echo graphcalc || echo graphcalc-qemu)
def=$([ $map = rom ] && echo "" || echo "-DQEMU")
sled=$([ $map = rom ] && echo "$B/sled.S" || echo "")
$GCC -march=$MARCH -mabi=ilp32 ${CFLAGS:--O2} -fno-tree-loop-distribute-patterns -Wall -Wextra $def \
-isystem "$PICO/include" -I"$ENV" -I"$CALC_ENV" -I"$B" \
-nostdlib -nostartfiles -static -T"$ENV/$map.ld" -o "$OUT/$name.elf" \
"$ENV/crt0.S" "$HERE/graphcalc.c" "$ENV/sys.c" $sled \
-Wl,--start-group "$LIBC" "$LIBGCC" -Wl,--end-group
done
riscv64-unknown-elf-size -A "$OUT/graphcalc.elf" | grep -E '^\.(text|rodata|data|bss)'
rm -rf "$B"