mirror of
https://github.com/plctlab/riscv-operating-system-mooc.git
synced 2025-11-16 12:34:47 +00:00
65 lines
1.2 KiB
Makefile
65 lines
1.2 KiB
Makefile
CROSS_COMPILE = riscv64-unknown-elf-
|
|
CFLAGS = -nostdlib -fno-builtin -march=rv32ima -mabi=ilp32 -g -Wall
|
|
|
|
QEMU = qemu-system-riscv32
|
|
QFLAGS = -nographic -smp 1 -machine virt -bios none
|
|
|
|
GDB = ${CROSS_COMPILE}gdb
|
|
CC = ${CROSS_COMPILE}gcc
|
|
OBJCOPY = ${CROSS_COMPILE}objcopy
|
|
OBJDUMP = ${CROSS_COMPILE}objdump
|
|
|
|
SRCS_ASM = \
|
|
start.S \
|
|
mem.S \
|
|
entry.S \
|
|
|
|
SRCS_C = \
|
|
kernel.c \
|
|
uart.c \
|
|
printf.c \
|
|
page.c \
|
|
sched.c \
|
|
user.c \
|
|
trap.c \
|
|
plic.c \
|
|
|
|
OBJS = $(SRCS_ASM:.S=.o)
|
|
OBJS += $(SRCS_C:.c=.o)
|
|
|
|
.DEFAULT_GOAL := all
|
|
all: os.elf
|
|
|
|
# start.o must be the first in dependency!
|
|
os.elf: ${OBJS}
|
|
${CC} $(CFLAGS) -T os.ld -o os.elf $^
|
|
${OBJCOPY} -O binary os.elf os.bin
|
|
|
|
%.o : %.c
|
|
${CC} ${CFLAGS} -c -o $@ $<
|
|
|
|
%.o : %.S
|
|
${CC} ${CFLAGS} -c -o $@ $<
|
|
|
|
run: all
|
|
@${QEMU} -M ? | grep virt >/dev/null || exit
|
|
@echo "Press Ctrl-A and then X to exit QEMU"
|
|
@echo "------------------------------------"
|
|
@${QEMU} ${QFLAGS} -kernel os.elf
|
|
|
|
.PHONY : debug
|
|
debug: all
|
|
@echo "Press Ctrl-C and then input 'quit' to exit GDB and QEMU"
|
|
@echo "-------------------------------------------------------"
|
|
@${QEMU} ${QFLAGS} -kernel os.elf -s -S &
|
|
@${GDB} os.elf -q -x ../gdbinit
|
|
|
|
.PHONY : code
|
|
code: all
|
|
@${OBJDUMP} -S os.elf | less
|
|
|
|
.PHONY : clean
|
|
clean:
|
|
rm -rf *.o *.bin *.elf
|
|
|