]> rtime.felk.cvut.cz Git - arc.git/blob - scripts/rules.mk
Cleanup of makefiles. Cleanup of merge.
[arc.git] / scripts / rules.mk
1 \r
2 \r
3 ###############################################################################\r
4 # BUILD SETTINGS                                                              #\r
5 ###############################################################################\r
6 \r
7 # Board settings\r
8 include $(ROOTDIR)/boards/$(BOARDDIR)/build_config.mk\r
9 \r
10 # Project settings\r
11 -include ../build_config.mk\r
12 \r
13 # Perform build system version check\r
14 include $(ROOTDIR)/scripts/version_check.mk\r
15 \r
16 \r
17 \r
18 ###############################################################################\r
19 # MODULE CONFIGURATION                                                        #\r
20 ###############################################################################\r
21 \r
22 # Some useful vars\r
23 CFG_ARCH_$(ARCH):=y\r
24 RELDIR := $(subst $(TOPDIR)/,,$(CURDIR))\r
25 target := $(subst /,_,$(SUBDIR))\r
26 goal=$@\r
27 \r
28 define MOD_AVAIL_template\r
29         MOD_$(1)=y\r
30 endef\r
31 \r
32 define MOD_USE_template\r
33         USE_$(1)=y\r
34         def-y += USE_$(1)\r
35 endef\r
36 \r
37 define CFG_template\r
38         CFG_$(1)=y\r
39         def-y += CFG_$(1)\r
40 endef\r
41 \r
42 $(foreach mod,$(MOD_AVAIL),$(eval $(call MOD_AVAIL_template,${mod})))\r
43 $(foreach mod,$(MOD_USE),$(eval $(call MOD_USE_template,${mod})))\r
44 $(foreach mod,$(CFG),$(eval $(call CFG_template,${mod})))\r
45 #def-y += $(ARCH) $(ARCH_FAM) $(ARCH_MCU) \r
46 \r
47 # Select console / debug\r
48 $(foreach mod,$(SELECT_OS_CONSOLE),$(eval $(call MOD_USE_template,${mod})))\r
49 $(foreach mod,$(SELECT_CONSOLE),$(eval $(call MOD_USE_template,${mod})))\r
50 \r
51 def-y += SELECT_OS_CONSOLE=$(if $(SELECT_OS_CONSOLE),$(SELECT_OS_CONSOLE),TTY_NONE)\r
52 def-y += SELECT_CONSOLE=$(if $(SELECT_CONSOLE),$(SELECT_CONSOLE),TTY_NONE)\r
53 def-$(USE_DEBUG_PRINTF) += USE_DEBUG_PRINTF \r
54 \r
55 not_avail = $(filter-out $(MOD_AVAIL),$(MOD_USE))\r
56 ifneq ($(not_avail),)\r
57 $(error Trying to build a module that is not available: $(not_avail))\r
58 endif\r
59 \r
60 \r
61 \r
62 ###############################################################################\r
63 # TOOLS CONFIGURATION                                                         #\r
64 ###############################################################################\r
65 \r
66 # set debug optimization level as default\r
67 ifeq ($(SELECT_OPT),)\r
68 SELECT_OPT=OPT_DEBUG\r
69 endif\r
70 \r
71 $(eval CFG_$(SELECT_OPT)=y)\r
72 \r
73 ARCH_PATH-y = arch/$(ARCH_FAM)/$(ARCH)\r
74 \r
75 # Include compiler settings\r
76 COMPILER?=gcc\r
77 include $(ROOTDIR)/scripts/cc_$(COMPILER).mk\r
78 \r
79 # Include pclint or splint settings\r
80 ifneq ($(PCLINT),)\r
81 include $(ROOTDIR)/scripts/cc_pclint.mk\r
82 endif\r
83 ifneq ($(SPLINT),)\r
84 include $(ROOTDIR)/scripts/cc_splint.mk\r
85 endif\r
86 \r
87 \r
88 \r
89 ###############################################################################\r
90 # PROJECT MAKEFILE                                                            #\r
91 ###############################################################################\r
92 \r
93 # Include project makefile\r
94 include ../makefile\r
95 \r
96 # All module object files (guarded for backwards compatability)\r
97 ifndef _BOARD_COMMON_MK\r
98 include $(ROOTDIR)/boards/board_common.mk\r
99 endif\r
100 \r
101 \r
102 ##### For backwards compatability with older project makefiles:\r
103 \r
104 # Remove dependency on libkernel\r
105 deprecated-libs += $(ROOTDIR)/libs/libkernel_$(ARCH_MCU).a\r
106 deprecated-libs-included = $(filter $(deprecated-libs),$(libitem-y))\r
107 ifneq ($(deprecated-libs-included),)\r
108 $(info >>>> Ignoring deprecated lib dependencies: $(deprecated-libs-included)')\r
109 libitem-y := $(filter-out $(deprecated-libs),$(libitem-y))\r
110 endif\r
111 \r
112 # Automatic preprocessing of std linkscripts\r
113 old-ldcmdfile = $(ROOTDIR)/$(ARCH_PATH-y)/scripts/linkscript_gcc.ldf\r
114 new-ldcmdfile = linkscript_gcc.ldp\r
115 old-ldcmdfile-used = $(filter $(old-ldcmdfile),$(ldcmdfile-y))\r
116 ifneq ($(old-ldcmdfile-used),)\r
117 $(info >>>> Changing linkscript to preprocessed version: $(old-ldcmdfile) -> $(new-ldcmdfile)')\r
118 ldcmdfile-y := $(subst $(old-ldcmdfile),$(new-ldcmdfile),$(ldcmdfile-y))\r
119 vpath %.ldf $(ROOTDIR)/$(ARCH_PATH-y)/scripts\r
120 endif\r
121 \r
122 #####\r
123 \r
124 inc-y += ../include\r
125 inc-y += $(ROOTDIR)/include\r
126 inc-y += $(ROOTDIR)/include/$(ARCH_FAM)\r
127 inc-y += $(ROOTDIR)/include/$(ARCH_FAM)/$(ARCH)\r
128   \r
129 VPATH += $(ROOTDIR)/$(SUBDIR)/src\r
130 VPATH += $(ROOTDIR)/$(SUBDIR)\r
131 \r
132 \r
133 \r
134 ###############################################################################\r
135 # LINT                                                                        #\r
136 ###############################################################################\r
137 \r
138 LINT_EXCLUDE_PATHS := $(abspath $(LINT_EXCLUDE_PATHS))\r
139 $(info $(LINT_EXCLUDE_PATHS))\r
140 \r
141 LINT_BAD_EXCLUDE_PATHS := $(filter %/,$(LINT_EXCLUDE_PATHS))\r
142 ifneq ($(LINT_BAD_EXCLUDE_PATHS),)\r
143 $(warning LINT_EXCLUDE_PATHS entries must not end in '/'. Ignoring $(LINT_BAD_EXCLUDE_PATHS))\r
144 endif\r
145 \r
146 LINT_NICE_EXCLUDE_PATHS := $(filter-out %/,$(LINT_EXCLUDE_PATHS))\r
147 LINT_NICE_EXCLUDE_PATHS := $(foreach path,$(LINT_NICE_EXCLUDE_PATHS),$(path)/)\r
148 \r
149 ifneq ($(PCLINT),)\r
150 define run_pclint\r
151 $(if \r
152 $(filter $(dir $(abspath $<)),$(LINT_NICE_EXCLUDE_PATHS)),\r
153 $(info $(abspath $<):0:0: Info: Not running lint check on $(abspath $<)),\r
154 $(Q)$(PCLINT) $(lint_extra) $(addprefix $(lintinc_ext),$(inc-y)) $(addprefix $(lintdef_ext),$(def-y)) $(abspath $<))\r
155 endef\r
156 endif\r
157 \r
158 ifneq ($(SPLINT),)\r
159 define run_splint\r
160 $(if \r
161 $(filter $(dir $(abspath $<)),$(LINT_NICE_EXCLUDE_PATHS)),\r
162 $(info $(abspath $<):0:0: Info: Not running lint check on $(abspath $<)),\r
163 $(Q)$(SPLINT) $(splint_extra) $(addprefix $(lintinc_ext),$(inc-y)) $(addprefix $(lintdef_ext),$(def-y)) $(abspath $<))\r
164 endef\r
165 endif\r
166 \r
167 \r
168 \r
169 ###############################################################################\r
170 # TOP-LEVEL TARGETS                                                           #\r
171 ###############################################################################\r
172 \r
173 .PHONY clean: \r
174 clean: FORCE\r
175         @-rm -f *.o *.d *.h *.elf *.a *.ldp\r
176 \r
177 .PHONY config: \r
178 config: FORCE\r
179         @echo "board   modules:" $(MOD_AVAIL)\r
180         @echo "example modules:" $(MOD_USE)\r
181         @echo $(MOD) ${def-y}\r
182 \r
183 FORCE:\r
184 \r
185 $(ROOTDIR)/binaries:\r
186         @mkdir -p $@\r
187 \r
188 .PHONY all:\r
189 all: $(build-exe-y) $(build-hex-y) $(build-lib-y) $(build-bin-y) $(ROOTDIR)/binaries\r
190         @cp -v $(build-lib-y) $(build-exe-y) $(build-hex-y) $(build-bin-y) $(ROOTDIR)/binaries\r
191 \r
192 \r
193 .SUFFIXES:\r
194 \r
195 \r
196 \r
197 ###############################################################################\r
198 # TARGETS                                                                     #\r
199 ###############################################################################\r
200         \r
201 # Simple depencendy stuff\r
202 -include $(subst .o,.d,$(obj-y))\r
203 # Some dependency for xxx_offset.c/h also\r
204 -include $(subst .h,.d,$(dep-y))\r
205 \r
206 # Compile\r
207 %.o: %.c\r
208         @echo "  >> CC $(notdir $<)"\r
209         $(Q)$(CC) -c $(CFLAGS) -o $(goal) $(addprefix -I,$(inc-y)) $(addprefix -D,$(def-y)) $(abspath $<)\r
210 # run lint if enabled\r
211         $(run_pclint)\r
212         $(run_splint)\r
213 \r
214 # Assembler\r
215 %.o: %.s\r
216         @echo "  >> AS $(notdir $<)  $(ASFLAGS)"\r
217         $(Q)$(AS) $(ASFLAGS) -o $(goal) $<\r
218         \r
219 # PP Assembler  \r
220 #.SECONDARY %.s:\r
221 \r
222 %.s: %.sx\r
223         @echo "  >> CPP $(notdir $<)"\r
224         $(Q)$(CPP) $(CPP_ASM_FLAGS) -o $@ $(addprefix -I,$(inc-y)) $(addprefix -D,$(def-y)) $<\r
225 \r
226 # Board linker files are in the board directory \r
227 inc-y += $(ROOTDIR)/boards/$(BOARDDIR)\r
228 \r
229 # Preprocess linker files..\r
230 %.ldp %.lcf: %.ldf\r
231         @echo "  >> CPP $<"\r
232         $(Q)$(CPP) -E -P $(CPP_ASM_FLAGS) -o $@ $(addprefix -I,$(inc-y)) $(addprefix -D,$(def-y)) $<\r
233 \r
234 .PHONY $(ROOTDIR)/libs:\r
235 $(ROOTDIR)/libs:\r
236         $(Q)mkdir -p $@\r
237 \r
238 dep-y += $(ROOTDIR)/libs\r
239         \r
240 # lib output\r
241 $(build-lib-y): $(dep-y) $(obj-y)\r
242         @echo "  >> AR $@"   \r
243         $(Q)$(AR) -r -o $@ $(obj-y) 2> /dev/null\r
244 \r
245 # hex output\r
246 $(build-hex-y): $(build-exe-y)\r
247         @echo "  >> OBJCOPY $@"   \r
248         $(Q)$(CROSS_COMPILE)objcopy -O ihex $< $@\r
249         \r
250 # bin output\r
251 $(build-bin-y): $(build-exe-y)\r
252         @echo "  >> OBJCOPY $@"   \r
253         $(Q)$(CROSS_COMPILE)objcopy -O binary $< $@     \r
254 \r
255 # Linker\r
256 $(build-exe-y): $(dep-y) $(obj-y) $(sim-y) $(libitem-y) $(ldcmdfile-y)\r
257         @echo "  >> LD $@"\r
258 ifeq ($(CROSS_COMPILE),)\r
259         $(Q)$(CC) $(LDFLAGS) -o $@ $(libpath-y) $(obj-y) $(lib-y) $(libitem-y)  \r
260 else\r
261         $(Q)$(LD) $(LDFLAGS) $(LD_FILE) $(ldcmdfile-y) -o $@ $(libpath-y) $(LD_START_GRP) $(obj-y) $(lib-y) $(libitem-y) $(LD_END_GRP) $(LDMAPFILE)\r
262  ifdef CFG_MC912DG128A\r
263     # Print memory layout\r
264         @$(CROSS_COMPILE)objdump -h $@ | gawk -f $(ROOTDIR)/scripts/hc1x_memory.awk\r
265  else\r
266   ifeq ($(COMPILER),gcc)        \r
267     # Print memory layout\r
268         @echo ""\r
269         @gawk --non-decimal-data -f $(ROOTDIR)/scripts/gcc_map_memory.awk $(subst .elf,.map,$@)\r
270   endif # ($(COMPILER),gcc)\r
271    \r
272   ifeq ($(BUILD_LOAD_MODULE),y)\r
273         @$(CROSS_COMPILE)objcopy -O srec $@ $@.raw.s19\r
274         srec_cat $@.raw.s19 --crop 0x8008000 0x803fffc --fill 0x00 0x8008000 0x803fffc --l-e-crc32 0x803fffc -o $@.lm.s19\r
275   endif #($(BUILD_LOAD_MODULE),y)\r
276    \r
277  endif #CFG_MC912DG128A\r
278 \r
279 endif #($(CROSS_COMPILE),)\r
280         @echo\r
281         @echo "  >>>>>>>  DONE  <<<<<<<<<"\r
282         @echo\r
283         \r