diff --git a/Makefile b/Makefile index 9ac5771..716b923 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,6 @@ -TOOLPREFIX = riscv-none-elf +# 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 @@ -17,25 +19,32 @@ CFLAGS += -mcmodel=medany CFLAGS += -march=rv64gc -mabi=lp64 CFLAGS += -ffreestanding -fno-common -nostdlib -mno-relax -CFLAGS += -I. -CFLAGS += -Ilib -CFLAGS += -Ikern - 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 +KCFLAGS += $(CGFLAGS) +KCFLAGS += -DNEPTUNE_KERNEL +KCFLAGS += -Ikern +KCFLAGS += -Ikern/libkern +KCFLAGS += -I. + +CFLAGS += -I. +CFLAGS += -Ilib + all: kernel.elf -kernel.elf: entry.o start.o lib/string.o lib/proc.o lib/proc.o lib/uart.o lib/panic.o kern/kalloc.o lib/memory.o kern/ispinlock.o lib/spinlock.o +main: main.o + +kernel.elf: entry.o 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 $@ + @$(CC) $(KCFLAGS) -nostdinc -I. -c $< -o $@ %.o: %.S @echo AS $@ @@ -47,7 +56,62 @@ qemu: kernel.elf clean: rm -f *.o *.elf *.d lib/*.o lib/*.d + fd -e o -x rm # TODO: Should only depend on posix -include *.d -.PHONY: all +# -------------------------------------------------------------------- +# Toolchain configuration +# -------------------------------------------------------------------- + +TOOLCHAIN_DIR := toolchain + +# Versions +QEMU_VER := 8.2.6-1 +GCC_VER := 14.2.0-3 + +# Filenames +QEMU_TARBALL := xpack-qemu-riscv-$(QEMU_VER)-linux-arm.tar.gz +GCC_TARBALL := xpack-riscv-none-elf-gcc-$(GCC_VER)-linux-arm.tar.gz + +# URLs +QEMU_URL := https://github.com/xpack-dev-tools/qemu-riscv-xpack/releases/download/v$(QEMU_VER)/$(QEMU_TARBALL) +GCC_URL := https://github.com/xpack-dev-tools/riscv-none-elf-gcc-xpack/releases/download/v$(GCC_VER)/$(GCC_TARBALL) + +# Paths +QEMU_TARPATH := toolchain/xpack-qemu-riscv-8.2.6-1-linux-arm.tar.gz +GCC_TARPATH := toolchain/xpack-riscv-none-elf-gcc-14.2.0-3-linux-arm.tar.gz + +# Extracted directories +QEMU_DIR := $(TOOLCHAIN_DIR)/xpack-qemu-riscv-$(QEMU_VER) +GCC_DIR := $(TOOLCHAIN_DIR)/xpack-riscv-none-elf-gcc-$(GCC_VER) + +# Symlink targets +QEMU_SYM_DIR := xpack-qemu-riscv-$(QEMU_VER) +GCC_SYM_DIR := xpack-riscv-none-elf-gcc-$(GCC_VER) + +# Final symlink/alias +GCC_ALIAS := gcc +QEMU_ALIAS := qemu + +QEMU_TARPATH: + curl -# -L -o $@ $(QEMU_URL) + +GCC_TARPATH: + curl -# -L -o $@ $(GCC_URL) + +extractions: + cd toolchain && tar xf $(QEMU_TARBALL) + cd toolchain && tar xf $(GCC_TARBALL) + +toolchain: $(QEMU_TARPATH) $(GCC_TARPATH) + mkdir -p toolchain + cd toolchain && tar xf $(QEMU_TARBALL) + cd toolchain && tar xf $(GCC_TARBALL) + cd $(TOOLCHAIN_DIR) && ln -sfn $(QEMU_SYM_DIR) $(QEMU_ALIAS) + cd $(TOOLCHAIN_DIR) && ln -sfn $(GCC_SYM_DIR) $(GCC_ALIAS) + +distclean: clean + rm -rf $(TOOLCHAIN_DIR) + +.PHONY: all toolchain