4 RELDIR := $(subst $(TOPDIR)/,,$(CURDIR))
\r
6 # Create the target name...
\r
7 target := $(subst /,_,$(SUBDIR))
\r
9 #goal=$(subst /cygdrive/c/,c:/,$(abspath $@))
\r
13 #===== MODULE CONFIGURATION =====
\r
14 include $(ROOTDIR)/boards/$(BOARDDIR)/build_config.mk
\r
15 -include ../build_config.mk
\r
17 define MOD_AVAIL_template
\r
21 define MOD_USE_template
\r
31 $(foreach mod,$(MOD_AVAIL),$(eval $(call MOD_AVAIL_template,${mod})))
\r
32 $(foreach mod,$(MOD_USE),$(eval $(call MOD_USE_template,${mod})))
\r
33 $(foreach mod,$(CFG),$(eval $(call CFG_template,${mod})))
\r
34 #def-y += $(ARCH) $(ARCH_FAM) $(ARCH_MCU)
\r
36 # Select console / debug
\r
37 $(foreach mod,$(SELECT_OS_CONSOLE),$(eval $(call MOD_USE_template,${mod})))
\r
38 $(foreach mod,$(SELECT_CONSOLE),$(eval $(call MOD_USE_template,${mod})))
\r
40 def-y += SELECT_OS_CONSOLE=$(if $(SELECT_OS_CONSOLE),$(SELECT_OS_CONSOLE),TTY_NONE)
\r
41 def-y += SELECT_CONSOLE=$(if $(SELECT_CONSOLE),$(SELECT_CONSOLE),TTY_NONE)
\r
42 def-$(USE_DEBUG_PRINTF) += USE_DEBUG_PRINTF
\r
44 not_avail = $(filter-out $(MOD_AVAIL),$(MOD_USE))
\r
45 ifneq ($(not_avail),)
\r
46 $(error Trying to build a module that is not available: $(not_avail))
\r
49 #===== COMPILER CONFIG =====
\r
51 # set debug optimization level as default
\r
52 ifeq ($(SELECT_OPT),)
\r
53 SELECT_OPT=OPT_DEBUG
\r
56 $(eval CFG_$(SELECT_OPT)=y)
\r
58 ARCH_PATH-y = arch/$(ARCH_FAM)/$(ARCH)
\r
60 # Include compiler generic and arch specific
\r
63 include $(ROOTDIR)/$(ARCH_PATH-y)/scripts/gcc.mk
\r
65 include $(ROOTDIR)/scripts/cc_$(COMPILER).mk
\r
67 include $(ROOTDIR)/scripts/cc_pclint.mk
\r
70 include $(ROOTDIR)/scripts/cc_splint.mk
\r
79 ##### For backwards compatability with older project makefiles
\r
80 # Remove dependency on libkernel
\r
81 deprecated-libs += $(ROOTDIR)/libs/libkernel_$(ARCH_MCU).a
\r
82 deprecated-libs-included = $(filter $(deprecated-libs),$(libitem-y))
\r
83 ifneq ($(deprecated-libs-included),)
\r
84 $(info >>>> Ignoring deprecated lib dependencies: $(deprecated-libs-included)')
\r
85 libitem-y := $(filter-out $(deprecated-libs),$(libitem-y))
\r
88 # Automatic preprocessing of std linkscripts
\r
89 old-ldcmdfile = $(ROOTDIR)/$(ARCH_PATH-y)/scripts/linkscript_gcc.ldf
\r
90 new-ldcmdfile = linkscript_gcc.ldp
\r
91 old-ldcmdfile-used = $(filter $(old-ldcmdfile),$(ldcmdfile-y))
\r
92 ifneq ($(old-ldcmdfile-used),)
\r
93 $(info >>>> Changing linkscript to preprocessed version: $(old-ldcmdfile) -> $(new-ldcmdfile)')
\r
94 ldcmdfile-y := $(subst $(old-ldcmdfile),$(new-ldcmdfile),$(ldcmdfile-y))
\r
95 vpath %.ldf $(ROOTDIR)/$(ARCH_PATH-y)/scripts
\r
100 inc-y += $(ROOTDIR)/include
\r
101 inc-y += $(ROOTDIR)/include/$(ARCH_FAM)
\r
106 @-rm -f *.o *.d *.h *.elf *.a *.ldp
\r
110 @echo "board modules:" $(MOD_AVAIL)
\r
111 @echo "example modules:" $(MOD_USE)
\r
112 @echo $(MOD) ${def-y}
\r
116 $(ROOTDIR)/binaries:
\r
119 # build- targets are "end" target that the included makefile want's to build
\r
121 all: $(build-exe-y) $(build-hex-y) $(build-lib-y) $(build-bin-y) $(ROOTDIR)/binaries
\r
122 @cp -v $(build-lib-y) $(build-exe-y) $(build-hex-y) $(build-bin-y) $(ROOTDIR)/binaries
\r
125 # Determine what kind of filetype to build from
\r
126 VPATH += $(ROOTDIR)/$(SUBDIR)/src
\r
127 VPATH += $(ROOTDIR)/$(SUBDIR)
\r
129 inc-y += ../include
\r
133 # Simple depencendy stuff
\r
134 -include $(subst .o,.d,$(obj-y))
\r
135 # Some dependency for xxx_offset.c/h also
\r
136 -include $(subst .h,.d,$(dep-y))
\r
140 $(Q)$(PCLINT) $(lint_extra) $(addprefix $(lintinc_ext),$(inc-y)) $(addprefix $(lintdef_ext),$(def-y)) $(abspath $<)
\r
146 $(Q)$(SPLINT) $(splint_extra) $(addprefix $(lintinc_ext),$(inc-y)) $(addprefix $(lintdef_ext),$(def-y)) $(abspath $<)
\r
153 @echo " >> CC $(notdir $<)"
\r
154 $(Q)$(CC) -c $(CFLAGS) -o $(goal) $(addprefix -I ,$(inc-y)) $(addprefix -D,$(def-y)) $(abspath $<)
\r
161 @echo " >> AS $(notdir $<) $(ASFLAGS)"
\r
162 $(Q)$(AS) $(ASFLAGS) -o $(goal) $<
\r
168 @echo " >> CPP $(notdir $<)"
\r
169 $(Q)$(CPP) -x assembler-with-cpp -E -o $@ $(addprefix -I ,$(inc-y)) $(addprefix -D,$(def-y)) $<
\r
172 # Board linker files are in the board directory
\r
173 inc-y += $(ROOTDIR)/boards/$(BOARDDIR)
\r
175 # Preprocess linker files..
\r
178 $(Q)$(CPP) -E -P -x assembler-with-cpp -o $@ $(addprefix -I ,$(inc-y)) $(addprefix -D,$(def-y)) $<
\r
182 .PHONY $(ROOTDIR)/libs:
\r
186 dep-y += $(ROOTDIR)/libs
\r
189 $(build-lib-y): $(dep-y) $(obj-y)
\r
191 $(Q)$(AR) -r -o $@ $(obj-y) 2> /dev/null
\r
193 $(build-hex-y): $(build-exe-y)
\r
194 @echo " >> OBJCOPY $@"
\r
195 $(Q)$(CROSS_COMPILE)objcopy -O ihex $< $@
\r
197 $(build-bin-y): $(build-exe-y)
\r
198 @echo " >> OBJCOPY $@"
\r
199 $(Q)$(CROSS_COMPILE)objcopy -O binary $< $@
\r
202 # Could use readelf -S instead of parsing the *.map file.
\r
203 $(build-exe-y): $(dep-y) $(obj-y) $(sim-y) $(libitem-y) $(ldcmdfile-y)
\r
205 ifeq ($(CROSS_COMPILE),)
\r
206 $(Q)$(CC) $(LDFLAGS) -o $@ $(libpath-y) $(obj-y) $(lib-y) $(libitem-y)
\r
208 $(Q)$(LD) $(LDFLAGS) -T $(ldcmdfile-y) -o $@ $(libpath-y) --start-group $(obj-y) $(lib-y) $(libitem-y) --end-group $(LDMAPFILE)
\r
210 @$(CROSS_COMPILE)objdump -h $@ | gawk -f $(ROOTDIR)/scripts/hc1x_memory.awk
\r
212 @echo "Image size: (decimal)"
\r
213 @gawk --non-decimal-data '/^\.text/ { print " text:" $$3+0 " bytes"; rom+=$$3 };\
\r
214 /^\.data/ { print " data:" $$3+0 " bytes"; rom+=$$3; ram+=$$3}; \
\r
215 /^\.bss/ { print " bss :" $$3+0 " bytes"; ram+=$$3}; \
\r
216 END { print " ROM: ~" rom " bytes"; print " RAM: ~" ram " bytes"}' $(subst .elf,.map,$@)
\r
217 ifeq ($(BUILD_LOAD_MODULE),y)
\r
218 @$(CROSS_COMPILE)objcopy -O srec $@ $@.raw.s19
\r
219 srec_cat $@.raw.s19 --crop 0x8008000 0x803fffc --fill 0x00 0x8008000 0x803fffc --l-e-crc32 0x803fffc -o $@.lm.s19
\r
224 @echo " >>>>>>> DONE <<<<<<<<<"
\r
228 $(size-exe-y): $(build-exe-y)
\r
229 $(Q)$(OBJDUMP) -h $<
\r
230 @echo TODO: Parse the file....
\r