stm32f4-uart-bootloader

Simple UART bootloader for STM32F4 MCU's
git clone git://git.mdnr.space/stm32f4-uart-bootloader
Log | Files | Refs | Submodules | README | LICENSE

Makefile (4486B)


      1 # Be silent per default, but 'make V=1' will show all compiler calls.
      2 ifneq ($(V),1)
      3 Q		:= @
      4 NULL		:= 2>/dev/null
      5 endif
      6 
      7 .DEFAULT_GOAL := all
      8 
      9 # toolchain
     10 TOOLCHAIN    = arm-none-eabi-
     11 CC           = $(TOOLCHAIN)gcc
     12 DB           = $(TOOLCHAIN)gdb
     13 CP           = $(TOOLCHAIN)objcopy
     14 AS           = $(TOOLCHAIN)gcc -x assembler-with-cpp
     15 HEX          = $(CP) -O ihex
     16 BIN          = $(CP) -O binary -S --gap-fill 0xFF
     17 
     18 # define mcu, specify the target processor
     19 MCU          = cortex-m4
     20 
     21 ROOT_DIR = .
     22 SRC_DIR = $(ROOT_DIR)/src
     23 include $(SRC_DIR)/globals/make-version.mk
     24 include $(SRC_DIR)/app/make-app.mk
     25 include $(SRC_DIR)/bl/make-bl.mk
     26 
     27 # all the files will be generated with this name (.elf, .bin, .hex, etc)
     28 PROJECT_NAME = project
     29 APP_NAME = $(PROJECT_NAME)-$(VERSION)
     30 BL_NAME = $(PROJECT_NAME)-bl
     31 
     32 APP_INC += -I$(SRC_DIR) $(APPLICATION_INC)
     33 
     34 # CPU defs
     35 DEFS += -DSTM32F4
     36 FP_FLAGS ?= -mfloat-abi=hard -mfpu=fpv4-sp-d16
     37 ARCH_FLAGS = -mthumb -mcpu=$(MCU) $(FP_FLAGS)
     38 
     39 # Compile flags
     40 OPT := -Os
     41 DEBUG := -ggdb3
     42 CSTD ?= -std=c99
     43 
     44 BUILD_DIR = $(ROOT_DIR)/build
     45 
     46 APP_OBJ = $(addprefix $(BUILD_DIR)/,$(notdir $(APP_SRC:.c=.o)))
     47 vpath %.c $(sort $(dir $(APP_SRC)))
     48 
     49 BL_OBJ = $(addprefix $(BUILD_DIR)/,$(notdir $(BL_SRC:.c=.o)))
     50 vpath %.c $(sort $(dir $(BL_SRC)))
     51 
     52 
     53 
     54 ###############################################################################
     55 # C flags
     56 TGT_CFLAGS	+= $(OPT) $(CSTD) $(DEBUG)
     57 TGT_CFLAGS	+= $(ARCH_FLAGS)
     58 TGT_CFLAGS	+= -Wall -Wextra -Wpedantic -Wshadow -Wdouble-promotion -Wformat=2 \
     59 			   -Wformat-truncation -Wundef -fno-common -MD $(DEFS) -Wimplicit-function-declaration \
     60 
     61 TGT_CFLAGS	+= -Wredundant-decls -Wmissing-prototypes -Wstrict-prototypes
     62 TGT_CFLAGS	+= -ffunction-sections -fdata-sections
     63 
     64 ###############################################################################
     65 # Linker flags
     66 TGT_LDFLAGS		+= --static -nostartfiles
     67 TGT_LDFLAGS		+= $(ARCH_FLAGS) $(DEBUG)
     68 TGT_LDFLAGS		+= -Wl,--cref
     69 TGT_LDFLAGS		+= -Wl,--gc-sections
     70 TGT_LDFLAGS		+= -Wl,--print-memory-usage
     71 TGT_LDFLAGS		+= --specs=rdimon.specs -u _printf_float
     72 ifeq ($(V),99)
     73 TGT_LDFLAGS		+= -Wl,--print-gc-sections
     74 endif
     75 
     76 ###############################################################################
     77 # Used libraries
     78 LDLIBS += -Wl,--start-group -lc -lgcc -lnosys -Wl,--end-group $(SHARED_LIB_PATH) $(SHARED_LIB) 
     79 
     80 APP_LDFLAGS += -Wl,-Map=$(BUILD_DIR)/$(APP_NAME).map $(TGT_LDFLAGS) -T$(APP_LINKER_SCRIPT) $(LDLIBS) -lm -DBOOTLOADER=0
     81 
     82 BL_LDFLAGS += -Wl,-Map=$(BUILD_DIR)/$(BL_NAME).map $(TGT_LDFLAGS) -T$(BL_LINKER_SCRIPT) $(LDLIBS) -DBOOTLOADER=1 
     83 
     84 
     85 all: update_bin #tags
     86 
     87 update_bin: version bl app 
     88 	$(eval APP_ELF = $(notdir $(shell ls -t $(BUILD_DIR)/$(APP_NAME).elf)))
     89 	$(eval BL_ELF = $(notdir $(shell ls -t $(BUILD_DIR)/$(BL_NAME).elf)))
     90 	@(cp $(BUILD_DIR)/$(APP_ELF) $(BUILD_DIR)/fw.elf)
     91 	@(cp $(BUILD_DIR)/$(APP_NAME).bin $(BUILD_DIR)/fw.bin)
     92 
     93 app: $(BUILD_DIR)/$(APP_NAME).elf $(BUILD_DIR)/$(APP_NAME).bin $(BUILD_DIR)/$(APP_NAME).hex
     94 	$(Q)#$(TOOLCHAIN)size $(BUILD_DIR)/$(APP_NAME).elf
     95 
     96 bl: $(BUILD_DIR)/$(BL_NAME).elf $(BUILD_DIR)/$(BL_NAME).bin $(BUILD_DIR)/$(BL_NAME).hex
     97 	$(Q)#$(TOOLCHAIN)size $(BUILD_DIR)/$(BL_NAME).elf
     98 
     99 OPENOCD_INTERFACE = /usr/share/openocd/scripts/interface/stlink.cfg
    100 OPENOCD_TARGET = /usr/share/openocd/scripts/target/stm32f4x.cfg
    101 
    102 flash-app: update_bin
    103 	$(Q)openocd -d0 -f $(OPENOCD_INTERFACE) -f $(OPENOCD_TARGET) -c "program $(BUILD_DIR)/"$(APP_ELF)" verify reset exit"
    104 flash-bl: update_bin
    105 	$(Q)openocd -d0 -f $(OPENOCD_INTERFACE) -f $(OPENOCD_TARGET) -c "program $(BUILD_DIR)/$(BL_ELF) verify reset exit"
    106 flash: update_bin
    107 	$(Q)openocd -d0 -f $(OPENOCD_INTERFACE) -f $(OPENOCD_TARGET) -c "program $(BUILD_DIR)/$(BL_ELF) verify" -c "program $(BUILD_DIR)/"$(APP_ELF)" verify reset exit"
    108 
    109 fw-debug: update_bin
    110 	$(DB) $(BUILD_DIR)/$(APP_ELF)
    111 
    112 bl-debug: update_bin
    113 	$(DB) $(BUILD_DIR)/$(BL_ELF)
    114 
    115 # Force to re-build version file 
    116 $(BUILD_DIR)/firmware_info.o: .FORCE
    117 
    118 .PHONY: .FORCE
    119 
    120 .FORCE:
    121 
    122 $(BUILD_DIR)/%.o: %.c | $(BUILD_DIR)
    123 	@printf "  CC      $(<F)\n"
    124 	$(Q)$(CC) -c $(TGT_CFLAGS) $(APP_INC) $< -o $@
    125 
    126 $(BUILD_DIR)/$(APP_NAME).elf: $(APP_OBJ)
    127 	$(Q)$(CC) $(APP_OBJ) $(APP_LDFLAGS) -o $@
    128 
    129 $(BUILD_DIR)/$(BL_NAME).elf: $(BL_OBJ)
    130 	$(Q)$(CC) $(BL_OBJ) $(BL_LDFLAGS) -o $@
    131 	$(Q)printf "\n"
    132 
    133 $(BUILD_DIR)/%.hex: $(BUILD_DIR)/%.elf
    134 	$(Q)$(HEX) $< $@
    135 
    136 $(BUILD_DIR)/%.bin: $(BUILD_DIR)/%.elf
    137 	$(Q)$(BIN)  $< $@
    138 
    139 $(BUILD_DIR):
    140 	$(Q)mkdir -p $(BUILD_DIR)
    141 
    142 clean:
    143 	$(Q)rm -rf $(BUILD_DIR)
    144 
    145 tags: $(APP_OBJ) $(BL_OBJ)
    146 	$(Q)@printf "Generating tags ...\n"
    147 	$(Q)ctags -R .