PROGRAM = ctnr

INC_FLAGS = -I Libraries/CMSIS/IRL32VF0xI/CoreSupport/inc/ \
			-I Libraries/CMSIS/IRL32VF0xI/DeviceSupport/inc/ \
			-I Libraries/CMSIS/IRL32VF0xI/DeviceSupport/ \
			-I Libraries/SPL/IRL32VF0xI/ \
			-I Libraries/SPL/IRL32VF0xI/inc/ \

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 = Examples/IRL32VF0xI/ADC/main.c
#MAIN_C = Examples/IRL32VF0xI/ADCUI/main.c
#MAIN_C = Examples/IRL32VF0xI/BKP/RTC_IRQ/main.c
#MAIN_C = Examples/IRL32VF0xI/BKP/RTC_SW/main.c
#MAIN_C = Examples/IRL32VF0xI/BKP/TAMPER/main.c
#MAIN_C = Examples/IRL32VF0xI/CORE/IRQ/main.c
#MAIN_C = Examples/IRL32VF0xI/CORE/MTIMER/main.c
#MAIN_C = Examples/IRL32VF0xI/FLASH/main.c
#MAIN_C = Examples/IRL32VF0xI/PORT/main.c
#MAIN_C = Examples/IRL32VF0xI/TIMER/CAP/main.c
#MAIN_C = Examples/IRL32VF0xI/TIMER/PWM/main.c
#MAIN_C = Examples/IRL32VF0xI/UART/Loopback/main.c

SRC_DIRS =  Libraries/CMSIS/IRL32VF0xI/CoreSupport/src/ \
			Libraries/SPL/IRL32VF0xI/src/ \
			Libraries/CMSIS/IRL32VF0xI/DeviceSupport/src/

SRC_FILES = $(foreach dir, $(SRC_DIRS), $(wildcard $(dir)/*.c) $(wildcard $(dir)/*.S)) \
			$(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
