diff --git a/Makefile b/Makefile index 50ea96b..5b51596 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,21 @@ -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 +# See: https://github.com/xpack-dev-tools/riscv-none-elf-gcc-xpack/releases +# See: https://github.com/xpack-dev-tools/qemu-riscv-xpack/releases +GCC_VER := 14.2.0-3 +QEMU_VER := 8.2.6-1 + +SYS_TOOLPREFIX ?= riscv64-linux-gnu + +GCC_PATH := toolchain/gcc/bin +LOCAL_TOOLPREFIX := $(GCC_PATH)/riscv-none-elf + +# TODO: Some wildcard condition to detect prefix +TOOLPREFIX := $(LOCAL_TOOLPREFIX) +# TOOLPREFIX := $(SYS_TOOLPREFIX) +$(info Using toolchain: $(TOOLPREFIX)) + +QEMU_PATH := toolchain/qemu/bin +QEMU = $(QEMU_PATH)/qemu-system-riscv64 +$(info Using qemu: $(QEMU)) CC = $(TOOLPREFIX)-gcc AS = $(TOOLPREFIX)-as @@ -62,7 +77,7 @@ kern/kernel.elf: $(KERNEL_OBJ) qemu: kern/kernel.elf @echo QEMU $< - @qemu-system-riscv64 -machine virt -bios none -nographic -m 128M -smp 4 -kernel $< + @$(QEMU) -machine virt -bios none -nographic -m 128M -smp 4 -kernel $< clean: rm -f *.o *.elf *.d lib/*.o lib/*.d @@ -71,6 +86,41 @@ clean: format: find . -type f -name '*.[ch]' -exec clang-format -i {} + +TOOLCHAIN_DIR := toolchain + +QEMU_TARBALL := xpack-qemu-riscv-$(QEMU_VER)-linux-x64.tar.gz +GCC_TARBALL := xpack-riscv-none-elf-gcc-$(GCC_VER)-linux-x64.tar.gz + +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) + +QEMU_TARPATH := toolchain/$(QEMU_TARBALL) +GCC_TARPATH := toolchain/$(GCC_TARBALL) + +QEMU_SYM_DIR := xpack-qemu-riscv-$(QEMU_VER) +GCC_SYM_DIR := xpack-riscv-none-elf-gcc-$(GCC_VER) + +QEMU_ALIAS := qemu +GCC_ALIAS := gcc + +$(TOOLCHAIN_DIR): + mkdir -p $@ + +$(QEMU_TARPATH): $(TOOLCHAIN_DIR) + curl -# -L -o $@ $(QEMU_URL) + +$(GCC_TARPATH): $(TOOLCHAIN_DIR) + curl -# -L -o $@ $(GCC_URL) + +get_toolchain: $(TOOLCHAIN_DIR) $(GCC_TARPATH) $(QEMU_TARPATH) + 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) + -include *.d -.PHONY: all +.PHONY: all qemu