Commit 8ec4b4ff1c89bb280e662b84eba503ca44abe836
1 parent
7c6b155fb4
Exists in
master
and in
20 other branches
kbuild: introduce Kbuild.include
Kbuild.include is a placeholder for definitions originally present in both the top-level Makefile and scripts/Makefile.build. There were a slight difference in the filechk definition, so the most videly used version was kept and usr/Makefile was adopted for this syntax. Signed-off-by: Sam Ravnborg <sam@ravnborg.org> ---
Showing 7 changed files with 103 additions and 167 deletions Side-by-side Diff
Makefile
... | ... | @@ -309,6 +309,9 @@ |
309 | 309 | # Look for make include files relative to root of kernel src |
310 | 310 | MAKEFLAGS += --include-dir=$(srctree) |
311 | 311 | |
312 | +# We need some generic definitions | |
313 | +include scripts/Kbuild.include | |
314 | + | |
312 | 315 | # For maximum performance (+ possibly random breakage, uncomment |
313 | 316 | # the following) |
314 | 317 | |
... | ... | @@ -367,11 +370,6 @@ |
367 | 370 | # even be read-only. |
368 | 371 | export MODVERDIR := $(if $(KBUILD_EXTMOD),$(firstword $(KBUILD_EXTMOD))/).tmp_versions |
369 | 372 | |
370 | -# The temporary file to save gcc -MD generated dependencies must not | |
371 | -# contain a comma | |
372 | -comma := , | |
373 | -depfile = $(subst $(comma),_,$(@D)/.$(@F).d) | |
374 | - | |
375 | 373 | # Files to ignore in find ... statements |
376 | 374 | |
377 | 375 | RCS_FIND_IGNORE := \( -name SCCS -o -name BitKeeper -o -name .svn -o -name CVS -o -name .pc \) -prune -o |
... | ... | @@ -1284,72 +1282,6 @@ |
1284 | 1282 | $(cmd_files): ; # Do not try to update included dependency files |
1285 | 1283 | include $(cmd_files) |
1286 | 1284 | endif |
1287 | - | |
1288 | -# Execute command and generate cmd file | |
1289 | -if_changed = $(if $(strip $? \ | |
1290 | - $(filter-out $(cmd_$(1)),$(cmd_$@))\ | |
1291 | - $(filter-out $(cmd_$@),$(cmd_$(1)))),\ | |
1292 | - @set -e; \ | |
1293 | - $(if $($(quiet)cmd_$(1)),echo ' $(subst ','\'',$($(quiet)cmd_$(1)))';) \ | |
1294 | - $(cmd_$(1)); \ | |
1295 | - echo 'cmd_$@ := $(subst $$,$$$$,$(subst ','\'',$(cmd_$(1))))' > $(@D)/.$(@F).cmd) | |
1296 | - | |
1297 | - | |
1298 | -# execute the command and also postprocess generated .d dependencies | |
1299 | -# file | |
1300 | -if_changed_dep = $(if $(strip $? $(filter-out FORCE $(wildcard $^),$^)\ | |
1301 | - $(filter-out $(cmd_$(1)),$(cmd_$@))\ | |
1302 | - $(filter-out $(cmd_$@),$(cmd_$(1)))),\ | |
1303 | - $(Q)set -e; \ | |
1304 | - $(if $($(quiet)cmd_$(1)),echo ' $(subst ','\'',$($(quiet)cmd_$(1)))';) \ | |
1305 | - $(cmd_$(1)); \ | |
1306 | - scripts/basic/fixdep $(depfile) $@ '$(subst $$,$$$$,$(subst ','\'',$(cmd_$(1))))' > $(@D)/.$(@F).tmp; \ | |
1307 | - rm -f $(depfile); \ | |
1308 | - mv -f $(@D)/.$(@F).tmp $(@D)/.$(@F).cmd) | |
1309 | - | |
1310 | -# Usage: $(call if_changed_rule,foo) | |
1311 | -# will check if $(cmd_foo) changed, or any of the prequisites changed, | |
1312 | -# and if so will execute $(rule_foo) | |
1313 | - | |
1314 | -if_changed_rule = $(if $(strip $? \ | |
1315 | - $(filter-out $(cmd_$(1)),$(cmd_$(@F)))\ | |
1316 | - $(filter-out $(cmd_$(@F)),$(cmd_$(1)))),\ | |
1317 | - $(Q)$(rule_$(1))) | |
1318 | - | |
1319 | -# If quiet is set, only print short version of command | |
1320 | - | |
1321 | -cmd = @$(if $($(quiet)cmd_$(1)),echo ' $($(quiet)cmd_$(1))' &&) $(cmd_$(1)) | |
1322 | - | |
1323 | -# filechk is used to check if the content of a generated file is updated. | |
1324 | -# Sample usage: | |
1325 | -# define filechk_sample | |
1326 | -# echo $KERNELRELEASE | |
1327 | -# endef | |
1328 | -# version.h : Makefile | |
1329 | -# $(call filechk,sample) | |
1330 | -# The rule defined shall write to stdout the content of the new file. | |
1331 | -# The existing file will be compared with the new one. | |
1332 | -# - If no file exist it is created | |
1333 | -# - If the content differ the new file is used | |
1334 | -# - If they are equal no change, and no timestamp update | |
1335 | - | |
1336 | -define filechk | |
1337 | - @set -e; \ | |
1338 | - echo ' CHK $@'; \ | |
1339 | - mkdir -p $(dir $@); \ | |
1340 | - $(filechk_$(1)) < $< > $@.tmp; \ | |
1341 | - if [ -r $@ ] && cmp -s $@ $@.tmp; then \ | |
1342 | - rm -f $@.tmp; \ | |
1343 | - else \ | |
1344 | - echo ' UPD $@'; \ | |
1345 | - mv -f $@.tmp $@; \ | |
1346 | - fi | |
1347 | -endef | |
1348 | - | |
1349 | -# Shorthand for $(Q)$(MAKE) -f scripts/Makefile.build obj=dir | |
1350 | -# Usage: | |
1351 | -# $(Q)$(MAKE) $(build)=dir | |
1352 | -build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj | |
1353 | 1285 | |
1354 | 1286 | # Shorthand for $(Q)$(MAKE) -f scripts/Makefile.clean obj=dir |
1355 | 1287 | # Usage: |
scripts/Kbuild.include
1 | +#### | |
2 | +# kbuild: Generic definitions | |
3 | + | |
4 | +# Convinient variables | |
5 | +comma := , | |
6 | +empty := | |
7 | +space := $(empty) $(empty) | |
8 | + | |
9 | +### | |
10 | +# The temporary file to save gcc -MD generated dependencies must not | |
11 | +# contain a comma | |
12 | +depfile = $(subst $(comma),_,$(@D)/.$(@F).d) | |
13 | + | |
14 | +### | |
15 | +# filechk is used to check if the content of a generated file is updated. | |
16 | +# Sample usage: | |
17 | +# define filechk_sample | |
18 | +# echo $KERNELRELEASE | |
19 | +# endef | |
20 | +# version.h : Makefile | |
21 | +# $(call filechk,sample) | |
22 | +# The rule defined shall write to stdout the content of the new file. | |
23 | +# The existing file will be compared with the new one. | |
24 | +# - If no file exist it is created | |
25 | +# - If the content differ the new file is used | |
26 | +# - If they are equal no change, and no timestamp update | |
27 | +# - stdin is piped in from the first prerequisite ($<) so one has | |
28 | +# to specify a valid file as first prerequisite (often the kbuild file) | |
29 | +define filechk | |
30 | + $(Q)set -e; \ | |
31 | + echo ' CHK $@'; \ | |
32 | + mkdir -p $(dir $@); \ | |
33 | + $(filechk_$(1)) < $< > $@.tmp; \ | |
34 | + if [ -r $@ ] && cmp -s $@ $@.tmp; then \ | |
35 | + rm -f $@.tmp; \ | |
36 | + else \ | |
37 | + echo ' UPD $@'; \ | |
38 | + mv -f $@.tmp $@; \ | |
39 | + fi | |
40 | +endef | |
41 | + | |
42 | +### | |
43 | +# Shorthand for $(Q)$(MAKE) -f scripts/Makefile.build obj= | |
44 | +# Usage: | |
45 | +# $(Q)$(MAKE) $(build)=dir | |
46 | +build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj | |
47 | + | |
48 | +# If quiet is set, only print short version of command | |
49 | +cmd = @$(if $($(quiet)cmd_$(1)),\ | |
50 | + echo ' $(subst ','\'',$($(quiet)cmd_$(1)))' &&) $(cmd_$(1)) | |
51 | + | |
52 | +### | |
53 | +# if_changed - execute command if any prerequisite is newer than | |
54 | +# target, or command line has changed | |
55 | +# if_changed_dep - as if_changed, but uses fixdep to reveal dependencies | |
56 | +# including used config symbols | |
57 | +# if_changed_rule - as if_changed but execute rule instead | |
58 | +# See Documentation/kbuild/makefiles.txt for more info | |
59 | + | |
60 | +ifneq ($(KBUILD_NOCMDDEP),1) | |
61 | +# Check if both arguments has same arguments. Result in empty string if equal | |
62 | +# User may override this check using make KBUILD_NOCMDDEP=1 | |
63 | +arg-check = $(strip $(filter-out $(1), $(2)) $(filter-out $(2), $(1)) ) | |
64 | +endif | |
65 | + | |
66 | +# echo command. Short version is $(quiet) equals quiet, otherwise full command | |
67 | +echo-cmd = $(if $($(quiet)cmd_$(1)), \ | |
68 | + echo ' $(subst ','\'',$($(quiet)cmd_$(1)))';) | |
69 | + | |
70 | +# function to only execute the passed command if necessary | |
71 | +# >'< substitution is for echo to work, >$< substitution to preserve $ when reloading .cmd file | |
72 | +# note: when using inline perl scripts [perl -e '...$$t=1;...'] in $(cmd_xxx) double $$ your perl vars | |
73 | +# | |
74 | +if_changed = $(if $(strip $? $(call arg-check, $(cmd_$(1)), $(cmd_$@)) ), \ | |
75 | + @set -e; \ | |
76 | + $(echo-cmd) \ | |
77 | + $(cmd_$(1)); \ | |
78 | + echo 'cmd_$@ := $(subst $$,$$$$,$(subst ','\'',$(cmd_$(1))))' > $(@D)/.$(@F).cmd) | |
79 | + | |
80 | +# execute the command and also postprocess generated .d dependencies | |
81 | +# file | |
82 | +if_changed_dep = $(if $(strip $? $(filter-out FORCE $(wildcard $^),$^)\ | |
83 | + $(call arg-check, $(cmd_$(1)), $(cmd_$@)) ), \ | |
84 | + @set -e; \ | |
85 | + $(echo-cmd) \ | |
86 | + $(cmd_$(1)); \ | |
87 | + scripts/basic/fixdep $(depfile) $@ '$(subst $$,$$$$,$(subst ','\'',$(cmd_$(1))))' > $(@D)/.$(@F).tmp; \ | |
88 | + rm -f $(depfile); \ | |
89 | + mv -f $(@D)/.$(@F).tmp $(@D)/.$(@F).cmd) | |
90 | + | |
91 | +# Usage: $(call if_changed_rule,foo) | |
92 | +# will check if $(cmd_foo) changed, or any of the prequisites changed, | |
93 | +# and if so will execute $(rule_foo) | |
94 | +if_changed_rule = $(if $(strip $? $(call arg-check, $(cmd_$(1)), $(cmd_$@)) ),\ | |
95 | + @set -e; \ | |
96 | + $(rule_$(1))) |
scripts/Makefile.build
scripts/Makefile.lib
1 | -# =========================================================================== | |
2 | -# kbuild: Generic definitions | |
3 | -# =========================================================================== | |
4 | - | |
5 | -# Standard vars | |
6 | - | |
7 | -comma := , | |
8 | -empty := | |
9 | -space := $(empty) $(empty) | |
10 | - | |
11 | 1 | # Backward compatibility - to be removed... |
12 | 2 | extra-y += $(EXTRA_TARGETS) |
13 | 3 | # Figure out what we need to build from the various variables |
... | ... | @@ -84,10 +74,6 @@ |
84 | 74 | subdir-ym := $(addprefix $(obj)/,$(subdir-ym)) |
85 | 75 | obj-dirs := $(addprefix $(obj)/,$(obj-dirs)) |
86 | 76 | |
87 | -# The temporary file to save gcc -MD generated dependencies must not | |
88 | -# contain a comma | |
89 | -depfile = $(subst $(comma),_,$(@D)/.$(@F).d) | |
90 | - | |
91 | 77 | # These flags are needed for modversions and compiling, so we define them here |
92 | 78 | # already |
93 | 79 | # $(modname_flags) #defines KBUILD_MODNAME as the name of the module it will |
... | ... | @@ -178,85 +164,4 @@ |
178 | 164 | |
179 | 165 | quiet_cmd_gzip = GZIP $@ |
180 | 166 | cmd_gzip = gzip -f -9 < $< > $@ |
181 | - | |
182 | -# =========================================================================== | |
183 | -# Generic stuff | |
184 | -# =========================================================================== | |
185 | - | |
186 | -ifneq ($(KBUILD_NOCMDDEP),1) | |
187 | -# Check if both arguments has same arguments. Result in empty string if equal | |
188 | -# User may override this check using make KBUILD_NOCMDDEP=1 | |
189 | -arg-check = $(strip $(filter-out $(1), $(2)) $(filter-out $(2), $(1)) ) | |
190 | - | |
191 | -endif | |
192 | - | |
193 | -# echo command. Short version is $(quiet) equals quiet, otherwise full command | |
194 | -echo-cmd = $(if $($(quiet)cmd_$(1)), \ | |
195 | - echo ' $(subst ','\'',$($(quiet)cmd_$(1)))';) | |
196 | - | |
197 | -# function to only execute the passed command if necessary | |
198 | -# >'< substitution is for echo to work, >$< substitution to preserve $ when reloading .cmd file | |
199 | -# note: when using inline perl scripts [perl -e '...$$t=1;...'] in $(cmd_xxx) double $$ your perl vars | |
200 | -# | |
201 | -if_changed = $(if $(strip $? $(call arg-check, $(cmd_$(1)), $(cmd_$@)) ), \ | |
202 | - @set -e; \ | |
203 | - $(echo-cmd) \ | |
204 | - $(cmd_$(1)); \ | |
205 | - echo 'cmd_$@ := $(subst $$,$$$$,$(subst ','\'',$(cmd_$(1))))' > $(@D)/.$(@F).cmd) | |
206 | - | |
207 | - | |
208 | -# execute the command and also postprocess generated .d dependencies | |
209 | -# file | |
210 | - | |
211 | -if_changed_dep = $(if $(strip $? $(filter-out FORCE $(wildcard $^),$^)\ | |
212 | - $(call arg-check, $(cmd_$(1)), $(cmd_$@)) ), \ | |
213 | - @set -e; \ | |
214 | - $(echo-cmd) \ | |
215 | - $(cmd_$(1)); \ | |
216 | - scripts/basic/fixdep $(depfile) $@ '$(subst $$,$$$$,$(subst ','\'',$(cmd_$(1))))' > $(@D)/.$(@F).tmp; \ | |
217 | - rm -f $(depfile); \ | |
218 | - mv -f $(@D)/.$(@F).tmp $(@D)/.$(@F).cmd) | |
219 | - | |
220 | -# Usage: $(call if_changed_rule,foo) | |
221 | -# will check if $(cmd_foo) changed, or any of the prequisites changed, | |
222 | -# and if so will execute $(rule_foo) | |
223 | - | |
224 | -if_changed_rule = $(if $(strip $? $(call arg-check, $(cmd_$(1)), $(cmd_$@)) ),\ | |
225 | - @set -e; \ | |
226 | - $(rule_$(1))) | |
227 | - | |
228 | -# If quiet is set, only print short version of command | |
229 | - | |
230 | -cmd = @$(if $($(quiet)cmd_$(1)),echo ' $(subst ','\'',$($(quiet)cmd_$(1)))' &&) $(cmd_$(1)) | |
231 | - | |
232 | -# Shorthand for $(Q)$(MAKE) -f scripts/Makefile.build obj= | |
233 | -# Usage: | |
234 | -# $(Q)$(MAKE) $(build)=dir | |
235 | -build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj | |
236 | - | |
237 | -# filechk is used to check if the content of a generated file is updated. | |
238 | -# Sample usage: | |
239 | -# define filechk_sample | |
240 | -# echo $KERNELRELEASE | |
241 | -# endef | |
242 | -# version.h : Makefile | |
243 | -# $(call filechk,sample) | |
244 | -# The rule defined shall write to stdout the content of the new file. | |
245 | -# The existing file will be compared with the new one. | |
246 | -# - If no file exist it is created | |
247 | -# - If the content differ the new file is used | |
248 | -# - If they are equal no change, and no timestamp update | |
249 | - | |
250 | -define filechk | |
251 | - $(Q)set -e; \ | |
252 | - echo ' CHK $@'; \ | |
253 | - mkdir -p $(dir $@); \ | |
254 | - $(filechk_$(1)) $(2) > $@.tmp; \ | |
255 | - if [ -r $@ ] && cmp -s $@ $@.tmp; then \ | |
256 | - rm -f $@.tmp; \ | |
257 | - else \ | |
258 | - echo ' UPD $@'; \ | |
259 | - mv -f $@.tmp $@; \ | |
260 | - fi | |
261 | -endef |
scripts/Makefile.modinst
scripts/Makefile.modpost
usr/Makefile
... | ... | @@ -27,7 +27,7 @@ |
27 | 27 | filechk_initramfs_list = $(CONFIG_SHELL) \ |
28 | 28 | $(srctree)/scripts/gen_initramfs_list.sh $(gen_initramfs_args) $(quotefixed_initramfs_source) |
29 | 29 | |
30 | -$(obj)/initramfs_list: FORCE | |
30 | +$(obj)/initramfs_list: $(obj)/Makefile FORCE | |
31 | 31 | $(call filechk,initramfs_list) |
32 | 32 | |
33 | 33 | quiet_cmd_cpio = CPIO $@ |