# ==== Projet ====
TARGET      := main

# ==== Outils ====
CC          := avr-gcc
OBJCOPY     := avr-objcopy
SIZE        := avr-size
PROGRAMMER  := dfu-programmer

# ==== MCU / Horloge ====
MCU         ?= atmega32u4
F_CPU       ?= 16000000UL 

# ==== Flags ====
CFLAGS      := -mmcu=$(MCU) -DF_CPU=$(F_CPU) -Os -Wall -Wextra -std=gnu11 -I. -Ilcd
LDFLAGS     := -mmcu=$(MCU)

# ==== Sources / Objets ====
SRC         := $(wildcard *.c) $(wildcard lcd/*.c)
OBJ         := $(SRC:.c=.o)

# ==== Règles phony ====
.PHONY: all clean upload size

# ---- Build par défaut
all: $(TARGET).hex

# ---- Link
$(TARGET): $(OBJ)
	$(CC) $(LDFLAGS) $^ -o $@

# ---- Compile .c -> .o (valable pour la racine et lcd/)
%.o: %.c
	$(CC) $(CFLAGS) -c $< -o $@

# ---- Génération du .hex
$(TARGET).hex: $(TARGET)
	$(OBJCOPY) -O ihex -R .eeprom $< $@

# ---- Upload DFU
upload: $(TARGET).hex
	$(PROGRAMMER) $(MCU) erase
	$(PROGRAMMER) $(MCU) flash $(TARGET).hex
	$(PROGRAMMER) $(MCU) reset

# ---- Taille
size: $(TARGET)
	$(SIZE) --format=avr --mcu=$(MCU) $<

# ---- Nettoyage
clean:
	rm -f $(OBJ) $(TARGET) $(TARGET).hex
