m3dev

cortex m3 debug tools -- superceded by mdebug
git clone http://frotz.net/git/m3dev.git
Log | Files | Refs | README | LICENSE

target-executable.mk (4162B)


      1 ## Copyright 2011 Brian Swetland <swetland@frotz.net>
      2 ## 
      3 ## Licensed under the Apache License, Version 2.0 (the "License");
      4 ## you may not use this file except in compliance with the License.
      5 ## You may obtain a copy of the License at
      6 ##
      7 ##     http://www.apache.org/licenses/LICENSE-2.0
      8 ##
      9 ## Unless required by applicable law or agreed to in writing, software
     10 ## distributed under the License is distributed on an "AS IS" BASIS,
     11 ## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     12 ## See the License for the specific language governing permissions and
     13 ## limitations under the License.
     14 
     15 M_NAME := $(strip $(M_NAME))
     16 M_CHIP := $(strip $(M_CHIP))
     17 
     18 ifeq ($(strip $(M_START)),)
     19 M_START := $(ARCH_$(M_ARCH)_START) 
     20 endif
     21 
     22 M_ARCH := $(CHIP_$(M_CHIP)_ARCH)
     23 M_ARCH_CFLAGS := $(ARCH_$(M_ARCH)_CFLAGS)
     24 M_ARCH_OBJS := $(ARCH_$(M_ARCH)_OBJS)
     25 
     26 # sanity check
     27 ifeq "$(M_NAME)" ""
     28 $(error $(M_MAKEFILE): No module name specified)
     29 endif
     30 ifeq "$(M_ARCH)" ""
     31 $(error $(M_MAKEFILE): Module $(M_NAME): Unknown Chip: $(M_CHIP))
     32 endif
     33 ifeq "$(M_ARCH_CFLAGS)" ""
     34 $(error $(M_MAKEFILE): Module $(M_NAME): Unknown Architecture: $(M_ARCH))
     35 endif
     36 
     37 # architecture start glue goes first
     38 M_OBJS := $(M_START) $(M_OBJS)
     39 M_OBJS := $(addprefix $(OUT_TARGET_OBJ)/$(M_NAME)/,$(M_OBJS))
     40 M_ARCH_OBJS := $(addprefix $(OUT_TARGET_OBJ)/$(M_NAME)/,$(M_ARCH_OBJS))
     41 
     42 DEPS += $(M_OBJS:%o=%d)
     43 
     44 M_OUT_BIN := $(OUT)/$(M_NAME).bin
     45 M_OUT_LST := $(OUT)/$(M_NAME).lst
     46 M_OUT_ELF := $(OUT)/$(M_NAME).elf
     47 
     48 ALL += $(M_OUT_BIN) $(M_OUT_LST) $(M_OUT_ELF)
     49 
     50 M_INCLUDE := $(OUT_TARGET_OBJ)/$(M_NAME)/include
     51 M_CONFIG_H := $(M_INCLUDE)/config.h
     52 M_ARCH_LIB := $(OUT_TARGET_OBJ)/$(M_NAME)/arch.a
     53 M_LINK_SCRIPT := $(OUT_TARGET_OBJ)/$(M_NAME)/script.ld
     54 
     55 # generate link script 
     56 $(M_LINK_SCRIPT): _RADDR := $(CHIP_$(M_CHIP)_RAMBASE)
     57 $(M_LINK_SCRIPT): _RSIZE := $(CHIP_$(M_CHIP)_RAMSIZE)
     58 $(M_LINK_SCRIPT): _FADDR := $(CHIP_$(M_CHIP)_ROMBASE)
     59 $(M_LINK_SCRIPT): _FSIZE := $(CHIP_$(M_CHIP)_ROMSIZE)
     60 $(M_LINK_SCRIPT): _SCRIPT := $(CHIP_$(M_CHIP)_LINKSCRIPT)
     61 $(M_LINK_SCRIPT): $(CHIP_$(M_CHIP)_DEPS)
     62 	@echo linkscript $@
     63 	@echo "MEMORY {" > $@
     64 	@echo " RAM (xrw) : ORIGIN = $(_RADDR), LENGTH = $(_RSIZE)" >> $@
     65 	@echo " FLASH (xr) : ORIGIN = $(_FADDR), LENGTH = $(_FSIZE)" >> $@
     66 	@echo "}" >> $@
     67 	@echo " INCLUDE \"$(_SCRIPT)\"" >> $@
     68 
     69 $(M_ARCH_LIB): $(M_ARCH_OBJS)
     70 	@$(MKDIR)
     71 	@echo archive $@
     72 	$(QUIET)rm -f $@
     73 	$(QUIET)$(TARGET_AR) cr $@ $^
     74 
     75 $(OUT_TARGET_OBJ)/$(M_NAME)/%.o: %.c
     76 	@$(MKDIR)
     77 	@echo compile $<
     78 	$(QUIET)$(TARGET_CC) $(TARGET_CFLAGS) $(_CFLAGS) -c $< -o $@ -MD -MT $@ -MF $(@:%o=%d)
     79 
     80 $(OUT_TARGET_OBJ)/$(M_NAME)/%.o: %.S
     81 	@$(MKDIR)
     82 	@echo assemble $<
     83 	$(QUIET)$(TARGET_CC) $(TARGET_CFLAGS) $(_CFLAGS) -c $< -o $@ -MD -MT $@ -MF $(@:%o=%d)
     84 
     85 # apply our flags to our objects
     86 $(M_OBJS): _CFLAGS := --include $(M_CONFIG_H) $(M_ARCH_CFLAGS) $(M_CFLAGS)
     87 $(M_ARCH_OBJS): _CFLAGS := --include $(M_CONFIG_H) $(M_ARCH_CFLAGS) $(M_CFLAGS)
     88 
     89 # objects depend on generated config header
     90 $(M_OBJS): $(M_CONFIG_H)
     91 $(M_ARCH_OBJS): $(M_CONFIG_H)
     92 
     93 X_CONFIG := FLASHSIZE=$(CHIP_$(M_CHIP)_ROMSIZE)
     94 X_CONFIG += FLASHADDR=$(CHIP_$(M_CHIP)_ROMBASE)
     95 
     96 # generate config header from module, chip, and arch config lists
     97 # generated config header depends on toplevel, module, and chip/arch makefiles
     98 $(M_CONFIG_H): _CFG := $(M_CONFIG) $(CHIP_$(M_CHIP)_CONFIG) $(ARCH_$(M_ARCH)_CONFIG) $(X_CONFIG)
     99 $(M_CONFIG_H): Makefile $(M_MAKEFILE) $(CHIP_$(M_CHIP)_DEPS)
    100 	@$(MKDIR)
    101 	@echo generate $@
    102 	@$(call make-config-header,$@,$(_CFG))
    103 
    104 $(M_OUT_BIN): _SIGN := $(if $(M_SIGN),$(M_SIGN),true)
    105 $(M_OUT_BIN): $(M_OUT_ELF) $(M_SIGN)
    106 	@echo create $@
    107 	$(QUIET)$(TARGET_OBJCOPY) --gap-fill=0xee -O binary $< $@.tmp
    108 	$(QUIET)$(_SIGN) $@.tmp && mv $@.tmp $@
    109 
    110 $(M_OUT_LST): $(M_OUT_ELF)
    111 	@echo create $@
    112 	$(QUIET)$(TARGET_OBJDUMP) --source -d $< > $@
    113 
    114 $(M_OUT_ELF): _OBJS := $(M_OBJS)
    115 $(M_OUT_ELF): _LIBS := $(M_LIBS) $(M_ARCH_LIB)
    116 $(M_OUT_ELF): _LINK := $(M_LINK_SCRIPT)
    117 $(M_OUT_ELF): $(M_OBJS) $(M_ARCH_LIB) $(M_LINK_SCRIPT)
    118 	@echo link $@
    119 	$(QUIET)$(TARGET_LD) $(TARGET_LFLAGS) -Bstatic -T $(_LINK) $(_OBJS) $(_LIBS) -o $@
    120 
    121 $(info module $(M_NAME))
    122 
    123 M_START :=
    124 M_OBJS :=
    125 M_NAME :=
    126 M_BASE :=
    127 M_LIBS :=
    128 M_CFLAGS :=
    129 M_CONFIG :=
    130 M_SIGN :=