You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							205 lines
						
					
					
						
							5.3 KiB
						
					
					
				
			
		
		
	
	
							205 lines
						
					
					
						
							5.3 KiB
						
					
					
				################################################################
 | 
						|
 | 
						|
ARCH_FLAGS     = -msoft-float -mfloat-abi=soft
 | 
						|
ARCH_FLAGS    += -mthumb -mcpu=cortex-m3
 | 
						|
 | 
						|
# Clock speed constants
 | 
						|
DEFS          += -DF_CPU=8000000UL
 | 
						|
 | 
						|
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__))"
 | 
						|
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
 | 
						|
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)$(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)
 | 
						|
 |