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.
 
 
 
 

119 lines
3.3 KiB

# 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"
# PLATFORM definition, if not given ----------------
PLATFORM ?= pqvexriscvsim
# PATHS (adapt to your system)----------------------
PATH_RISCV=/opt/riscv/
PATH_RISC_BIN=$(PATH_RISCV)bin/
PREFIX?=$(PATH_RISC_BIN)riscv64-unknown-elf
# Project DIRS -------------------------------------
LD_DIR=ld/
BSP_DIR=bsp/
SRC_DIR=src/
INC_DIR=inc/
OBJ_DIR=obj/
# TOOLS --------------------------------------------
AR?=$(PREFIX)-ar
GCC?=$(PREFIX)-gcc
CLANG=clang
GDB?=$(PREFIX)-gdb
OBJDUMP?=$(PREFIX)-objdump
OBJCOPY?=$(PREFIX)-objcopy
RISCVPATH=$(PATH_RISCV)riscv64-unknown-elf
ECHO?=echo
# GCC FLAGS ---------------------------------------
CC=$(GCC)
GCC_CFLAGS_COMMON := -g \
-Os \
-fno-builtin-printf \
-Wno-unused-parameter \
-Wall -Wextra -Wredundant-decls \
-Wshadow -Wno-unused-function \
-fno-common \
-I$(RISCVPATH)/include \
-I$(INC_DIR)
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 --------------------------------------
LDSCRIPT = $(LD_DIR)$(PLATFORM).ld
LDFLAGS = $(GCC_RISCV_ARCHFLAGS)
LDFLAGS += --specs=nosys.specs
LDFLAGS += -Wl,-T$(LDSCRIPT)
LDFLAGS += -nostartfiles -ffreestanding -Wl,--gc-sections
LDFLAGS += -L$(BSP_DIR)
LDFLAGS += -Wl,--start-group -l$(PLATFORM)bsp -lc -lm -Wl,--end-group
# Object files --------------------------------------
SDK_ASM_SRCS := $(wildcard $(SRC_DIR)*.S)
SDK_C_SRCS := $(wildcard $(SRC_DIR)*.c)
SDK_ASM_OBJS := $(SDK_ASM_SRCS:$(SRC_DIR)%.S=$(OBJ_DIR)%.o)
SDK_C_OBJS := $(SDK_C_SRCS:$(SRC_DIR)%.c=$(OBJ_DIR)%.o)
SDK_OBJS := $(SDK_C_OBJS) $(SDK_ASM_OBJS)
# Target all ----------------------------------------
.PHONY: all
all: $(BSP_DIR)lib$(PLATFORM)bsp.a main.hex main.bin
# Targets --------------------------------------------
main.bin: main.elf
@$(ECHO) $(PURPLE)"obj "$@""$(LIGHTGRAY)
$(OBJCOPY) -O binary $< $@
main.hex: main.elf
@$(ECHO) $(PURPLE)"obj "$@""$(LIGHTGRAY)
$(OBJCOPY) -O ihex $< $@
main.elf: $(LIBWRAP) $(SDK_OBJS) $(LDSCRIPT)
@$(ECHO) $(LIGHTPURPLE)"building "$@""$(LIGHTGRAY)
$(GCC) $(GCC_RISCV_ARCHFLAGS) $(GCC_CFLAGS_COMMON) $(SDK_OBJS) -o $@ $(LDFLAGS)
$(SDK_ASM_OBJS): $(OBJ_DIR)%.o: $(SRC_DIR)%.S
@$(ECHO) $(ORANGE)"building "$@" (.S)"$(LIGHTGRAY)
$(CC) $(CFLAGS) -c -o $@ $^
$(SDK_C_OBJS): $(OBJ_DIR)%.o: $(SRC_DIR)%.c
@$(ECHO) $(ORANGE)"building "$@" (.c)"$(LIGHTGRAY)
$(CC) $(CFLAGS) -c -o $@ $^
$(BSP_DIR)lib$(PLATFORM)bsp.a:
@$(ECHO) $(ORANGE)"building "$@" (.a)"$(LIGHTGRAY)
cd $(BSP_DIR) && $(MAKE)
.PHONY: clean
clean:
@$(ECHO) $(RED)"cleaning..."$(LIGHTGRAY)
rm -f main.elf main.bin main.hex $(SDK_OBJS)
cd $(BSP_DIR) && $(MAKE) clean