218 lines
4.2 KiB
Markdown
218 lines
4.2 KiB
Markdown
---
|
|
title: "Makefile для STM32F103"
|
|
categories: ["mcu", "archive"]
|
|
date: 2017-02-26T00:00:00+03:00
|
|
draft: false
|
|
featured_image: miniature.jpg
|
|
---
|
|
|
|
|
|
Почти что в первый раз писал. Прошу простить за убогость и SPL. Всё это убирается. Под linux не проверялось.
|
|
|
|
<!--more-->
|
|
|
|
Рабочий проект: [stm32f103make.zip](stm32f103make.zip)
|
|
|
|
|
|
```sh
|
|
CXX = arm-none-eabi-g++
|
|
CC = arm-none-eabi-gcc
|
|
LD = arm-none-eabi-gcc
|
|
OBJCOPY = arm-none-eabi-objcopy
|
|
SIZE = arm-none-eabi-size
|
|
STFLASH = st-flash
|
|
OPENOCD = openocd
|
|
STUTIL = st-flash
|
|
|
|
|
|
OUTPUT_DIR = bin
|
|
OBJ_DIR = obj
|
|
|
|
TARGET_NAME = led
|
|
TARGET_BINARY = $(TARGET_NAME).elf
|
|
TARGET_HEX = $(TARGET_NAME).hex
|
|
|
|
vpath %.c ./src
|
|
|
|
SOURCES = \
|
|
main.c
|
|
|
|
LDFLAGS_DEBUG =
|
|
CDFLAGS_DEBUG = -g3 -O0
|
|
|
|
LDFLAGS_RELEASE =
|
|
CDFLAGS_RELEASE = -O2
|
|
|
|
CFLAGS = -Wall \
|
|
-mcpu=cortex-m3 \
|
|
-mthumb \
|
|
-D__HEAP_SIZE=0x0000 \
|
|
-D__STACK_SIZE=0x0100 \
|
|
-mfloat-abi=soft \
|
|
-fno-strict-aliasing \
|
|
-fdata-sections \
|
|
-ffunction-sections \
|
|
-DSTM32F103C8 \
|
|
-DSTM32F10X_MD \
|
|
-DUSE_STDPERIPH_DRIVER
|
|
|
|
TARGET = $(OUTPUT_DIR)/$(TARGET_BINARY)
|
|
|
|
LIBS = -lm
|
|
|
|
LDFLAGS = \
|
|
--specs=nosys.specs \
|
|
--specs=nano.specs \
|
|
-mcpu=cortex-m3 \
|
|
-mthumb \
|
|
-Wl,--defsym=__HEAP_SIZE=0x0000 \
|
|
-Wl,--defsym=__STACK_SIZE=0x0100 \
|
|
-mfloat-abi=soft \
|
|
-fno-strict-aliasing \
|
|
-fdata-sections \
|
|
-ffunction-sections \
|
|
-Wl,--gc-sections \
|
|
-Wl,-script="./hardware/stm32f103c8_flash.ld" \
|
|
-Wl,-Map=$(TARGET).map
|
|
#-u _printf_float
|
|
|
|
INCLUDES = \
|
|
-I. \
|
|
-I./include \
|
|
-I./hardware/include \
|
|
-I./hardware/include/cmsis \
|
|
-I./hardware/SPL/include
|
|
|
|
STARUPFILE = hardware/src/startup_stm32f10x_md.S
|
|
|
|
SOURCES_SPL = \
|
|
stm32f10x_rcc.c \
|
|
stm32f10x_gpio.c \
|
|
stm32f10x_dma.c
|
|
|
|
#stm32f10x_crc.c \
|
|
#stm32f10x_flash.c \
|
|
#stm32f10x_pwr.c \
|
|
#stm32f10x_tim.c \
|
|
#stm32f10x_adc.c \
|
|
#stm32f10x_dac.c \
|
|
#stm32f10x_fsmc.c \
|
|
#stm32f10x_usart.c \
|
|
#stm32f10x_bkp.c \
|
|
#stm32f10x_dbgmcu.c \
|
|
#stm32f10x_rtc.c \
|
|
#stm32f10x_wwdg.c \
|
|
#stm32f10x_can.c \
|
|
#stm32f10x_i2c.c \
|
|
#stm32f10x_sdio.c \
|
|
#stm32f10x_cec.c \
|
|
#stm32f10x_exti.c \
|
|
#stm32f10x_iwdg.c \
|
|
#stm32f10x_spi.c \
|
|
#misc.c
|
|
|
|
################################################################
|
|
|
|
|
|
SOURCES += $(addprefix hardware/SPL/src/, $(SOURCES_SPL))
|
|
SOURCES += hardware/src/system_stm32f10x.c
|
|
|
|
HEX = $(OUTPUT_DIR)/$(TARGET_HEX)
|
|
|
|
STARTUPOBJ = $(notdir $(STARUPFILE))
|
|
STARTUPOBJ := $(patsubst %.S, $(OBJ_DIR)/%.S.o, $(STARTUPOBJ))
|
|
|
|
OBJECTS = $(patsubst %, $(OBJ_DIR)/%.o, $(SOURCES))
|
|
OBJECTS += $(STARTUPOBJ)
|
|
|
|
DEPS = $(OBJECTS:.o=.d)
|
|
|
|
|
|
|
|
all: release
|
|
|
|
release: LDFLAGS+=$(LDFLAGS_RELEASE)
|
|
release: CFLAGS+=$(CDFLAGS_RELEASE)
|
|
release: _firmware
|
|
|
|
debug: LDFLAGS+=$(LDFLAGS_DEBUG)
|
|
debug: CFLAGS+=$(CDFLAGS_DEBUG)
|
|
debug: _firmware
|
|
|
|
|
|
_firmware: $(TARGET) $(HEX)
|
|
|
|
|
|
$(TARGET): $(OBJECTS) | $(OUTPUT_DIR) $(OBJ_DIR)
|
|
$(LD) $(LDFLAGS) -o $@ $(OBJECTS) $(LIBS)
|
|
$(SIZE) --format=berkeley $(TARGET)
|
|
|
|
obj/%.cpp.o: %.cpp
|
|
ifeq ($(OS), Windows_NT)
|
|
$(eval dirname=$(subst /,\\,$(dir $@)))
|
|
@ if NOT EXIST $(dirname) mkdir $(dirname)
|
|
else
|
|
@mkdir -p $(dir $@) $(TO_NULL)
|
|
endif
|
|
$(CXX) -c -MMD -MP $(CFLAGS) $(INCLUDES) $< -o $@
|
|
|
|
obj/%.c.o: %.c
|
|
ifeq ($(OS), Windows_NT)
|
|
$(eval dirname=$(subst /,\\,$(dir $@)))
|
|
@ if NOT EXIST $(dirname) mkdir $(dirname)
|
|
else
|
|
@mkdir -p $(dir $@) $(TO_NULL)
|
|
endif
|
|
$(CC) -c -MMD -MP $(CFLAGS) $(INCLUDES) $< -o $@
|
|
|
|
$(STARTUPOBJ):
|
|
$(CC) -c -MMD -MP $(CFLAGS) $(INCLUDES) $(STARUPFILE) -o $(STARTUPOBJ)
|
|
|
|
$(HEX): $(TARGET)
|
|
$(OBJCOPY) -O ihex $(TARGET) $(HEX)
|
|
|
|
$(OUTPUT_DIR):
|
|
@mkdir $(OUTPUT_DIR)
|
|
|
|
$(OBJ_DIR):
|
|
@mkdir $(OBJ_DIR)
|
|
|
|
_size: $(TARGET)
|
|
$(SIZE) --format=berkeley $(TARGET)
|
|
|
|
|
|
flash: flash-ocd
|
|
|
|
flash-stutil:
|
|
$(STFLASH) --format ihex write $(HEX)
|
|
|
|
flash-ocd:
|
|
$(OPENOCD) -f interface/stlink-v2.cfg -f target/stm32f1x.cfg -c "program $(TARGET) verify reset exit"
|
|
|
|
srclist:
|
|
@echo $(SOURCES)
|
|
|
|
objlist:
|
|
@echo $(OBJECTS)
|
|
|
|
clean:
|
|
|
|
ifeq ($(OS), Windows_NT)
|
|
-del $(subst /,\\,$(OBJECTS))
|
|
-del $(subst /,\\,$(DEPS))
|
|
-rmdir /S /Q $(OBJ_DIR)
|
|
-del /Q /F $(OUTPUT_DIR)\\$(TARGET_BINARY)
|
|
-del /Q /F $(OUTPUT_DIR)\\$(TARGET_BINARY).map
|
|
-del /Q /F $(OUTPUT_DIR)\\$(TARGET_HEX)
|
|
else
|
|
-rm -f $(OBJECTS)
|
|
-rm -f $(DEPS)
|
|
-rm -rf $(OBJ_DIR)
|
|
-rm -f $(OUTPUT_DIR)/$(TARGET_BINARY)
|
|
-rm -f $(OUTPUT_DIR)/$(TARGET_BINARY).map
|
|
-rm -f $(OUTPUT_DIR)/$(TARGET_HEX)
|
|
endif
|
|
|
|
-include $(DEPS)
|
|
```
|