PROJ_NAME=printer

SRCS = src/main.c \
       src/system_stm32f4xx.c \
       src/startup_stm32f4xx.s \
       $(wildcard src/ublib/*.c) \
       $(wildcard src/ublib/usb_cdc_lolevel/*.c) \
       libraries/STM32F4/src/misc.c \
       libraries/STM32F4/src/stm32f4xx_rcc.c \
       libraries/STM32F4/src/stm32f4xx_gpio.c \
       libraries/STM32F4/src/stm32f4xx_adc.c \

CLIB = -Isrc/ublib/usb_cdc_lolevel -Isrc/ublib

CC=arm-none-eabi-gcc
OBJCOPY=arm-none-eabi-objcopy

OBJDIR = build

CFLAGS  = -g -Wall -Wno-missing-braces
CFLAGS += -mthumb -mcpu=cortex-m4
CFLAGS += -mfloat-abi=soft
CFLAGS += -DUSE_STDPERIPH_DRIVER -std=c99
LDFLAGS = -Wl,-Map,$(OBJDIR)/$(PROJ_NAME).map -g -Tstm32f4_flash.ld
LDFLAGS += -lc -lnosys

CFLAGS += -Isrc -I. -Ilibraries/STM32F4/inc -Ilibraries/CMSIS/ST/STM32F4xx/Include -Ilibraries/CMSIS/Include $(CLIB)

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


flash: $(OBJDIR)/$(PROJ_NAME).bin
	/usr/local/bin/st-flash write $(OBJDIR)/$(PROJ_NAME).bin 0x8000000

$(OBJDIR)/$(PROJ_NAME).elf: $(OBJS) | $(OBJDIR)
