You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

140 lines
3.8 KiB

  1. # Color definitions -------------------------------
  2. NO_COLOR="\033[0m"
  3. RED="\033[38;5;009m"
  4. GREEN="\033[38;5;010m"
  5. YELLOW="\033[38;5;011m"
  6. ORANGE="\033[38;5;214m"
  7. LIGHTPURPLE="\033[38;5;177m"
  8. PURPLE="\033[38;5;135m"
  9. CYAN="\033[38;5;014m"
  10. LIGHTBLUE="\033[38;5;39m"
  11. BLUE="\033[38;5;75m"
  12. DARKBLUE="\033[38;5;33m"
  13. LIGHTGRAY="\033[38;5;252m"
  14. DARKGRAY="\033[38;5;242m"
  15. BRIGHTRED="\033[91m"
  16. BOLD="\033[1m"
  17. # PATHS (adapt to your system)----------------------
  18. PATH_RISCV=/opt/riscv/
  19. PATH_RISC_BIN=$(PATH_RISCV)bin/
  20. PATH_VERILATOR_BIN?=/usr/local/bin/verilator
  21. PREFIX?=$(PATH_RISC_BIN)riscv64-unknown-elf
  22. # TOOLS --------------------------------------------
  23. AR?=$(PREFIX)-ar
  24. GCC?=$(PREFIX)-gcc
  25. CLANG=clang
  26. GDB?=$(PREFIX)-gdb
  27. OBJDUMP?=$(PREFIX)-objdump
  28. OBJCOPY?=$(PREFIX)-objcopy
  29. RISCVPATH=$(PATH_RISCV)riscv64-unknown-elf
  30. OPENOCD?=$(PATH_RISC_BIN)openocd
  31. ECHO?=echo
  32. # GCC FLAGS ---------------------------------------
  33. CC=$(GCC)
  34. GCC_CFLAGS_COMMON := -g \
  35. -O3 \
  36. -fno-builtin-printf \
  37. -Wno-unused-parameter \
  38. -Wall -Wextra -Wredundant-decls \
  39. -Wshadow -Wno-unused-function \
  40. -fno-common \
  41. -I$(RISCVPATH)/include
  42. GCC_CFLAGS_MURAX=-fstrict-volatile-bitfields --specs=nosys.specs
  43. RISCV_ARCH?=rv32im
  44. RISCV_ABI?=ilp32
  45. RISCV_CMODEL?=medany
  46. RISCV_ARCHFLAGS +=-march=$(RISCV_ARCH)
  47. RISCV_ARCHFLAGS +=-mabi=$(RISCV_ABI)
  48. RISCV_ARCHFLAGS +=-mcmodel=$(RISCV_CMODEL)
  49. GCC_RISCV_ARCHFLAGS=$(RISCV_ARCHFLAGS)
  50. CFLAGS += $(GCC_CFLAGS_COMMON) \
  51. $(GCC_CFLAGS_MURAX) \
  52. $(GCC_RISCV_ARCHFLAGS)
  53. # Linker flags --------------------------------------
  54. PLATFORM ?= pqvexriscvsim
  55. LDSCRIPT = $(PLATFORM).ld
  56. LDFLAGS = -L$(RISCVPATH)/lib/rv32imac/ilp32
  57. LDFLAGS += $(GCC_RISCV_ARCHFLAGS)
  58. LDFLAGS += --specs=nosys.specs
  59. LDFLAGS += -Wl,-T$(LDSCRIPT)
  60. LDFLAGS += -nostartfiles -ffreestanding -Wl,--gc-sections
  61. LDFLAGS += -L.
  62. LDFLAGS += -Wl,--start-group -l$(PLATFORM)bsp -lc -Wl,--end-group
  63. # Object files --------------------------------------
  64. SDK_ASM_SRCS := $(wildcard *.S)
  65. SDK_C_SRCS := $(wildcard *.c)
  66. SDK_C_OBJS := $(SDK_C_SRCS:.c=.o)
  67. SDK_ASM_OBJS := $(SDK_ASM_SRCS:.S=.o)
  68. SDK_OBJS := $(SDK_C_OBJS) $(SDK_ASM_OBJS)
  69. # Target all ----------------------------------------
  70. .PHONY: all
  71. all: main.hex main.bin
  72. # LIBWRAP
  73. include vexriscv/vexriscv.mk
  74. # Targets --------------------------------------------
  75. main.bin: main
  76. @$(ECHO) $(PURPLE)"obj "$@""$(LIGHTGRAY)
  77. $(OBJCOPY) -O binary $< $@
  78. main.hex: main
  79. @$(ECHO) $(PURPLE)"obj "$@""$(LIGHTGRAY)
  80. $(OBJCOPY) -O ihex $< $@
  81. main: $(LIBWRAP) $(SDK_OBJS) $(LDSCRIPT)
  82. @$(ECHO) $(LIGHTPURPLE)"building "$@""$(LIGHTGRAY)
  83. $(GCC) $(GCC_RISCV_ARCHFLAGS) $(GCC_CFLAGS_COMMON) $(SDK_OBJS) -o $@ $(LDFLAGS)
  84. %.o: %.S
  85. @$(ECHO) $(ORANGE)"building "$@" (.S)"$(LIGHTGRAY)
  86. $(CC) $(CFLAGS) -c -o $@ $^
  87. %.o: %.c
  88. @$(ECHO) $(ORANGE)"building "$@" (.c)"$(LIGHTGRAY)
  89. $(CC) $(CFLAGS) -c -o $@ $^
  90. .PHONY: clean
  91. clean:
  92. @$(ECHO) $(RED)"cleaning..."$(LIGHTGRAY)
  93. rm -f main main.bin main.hex $(SDK_OBJS) $(LIBWRAP_OBJS) $(LIBWRAP)
  94. help:
  95. @$(ECHO) $(RED)"Compile & Simulate"$(LIGHTGRAY)
  96. @$(ECHO) $(LIGHTGRAY)"1. "$(CYAN)"make"$(LIGHTGRAY)
  97. @$(ECHO) $(LIGHTGRAY)"2. open 3 terminals"$(LIGHTGRAY)
  98. @$(ECHO) $(LIGHTGRAY)"3. Terminal 2: "$(CYAN)"make startsim"$(LIGHTGRAY)
  99. @$(ECHO) $(LIGHTGRAY)"4. Terminal 3: "$(CYAN)"make openocd"$(LIGHTGRAY)
  100. @$(ECHO) $(LIGHTGRAY)"5. Terminal 1: "$(CYAN)"make flash"$(LIGHTGRAY)
  101. # Targets for starting simulation, openocd and gdb ----------------------------
  102. # startsim:
  103. # cd ../Building_Tools/pqriscv-vexriscv/ ; sbt "runMain mupq.PQVexRiscvSim --ram 256,128"
  104. # openocd:
  105. # cd ../Building_Tools/pqriscv-vexriscv/ ; /opt/verilator/bin/openocd --file pqvexriscvsim.cfg
  106. #flash:
  107. # /opt/riscv/bin/riscv64-unknown-elf-gdb -ex 'set remotetimeout 15' -ex 'target remote :3333' -ex 'load' -ex 'break main' -ex 'continue' main