feat(run): initial run script

This commit is contained in:
2026-01-26 00:52:34 +01:00
parent c4596dcd16
commit 5a490b03f9

31
run.sh Executable file
View File

@@ -0,0 +1,31 @@
#!/bin/bash
# -x -> trace: print every command
# -u -> exit if undefined variables are used
# -e -> exit if an error occurs
set -xue
QEMU=qemu-system-riscv32
# Compile
CC=clang
# -ffreestanding: do not use stdlib of the host environment
# -fuse-ld=lld: LLVM linker
# -fno-stack-protector: disable stack protection
# -Wl,-Tkernel.ld: linker script
# -Wl,-Map=kernel.map: output a map file (linker allocationr result)
CFLAGS="-std=c11 -O2 -g3 -Wall -Wextra --target=riscv32-unknown-elf -fuse-ld=lld -fno-stack-protector -ffreestanding -nostdlib"
$CC $CFLAGS -Wl,-Tkernel.ld -Wl,-Map=kernel.map -o kernel.elf \
src/kernel.c
# Run QEMU
# -machine virt: generic riscv platform
# -bios default: load the default firmware (OpenSBI)
# -nographic: disable VGA, everything on console
# -serial mon:stdio: serial port is connected to terminal's stdin/stdout
# --no-reboot: do not reboot if there's panic/shutdown/crash
$QEMU -machine virt -bios default -nographic -serial mon:stdio --no-reboot \
-kernel kernel.elf
# Press Ctrl+A and then C to enter QEMU debug console and quit with `q`