CC      = arm-none-eabi-gcc
LD      = arm-none-eabi-ld
CP      = arm-none-eabi-objcopy
OD      = arm-none-eabi-objdump
  
CFLAGS  =  -fno-common -Os -g -gdwarf-2 -g3 -mcpu=cortex-m3 -mthumb -std=gnu99 -Wall -Werror -Wno-unused \
	-I baselibc/include -I nanopb
LFLAGS  = -Tstm32.ld -nostartfiles -e__Init_Data -Map=main.map
CPFLAGS = -Obinary
ODFLAGS = -S -D

FREERTOS_OBJS = freertos/tasks.o freertos/list.o freertos/queue.o freertos/port.o
CFLAGS += -Ifreertos/include -I.

LIBS = baselibc/libc.a
LFLAGS += -L=/../lib/gcc/arm-none-eabi/4.5.1/thumb2

OBJS = main.o interrupt_vectors.o cli_task.o gsm_task.o \
	fatfs/ff.o mmc.o fatfs_glue.o \
	malloc_glue.o syslog.o \
	cmd/cmd_base.o cmd/cmd_list.o cmd/cmd_fs.o cmd/cmd_system.o \
	io/io_base.o io/io_cli.o io/io_gsm.o \
	rpc/rpc_streams.o rpc/rpc_dispatcher.o rpc/rpc_base.o \
	rpc/rpc_server.o rpc/paatti.pb.o \
	rpc/rpccommands_system.o \
	nanopb/pb_encode.o nanopb/pb_decode.o

all: main.elf

clean:
	-rm -f main.elf main.bin ${OBJS} ${FREERTOS_OBJS}

test: main.elf
	$(CP) $(CPFLAGS) main.elf main.bin
	#$(OD) $(ODFLAGS) main.elf > main.lst
	mystm32flash -w main.bin -g 0x0

main.elf: ${OBJS} ${FREERTOS_OBJS} ${LIBS} stm32.ld
	$(LD) $(LFLAGS) -o $@ ${OBJS} ${FREERTOS_OBJS} ${LIBS} -lgcc

fatfs/ff.o: fatfs/ff.c fatfs/*.h
	# FatFS uses some pointer casts => we need -fno-strict-aliasing
	$(CC) $(CFLAGS) -fno-strict-aliasing -c -o $@ $<

%.o: %.c *.h cmd/*.h io/*.h freertos/include/*.h
	$(CC) $(CFLAGS) -c -o $@ $<

%.pb: %.proto
	protoc -I. -Inanopb/generator -I/usr/include -o$@ $<

%.pb.c %.pb.h: %.pb
	python nanopb/generator/nanopb_generator.py $<


