Makefile 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. NAME = play_rv32_with_qemu_template
  2. # ==== Toolchain Configure ====
  3. PREFIX = W:/WCH/MounRiverStudio/toolchain/RISC-V Embedded GCC/bin
  4. CC = "$(PREFIX)/riscv-none-embed-gcc.exe"
  5. AS = "$(PREFIX)/riscv-none-embed-as.exe"
  6. LD = "$(PREFIX)/riscv-none-embed-ld.exe"
  7. OBJCOPY = "$(PREFIX)/riscv-none-embed-objcopy.exe"
  8. SIZE = "$(PREFIX)/riscv-none-embed-size.exe"
  9. QEMU_RV32 = "W:/QEMU/qemu-20210825/qemu-system-riscv32.exe"
  10. RM_CMD = ./tools/rm4win.exe -rf
  11. # ==== Path Configure ====
  12. SRC_DIR = ./src
  13. ASM_DIR = ./asm
  14. INC_DIR = ./inc
  15. OUT_DIR = ./out
  16. LINKER_SCRIPT = ./linker-script.ld
  17. STARTUP_SRC = ./startup.s
  18. # ==== Other Arguments ====
  19. CC_ARGS = -O0
  20. AS_ARGS =
  21. LD_ARGS =
  22. OBJCOPY_ARGS =
  23. SIZE_ARGS = --format=berkeley
  24. QEMU_ARGS = -nographic -bios none
  25. QEMU_MACHINE = virt
  26. # ===========================
  27. STARTUP_OBJ = $(patsubst %.s,$(OUT_DIR)/%.o,$(STARTUP_SRC))
  28. C_SRC = $(wildcard $(SRC_DIR)/*.c)
  29. C_OBJ = $(patsubst $(SRC_DIR)/%.c,$(OUT_DIR)/%.o,$(C_SRC))
  30. AS_SRC = $(wildcard $(ASM_DIR)/*.s)
  31. AS_OBJ = $(patsubst $(ASM_DIR)/%.s,$(OUT_DIR)/%.o,$(AS_SRC))
  32. .PHONY : all
  33. .PHONY : bin
  34. .PHONY : hex
  35. .PHONY : clean
  36. .PHONY : qemu
  37. .PHONY : size
  38. .IGNORE : qemu
  39. all : bin hex size
  40. bin : $(NAME).bin
  41. hex : $(NAME).hex
  42. $(NAME).hex : $(NAME).elf
  43. $(OBJCOPY) $(OBJCOPY_ARGS) -O ihex $< $@
  44. $(NAME).bin : $(NAME).elf
  45. $(OBJCOPY) $(OBJCOPY_ARGS) -O binary $< $@
  46. size : $(NAME).elf
  47. $(SIZE) $(SIZE_ARGS) $<
  48. $(NAME).elf : $(LINKER_SCRIPT) $(STARTUP_OBJ) $(C_OBJ) $(AS_OBJ)
  49. $(LD) -T $(LINKER_SCRIPT) $(LD_ARGS) -o $@ $(STARTUP_OBJ) $(C_OBJ) $(AS_OBJ)
  50. $(STARTUP_OBJ) : $(STARTUP_SRC)
  51. $(AS) $(AS_ARGS) -o $@ $<
  52. $(OUT_DIR)/%.o : $(ASM_DIR)/%.s
  53. $(AS) $(AS_ARGS) -o $@ $^
  54. $(OUT_DIR)/%.o : $(SRC_DIR)/%.c
  55. $(CC) $(CC_ARGS) -I $(INC_DIR) -o $@ $<
  56. clean :
  57. -$(RM_CMD) ./$(NAME).bin
  58. -$(RM_CMD) ./$(NAME).hex
  59. -$(RM_CMD) ./$(NAME).elf
  60. -$(RM_CMD) ./$(OUT_DIR)/*
  61. qemu : $(NAME).bin
  62. $(QEMU_RV32) -machine $(QEMU_MACHINE) $(QEMU_ARGS) -kernel $<