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