Palacios Public Git Repository

To checkout Palacios execute

  git clone http://v3vee.org/palacios/palacios.web/palacios.git
This will give you the master branch. You probably want the devel branch or one of the release branches. To switch to the devel branch, simply execute
  cd palacios
  git checkout --track -b devel origin/devel
The other branches are similar.


Modified titles and some wording for verbal parallelism.
[palacios.git] / scripts / Makefile.build
1 # ==========================================================================
2 # Building
3 # ==========================================================================
4
5 src := $(obj)
6
7 PHONY := __build
8 __build:
9
10 # Read .config if it exist, otherwise ignore
11 -include .config
12
13 include scripts/Kbuild.include
14
15 # The filename Kbuild has precedence over Makefile
16 kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src))
17 include $(if $(wildcard $(kbuild-dir)/Kbuild), $(kbuild-dir)/Kbuild, $(kbuild-dir)/Makefile)
18
19 include scripts/Makefile.lib
20
21 ifdef host-progs
22 ifneq ($(hostprogs-y),$(host-progs))
23 $(warning kbuild: $(obj)/Makefile - Usage of host-progs is deprecated. Please replace with hostprogs-y!)
24 hostprogs-y += $(host-progs)
25 endif
26 endif
27
28 # Do not include host rules unles needed
29 ifneq ($(hostprogs-y)$(hostprogs-m),)
30 include scripts/Makefile.host
31 endif
32
33 ifneq ($(KBUILD_SRC),)
34 # Create output directory if not already present
35 _dummy := $(shell [ -d $(obj) ] || mkdir -p $(obj))
36
37 # Create directories for object files if directory does not exist
38 # Needed when obj-y := dir/file.o syntax is used
39 _dummy := $(foreach d,$(obj-dirs), $(shell [ -d $(d) ] || mkdir -p $(d)))
40 endif
41
42
43 ifdef EXTRA_TARGETS
44 $(warning kbuild: $(obj)/Makefile - Usage of EXTRA_TARGETS is obsolete in 2.6. Please fix!)
45 endif
46
47 ifdef build-targets
48 $(warning kbuild: $(obj)/Makefile - Usage of build-targets is obsolete in 2.6. Please fix!)
49 endif
50
51 ifdef export-objs
52 $(warning kbuild: $(obj)/Makefile - Usage of export-objs is obsolete in 2.6. Please fix!)
53 endif
54
55 ifdef O_TARGET
56 $(warning kbuild: $(obj)/Makefile - Usage of O_TARGET := $(O_TARGET) is obsolete in 2.6. Please fix!)
57 endif
58
59 ifdef L_TARGET
60 $(error kbuild: $(obj)/Makefile - Use of L_TARGET is replaced by lib-y in 2.6. Please fix!)
61 endif
62
63 ifdef list-multi
64 $(warning kbuild: $(obj)/Makefile - list-multi := $(list-multi) is obsolete in 2.6. Please fix!)
65 endif
66
67 ifndef obj
68 $(warning kbuild: Makefile.build is included improperly)
69 endif
70
71 # ===========================================================================
72
73 ifneq ($(strip $(lib-y) $(lib-m) $(lib-n) $(lib-)),)
74 lib-target := $(obj)/lib.a
75 endif
76
77 ifneq ($(strip $(obj-y) $(obj-m) $(obj-n) $(obj-) $(lib-target)),)
78 builtin-target := $(obj)/built-in.o
79 endif
80
81 # We keep a list of all modules in $(MODVERDIR)
82
83 __build: $(if $(KBUILD_BUILTIN),$(builtin-target) $(lib-target) $(extra-y)) \
84          $(if $(KBUILD_MODULES),$(obj-m)) \
85          $(subdir-ym) $(always)
86         @:
87
88
89 # Compile C sources (.c)
90 # ---------------------------------------------------------------------------
91
92 # Default is built-in, unless we know otherwise
93 modkern_cflags := $(CFLAGS_KERNEL)
94 quiet_modtag := $(empty)   $(empty)
95
96 $(real-objs-m)        : modkern_cflags := $(CFLAGS_MODULE)
97 $(real-objs-m:.o=.i)  : modkern_cflags := $(CFLAGS_MODULE)
98 $(real-objs-m:.o=.s)  : modkern_cflags := $(CFLAGS_MODULE)
99 $(real-objs-m:.o=.lst): modkern_cflags := $(CFLAGS_MODULE)
100
101 $(real-objs-m)        : quiet_modtag := [M]
102 $(real-objs-m:.o=.i)  : quiet_modtag := [M]
103 $(real-objs-m:.o=.s)  : quiet_modtag := [M]
104 $(real-objs-m:.o=.lst): quiet_modtag := [M]
105
106 $(obj-m)              : quiet_modtag := [M]
107
108 # Default for not multi-part modules
109 modname = $(*F)
110
111 $(multi-objs-m)         : modname = $(modname-multi)
112 $(multi-objs-m:.o=.i)   : modname = $(modname-multi)
113 $(multi-objs-m:.o=.s)   : modname = $(modname-multi)
114 $(multi-objs-m:.o=.lst) : modname = $(modname-multi)
115 $(multi-objs-y)         : modname = $(modname-multi)
116 $(multi-objs-y:.o=.i)   : modname = $(modname-multi)
117 $(multi-objs-y:.o=.s)   : modname = $(modname-multi)
118 $(multi-objs-y:.o=.lst) : modname = $(modname-multi)
119
120 quiet_cmd_cc_s_c = CC $(quiet_modtag)  $@
121 cmd_cc_s_c       = $(CC) $(c_flags) -fverbose-asm -S -o $@ $<
122
123 %.s: %.c FORCE
124         $(call if_changed_dep,cc_s_c)
125
126 quiet_cmd_cc_i_c = CPP $(quiet_modtag) $@
127 cmd_cc_i_c       = $(CPP) $(c_flags)   -o $@ $<
128
129 %.i: %.c FORCE
130         $(call if_changed_dep,cc_i_c)
131
132 # C (.c) files
133 # The C file is compiled and updated dependency information is generated.
134 # (See cmd_cc_o_c + relevant part of rule_cc_o_c)
135
136 quiet_cmd_cc_o_c = CC $(quiet_modtag)  $@
137
138 ifndef CONFIG_MODVERSIONS
139 cmd_cc_o_c = $(CC) $(c_flags) -c -o $@ $<
140
141 else
142 # When module versioning is enabled the following steps are executed:
143 # o compile a .tmp_<file>.o from <file>.c
144 # o if .tmp_<file>.o doesn't contain a __ksymtab version, i.e. does
145 #   not export symbols, we just rename .tmp_<file>.o to <file>.o and
146 #   are done.
147 # o otherwise, we calculate symbol versions using the good old
148 #   genksyms on the preprocessed source and postprocess them in a way
149 #   that they are usable as a linker script
150 # o generate <file>.o from .tmp_<file>.o using the linker to
151 #   replace the unresolved symbols __crc_exported_symbol with
152 #   the actual value of the checksum generated by genksyms
153
154 cmd_cc_o_c = $(CC) $(c_flags) -c -o $(@D)/.tmp_$(@F) $<
155 cmd_modversions =                                                       \
156         if $(OBJDUMP) -h $(@D)/.tmp_$(@F) | grep -q __ksymtab; then     \
157                 $(CPP) -D__GENKSYMS__ $(c_flags) $<                     \
158                 | $(GENKSYMS) -a $(ARCH)                                \
159                 > $(@D)/.tmp_$(@F:.o=.ver);                             \
160                                                                         \
161                 $(LD) $(LDFLAGS) -r -o $@ $(@D)/.tmp_$(@F)              \
162                         -T $(@D)/.tmp_$(@F:.o=.ver);                    \
163                 rm -f $(@D)/.tmp_$(@F) $(@D)/.tmp_$(@F:.o=.ver);        \
164         else                                                            \
165                 mv -f $(@D)/.tmp_$(@F) $@;                              \
166         fi;
167 endif
168
169 define rule_cc_o_c
170         $(call echo-cmd,checksrc) $(cmd_checksrc)                         \
171         $(call echo-cmd,cc_o_c) $(cmd_cc_o_c);                            \
172         $(cmd_modversions)                                                \
173         scripts/basic/fixdep $(depfile) $@ '$(call make-cmd,cc_o_c)' > $(@D)/.$(@F).tmp;  \
174         rm -f $(depfile);                                                 \
175         mv -f $(@D)/.$(@F).tmp $(@D)/.$(@F).cmd
176 endef
177
178 # Built-in and composite module parts
179
180 %.o: %.c FORCE
181         $(call cmd,force_checksrc)
182         $(call if_changed_rule,cc_o_c)
183
184 # Single-part modules are special since we need to mark them in $(MODVERDIR)
185
186 $(single-used-m): %.o: %.c FORCE
187         $(call cmd,force_checksrc)
188         $(call if_changed_rule,cc_o_c)
189         @{ echo $(@:.o=.ko); echo $@; } > $(MODVERDIR)/$(@F:.o=.mod)
190
191 quiet_cmd_cc_lst_c = MKLST   $@
192       cmd_cc_lst_c = $(CC) $(c_flags) -g -c -o $*.o $< && \
193                      $(CONFIG_SHELL) $(srctree)/scripts/makelst $*.o \
194                                      System.map $(OBJDUMP) > $@
195
196 %.lst: %.c FORCE
197         $(call if_changed_dep,cc_lst_c)
198
199 # Compile assembler sources (.S)
200 # ---------------------------------------------------------------------------
201
202 modkern_aflags := $(AFLAGS_KERNEL)
203
204 $(real-objs-m)      : modkern_aflags := $(AFLAGS_MODULE)
205 $(real-objs-m:.o=.s): modkern_aflags := $(AFLAGS_MODULE)
206
207 quiet_cmd_as_s_S = CPP $(quiet_modtag) $@
208 cmd_as_s_S       = $(CPP) $(a_flags)   -o $@ $< 
209
210 %.s: %.S FORCE
211         $(call if_changed_dep,as_s_S)
212
213 quiet_cmd_as_o_S = AS $(quiet_modtag)  $@
214 cmd_as_o_S       = $(CC) $(a_flags) -c -o $@ $<
215
216 %.o: %.S FORCE
217         $(call if_changed_dep,as_o_S)
218
219 targets += $(real-objs-y) $(real-objs-m) $(lib-y)
220 targets += $(extra-y) $(MAKECMDGOALS) $(always)
221
222 # Linker scripts preprocessor (.lds.S -> .lds)
223 # ---------------------------------------------------------------------------
224 quiet_cmd_cpp_lds_S = LDS     $@
225       cmd_cpp_lds_S = $(CPP) $(cpp_flags) -D__ASSEMBLY__ -o $@ $<
226
227 %.lds: %.lds.S FORCE
228         $(call if_changed_dep,cpp_lds_S)
229
230 # Build the compiled-in targets
231 # ---------------------------------------------------------------------------
232
233 # To build objects in subdirs, we need to descend into the directories
234 $(sort $(subdir-obj-y)): $(subdir-ym) ;
235
236 #
237 # Rule to compile a set of .o files into one .o file
238 #
239 ifdef builtin-target
240 quiet_cmd_link_o_target = LD      $@
241 # If the list of objects to link is empty, just create an empty built-in.o
242 cmd_link_o_target = $(if $(strip $(obj-y)),\
243                       $(LD) $(ld_flags) -r -o $@ $(filter $(obj-y), $^),\
244                       rm -f $@; $(AR) rcs $@)
245
246
247 $(builtin-target): $(obj-y) FORCE
248         $(call if_changed,link_o_target)
249
250 targets += $(builtin-target)
251 endif # builtin-target
252
253 #
254 # Rule to compile a set of .o files into one .a file
255 #
256 ifdef lib-target
257 quiet_cmd_link_l_target = AR      $@
258 cmd_link_l_target = rm -f $@; $(AR) $(EXTRA_ARFLAGS) rcs $@ $(lib-y)
259
260 $(lib-target): $(lib-y) FORCE
261         $(call if_changed,link_l_target)
262
263 targets += $(lib-target)
264 endif
265
266 #
267 # Rule to link composite objects
268 #
269 #  Composite objects are specified in kbuild makefile as follows:
270 #    <composite-object>-objs := <list of .o files>
271 #  or
272 #    <composite-object>-y    := <list of .o files>
273 link_multi_deps =                     \
274 $(filter $(addprefix $(obj)/,         \
275 $($(subst $(obj)/,,$(@:.o=-objs)))    \
276 $($(subst $(obj)/,,$(@:.o=-y)))), $^)
277  
278 quiet_cmd_link_multi-y = LD      $@
279 cmd_link_multi-y = $(LD) $(ld_flags) -r -o $@ $(link_multi_deps)
280
281 quiet_cmd_link_multi-m = LD [M]  $@
282 cmd_link_multi-m = $(LD) $(ld_flags) $(LDFLAGS_MODULE) -o $@ $(link_multi_deps)
283
284 # We would rather have a list of rules like
285 #       foo.o: $(foo-objs)
286 # but that's not so easy, so we rather make all composite objects depend
287 # on the set of all their parts
288 $(multi-used-y) : %.o: $(multi-objs-y) FORCE
289         $(call if_changed,link_multi-y)
290
291 $(multi-used-m) : %.o: $(multi-objs-m) FORCE
292         $(call if_changed,link_multi-m)
293         @{ echo $(@:.o=.ko); echo $(link_multi_deps); } > $(MODVERDIR)/$(@F:.o=.mod)
294
295 targets += $(multi-used-y) $(multi-used-m)
296
297
298 # Descending
299 # ---------------------------------------------------------------------------
300
301 PHONY += $(subdir-ym)
302 $(subdir-ym):
303         $(Q)$(MAKE) $(build)=$@
304
305 # Add FORCE to the prequisites of a target to force it to be always rebuilt.
306 # ---------------------------------------------------------------------------
307
308 PHONY += FORCE
309
310 FORCE:
311
312 # Read all saved command lines and dependencies for the $(targets) we
313 # may be building above, using $(if_changed{,_dep}). As an
314 # optimization, we don't need to read them if the target does not
315 # exist, we will rebuild anyway in that case.
316
317 targets := $(wildcard $(sort $(targets)))
318 cmd_files := $(wildcard $(foreach f,$(targets),$(dir $(f)).$(notdir $(f)).cmd))
319
320 ifneq ($(cmd_files),)
321   include $(cmd_files)
322 endif
323
324
325 # Declare the contents of the .PHONY variable as phony.  We keep that
326 # information in a variable se we can use it in if_changed and friends.
327
328 .PHONY: $(PHONY)