Makefile:
TARGET = testservo OPTIMIZATION = s
CROSS = arm-none-eabi- CC = $(CROSS)gcc CXX = $(CROSS)g++ LD = $(CROSS)ld AR = $(CROSS)ar AS = $(CROSS)gcc GASP = $(CROSS)gasp NM = $(CROSS)nm OBJCOPY = $(CROSS)objcopy OBJDUMP = $(CROSS)objdump RANLIB = $(CROSS)ranlib STRIP = $(CROSS)strip SIZE = $(CROSS)size READELF = $(CROSS)readelf MAKETXT = srec_cat MKDIR = mkdir CP = cp -p RM = rm MV = mv
MCU_NAME = STM32F103C8 MCU_FAMILY = STM32F10X_LD
MCU = -mcpu=cortex-m3 -mthumb MCU_CC = $(MCU) -D__thumb2__=1 -mtune=cortex-m3 -msoft-float -mapcs-frame
BUILD_DIR := build SRC_DIR := src #LD_SCRIPT := $(MCU_NAME).S
DEFINE := $(MCU_FAMILY) $(MCU_NAME) HSE_VALUE=8000000 USE_$(MCU_FAMILY) USE_STDPERIPH_DRIVER
SPL_DIR := STM32F10x_StdPeriph_Driver CMSIS_DIR := CMSIS USB_DIR := STM32_USB-FS-Device_Driver SPL_SRC := $(wildcard $(SPL_DIR)/src/*.c) SPL_INC := $(SPL_DIR)/inc CMSIS_SRC := $(wildcard $(CMSIS_DIR)/Device/ST/STM32F10x/Source/Templates/*.c) CMSIS_SRCS := $(CMSIS_DIR)/Device/ST/STM32F10x/Source/Templates/gcc_ride7/startup_stm32f10x_ld.s CMSIS_INC := $(CMSIS_DIR)/Device/ST/STM32F10x/Include CMSIS_INC += $(CMSIS_DIR)/Include CMSIS_INC += $(CMSIS_DIR)/RTOS USB_SRC := $(wildcard $(USB_DIR)/src/*.c) USB_INC := $(USB_DIR)/inc OS_DIR := FreeRTOS/Source OS_SRC := $(wildcard $(OS_DIR)/*.c) OS_SRC += $(wildcard $(OS_DIR)/portable/GCC/ARM_CM3/*.c) OS_SRC += $(OS_DIR)/portable/MemMang/heap_4.c OS_INC := $(OS_DIR)/include OS_INC += $(OS_DIR)/portable/GCC/ARM_CM3
#STL_DIR := uClibc++-0.2.4 #STL_INC := $(STL_DIR)/include #STL_SRC := $(wildcard $(STL_DIR)/src/*.cpp) #STL_SRC += $(wildcard $(STL_DIR)/src/abi/*.cpp)
#STL_DIR := stl #STL_INC := $(STL_DIR) #STL_INC += $(STL_DIR)/include #STL_INC += $(STL_DIR)/include/stl #STL_INC += $(STL_DIR)/string #STL_SRC := $(wildcard $(STL_DIR)/src/*.cpp)
STL_SRC := STL_INC :=
FW_SRC := $(wildcard $(SRC_DIR)/*.c) FW_SRCXX := $(wildcard $(SRC_DIR)/*.cc) HEADERS := $(wildcard $(SRC_DIR)/*.h*) FW_INC := $(SRC_DIR)
SRC_EXCL := #comment next line to wipe out libc++ and use gcc for linking. #SRC_EXCL += $(SRC_DIR)/supc++.cc SRC_EXCL +=
SRC_C := $(SPL_SRC) $(USB_SRC) $(CMSIS_SRC) $(OS_SRC) $(FW_SRC) SRC_S := $(CMSIS_SRCS) SRC_CXX := $(FW_SRCXX) $(STL_SRC) INCLUDE_FOLDERS = $(SPL_INC) $(USB_INC) $(CMSIS_INC) $(OS_INC) $(FW_INC) $(STL_INC) SRC_C := $(filter-out $(SRC_EXCL),$(SRC_C)) SRC_CXX := $(filter-out $(SRC_EXCL),$(SRC_CXX))
SRC_CPPXX := $(filter %.cpp,$(SRC_CXX)) SRC_CCXX := $(filter %.cc,$(SRC_CXX)) OBJ := $(SRC_CPPXX:%.cpp=%.o) $(SRC_CCXX:%.cc=%.o) $(SRC_C:%.c=%.o) $(SRC_S:%.s=%.o) OBJ := $(OBJ:%=$(BUILD_DIR)/%) INCLUDES := $(INCLUDE_FOLDERS:%=-I%) DEFINES := $(DEFINE:%=-D%)
CC_FLAGS = -g -ggdb $(INCLUDES) -I. -O$(OPTIMIZATION) -Wall -std=gnu99 -c -fmessage-length=0 $(MCU_CC) -fdata-sections -ffunction-sections -fno-hosted -fno-builtin -nostdlib -nodefaultlibs -fno-strict-aliasing CXX_FLAGS = -g -ggdb $(INCLUDES) -I. -O$(OPTIMIZATION) -Wall -std=gnu++14 -c -fmessage-length=0 $(MCU_CC) -fdata-sections -ffunction-sections -fno-builtin -nostdlib -nodefaultlibs -fno-strict-aliasing -fno-rtti AS_FLAGS = $(MCU) #no semihosting #LD_SYS_LIBS = -lm -lc -lgcc -lnosys #LD_FLAGS = -Xlinker --gc-sections $(MCU) --specs=nosys.specs -fPIC $(LD_SYS_LIBS) #semihosting LD_SYS_LIBS = -lm -lc -lgcc -lnosys -lrdimon #LD_FLAGS = -Xlinker --print-map -Xlinker --gc-sections $(MCU) --specs=nosys.specs --specs=rdimon.specs -fPIC $(LD_SYS_LIBS) LD_FLAGS = -Xlinker --gc-sections $(MCU) --specs=nosys.specs --specs=rdimon.specs -fPIC $(LD_SYS_LIBS)
all: $(BUILD_DIR)/$(TARGET).elf
$(BUILD_DIR)/$(TARGET).elf: $(OBJ) @echo LD: $^ #full RTTI and exception support @$(CXX) -T $(MCU_NAME).ld -o $@ $^ $(LD_FLAGS) #cutoff RTTI and exception support # @$(CC) $(LD_FLAGS) -T $(MCU_NAME).ld -o $@ $^ @echo "\033[31;47m\033[1m" @echo '-----------------------------------------------------------' @$(SIZE) $(BUILD_DIR)/$(TARGET).elf @echo "\033[0m" @$(OBJCOPY) -O binary $(BUILD_DIR)/$(TARGET).elf $(BUILD_DIR)/$(TARGET).bin @$(OBJCOPY) -O ihex $(BUILD_DIR)/$(TARGET).elf $(BUILD_DIR)/$(TARGET).hex @$(OBJDUMP) -h -S -z $(BUILD_DIR)/$(TARGET).elf > $(BUILD_DIR)/$(TARGET).lss @$(NM) -n $(BUILD_DIR)/$(TARGET).elf > $(BUILD_DIR)/$(TARGET).sym
$(BUILD_DIR)/%.o : %.c $(HEADERS) @$(MKDIR) -p `dirname $@` @echo "\033[37;44m\033[1m CC: \033[37;42m$< \033[0m" @$(CC) $(CC_FLAGS) $(DEFINES) -c ./$< -o $@
$(BUILD_DIR)/%.o : %.cc $(HEADERS) @$(MKDIR) -p `dirname $@` @echo "\033[37;44m\033[1mCXX: \033[37;42m$< \033[0m" @$(CXX) $(CXX_FLAGS) $(DEFINES) -c ./$< -o $@
$(BUILD_DIR)/%.o : %.cpp $(HEADERS) @$(MKDIR) -p `dirname $@` @echo "\033[37;44m\033[1mCXX: \033[37;42m$< \033[0m" @$(CXX) $(CXX_FLAGS) $(DEFINES) -c ./$< -o $@
$(BUILD_DIR)/%.o : %.s @$(MKDIR) -p `dirname $@` @echo "\033[37;44m\033[1m AS_C: \033[37;42m$< \033[0m" @$(CC) $(INCLUDES) $(DEFINES) -c -x assembler-with-cpp ./$< -o $@
program: @st-flash --reset write $(BUILD_DIR)/$(TARGET).bin 0x8000000
clean: @$(RM) -rf build/* @$(RM) -rf *.i @$(RM) -rf *.s
.PHONY : all clean program flash
Makefile:
TARGET = testservo
OPTIMIZATION = s
CROSS = arm-none-eabi-
CC = $(CROSS)gcc
CXX = $(CROSS)g++
LD = $(CROSS)ld
AR = $(CROSS)ar
AS = $(CROSS)gcc
GASP = $(CROSS)gasp
NM = $(CROSS)nm
OBJCOPY = $(CROSS)objcopy
OBJDUMP = $(CROSS)objdump
RANLIB = $(CROSS)ranlib
STRIP = $(CROSS)strip
SIZE = $(CROSS)size
READELF = $(CROSS)readelf
MAKETXT = srec_cat
MKDIR = mkdir
CP = cp -p
RM = rm
MV = mv
MCU_NAME = STM32F103C8
MCU_FAMILY = STM32F10X_LD
MCU = -mcpu=cortex-m3 -mthumb
MCU_CC = $(MCU) -D__thumb2__=1 -mtune=cortex-m3 -msoft-float -mapcs-frame
BUILD_DIR := build
SRC_DIR := src
#LD_SCRIPT := $(MCU_NAME).S
DEFINE := $(MCU_FAMILY) $(MCU_NAME) HSE_VALUE=8000000 USE_$(MCU_FAMILY) USE_STDPERIPH_ DRIVER
SPL_DIR := STM32F10x_ StdPeriph_ Driver FS-Device_ Driver DIR)/Device/ ST/STM32F10x/ Source/ Templates/ *.c) DIR)/Device/ ST/STM32F10x/ Source/ Templates/ gcc_ride7/ startup_ stm32f10x_ ld.s DIR)/Device/ ST/STM32F10x/ Include DIR)/Include /portable/ GCC/ARM_ CM3/*.c) /portable/ MemMang/ heap_4. c /portable/ GCC/ARM_ CM3
CMSIS_DIR := CMSIS
USB_DIR := STM32_USB-
SPL_SRC := $(wildcard $(SPL_DIR)/src/*.c)
SPL_INC := $(SPL_DIR)/inc
CMSIS_SRC := $(wildcard $(CMSIS_
CMSIS_SRCS := $(CMSIS_
CMSIS_INC := $(CMSIS_
CMSIS_INC += $(CMSIS_
CMSIS_INC += $(CMSIS_DIR)/RTOS
USB_SRC := $(wildcard $(USB_DIR)/src/*.c)
USB_INC := $(USB_DIR)/inc
OS_DIR := FreeRTOS/Source
OS_SRC := $(wildcard $(OS_DIR)/*.c)
OS_SRC += $(wildcard $(OS_DIR)
OS_SRC += $(OS_DIR)
OS_INC := $(OS_DIR)/include
OS_INC += $(OS_DIR)
#STL_DIR := uClibc++-0.2.4 /src/*. cpp) /src/abi/ *.cpp)
#STL_INC := $(STL_DIR)/include
#STL_SRC := $(wildcard $(STL_DIR)
#STL_SRC += $(wildcard $(STL_DIR)
#STL_DIR := stl /include/ stl /src/*. cpp)
#STL_INC := $(STL_DIR)
#STL_INC += $(STL_DIR)/include
#STL_INC += $(STL_DIR)
#STL_INC += $(STL_DIR)/string
#STL_SRC := $(wildcard $(STL_DIR)
STL_SRC :=
STL_INC :=
FW_SRC := $(wildcard $(SRC_DIR)/*.c)
FW_SRCXX := $(wildcard $(SRC_DIR)/*.cc)
HEADERS := $(wildcard $(SRC_DIR)/*.h*)
FW_INC := $(SRC_DIR)
SRC_EXCL := /supc++ .cc
#comment next line to wipe out libc++ and use gcc for linking.
#SRC_EXCL += $(SRC_DIR)
SRC_EXCL +=
SRC_C := $(SPL_SRC) $(USB_SRC) $(CMSIS_SRC) $(OS_SRC) $(FW_SRC) ,$(SRC_ C)) ,$(SRC_ CXX))
SRC_S := $(CMSIS_SRCS)
SRC_CXX := $(FW_SRCXX) $(STL_SRC)
INCLUDE_FOLDERS = $(SPL_INC) $(USB_INC) $(CMSIS_INC) $(OS_INC) $(FW_INC) $(STL_INC)
SRC_C := $(filter-out $(SRC_EXCL)
SRC_CXX := $(filter-out $(SRC_EXCL)
SRC_CPPXX := $(filter %.cpp,$(SRC_CXX)) %.cpp=% .o) $(SRC_CCXX: %.cc=%. o) $(SRC_C:%.c=%.o) $(SRC_S:%.s=%.o) =$(BUILD_ DIR)/%) FOLDERS: %=-I%)
SRC_CCXX := $(filter %.cc,$(SRC_CXX))
OBJ := $(SRC_CPPXX:
OBJ := $(OBJ:%
INCLUDES := $(INCLUDE_
DEFINES := $(DEFINE:%=-D%)
CC_FLAGS = -g -ggdb $(INCLUDES) -I. -O$(OPTIMIZATION) -Wall -std=gnu99 -c -fmessage-length=0 $(MCU_CC) -fdata-sections -ffunction-sections -fno-hosted -fno-builtin -nostdlib -nodefaultlibs -fno-strict- aliasing aliasing -fno-rtti rdimon. specs -fPIC $(LD_SYS_LIBS) rdimon. specs -fPIC $(LD_SYS_LIBS)
CXX_FLAGS = -g -ggdb $(INCLUDES) -I. -O$(OPTIMIZATION) -Wall -std=gnu++14 -c -fmessage-length=0 $(MCU_CC) -fdata-sections -ffunction-sections -fno-builtin -nostdlib -nodefaultlibs -fno-strict-
AS_FLAGS = $(MCU)
#no semihosting
#LD_SYS_LIBS = -lm -lc -lgcc -lnosys
#LD_FLAGS = -Xlinker --gc-sections $(MCU) --specs=nosys.specs -fPIC $(LD_SYS_LIBS)
#semihosting
LD_SYS_LIBS = -lm -lc -lgcc -lnosys -lrdimon
#LD_FLAGS = -Xlinker --print-map -Xlinker --gc-sections $(MCU) --specs=nosys.specs --specs=
LD_FLAGS = -Xlinker --gc-sections $(MCU) --specs=nosys.specs --specs=
all: $(BUILD_ DIR)/$( TARGET) .elf
$(BUILD_ DIR)/$( TARGET) .elf: $(OBJ) 47m\033[ 1m" ------- ------- ------- ------- ------- ------- ------- ----' DIR)/$( TARGET) .elf DIR)/$( TARGET) .elf $(BUILD_ DIR)/$( TARGET) .bin DIR)/$( TARGET) .elf $(BUILD_ DIR)/$( TARGET) .hex DIR)/$( TARGET) .elf > $(BUILD_ DIR)/$( TARGET) .lss DIR)/$( TARGET) .elf > $(BUILD_ DIR)/$( TARGET) .sym
@echo LD: $^
#full RTTI and exception support
@$(CXX) -T $(MCU_NAME).ld -o $@ $^ $(LD_FLAGS)
#cutoff RTTI and exception support
# @$(CC) $(LD_FLAGS) -T $(MCU_NAME).ld -o $@ $^
@echo "\033[31;
@echo '------
@$(SIZE) $(BUILD_
@echo "\033[0m"
@$(OBJCOPY) -O binary $(BUILD_
@$(OBJCOPY) -O ihex $(BUILD_
@$(OBJDUMP) -h -S -z $(BUILD_
@$(NM) -n $(BUILD_
$(BUILD_DIR)/%.o : %.c $(HEADERS)
@$(MKDIR) -p `dirname $@`
@echo "\033[37;44m\033[1m CC: \033[37;42m$< \033[0m"
@$(CC) $(CC_FLAGS) $(DEFINES) -c ./$< -o $@
$(BUILD_DIR)/%.o : %.cc $(HEADERS) 44m\033[ 1mCXX: \033[37;42m$< \033[0m"
@$(MKDIR) -p `dirname $@`
@echo "\033[37;
@$(CXX) $(CXX_FLAGS) $(DEFINES) -c ./$< -o $@
$(BUILD_DIR)/%.o : %.cpp $(HEADERS) 44m\033[ 1mCXX: \033[37;42m$< \033[0m"
@$(MKDIR) -p `dirname $@`
@echo "\033[37;
@$(CXX) $(CXX_FLAGS) $(DEFINES) -c ./$< -o $@
$(BUILD_DIR)/%.o : %.s
@$(MKDIR) -p `dirname $@`
@echo "\033[37;44m\033[1m AS_C: \033[37;42m$< \033[0m"
@$(CC) $(INCLUDES) $(DEFINES) -c -x assembler-with-cpp ./$< -o $@
program: DIR)/$( TARGET) .bin 0x8000000
@st-flash --reset write $(BUILD_
clean:
@$(RM) -rf build/*
@$(RM) -rf *.i
@$(RM) -rf *.s
.PHONY : all clean program flash