Skip to content

Instantly share code, notes, and snippets.

@liberaid2
Last active July 30, 2018 11:51
Show Gist options
  • Save liberaid2/13ce23a5bdc56421ead66b177bbc6c2c to your computer and use it in GitHub Desktop.
Save liberaid2/13ce23a5bdc56421ead66b177bbc6c2c to your computer and use it in GitHub Desktop.
stm32f103c8 universal makefile (C/CPP)
TARGET = stm32template
DEBUG = 1
OPT = -Og
BUILD_DIR = build
C_SOURCES = $(shell find * -type f -name "*.c" | sed ':a;N;$!ba;s/\n/ /g')
CXX_SOURCES = $(shell find * -type f -name "*.cpp" | sed ':a;N;$!ba;s/\n/ /g')
ASM_SOURCES = startup_stm32f103xb.s
PREFIX = arm-none-eabi-
CXX = $(PREFIX)g++
CC = $(PREFIX)gcc
AS = $(PREFIX)gcc -x assembler-with-cpp
CP = $(PREFIX)objcopy
SZ = $(PREFIX)size
GDB = $(PREFIX)gdb
HEX = $(CP) -O ihex
BIN = $(CP) -O binary -S
CPU = -mcpu=cortex-m3
MCU = $(CPU) -mthumb $(FPU) $(FLOAT-ABI)
AS_DEFS =
C_DEFS = \
-DUSE_HAL_DRIVER \
-DSTM32F103xB
AS_INCLUDES =
C_INCLUDES = $(shell find * -type f -iname '*.h' -printf '-I%h\n' | uniq | sed ':a;N;$!ba;s/\n/ /g')
ASFLAGS = $(MCU) $(AS_DEFS) $(AS_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections
CFLAGS = $(MCU) $(C_DEFS) $(C_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections
CXXFLAGS = $(CFLAGS) -std=c++11
ifeq ($(DEBUG), 1)
CFLAGS += -g -gdwarf-2
endif
CFLAGS += -MMD -MP -MF"$(@:%.o=%.d)"
LDSCRIPT = STM32F103C8Tx_FLASH.ld
LIBS = -lc -lm -lrdimon
LIBDIR =
LDFLAGS = $(MCU) -specs=rdimon.specs -T$(LDSCRIPT) $(LIBDIR) $(LIBS) -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref -Wl,--gc-sections
all: $(BUILD_DIR)/$(TARGET).elf $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).bin
OBJECTS = $(ASM_SOURCES:%.s=$(BUILD_DIR)/%.o)
OBJECTS += $(C_SOURCES:%.c=$(BUILD_DIR)/%.o)
OBJECTS += $(CXX_SOURCES:%.cpp=$(BUILD_DIR)/%.o)
.SILENT:
$(BUILD_DIR)/%.o: %.c | $(BUILD_DIR)
mkdir -p $(dir $@)
@echo CC $^
$(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.c=.lst)) $< -o $@
$(BUILD_DIR)/%.o: %.cpp | $(BUILD_DIR)
mkdir -p $(dir $@)
@echo CXX $^
$(CXX) -c $(CXXFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.cpp=.lst)) $< -o $@
$(BUILD_DIR)/%.o: %.s | $(BUILD_DIR)
mkdir -p $(dir $@)
@echo AS $@
$(AS) -c $(CFLAGS) $< -o $@
$(BUILD_DIR)/$(TARGET).elf: $(OBJECTS)
@echo LINK $@
$(CC) $(OBJECTS) $(LDFLAGS) -o $@
$(SZ) $@
$(BUILD_DIR)/%.hex: $(BUILD_DIR)/%.elf
@echo HEX $@
$(HEX) $< $@
$(BUILD_DIR)/%.bin: $(BUILD_DIR)/%.elf
@echo BIN $@
$(BIN) $< $@
$(BUILD_DIR):
mkdir -p $@
clean:
-rm -fR $(BUILD_DIR)
@echo Cleaned
openocd:
openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg
gdb: $(BUILD_DIR)/$(TARGET).elf
$(GDB) $^ -q -ex "tar ext :3333" -ex "monitor arm semihosting enable" -ex "monitor reset halt" -ex "load"
-include $(wildcard $(BUILD_DIR)/*.d)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment