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