
PROG := vwaio
SRC  := vectors.c \
        crash.c \
        crt0.c \
        gpio_init.c \
        led.c \
        printf.c \
        usart2.c

ELF    := $(PROG).elf
UTC    := $(shell date -u +%s)
DATE   := $(shell date +%Y%m%d-%H)
TGZ    := $(PROG)-$(DATE).tgz

# vpath %.c ..
BLDDIR := ./BUILD
OBJ    := $(patsubst %.c, $(BLDDIR)/%.o, $(SRC))
DEP    := $(patsubst %.c, $(BLDDIR)/%.d, $(SRC))

CC     := arm-none-eabi-gcc
OBJCOPY:= arm-none-eabi-objcopy
OBJDUMP:= arm-none-eabi-objdump
SIZE   := arm-none-eabi-size

CFLAGS := -Wall -Wextra -std=c99 -pedantic
CFLAGS += -march=armv6-m -mthumb -mcpu=cortex-m0 -falign-functions=4
CFLAGS += -ffreestanding
CFLAGS += -Os
# CFLAGS += -save-temps=obj
# CFLAGS += -mabi=aapcs
# CFLAGS += -g -fno-omit-frame-pointer
# CFLAGS += -mpoke-function-name
CFLAGS += -I../include
CFLAGS += -DPROGRAM_NAME="\"$(PROG)\""

LDSCRIPT := F051-$(PROG).ld

LDFLAGS := -Wl,-defsym=BUILD_TIME=$(UTC)
LDFLAGS += -Wl,-T$(LDSCRIPT)
LDFLAGS += -Wl,-Map=$(BLDDIR)/$(PROG).map
# LDFLAGS += -Wl,--gc-sections
LDFLAGS += -nostdlib
LDFLAGS += -mcpu=cortex-m0
# LDFLAGS += -L/usr/lib/gcc/arm-none-eabi/4.8/armv6-m/
LDLIBS   = -lgcc


$(PROG):  $(BLDDIR)/$(ELF)

$(BLDDIR)/$(ELF): Makefile $(LDSCRIPT) $(OBJ)
	echo $@
	$(CC) -o $@ $(OBJ) $(LDFLAGS) $(LDLIBS)
	$(SIZE) $@

$(BLDDIR)/%.o: %.c
	echo $<
	$(CC) -c -o $@ $(CFLAGS) $<

$(BLDDIR)/%.d: %.c
	set -e; rm -f $@; \
        $(CC) -MM $(CFLAGS) $< | \
        sed 's,\($*\)\.o[ :]*,$(BLDDIR)/\1.o $@ : ,g' > $@

tgz:
	make clean
	tar czvf ../$(TGZ) ../$(PROG)
	echo $(NOW)

RUN:
	/srv/prog/stm32/bootloader/ubl /dev/ttyUSB2 9600 \
		BUILD/$(PROG).elf RUN ; true
	stty -raw -istrip echo

run:
	/srv/prog/stm32/bootloader/ubl /dev/ttyUSB2 9600 \
		BUILD/$(PROG).elf ; true
	stty -raw -istrip echo

Dump:
	$(OBJDUMP) -D $(BLDDIR)/$(ELF)

dump:
	$(OBJDUMP) -d -t -C $(BLDDIR)/$(ELF)

srec:
	$(OBJCOPY) -O srec $(BLDDIR)/$(ELF) $(BLDDIR)/$(PROG).s19

bin:
	$(OBJCOPY) -O binary $(BLDDIR)/$(ELF) $(BLDDIR)/$(PROG).bin

clean:
	rm -f $(BLDDIR)/*

-include $(DEP)

.PHONY: tgz RUN run Dump dump srec bin clean
.SILENT:


