#---------------------------------------
# STM32F10x Makefile
#---------------------------------------
# foCXXgiSTM̃wb_ݒpj
#
#  STM32F10X_LD STM32F10X_LD_VL
#  STM32F10X_MD STM32F10X_MD_VL
#  STM32F10X_HD STM32F10X_XL STM32F10X_CL
#

TARGET = main
OBJDIR = build
DEVICE = STM32F10X_MD
TOOL_PATH = /usr/local/arm-2010q1/bin/
LDSCRIPT = stm32f10x_flash.ld


#---------------------------------------
# \[Xt@C̃XgAbv

A_SRC = $(shell ls *.S 2> /dev/null)
A_OBJ = $(A_SRC:%.S=$(OBJDIR)/%.o)

HEADERS = $(shell ls *.h 2> /dev/null)
C_SRC   = $(shell ls *.c 2> /dev/null)
C_OBJ   = $(C_SRC:%.c=$(OBJDIR)/%.o)
C_ASM   = $(C_SRC:%.c=$(OBJDIR)/%.asm)
_TARGET = $(OBJDIR)/$(TARGET)


#---------------------------------------
# c[̒`

CC      = $(TOOL_PATH)arm-none-eabi-gcc
AR      = $(TOOL_PATH)arm-none-eabi-ar
LD      = $(TOOL_PATH)arm-none-eabi-ld
OBJCPY  = $(TOOL_PATH)arm-none-eabi-objcopy
OBJDMP  = $(TOOL_PATH)arm-none-eabi-objdump
SIZE    = $(TOOL_PATH)arm-none-eabi-size
GCC_VER = $(shell $(CC) -dumpversion)


#---------------------------------------
# RpCIvVƃJIvV̒`

CFLAGS = -D$(DEVICE)
CFLAGS += -mcpu=cortex-m3 -mtune=cortex-m3 -mthumb -Wall -Os

LDFLAGS = -nostartfiles -nodefaultlibs -static
LDFLAGS += $(CFLAGS) --gc-sections -lm -lc -lgcc -Xlinker


#---------------------------------------
# ^[Qbg̎w

all : build_dir mot hex lst $(C_ASM)

build_dir :
	mkdir -p $(OBJDIR)

mot : $(_TARGET).mot
hex : $(_TARGET).hex
lst : $(_TARGET).lst


#---------------------------------------
# g[S`ƃCehex`ɕϊ

%.mot : %.elf
	$(OBJCPY) -O srec $< $@

%.hex : %.elf
	$(OBJCPY) -O ihex $< $@


#---------------------------------------
# IuWFNgt@C̈ˑ֌W

$(OBJDIR)/%.o : %.c $(HEADERS)
	$(CC) $(CFLAGS) -c $< -o $@
$(OBJDIR)/%.o : %.S
	$(CC) $(CFLAGS) -c $< -o $@

$(_TARGET).elf : $(A_OBJ) $(C_OBJ)
	$(CC) $(LDFLAGS) $(A_OBJ) $(C_OBJ) \
	-Xlinker --print-map >$(_TARGET).map -Xlinker --script $(LDSCRIPT) --output $@
	$(SIZE) -Ax $@

$(OBJDIR)/%.asm : %.c $(HEADERS)
	$(CC) $(CFLAGS) -S $< -o $@


%.lst : %.elf
	$(OBJDMP) -h -D -S -C -t $< > $@


#---------------------------------------
# vWFNgt@C̑|

clean:
	rm -f $(A_OBJ) $(C_OBJ) $(C_ASM) \
	$(_TARGET).map $(_TARGET).lst $(_TARGET).elf $(_TARGET).mot $(_TARGET).hex
	rmdir $(OBJDIR)

