Embedded Makefile January 24, 2015
Makefile
CC = arm-none-eabi-gcc
LD = arm-none-eabi-gcc
AR = arm-none-eabi-ar
AS = arm-none-eabi-as
CP = arm-none-eabi-objcopy
OD = arm-none-eabi-objdump
DRIVER = STM32_USB-FS-Device_Lib_V4.0.0/Libraries/STM32F10x_StdPeriph_Driver
CMSIS = STM32_USB-FS-Device_Lib_V4.0.0/Libraries/CMSIS
CMSISD = STM32_USB-FS-Device_Lib_V4.0.0/Libraries/CMSIS/Device/ST/STM32F10x
libdir = lib
CFLAGS = -I. -I$(DRIVER)/inc -I$(CMSIS)/Include -I$(CMSISD)/Include -DSTM32F10X_XL -DUSE_STDPERIPH_DRIVER -c -fno-common -O0 -g -march=armv7-m -mcpu=cortex-m3 -mthumb -mthumb-interwork --std=gnu99
AFLAGS = -mapcs-32
LFLAGS = -nostartfiles
CPFLAGS = -Obinary
ODFLAGS = -S
libs = $(libdir)/libstdperiphdriver.a $(libdir)/libcmsisd.a
all: libs main
.PHONY : libs
libs: $(libs)
clean:
-rm -f main.lst main.bin main.elf main.hex main.map *.o $(libdir)/*
#################
# libraries
#################
$(libdir)/libstdperiphdriver.a: stm32f10x_rcc.o stm32f10x_gpio.o stm32f10x_usart.o stm32f10x_exti.o stm32f10x_dac.o stm32f10x_tim.o stm32f10x_dma.o stm32f10x_pwr.o
$(AR) rvs $@ $^
stm32f10x_rcc.o: $(DRIVER)/src/stm32f10x_rcc.c
@ echo
$(CC) $(CFLAGS) $^
stm32f10x_gpio.o: $(DRIVER)/src/stm32f10x_gpio.c
@ echo
$(CC) $(CFLAGS) $^
stm32f10x_usart.o: $(DRIVER)/src/stm32f10x_usart.c
@ echo
$(CC) $(CFLAGS) $^
stm32f10x_exti.o: $(DRIVER)/src/stm32f10x_exti.c
@ echo
$(CC) $(CFLAGS) $^
stm32f10x_dac.o: $(DRIVER)/src/stm32f10x_dac.c
@ echo
$(CC) $(CFLAGS) $^
stm32f10x_tim.o: $(DRIVER)/src/stm32f10x_tim.c
@ echo
$(CC) $(CFLAGS) $^
stm32f10x_dma.o: $(DRIVER)/src/stm32f10x_dma.c
@ echo
$(CC) $(CFLAGS) $^
stm32f10x_pwr.o: $(DRIVER)/src/stm32f10x_pwr.c
@ echo
$(CC) $(CFLAGS) $^
$(libdir)/libcmsisd.a: system_stm32f10x.o
$(AR) rvs $@ $^
system_stm32f10x.o: $(CMSISD)/Source/Templates/system_stm32f10x.c
@ echo
$(CC) $(CFLAGS) $^
main: main.elf
@ echo "...copying"
$(CP) $(CPFLAGS) main.elf main.bin
$(OD) $(ODFLAGS) main.elf > main.lst
main.elf: stm32.ld main.o crt0.o crt1.o irq.o svc.o $(libs)
@ echo
$(LD) $(LFLAGS) -T$^ speex/lib/libspeex.a -o$@
crt0.o: crt0.c
@ echo
$(CC) $(CFLAGS) $^
crt1.o: crt1.c
@ echo
$(CC) $(CFLAGS) $^
irq.o: irq.c
@ echo
$(CC) $(CFLAGS) $^
svc.o: svc.s
@ echo
$(AS) $(AFLAGS) $^ -o$@
main.o: main.c
@ echo
$(CC) $(CFLAGS) $^
samples.bin: samples/samples.raw
dd if=$^ of=$@ bs=1 count=512K
samples/samples.raw: samples/samples.wav
sox -v.9 $^ -c1 -r8k -b8 -eunsigned-integer $@
tags: Makefile
ctags-exuberant --c-kinds=+p --c++-kinds=+p --fields=+iaS --extra=+q * \
$(DRIVER)/src/* $(DRIVER)/inc/* \
$(CMSIS)/Include/* \
$(CMSISD)/Include/* \
speex/* \
~/usr/arm-none-eabi/include/*