|
|
|
################################################################
|
|
|
|
|
|
|
|
ARCH_FLAGS = -msoft-float -mfloat-abi=soft
|
|
|
|
ARCH_FLAGS += -mthumb -mcpu=cortex-m3
|
|
|
|
|
|
|
|
# Clock speed constants
|
|
|
|
DEFS += -DF_CPU=72000000UL
|
|
|
|
|
|
|
|
DEFS += -DSTM32F10X_MD
|
|
|
|
DEFS += -DARM_MATH_CM3
|
|
|
|
DEFS += -DUSE_STDPERIPH_DRIVER
|
|
|
|
|
|
|
|
LDSCRIPT = lib/cmsis/stm32_flash.ld
|
|
|
|
STARTUP_SCRIPT = lib/cmsis/startup_stm32f10x_md.s
|
|
|
|
|
|
|
|
|
|
|
|
################################################################
|
|
|
|
|
|
|
|
# Main file
|
|
|
|
BINARY = main
|
|
|
|
|
|
|
|
# Project include dirs
|
|
|
|
INCL_DIRS := project
|
|
|
|
|
|
|
|
# C files
|
|
|
|
SOURCES := $(shell find project -type f -name "*.c")
|
|
|
|
#SOURCES += $(shell find lib/sbmp/library -type f -name "*.c")
|
|
|
|
|
|
|
|
HEADERS := $(shell find project -type f -name "*.h")
|
|
|
|
#HEADERS += $(shell find lib/sbmp/library -type f -name "*.h")
|
|
|
|
|
|
|
|
#INCL_DIRS += lib/sbmp/library
|
|
|
|
|
|
|
|
################################################################
|
|
|
|
|
|
|
|
# Add library sources and include paths
|
|
|
|
LIB_INCL_DIRS =
|
|
|
|
LIB_SOURCES =
|
|
|
|
include lib/CMSIS.mk
|
|
|
|
include lib/SPL.mk
|
|
|
|
include lib/SBMP.mk
|
|
|
|
|
|
|
|
INCL_DIRS += $(LIB_INCL_DIRS)
|
|
|
|
|
|
|
|
LIB_OBJS_ = $(LIB_SOURCES:.c=.o)
|
|
|
|
LIB_OBJS = $(LIB_OBJS_:.S=.o)
|
|
|
|
|
|
|
|
# .c -> .o
|
|
|
|
|
|
|
|
OBJS = $(SOURCES:%.c=%.o)
|
|
|
|
OBJS += $(STARTUP_SCRIPT:.s=.o)
|
|
|
|
|
|
|
|
LIBNAME = stm32f103spl
|
|
|
|
LIBFILE = lib/lib$(LIBNAME).a
|
|
|
|
|
|
|
|
|
|
|
|
################################################################
|
|
|
|
|
|
|
|
SUBDIR_ROOTS = .
|
|
|
|
GARBAGE_PATTERNS := *.o *.d *.elf *.bin *.hex *.srec *.list *.map *.dis *.disasm .depend
|
|
|
|
|
|
|
|
DIRS := . $(shell find $(SUBDIR_ROOTS) -type d)
|
|
|
|
GARBAGE := $(foreach DIR,$(DIRS),$(addprefix $(DIR)/,$(GARBAGE_PATTERNS)))
|
|
|
|
|
|
|
|
###############################################################################
|
|
|
|
###############################################################################
|
|
|
|
###############################################################################
|
|
|
|
|
|
|
|
# Be silent per default, but 'make V=1' will show all compiler calls.
|
|
|
|
ifneq ($(V),1)
|
|
|
|
Q := @
|
|
|
|
NULL := 2>/dev/null
|
|
|
|
endif
|
|
|
|
|
|
|
|
###############################################################################
|
|
|
|
# Executables
|
|
|
|
|
|
|
|
PREFIX ?= arm-none-eabi
|
|
|
|
|
|
|
|
CC := $(PREFIX)-gcc
|
|
|
|
CXX := $(PREFIX)-g++
|
|
|
|
LD := $(PREFIX)-gcc
|
|
|
|
AR := $(PREFIX)-ar
|
|
|
|
AS := $(PREFIX)-as
|
|
|
|
OBJCOPY := $(PREFIX)-objcopy
|
|
|
|
SIZE := $(PREFIX)-size
|
|
|
|
OBJDUMP := $(PREFIX)-objdump
|
|
|
|
GDB := $(PREFIX)-gdb
|
|
|
|
STFLASH := $(shell which st-flash)
|
|
|
|
|
|
|
|
###############################################################################
|
|
|
|
|
|
|
|
# For CMSIS compatibility
|
|
|
|
DEFS += -D__weak="__attribute__((weak))" -D__packed="__attribute__((__packed__))" -D__STATIC_INLINE="static inline"
|
|
|
|
DEFS += -DVERBOSE_LOGGING=1
|
|
|
|
|
|
|
|
###############################################################################
|
|
|
|
# C flags
|
|
|
|
|
|
|
|
CFLAGS += -Os -ggdb -std=gnu99 -Wfatal-errors
|
|
|
|
CFLAGS += -Wall -Wextra -Wshadow
|
|
|
|
CFLAGS += -Wwrite-strings -Wold-style-definition -Winline -Wmissing-noreturn -Wstrict-prototypes
|
|
|
|
CFLAGS += -Wredundant-decls -Wfloat-equal -Wsign-compare
|
|
|
|
CFLAGS += -fno-common -ffunction-sections -fdata-sections -Wunused-function
|
|
|
|
CFLAGS += -MD -Wno-format-zero-length
|
|
|
|
CFLAGS += $(INCL_DIRS:%=-I%) $(DEFS)
|
|
|
|
#-flto
|
|
|
|
|
|
|
|
# Special flags to hide warnings in CMSIS
|
|
|
|
LIB_CFLAGS = -Wno-shadow -Wno-float-equal -Wno-inline -Wno-unused-parameter -Wno-unused
|
|
|
|
#-Wno-old-style-definition -Wno-strict-prototypes
|
|
|
|
|
|
|
|
###############################################################################
|
|
|
|
# Linker flags
|
|
|
|
|
|
|
|
LDFLAGS += --static -lm -lc -nostartfiles -specs=nano.specs
|
|
|
|
LDFLAGS += -Llib
|
|
|
|
LDFLAGS += -T$(LDSCRIPT)
|
|
|
|
LDFLAGS += -Wl,-Map=$(*).map
|
|
|
|
LDFLAGS += -Wl,--gc-sections
|
|
|
|
#-specs=nano.specs
|
|
|
|
|
|
|
|
###############################################################################
|
|
|
|
# Used libraries
|
|
|
|
|
|
|
|
LDLIBS += -lm -lc -l$(LIBNAME)
|
|
|
|
LDLIBS += -Wl,--start-group -lc -lgcc -lnosys -Wl,--end-group
|
|
|
|
|
|
|
|
###############################################################################
|
|
|
|
###############################################################################
|
|
|
|
###############################################################################
|
|
|
|
|
|
|
|
.PHONY: all images clean elf bin hex srec list dis ttyusb ttyacm lib libcheck size
|
|
|
|
|
|
|
|
.SUFFIXES: .elf .bin .hex .srec .list .map .images
|
|
|
|
.SECONDEXPANSION:
|
|
|
|
.SECONDARY:
|
|
|
|
|
|
|
|
all: elf size
|
|
|
|
|
|
|
|
elf: $(BINARY).elf
|
|
|
|
bin: $(BINARY).bin
|
|
|
|
hex: $(BINARY).hex
|
|
|
|
srec: $(BINARY).srec
|
|
|
|
list: $(BINARY).list
|
|
|
|
|
|
|
|
images: $(BINARY).images
|
|
|
|
flash: $(BINARY).flash
|
|
|
|
|
|
|
|
dis: $(BINARY).elf
|
|
|
|
$(Q)$(OBJDUMP) -dS $(BINARY).elf -j .text -j .isr_vector > $(BINARY).dis
|
|
|
|
|
|
|
|
lib: CFLAGS += $(LIB_CFLAGS)
|
|
|
|
lib: $(LIBFILE)
|
|
|
|
|
|
|
|
$(LIBFILE): $(LIB_OBJS)
|
|
|
|
$(Q)$(AR) rcsv $@ $(LIB_OBJS)
|
|
|
|
|
|
|
|
libcheck:
|
|
|
|
$(Q)if [ ! -e $(LIBFILE) ]; then \
|
|
|
|
echo "--- You must build the lib first! ---"; \
|
|
|
|
exit 1; \
|
|
|
|
fi
|
|
|
|
|
|
|
|
size: $(BINARY).elf
|
|
|
|
$(Q)$(SIZE) -A $(BINARY).elf | grep -v " 0"
|
|
|
|
|
|
|
|
%.images: %.bin %.hex %.srec %.list %.map
|
|
|
|
|
|
|
|
%.bin: %.elf
|
|
|
|
$(Q)$(OBJCOPY) -Obinary $(*).elf $(*).bin
|
|
|
|
|
|
|
|
%.hex: %.elf
|
|
|
|
$(Q)$(OBJCOPY) -Oihex $(*).elf $(*).hex
|
|
|
|
|
|
|
|
%.srec: %.elf
|
|
|
|
$(Q)$(OBJCOPY) -Osrec $(*).elf $(*).srec
|
|
|
|
|
|
|
|
%.list: %.elf
|
|
|
|
$(Q)$(OBJDUMP) -S $(*).elf > $(*).list
|
|
|
|
|
|
|
|
%.elf %.map: libcheck $(OBJS) $(HEADERS)
|
|
|
|
$(Q)$(LD) $(LDFLAGS) $(ARCH_FLAGS) $(OBJS) $(LDLIBS) -o $(*).elf
|
|
|
|
$(Q)./parsemap.php
|
|
|
|
$(Q)$(SIZE) $(*).elf
|
|
|
|
|
|
|
|
%.o: %.c
|
|
|
|
$(Q)echo "CC $(*).c"
|
|
|
|
$(Q)$(CC) $(CFLAGS) $(ARCH_FLAGS) -o $(*).o -c $(*).c
|
|
|
|
|
|
|
|
%.o: %.s
|
|
|
|
$(Q)echo "CC $(*).s"
|
|
|
|
$(Q)$(CC) $(CFLAGS) $(ARCH_FLAGS) -o $(*).o -c $(*).s
|
|
|
|
|
|
|
|
%.o: %.S
|
|
|
|
$(Q)echo "CC $(*).S"
|
|
|
|
$(Q)$(CC) $(CFLAGS) $(ARCH_FLAGS) -o $(*).o -c $(*).S
|
|
|
|
|
|
|
|
clean:
|
|
|
|
$(Q)$(RM) -r $(GARBAGE)
|
|
|
|
|
|
|
|
%.flash: %.bin
|
|
|
|
@printf " FLASH $<\n"
|
|
|
|
$(Q)$(STFLASH) write $(*).bin 0x8000000
|
|
|
|
|
|
|
|
-include $(OBJS:.o=.d)
|