30 lines
661 B
Bash
Executable File
30 lines
661 B
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
QEMU="${QEMU:-qemu-system-riscv32}"
|
|
CC="${CC:-clang}"
|
|
|
|
FW="${FW:-/usr/share/qemu/opensbi-riscv32-generic-fw_dynamic.bin}"
|
|
if [[ ! -f "$FW" ]]; then
|
|
echo "ERROR: OpenSBI firmware not found at: $FW"
|
|
echo "Try: ls -1 /usr/share/qemu/*opensbi*riscv32*fw_dynamic*.bin"
|
|
exit 1
|
|
fi
|
|
|
|
CFLAGS=(
|
|
-fuse-ld=lld
|
|
-std=c11 -O2 -g3 -Wall -Wextra
|
|
--target=riscv32
|
|
-march=rv32imac -mabi=ilp32
|
|
-ffreestanding -nostdlib
|
|
)
|
|
|
|
"$CC" "${CFLAGS[@]}" \
|
|
-Wl,-T,kernel.ld -Wl,-Map,kernel.map \
|
|
-o kernel.elf \
|
|
kernel.c common.c
|
|
|
|
"$QEMU" -machine virt -nographic -serial mon:stdio --no-reboot \
|
|
-bios "$FW" \
|
|
-kernel kernel.elf
|