lpc-field

Template project for programming NXP's LPC1768 MCUs
git clone git://git.mdnr.space/lpc-field
Log | Files | Refs | README | LICENSE

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 .