PROGRAM = ctnr

INC_FLAGS = -I Library/CMSIS/CoreSupport/inc/ \
			-I Library/CMSIS/DeviceSupport/inc/ \
			-I Library/CMSIS/DeviceSupport/ \
			-I Library/SPL/ \
			-I Library/SPL/inc/ \
			-I FreeRTOS/include/ \
			-I FreeRTOS/portable/GCC/RISC-V/ \
			-I FreeRTOS/portable/GCC/RISC-V/RISCV_MTIME_CLINT_no_extensions/ \
			-I src/

CC = ~/install/xpack-riscv-none-elf-gcc-15.2.0-1/bin/riscv-none-elf-gcc
OBJCOPY = ~/install/xpack-riscv-none-elf-gcc-15.2.0-1/bin/riscv-none-elf-objcopy
GDB = ~/install/xpack-riscv-none-elf-gcc-15.2.0-1/bin/riscv-none-elf-gdb

MAIN_C = src/main.c

SRC_DIRS =  Library/CMSIS/CoreSupport/src/ \
			Library/SPL/src/ \
			Library/CMSIS/DeviceSupport/src/ \
			FreeRTOS/portable/GCC/RISC-V/ \
			FreeRTOS/portable/MemMang/ \
			FreeRTOS/


SRC_FILES = $(foreach dir, $(SRC_DIRS), $(wildcard $(dir)*.c) $(wildcard $(dir)*.S)) \
			src/hooks.c \
			src/syscalls.c \
			$(MAIN_C)

CFLAGS += -march=rv32i_zmmul_zicsr_zifencei -mabi=ilp32 -Wall
# -march=rv32imac -march=rv32i_zicsr -mabi=ilp32
# -march=rv32i_zicsr

C_SRC_LIST = $(filter %.c,$(SRC_FILES))
ASM_SRC_LIST = $(filter %.S %.s,$(SRC_FILES))

OBJ_FILES := $(patsubst %.c, %.o, $(C_SRC_LIST))
OBJ_FILES += $(patsubst %.S, %.o, $(ASM_SRC_LIST))

$(PROGRAM).elf: $(OBJ_FILES)
	$(CC) $(CFLAGS)  $^ -o $@

%.o: %.c
	$(CC) $(CFLAGS) $(INC_FLAGS) -c $^ -o $@

%.i: %.c
	$(CC) $(CFLAGS) $(INC_FLAGS) -c $^ -o $@ -E

%.o: %.S
	$(CC) $(CFLAGS) $(INC_FLAGS) -c $^ -o $@

%.bin: %.elf
	$(OBJCOPY) -O binary $(PROGRAM).elf $(PROGRAM).bin

.PHONY: clean
clean:
	rm -f $(OBJ_FILES) $(PROGRAM).bin $(PROGRAM).elf
