# Source
MES_SOURCES = main.c \
       lib/HARDWARE_SETUP/hardware_setup.c \
       lib/SPI/spi.c

# Puce specs et import specifique
FAMILY_CPU = cortex-m4
CPU = STM32F410Rx

DEPENDANCE = ../01-lib/User/syscalls.c \
       ../01-lib/User/sysmem.c \
       ../01-lib/system_stm32f4xx.c

ASM_SRCS = ../01-lib/gcc/startup_stm32f410rx.s



## MODELE A GARDER
# Compilateur et options
CC = arm-none-eabi-gcc

CFLAGS  = -mcpu=$(FAMILY_CPU) -mthumb -Wall -Wextra -MMD -MP -g3 -O0
CPPFLAGS = -D$(CPU) \
          -I../01-lib/gcc \
          -I../01-lib/Core \
          -I../01-lib/User \
          -I../01-lib

LDFLAGS = -T generatedLinkerIDE.ld
LDLIBS  = -lc -lm -lnosys

# Répertoires
BUILD = build
BIN   = bin

# Sources
SRCS = $(MES_SOURCES) \
       $(DEPENDANCE)

# Objets
OBJS = $(patsubst %.c,$(BUILD)/%.o,$(SRCS)) \
       $(patsubst %.s,$(BUILD)/%.o,$(ASM_SRCS))

# Dépendances des headers
DEPS = $(OBJS:.o=.d)

# Cible principale
all: $(BUILD)/main.elf $(BIN)/firmware.bin

# ========================
# Compilation C
# ========================

# Crée automatiquement les dossiers nécessaires avant compilation
$(BUILD)/%.o: %.c
	mkdir -p $(dir $@)
	$(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@

# Compilation ASM
$(BUILD)/%.o: %.s
	mkdir -p $(dir $@)
	arm-none-eabi-as -mcpu=cortex-m4 -mthumb $< -o $@

# Link ELF
$(BUILD)/main.elf: $(OBJS)
	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDLIBS) -o $@

# ELF -> BIN
$(BIN)/firmware.bin: $(BUILD)/main.elf
	mkdir -p $(BIN)
	arm-none-eabi-objcopy -O binary $< $@

# Flash STM32
flash: all
	st-flash write $(BIN)/firmware.bin 0x8000000

# Taille binaire
size: $(BUILD)/main.elf
	arm-none-eabi-size $<

# Nettoyage
clean:
	rm -rf $(BUILD) $(BIN)

# Inclure les dépendances automatiques
-include $(DEPS)
