PROJ_NAME=main
SRCS = src/main.c

LINKER_SCRIPT = stm32f4_flash.ld
SRCS += startup_stm32f429_439xx.s

CC=arm-none-eabi-gcc
OBJCOPY=arm-none-eabi-objcopy

OBJDIR = build

CFLAGS += -g -Wall -Wno-missing-braces -std=c99
CFLAGS += -mlittle-endian -mthumb -mcpu=cortex-m4 -mthumb-interwork
CFLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16
#CFLAGS += -mfloat-abi=soft
LDFLAGS = -nostdlib -Wl,-Map,$(OBJDIR)/$(PROJ_NAME).map -g -T$(LINKER_SCRIPT)

CFLAGS += -Isrc -I. 
CFLAGS += -Ilibraries/STM32F4xx_StdPeriph_Driver/inc
CFLAGS += -Ilibraries/CMSIS/Include
CFLAGS += -Ilibraries/CMSIS/Device/ST/STM32F4xx/Include
CLFAGS += -Ilibraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/arm

CFLAGS += -DSTM32F429_439xx

OBJS := $(SRCS:.c=.o)
OBJS := $(OBJS:.s=.o)
OBJS := $(addprefix $(OBJDIR)/,$(OBJS))


all: $(OBJDIR)/$(PROJ_NAME).elf $(OBJDIR)/$(PROJ_NAME).hex $(OBJDIR)/$(PROJ_NAME).bin

$(OBJDIR)/%.elf: $(OBJS)
	$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)

%.hex: %.elf
	$(OBJCOPY) -O ihex $^ $@

%.bin: %.elf
	$(OBJCOPY) -O binary $^ $@

$(OBJDIR)/%.o: %.c
	mkdir -p $(dir $@)
	$(CC) -c $(CFLAGS) -o $@ $^

$(OBJDIR)/%.o: %.s
	$(CC) -c $(CFLAGS) -o $@ $^

$(OBJDIR):
	mkdir -p $@

clean:
	rm -f $(OBJDIR)/$(PROJ_NAME).elf
	rm -f $(OBJDIR)/$(PROJ_NAME).hex
	rm -f $(OBJDIR)/$(PROJ_NAME).bin
	rm -f $(OBJDIR)/$(PROJ_NAME).map
	find $(OBJDIR) -type f -name '*.o' -print0 | xargs -0 -r rm


program: $(OBJDIR)/$(PROJ_NAME).elf
	


# Dependdencies
$(OBJDIR)/$(PROJ_NAME).elf: $(OBJS) | $(OBJDIR)
