target-agent.mk (3259B)
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 31 # architecture start glue goes first 32 M_OBJS := $(addprefix $(OUT_TARGET_OBJ)/$(M_NAME)/,$(M_OBJS)) 33 34 DEPS += $(M_OBJS:%o=%d) 35 36 M_OUT_BIN := $(OUT)/$(M_NAME).bin 37 M_OUT_LST := $(OUT)/$(M_NAME).lst 38 M_OUT_ELF := $(OUT)/$(M_NAME).elf 39 40 ALL += $(M_OUT_BIN) $(M_OUT_LST) $(M_OUT_ELF) 41 42 M_INCLUDE := $(OUT_TARGET_OBJ)/$(M_NAME)/include 43 M_CONFIG_H := $(M_INCLUDE)/config.h 44 M_LINK_SCRIPT := $(OUT_TARGET_OBJ)/$(M_NAME)/script.ld 45 46 # generate link script 47 $(M_LINK_SCRIPT): _RADDR := $(M_RAMBASE) 48 $(M_LINK_SCRIPT): _RSIZE := $(M_RAMSIZE) 49 $(M_LINK_SCRIPT): $(CHIP_$(M_CHIP)_DEPS) 50 @echo linkscript $@ 51 @echo "MEMORY {" > $@ 52 @echo " RAM (xrw) : ORIGIN = $(_RADDR), LENGTH = $(_RSIZE)" >> $@ 53 @echo "}" >> $@ 54 @echo " INCLUDE \"build/generic-ram.ld\"" >> $@ 55 56 $(OUT_TARGET_OBJ)/$(M_NAME)/%.o: %.c 57 @$(MKDIR) 58 @echo compile $< 59 $(QUIET)$(TARGET_CC) $(TARGET_CFLAGS) $(_CFLAGS) -c $< -o $@ -MD -MT $@ -MF $(@:%o=%d) 60 61 $(OUT_TARGET_OBJ)/$(M_NAME)/%.o: %.S 62 @$(MKDIR) 63 @echo assemble $< 64 $(QUIET)$(TARGET_CC) $(TARGET_CFLAGS) $(_CFLAGS) -c $< -o $@ -MD -MT $@ -MF $(@:%o=%d) 65 66 # apply our flags to our objects 67 $(M_OBJS): _CFLAGS := --include $(M_CONFIG_H) $(M_CFLAGS) 68 $(M_ARCH_OBJS): _CFLAGS := --include $(M_CONFIG_H) $(M_CFLAGS) 69 70 # objects depend on generated config header 71 $(M_OBJS): $(M_CONFIG_H) 72 $(M_ARCH_OBJS): $(M_CONFIG_H) 73 74 X_CONFIG := FLASHSIZE=$(M_ROMSIZE) 75 X_CONFIG += FLASHADDR=$(M_ROMBASE) 76 X_CONFIG += LOADADDR=$(M_RAMBASE) 77 78 # generate config header from module, chip, and arch config lists 79 # generated config header depends on toplevel, module, and chip/arch makefiles 80 $(M_CONFIG_H): _CFG := $(M_CONFIG) $(X_CONFIG) 81 $(M_CONFIG_H): Makefile $(M_MAKEFILE) 82 @$(MKDIR) 83 @echo generate $@ 84 @$(call make-config-header,$@,$(_CFG)) 85 86 $(M_OUT_BIN): $(M_OUT_ELF) 87 @echo create $@ 88 $(QUIET)$(TARGET_OBJCOPY) --gap-fill=0xee -O binary $< $@ 89 90 $(M_OUT_LST): $(M_OUT_ELF) 91 @echo create $@ 92 $(QUIET)$(TARGET_OBJDUMP) --source -d $< > $@ 93 94 $(M_OUT_ELF): _OBJS := $(M_OBJS) 95 $(M_OUT_ELF): _LINK := $(M_LINK_SCRIPT) 96 $(M_OUT_ELF): $(M_OBJS) $(M_LINK_SCRIPT) 97 @echo link $@ 98 $(QUIET)$(TARGET_LD) $(TARGET_LFLAGS) -Bstatic -T $(_LINK) $(_OBJS) $(_LIBS) -o $@ 99 100 AGENTS += $(M_OUT_BIN) 101 102 $(info module $(M_NAME)) 103 104 M_START := 105 M_OBJS := 106 M_NAME := 107 M_BASE := 108 M_LIBS := 109 M_CFLAGS := 110 M_CONFIG := 111 M_SIGN := 112 M_RAMBASE := 113 M_RAMSIZE := 114 M_ROMBASE := 115 M_ROMSIZE :=