TOOLPREFIX = riscv64-linux-gnu # TOOLPREFIX = toolchain/xpack-riscv-none-elf-gcc-14.2.0-3/bin/riscv-none-elf # TOOLPREFIX = toolchain/gcc/bin/riscv-none-elf CC = $(TOOLPREFIX)-gcc AS = $(TOOLPREFIX)-as LD = $(TOOLPREFIX)-ld OBJCOPY = $(TOOLPREFIX)-objcopy OBJDUMP = $(TOOLPREFIX)-objdump ASFLAGS = -march=rv64gc -mabi=lp64 LDFLAGS = -Tkern/kernel.ld LDFLAGS += -m elf64lriscv CFLAGS = -Wall -Werror -O CFLAGS += -Wno-unused-result CFLAGS += -mcmodel=medany CFLAGS += -march=rv64gc -mabi=lp64 CFLAGS += -ffreestanding -fno-common -nostdlib -mno-relax CFLAGS += -fno-stack-protector # Prevents code that needs libc / runtime support CFLAGS += -MD # Generate header dependency files (.d) CFLAGS += -fno-pie -no-pie # Fixed address linking CFLAGS += -ggdb -gdwarf-2 # GDB debug info CFLAGS += -fno-omit-frame-pointer # More reliable backtraces in GDB CFLAGS += -I. CFLAGS += -I./kern CFLAGS += -I./kern/libkern all: kern/kernel.elf main: main.o kern/kernel.elf: kern/entry.o kern/start.o kern/libkern/string.o kern/libkern/proc.o kern/libkern/uart.o kern/libkern/panic.o kern/kalloc.o kern/libkern/memory.o kern/ispinlock.o kern/libkern/spinlock.o kern/libkern/string.o kern/libkern/mini-printf.o @echo LD $@ @$(LD) $(LDFLAGS) -o $@ $^ %.o: %.c @echo CC $@ @$(CC) $(CFLAGS) -nostdinc -I. -c $< -o $@ %.o: %.S @echo AS $@ @$(AS) $(ASFLAGS) -o $@ $< qemu: kern/kernel.elf @echo QEMU $< @qemu-system-riscv64 -machine virt -bios none -nographic -m 128M -smp 4 -kernel kernel.elf clean: rm -f *.o *.elf *.d lib/*.o lib/*.d find . -type f -name '*.[od]' -exec rm -f {} + -include *.d .PHONY: all