CC=arm-none-eabi-gcc
AR=arm-none-eabi-ar

###########################################

vpath %.c ST/STM32_USB_Device_Library/Core/Src

CFLAGS  = -g -O2 -Wall -DSTM32F303xC
CFLAGS += -mlittle-endian -mthumb -mcpu=cortex-m4 -march=armv7e-m
CFLAGS += -mfpu=fpv4-sp-d16 -mfloat-abi=hard
CFLAGS += -ffreestanding -nostdlib
CFLAGS += -I ST/STM32_USB_Device_Library/Core/Inc
CFLAGS += -I ST/STM32_USB_Device_Library/CDC/Inc
CFLAGS += -I ST/STM32_USB_Device_Library/Class/CDC/Inc
CFLAGS += -I ../Drivers/STM32F3xx_HAL_Driver/Inc
CFLAGS += -I ../Drivers/CMSIS/Device/ST/STM32F3xx/Include
CFLAGS += -I ../Drivers/CMSIS/Include
CFLAGS += -I../Inc

SRCS = usbd_core.c usbd_ctlreq.c usbd_ioreq.c

OBJS = $(addprefix objs/,$(SRCS:.c=.o))
DEPS = $(addprefix deps/,$(SRCS:.c=.d))

.PHONY: all clean

all: libstm32usb.a

-include $(DEPS)

dirs:
	mkdir -p deps objs
	touch dirs

objs/%.o : %.c dirs
	$(CC) $(CFLAGS) -c -o $@ $< -MMD -MF deps/$(*F).d

objs/usbd_cdc.o: ST/STM32_USB_Device_Library/Class/CDC/Src/usbd_cdc.c
	$(CC) $(CFLAGS) -c -o $@ $< -MMD -MF deps/$(*F).d

libstm32usb.a: $(OBJS) objs/usbd_cdc.o
	$(AR) -r $@ $(OBJS) objs/usbd_cdc.o

TAGS:	$(addprefix ST/STM32_USB_Device_Library/Core/Src/,$(SRCS)) ST/STM32_USB_Device_Library/Core/Inc/*.h ST/STM32_USB_Device_Library/Class/CDC/Inc/*.h ST/STM32_USB_Device_Library/Class/CDC/Src/*.c ST/STM32_USB_Device_Library/Class/CDC/Src/usbd_cdc.c Makefile
	etags $(addprefix ST/STM32_USB_Device_Library/Core/Src/,$(SRCS)) ST/STM32_USB_Device_Library/Core/Inc/*.h ST/STM32_USB_Device_Library/Class/CDC/Inc/*.h ST/STM32_USB_Device_Library/Class/CDC/Src/*.c ST/STM32_USB_Device_Library/Class/CDC/Src/usbd_cdc.c Makefile
tags:
	make TAGS

clean:
	rm -f dirs TAGS $(OBJS) $(DEPS) libstm32usb.a
