# Compilateur et options
CC = arm-none-eabi-gcc

CFLAGS = -mcpu=cortex-m4 -mthumb -Wall -Wextra
CPPFLAGS = -DSTM32F410Rx \
	-I../01-lib/gcc \
	-I../01-lib/Core \
	-I../01-lib

# Linker
LINKER_FILE = faisALaMainLinker.ld
LDFLAGS = -T $(LINKER_FILE)

# Fichiers objets
OBJS = main.o system_stm32f4xx.o startup_stm32f410rx.o

# Cible principale
all: main.elf

main.elf: $(OBJS)
	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) -lc -lm -lnosys -o $@

# Compilation des fichiers C
main.o: main.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@

system_stm32f4xx.o: ../00-cmsis-device-f4-master/Source/Templates/system_stm32f4xx.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@

# Assemblage du startup
startup_stm32f410rx.o: ../01-lib/gcc/startup_stm32f410rx.s
	arm-none-eabi-as -mcpu=cortex-m4 -mthumb $< -o $@

# Converti ELF en BIN
firmware.bin: main.elf
	arm-none-eabi-objcopy -O binary $< $@

# Upload 
flash: firmware.bin
	st-flash write firmware.bin 0x8000000
	
# Nettoyage
clean:
	rm -f *.o *.elf *.bin

size:
	arm-none-eabi-size main.elf
