3 ###############################################################################
\r
5 ###############################################################################
\r
8 include $(ROOTDIR)/boards/$(BOARDDIR)/build_config.mk
\r
11 -include ../build_config.mk
\r
13 # Perform build system version check
\r
14 include $(ROOTDIR)/scripts/version_check.mk
\r
17 ifeq (${COMPILER},gcc)
\r
18 # Assume that the board have set DEFAULT_CROSS_COMPILE
\r
19 CROSS_COMPILE?=${DEFAULT_CROSS_COMPILE}
\r
22 ifeq (${COMPILER},cw)
\r
23 CW_COMPILE?=${DEFAULT_CW_COMPILE}
\r
26 # Check cross compiler setting against default from board config
\r
27 ifeq (${COMPILER},cw)
\r
28 ifneq (${CW_COMPILE},${DEFAULT_CW_COMPILE})
\r
29 ${warning Not using default cross compiler for architecture.}
\r
30 ${warning CROSS_COMPILE: ${CW_COMPILE} [${origin CW_COMPILE}]}
\r
31 ${warning DEFAULT_CROSS_COMPILE: ${DEFAULT_CW_COMPILE} [${origin DEFAULT_CW_COMPILE}]}
\r
34 ifneq (${DEFAULT_CROSS_COMPILE},)
\r
35 ifneq (${CROSS_COMPILE},${DEFAULT_CROSS_COMPILE})
\r
36 ${warning Not using default cross compiler for architecture.}
\r
37 ${warning CROSS_COMPILE: ${CROSS_COMPILE} [${origin CROSS_COMPILE}]}
\r
38 ${warning DEFAULT_CROSS_COMPILE: ${DEFAULT_CROSS_COMPILE} [${origin DEFAULT_CROSS_COMPILE}]}
\r
43 ###############################################################################
\r
44 # MODULE CONFIGURATION #
\r
45 ###############################################################################
\r
49 RELDIR := $(subst $(TOPDIR)/,,$(CURDIR))
\r
50 target := $(subst /,_,$(SUBDIR))
\r
53 define MOD_AVAIL_template
\r
57 define MOD_USE_template
\r
67 $(foreach mod,$(MOD_AVAIL),$(eval $(call MOD_AVAIL_template,${mod})))
\r
68 $(foreach mod,$(sort $(MOD_USE)),$(eval $(call MOD_USE_template,${mod})))
\r
69 $(foreach mod,$(CFG),$(eval $(call CFG_template,${mod})))
\r
70 #def-y += $(ARCH) $(ARCH_FAM) $(ARCH_MCU)
\r
72 # Select console / debug
\r
73 $(foreach mod,$(SELECT_OS_CONSOLE),$(eval $(call MOD_USE_template,${mod})))
\r
74 $(foreach mod,$(SELECT_CONSOLE),$(eval $(call MOD_USE_template,${mod})))
\r
76 def-y += SELECT_OS_CONSOLE=$(if $(SELECT_OS_CONSOLE),$(SELECT_OS_CONSOLE),TTY_NONE)
\r
77 def-y += SELECT_CONSOLE=$(if $(SELECT_CONSOLE),$(SELECT_CONSOLE),TTY_NONE)
\r
78 def-$(USE_DEBUG_PRINTF) += USE_DEBUG_PRINTF
\r
80 not_avail = $(filter-out $(MOD_AVAIL),$(sort $(MOD_USE)))
\r
81 ifneq ($(not_avail),)
\r
82 $(error Trying to build a module that is not available: $(not_avail))
\r
87 ###############################################################################
\r
88 # TOOLS CONFIGURATION #
\r
89 ###############################################################################
\r
91 # set debug optimization level as default
\r
92 ifeq ($(SELECT_OPT),)
\r
93 SELECT_OPT=OPT_DEBUG
\r
96 $(eval CFG_$(SELECT_OPT)=y)
\r
98 ARCH_PATH-y = arch/$(ARCH_FAM)/$(ARCH)
\r
100 # Include compiler settings
\r
101 include $(ROOTDIR)/scripts/cc_$(COMPILER).mk
\r
103 # Include pclint or splint settings
\r
105 include $(ROOTDIR)/scripts/cc_pclint.mk
\r
108 include $(ROOTDIR)/scripts/cc_splint.mk
\r
113 ###############################################################################
\r
114 # PROJECT MAKEFILE #
\r
115 ###############################################################################
\r
117 # Include project makefile
\r
118 include ../makefile
\r
120 # All module object files (guarded for backwards compatability)
\r
121 ifndef _BOARD_COMMON_MK
\r
122 include $(ROOTDIR)/boards/board_common.mk
\r
126 ifneq ($(CFG_BOOT),)
\r
127 include $(ROOTDIR)/boards/$(BOARDDIR)/boot_info.mk
\r
128 include $(ROOTDIR)/scripts/bootloader_image.mk
\r
131 ##### For backwards compatability with older project makefiles:
\r
133 # Remove dependency on libkernel
\r
134 deprecated-libs += $(ROOTDIR)/libs/libkernel_$(ARCH_MCU).a
\r
135 deprecated-libs-included = $(filter $(deprecated-libs),$(libitem-y))
\r
136 ifneq ($(deprecated-libs-included),)
\r
137 $(info >>>> Ignoring deprecated lib dependencies: $(deprecated-libs-included)')
\r
138 libitem-y := $(filter-out $(deprecated-libs),$(libitem-y))
\r
141 # Automatic preprocessing of std linkscripts
\r
142 old-ldcmdfile = $(ROOTDIR)/$(ARCH_PATH-y)/scripts/linkscript_gcc.ldf
\r
143 new-ldcmdfile = linkscript_gcc.ldp
\r
144 old-ldcmdfile-used = $(filter $(old-ldcmdfile),$(ldcmdfile-y))
\r
145 ifneq ($(old-ldcmdfile-used),)
\r
146 $(info >>>> Changing linkscript to preprocessed version: $(old-ldcmdfile) -> $(new-ldcmdfile)')
\r
147 ldcmdfile-y := $(subst $(old-ldcmdfile),$(new-ldcmdfile),$(ldcmdfile-y))
\r
148 vpath %.ldf $(ROOTDIR)/$(ARCH_PATH-y)/scripts
\r
153 inc-y += ../include
\r
154 inc-y += $(ROOTDIR)/include
\r
155 inc-y += $(ROOTDIR)/include/$(ARCH_FAM)
\r
156 inc-y += $(ROOTDIR)/include/$(ARCH_FAM)/$(ARCH)
\r
158 VPATH += $(ROOTDIR)/$(SUBDIR)/src
\r
159 VPATH += $(ROOTDIR)/$(SUBDIR)
\r
163 ###############################################################################
\r
165 ###############################################################################
\r
167 LINT_EXCLUDE_PATHS := $(abspath $(LINT_EXCLUDE_PATHS))
\r
168 $(info $(LINT_EXCLUDE_PATHS))
\r
170 LINT_BAD_EXCLUDE_PATHS := $(filter %/,$(LINT_EXCLUDE_PATHS))
\r
171 ifneq ($(LINT_BAD_EXCLUDE_PATHS),)
\r
172 $(warning LINT_EXCLUDE_PATHS entries must not end in '/'. Ignoring $(LINT_BAD_EXCLUDE_PATHS))
\r
175 LINT_NICE_EXCLUDE_PATHS := $(filter-out %/,$(LINT_EXCLUDE_PATHS))
\r
176 LINT_NICE_EXCLUDE_PATHS := $(foreach path,$(LINT_NICE_EXCLUDE_PATHS),$(path)/)
\r
181 $(filter $(dir $(abspath $<)),$(LINT_NICE_EXCLUDE_PATHS)),
\r
182 $(info $(abspath $<):0:0: Info: Not running lint check on $(abspath $<)),
\r
183 $(Q)$(PCLINT) $(lint_extra) $(addprefix $(lintinc_ext),$(inc-y)) $(addprefix $(lintdef_ext),$(def-y)) $(abspath $<))
\r
190 $(filter $(dir $(abspath $<)),$(LINT_NICE_EXCLUDE_PATHS)),
\r
191 $(info $(abspath $<):0:0: Info: Not running lint check on $(abspath $<)),
\r
192 $(Q)$(SPLINT) $(splint_extra) $(addprefix $(lintinc_ext),$(inc-y)) $(addprefix $(lintdef_ext),$(def-y)) $(abspath $<))
\r
198 ###############################################################################
\r
199 # TOP-LEVEL TARGETS #
\r
200 ###############################################################################
\r
205 @echo " >> Rules Clean $(CURDIR)"
\r
207 $(Q)-rm -v $(ROOTDIR)/binaries/$(BOARDDIR)/*
\r
211 @echo ">>>> Available modules:" $(sort $(MOD_AVAIL))
\r
212 @echo ">>>> Used modules: " $(sort $(MOD_USE))
\r
213 @echo $(MOD) ${def-y}
\r
215 .PHONY : module_config
\r
216 module_config: FORCE
\r
217 @echo ">>>> Available modules:" $(sort $(MOD_AVAIL))
\r
218 @echo ">>>> Used modules: " $(sort $(MOD_USE))
\r
223 $(ROOTDIR)/binaries/$(BOARDDIR):
\r
226 all-mod += $(build-hex-y) $(build-exe-y) $(build-srec-y)
\r
227 all-mod += $(build-lib-y) $(build-bin-y)
\r
230 all: | module_config $(ROOTDIR)/binaries/$(BOARDDIR) $(all-mod) $(all-mod-post)
\r
231 all: module_config $(all-mod) $(all-mod-post) $(ROOTDIR)/binaries/$(BOARDDIR)
\r
232 @cp -v $(all-mod) $(all-mod-post) $(ROOTDIR)/binaries/$(BOARDDIR)
\r
237 ###############################################################################
\r
239 ###############################################################################
\r
241 # Simple depencendy stuff
\r
242 -include $(subst .o,.d,$(obj-y))
\r
243 # Some dependency for xxx_offset.c/h also
\r
244 -include $(subst .h,.d,$(dep-y))
\r
249 @echo " >> CC $(notdir $<)"
\r
250 $(Q)$(CC) -c $(CFLAGS) $(CFLAGS_$@) -o $(goal) $(addprefix -I,$(inc-y)) $(addprefix -D,$(def-y)) $(abspath $<)
\r
252 # run lint if enabled
\r
259 @echo " >> AS $(notdir $<)"
\r
260 $(Q)$(AS) $(ASFLAGS) -o $(goal) $<
\r
264 .SECONDARY %.s: # Don't remove *.s files (needed for debugging)
\r
268 @echo " >> CPP $(notdir $<)"
\r
269 $(Q)$(CPP) $(CPP_ASM_FLAGS) $(CPPOUT) $@ $(addprefix -I,$(inc-y)) $(addprefix -D,$(def-y)) $<
\r
271 # Board linker files are in the board directory
\r
272 inc-y += $(ROOTDIR)/boards/$(BOARDDIR)
\r
275 # *.ldf (file on disc) -> *.lcf (preprocessed *.ldf file)
\r
276 # Preprocess linker files..
\r
279 @echo " >> CPP $(notdir $<)"
\r
280 $(Q)$(CPP) -P $(CPP_ASM_FLAGS) $(CPPOUT) $@ $(addprefix -I,$(inc-y)) $(addprefix -D,$(def-y)) $<
\r
282 .PHONY $(ROOTDIR)/libs:
\r
286 dep-y += $(ROOTDIR)/libs
\r
289 $(build-lib-y): $(dep-y) $(obj-y)
\r
292 $(Q)$(AR) -r -o $@ $(obj-y) 2> /dev/null
\r
295 $(build-hex-y): $(build-exe-y)
\r
297 @echo " >> OBJCOPY $@"
\r
298 $(Q)$(CROSS_COMPILE)objcopy -O ihex $< $@
\r
301 #$(build-bin-y): $(build-exe-y)
\r
303 # @echo " >> OBJCOPY $@"
\r
304 # $(Q)$(CROSS_COMPILE)objcopy -O binary $< $@
\r
307 $(build-exe-y): $(dep-y) $(obj-y) $(sim-y) $(libitem-y) $(ldcmdfile-y)
\r
310 ifeq ($(CROSS_COMPILE)$(COMPILER),gcc)
\r
311 $(Q)$(CC) $(LDFLAGS) -o $@ $(libpath-y) $(obj-y) $(lib-y) $(libitem-y)
\r
313 $(Q)$(LD) $(LDFLAGS) $(LD_FILE) $(ldcmdfile-y) -o $@ $(libpath-y) $(LD_START_GRP) $(obj-y) $(lib-y) $(libitem-y) $(LD_END_GRP) $(LDMAPFILE)
\r
314 $(do-memory-footprint)
\r
315 $(do-memory-footprint2-y)
\r
316 endif #($(CROSS_COMPILE),)
\r
318 @echo " >>>>>>> DONE <<<<<<<<<"
\r