# Color definitions -------------------------------
|
|
|
|
NO_COLOR="\033[0m"
|
|
RED="\033[38;5;009m"
|
|
GREEN="\033[38;5;010m"
|
|
YELLOW="\033[38;5;011m"
|
|
ORANGE="\033[38;5;214m"
|
|
LIGHTPURPLE="\033[38;5;177m"
|
|
PURPLE="\033[38;5;135m"
|
|
CYAN="\033[38;5;014m"
|
|
LIGHTBLUE="\033[38;5;39m"
|
|
BLUE="\033[38;5;75m"
|
|
DARKBLUE="\033[38;5;33m"
|
|
LIGHTGRAY="\033[38;5;252m"
|
|
DARKGRAY="\033[38;5;242m"
|
|
BRIGHTRED="\033[91m"
|
|
BOLD="\033[1m"
|
|
|
|
# PATHS (adapt to your system)----------------------
|
|
|
|
PATH_RISCV=/opt/riscv/
|
|
PATH_RISC_BIN=$(PATH_RISCV)bin/
|
|
PATH_VERILATOR_BIN?=/usr/local/bin/verilator
|
|
PREFIX?=$(PATH_RISC_BIN)riscv64-unknown-elf
|
|
|
|
# TOOLS --------------------------------------------
|
|
|
|
AR?=$(PREFIX)-ar
|
|
GCC?=$(PREFIX)-gcc
|
|
CLANG=clang
|
|
GDB?=$(PREFIX)-gdb
|
|
OBJDUMP?=$(PREFIX)-objdump
|
|
OBJCOPY?=$(PREFIX)-objcopy
|
|
RISCVPATH=$(PATH_RISCV)riscv64-unknown-elf
|
|
OPENOCD?=$(PATH_RISC_BIN)openocd
|
|
ECHO?=echo
|
|
|
|
# GCC FLAGS ---------------------------------------
|
|
|
|
CC=$(GCC)
|
|
|
|
GCC_CFLAGS_COMMON := -g \
|
|
-O3 \
|
|
-fno-builtin-printf \
|
|
-Wno-unused-parameter \
|
|
-Wall -Wextra -Wredundant-decls \
|
|
-Wshadow -Wno-unused-function \
|
|
-fno-common \
|
|
-I$(RISCVPATH)/include
|
|
|
|
GCC_CFLAGS_MURAX=-fstrict-volatile-bitfields --specs=nosys.specs
|
|
|
|
RISCV_ARCH?=rv32im
|
|
RISCV_ABI?=ilp32
|
|
RISCV_CMODEL?=medany
|
|
RISCV_ARCHFLAGS +=-march=$(RISCV_ARCH)
|
|
RISCV_ARCHFLAGS +=-mabi=$(RISCV_ABI)
|
|
RISCV_ARCHFLAGS +=-mcmodel=$(RISCV_CMODEL)
|
|
GCC_RISCV_ARCHFLAGS=$(RISCV_ARCHFLAGS)
|
|
|
|
CFLAGS += $(GCC_CFLAGS_COMMON) \
|
|
$(GCC_CFLAGS_MURAX) \
|
|
$(GCC_RISCV_ARCHFLAGS)
|
|
|
|
# Linker flags --------------------------------------
|
|
|
|
PLATFORM ?= pqvexriscvsim
|
|
|
|
LDSCRIPT = $(PLATFORM).ld
|
|
LDFLAGS = -L$(RISCVPATH)/lib/rv32imac/ilp32
|
|
LDFLAGS += $(GCC_RISCV_ARCHFLAGS)
|
|
LDFLAGS += --specs=nosys.specs
|
|
LDFLAGS += -Wl,-T$(LDSCRIPT)
|
|
LDFLAGS += -nostartfiles -ffreestanding -Wl,--gc-sections
|
|
LDFLAGS += -L.
|
|
LDFLAGS += -Wl,--start-group -l$(PLATFORM)bsp -lc -Wl,--end-group
|
|
|
|
# Object files --------------------------------------
|
|
|
|
SDK_ASM_SRCS := $(wildcard *.S)
|
|
SDK_C_SRCS := $(wildcard *.c)
|
|
SDK_C_OBJS := $(SDK_C_SRCS:.c=.o)
|
|
SDK_ASM_OBJS := $(SDK_ASM_SRCS:.S=.o)
|
|
SDK_OBJS := $(SDK_C_OBJS) $(SDK_ASM_OBJS)
|
|
|
|
# Target all ----------------------------------------
|
|
|
|
.PHONY: all
|
|
all: main.hex main.bin
|
|
|
|
# LIBWRAP
|
|
|
|
include vexriscv/vexriscv.mk
|
|
|
|
# Targets --------------------------------------------
|
|
|
|
main.bin: main
|
|
@$(ECHO) $(PURPLE)"obj "$@""$(LIGHTGRAY)
|
|
$(OBJCOPY) -O binary $< $@
|
|
|
|
main.hex: main
|
|
@$(ECHO) $(PURPLE)"obj "$@""$(LIGHTGRAY)
|
|
$(OBJCOPY) -O ihex $< $@
|
|
|
|
main: $(LIBWRAP) $(SDK_OBJS) $(LDSCRIPT)
|
|
@$(ECHO) $(LIGHTPURPLE)"building "$@""$(LIGHTGRAY)
|
|
$(GCC) $(GCC_RISCV_ARCHFLAGS) $(GCC_CFLAGS_COMMON) $(SDK_OBJS) -o $@ $(LDFLAGS)
|
|
|
|
%.o: %.S
|
|
@$(ECHO) $(ORANGE)"building "$@" (.S)"$(LIGHTGRAY)
|
|
$(CC) $(CFLAGS) -c -o $@ $^
|
|
|
|
%.o: %.c
|
|
@$(ECHO) $(ORANGE)"building "$@" (.c)"$(LIGHTGRAY)
|
|
$(CC) $(CFLAGS) -c -o $@ $^
|
|
|
|
.PHONY: clean
|
|
clean:
|
|
@$(ECHO) $(RED)"cleaning..."$(LIGHTGRAY)
|
|
rm -f main main.bin main.hex $(SDK_OBJS) $(LIBWRAP_OBJS) $(LIBWRAP)
|
|
|
|
help:
|
|
@$(ECHO) $(RED)"Compile & Simulate"$(LIGHTGRAY)
|
|
@$(ECHO) $(LIGHTGRAY)"1. "$(CYAN)"make"$(LIGHTGRAY)
|
|
@$(ECHO) $(LIGHTGRAY)"2. open 3 terminals"$(LIGHTGRAY)
|
|
@$(ECHO) $(LIGHTGRAY)"3. Terminal 2: "$(CYAN)"make startsim"$(LIGHTGRAY)
|
|
@$(ECHO) $(LIGHTGRAY)"4. Terminal 3: "$(CYAN)"make openocd"$(LIGHTGRAY)
|
|
@$(ECHO) $(LIGHTGRAY)"5. Terminal 1: "$(CYAN)"make flash"$(LIGHTGRAY)
|
|
|
|
# Targets for starting simulation, openocd and gdb ----------------------------
|
|
|
|
# startsim:
|
|
# cd ../Building_Tools/pqriscv-vexriscv/ ; sbt "runMain mupq.PQVexRiscvSim --ram 256,128"
|
|
|
|
# openocd:
|
|
# cd ../Building_Tools/pqriscv-vexriscv/ ; /opt/verilator/bin/openocd --file pqvexriscvsim.cfg
|
|
|
|
#flash:
|
|
# /opt/riscv/bin/riscv64-unknown-elf-gdb -ex 'set remotetimeout 15' -ex 'target remote :3333' -ex 'load' -ex 'break main' -ex 'continue' main
|
|
|