Linux v2.5.52
[opensuse:kernel.git] / Makefile
1 VERSION = 2
2 PATCHLEVEL = 5
3 SUBLEVEL = 52
4 EXTRAVERSION =
5
6 # *DOCUMENTATION*
7 # To see a list of typical targets execute "make help"
8 # More info can be located in ./Documentation/kbuild
9 # Comments in this file are targeted only to the developer, do not
10 # expect to learn how to build the kernel reading this file.
11
12 # We are using a recursive build, so we need to do a little thinking
13 # to get the ordering right.
14 #
15 # Most importantly: sub-Makefiles should only ever modify files in
16 # their own directory. If in some directory we have a dependency on
17 # a file in another dir (which doesn't happen often, but it's of
18 # unavoidable when linking the built-in.o targets which finally
19 # turn into vmlinux), we will call a sub make in that other dir, and
20 # after that we are sure that everything which is in that other dir
21 # is now up to date.
22 #
23 # The only cases where we need to modify files which have global
24 # effects are thus separated out and done before the recursive
25 # descending is started. They are now explicitly listed as the
26 # prepare rule.
27
28 KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
29
30 # SUBARCH tells the usermode build what the underlying arch is.  That is set
31 # first, and if a usermode build is happening, the "ARCH=um" on the command
32 # line overrides the setting of ARCH below.  If a native build is happening,
33 # then ARCH is assigned, getting whatever value it gets normally, and 
34 # SUBARCH is subsequently ignored.
35
36 SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/)
37 ARCH := $(SUBARCH)
38
39 KERNELPATH=kernel-$(shell echo $(KERNELRELEASE) | sed -e "s/-//g")
40
41 UTS_MACHINE := $(ARCH)
42
43 CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
44           else if [ -x /bin/bash ]; then echo /bin/bash; \
45           else echo sh; fi ; fi)
46 TOPDIR  := $(CURDIR)
47
48 HOSTCC          = gcc
49 HOSTCXX         = g++
50 HOSTCFLAGS      = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer
51 HOSTCXXFLAGS    = -O2
52
53 CROSS_COMPILE   =
54
55 #       That's our default target when none is given on the command line
56
57 all:    vmlinux
58
59 #       Decide whether to build built-in, modular, or both.
60 #       Normally, just do built-in.
61
62 KBUILD_MODULES :=
63 KBUILD_BUILTIN := 1
64
65 #       If we have only "make modules", don't compile built-in objects.
66
67 ifeq ($(MAKECMDGOALS),modules)
68   KBUILD_BUILTIN :=
69 endif
70
71 #       If we have "make <whatever> modules", compile modules
72 #       in addition to whatever we do anyway.
73
74 ifneq ($(filter modules,$(MAKECMDGOALS)),)
75   KBUILD_MODULES := 1
76 endif
77
78 #       Just "make" or "make all" shall build modules as well
79
80 ifeq ($(MAKECMDGOALS),)
81   KBUILD_MODULES := 1
82 endif
83
84 ifneq ($(filter all,$(MAKECMDGOALS)),)
85   KBUILD_MODULES := 1
86 endif
87
88 export KBUILD_MODULES KBUILD_BUILTIN KBUILD_VERBOSE
89
90 # Beautify output
91 # ---------------------------------------------------------------------------
92 #
93 # Normally, we echo the whole command before executing it. By making
94 # that echo $($(quiet)$(cmd)), we now have the possibility to set
95 # $(quiet) to choose other forms of output instead, e.g.
96 #
97 #         quiet_cmd_cc_o_c = Compiling $(RELDIR)/$@
98 #         cmd_cc_o_c       = $(CC) $(c_flags) -c -o $@ $<
99 #
100 # If $(quiet) is empty, the whole command will be printed.
101 # If it is set to "quiet_", only the short version will be printed. 
102 # If it is set to "silent_", nothing wil be printed at all, since
103 # the variable $(silent_cmd_cc_o_c) doesn't exist.
104
105 #       For now, leave verbose as default
106
107 ifndef KBUILD_VERBOSE
108   KBUILD_VERBOSE = 1
109 endif
110
111 MAKEFLAGS += --no-print-directory
112
113 # For maximum performance (+ possibly random breakage, uncomment
114 # the following)
115
116 #MAKEFLAGS += -rR
117
118 #       If the user wants quiet mode, echo short versions of the commands 
119 #       only
120
121 ifeq ($(KBUILD_VERBOSE),1)
122   quiet =
123   Q =
124 else
125   quiet=quiet_
126   Q = @
127 endif
128
129 #       If the user is running make -s (silent mode), suppress echoing of
130 #       commands
131
132 ifneq ($(findstring s,$(MAKEFLAGS)),)
133   quiet=silent_
134 endif
135
136 export quiet Q KBUILD_VERBOSE
137
138 #       Paths to obj / src tree
139
140 src     := .
141 obj     := .
142 srctree := .
143 objtree := .
144
145 export srctree objtree
146
147 #       Make variables (CC, etc...)
148
149 AS              = $(CROSS_COMPILE)as
150 LD              = $(CROSS_COMPILE)ld
151 CC              = $(CROSS_COMPILE)gcc
152 CPP             = $(CC) -E
153 AR              = $(CROSS_COMPILE)ar
154 NM              = $(CROSS_COMPILE)nm
155 STRIP           = $(CROSS_COMPILE)strip
156 OBJCOPY         = $(CROSS_COMPILE)objcopy
157 OBJDUMP         = $(CROSS_COMPILE)objdump
158 AWK             = awk
159 GENKSYMS        = /sbin/genksyms
160 DEPMOD          = /sbin/depmod
161 KALLSYMS        = scripts/kallsyms
162 PERL            = perl
163 MODFLAGS        = -DMODULE
164 CFLAGS_MODULE   = $(MODFLAGS)
165 AFLAGS_MODULE   = $(MODFLAGS)
166 LDFLAGS_MODULE  = -r
167 CFLAGS_KERNEL   =
168 AFLAGS_KERNEL   =
169
170 NOSTDINC_FLAGS  = -nostdinc -iwithprefix include
171
172 CPPFLAGS        := -D__KERNEL__ -Iinclude
173 CFLAGS          := $(CPPFLAGS) -Wall -Wstrict-prototypes -Wno-trigraphs -O2 \
174                    -fno-strict-aliasing -fno-common
175 AFLAGS          := -D__ASSEMBLY__ $(CPPFLAGS)
176
177 export  VERSION PATCHLEVEL SUBLEVEL EXTRAVERSION KERNELRELEASE ARCH \
178         CONFIG_SHELL TOPDIR HOSTCC HOSTCFLAGS CROSS_COMPILE AS LD CC \
179         CPP AR NM STRIP OBJCOPY OBJDUMP MAKE AWK GENKSYMS PERL UTS_MACHINE \
180         HOSTCXX HOSTCXXFLAGS LDFLAGS_BLOB LDFLAGS_MODULE
181
182 export CPPFLAGS NOSTDINC_FLAGS OBJCOPYFLAGS LDFLAGS
183 export CFLAGS CFLAGS_KERNEL CFLAGS_MODULE 
184 export AFLAGS AFLAGS_KERNEL AFLAGS_MODULE
185
186 # The temporary file to save gcc -MD generated dependencies must not
187 # contain a comma
188 depfile = $(subst $(comma),_,$(@D)/.$(@F).d)
189
190 noconfig_targets := xconfig menuconfig config oldconfig randconfig \
191                     defconfig allyesconfig allnoconfig allmodconfig \
192                     clean mrproper distclean \
193                     help tags TAGS sgmldocs psdocs pdfdocs htmldocs \
194                     checkconfig checkhelp checkincludes
195
196 RCS_FIND_IGNORE := \( -name SCCS -o -name BitKeeper -o -name .svn -o -name CVS \) -prune -o
197 RCS_TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn --exclude CVS
198
199 # Helpers built in scripts/
200 # ---------------------------------------------------------------------------
201
202 scripts/docproc scripts/fixdep scripts/split-include : scripts ;
203
204 .PHONY: scripts
205 scripts:
206         $(Q)$(MAKE) -f scripts/Makefile.build obj=scripts
207
208 # Objects we will link into vmlinux / subdirs we need to visit
209 # ---------------------------------------------------------------------------
210
211 init-y          := init/
212 drivers-y       := drivers/ sound/
213 net-y           := net/
214 libs-y          := lib/
215 core-y          := usr/
216 SUBDIRS         :=
217
218 ifeq ($(filter $(noconfig_targets),$(MAKECMDGOALS)),)
219
220 export include_config := 1
221
222 -include .config
223
224 endif
225
226 include arch/$(ARCH)/Makefile
227
228 core-y          += kernel/ mm/ fs/ ipc/ security/ crypto/
229
230 SUBDIRS         += $(patsubst %/,%,$(filter %/, $(init-y) $(init-m) \
231                      $(core-y) $(core-m) $(drivers-y) $(drivers-m) \
232                      $(net-y) $(net-m) $(libs-y) $(libs-m)))
233
234 ALL_SUBDIRS     := $(sort $(SUBDIRS) $(patsubst %/,%,$(filter %/, \
235                      $(init-n) $(init-) \
236                      $(core-n) $(core-) $(drivers-n) $(drivers-) \
237                      $(net-n)  $(net-)  $(libs-n)    $(libs-))))
238
239 init-y          := $(patsubst %/, %/built-in.o, $(init-y))
240 core-y          := $(patsubst %/, %/built-in.o, $(core-y))
241 drivers-y       := $(patsubst %/, %/built-in.o, $(drivers-y))
242 net-y           := $(patsubst %/, %/built-in.o, $(net-y))
243 libs-y          := $(patsubst %/, %/lib.a, $(libs-y))
244
245 ifdef include_config
246
247 # Here goes the main Makefile
248 # ===========================================================================
249 #
250 # If the user gave a *config target, it'll be handled in another
251 # section below, since in this case we cannot include .config
252 # Same goes for other targets like clean/mrproper etc, which
253 # don't need .config, either
254
255 #       In this section, we need .config
256
257 -include .config.cmd
258
259 ifdef CONFIG_MODULES
260 export EXPORT_FLAGS := -DEXPORT_SYMTAB
261 endif
262
263 ifndef CONFIG_FRAME_POINTER
264 CFLAGS          += -fomit-frame-pointer
265 endif
266
267 #
268 # INSTALL_PATH specifies where to place the updated kernel and system map
269 # images.  Uncomment if you want to place them anywhere other than root.
270 #
271
272 #export INSTALL_PATH=/boot
273
274 #
275 # INSTALL_MOD_PATH specifies a prefix to MODLIB for module directory
276 # relocations required by build roots.  This is not defined in the
277 # makefile but the arguement can be passed to make if needed.
278 #
279
280 MODLIB  := $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE)
281 export MODLIB
282
283 # Build vmlinux
284 # ---------------------------------------------------------------------------
285
286 #       This is a bit tricky: If we need to relink vmlinux, we want
287 #       the version number incremented, which means recompile init/version.o
288 #       and relink init/init.o. However, we cannot do this during the
289 #       normal descending-into-subdirs phase, since at that time
290 #       we cannot yet know if we will need to relink vmlinux.
291 #       So we descend into init/ inside the rule for vmlinux again.
292
293 vmlinux-objs := $(HEAD) $(init-y) $(core-y) $(libs-y) $(drivers-y) $(net-y)
294
295 quiet_cmd_vmlinux__ = LD      $@
296 define cmd_vmlinux__
297         $(LD) $(LDFLAGS) $(LDFLAGS_vmlinux) $(HEAD) $(init-y) \
298         --start-group \
299         $(core-y) \
300         $(libs-y) \
301         $(drivers-y) \
302         $(net-y) \
303         --end-group \
304         $(filter .tmp_kallsyms%,$^) \
305         -o $@
306 endef
307
308 #       set -e makes the rule exit immediately on error
309 #       Final awk script makes sure per-cpu vars are in per-cpu section, as
310 #       old gcc (eg egcs 2.92.11) ignores section attribute if uninitialized.
311
312 define rule_vmlinux__
313         set -e
314         $(if $(filter .tmp_kallsyms%,$^),,
315           echo '  Generating build number'
316           . scripts/mkversion > .tmp_version
317           mv -f .tmp_version .version
318           $(Q)$(MAKE) -f scripts/Makefile.build obj=init
319         )
320         $(call cmd,vmlinux__)
321         echo 'cmd_$@ := $(cmd_vmlinux__)' > $(@D)/.$(@F).cmd
322 endef
323
324 define rule_vmlinux_no_percpu
325         $(rule_vmlinux__)
326         $(NM) $@ | grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | sort > System.map
327 endef
328
329 ifdef CONFIG_SMP
330 define rule_vmlinux
331         $(rule_vmlinux_no_percpu)
332         $(AWK) -f scripts/per-cpu-check.awk < System.map
333 endef
334 else
335 define rule_vmlinux
336         $(rule_vmlinux_no_percpu)
337 endef
338 endif
339
340 LDFLAGS_vmlinux += -T arch/$(ARCH)/vmlinux.lds.s
341
342 #       Generate section listing all symbols and add it into vmlinux
343 #       It's a three stage process:
344 #       o .tmp_vmlinux1 has all symbols and sections, but __kallsyms is
345 #         empty
346 #         Running kallsyms on that gives as .tmp_kallsyms1.o with
347 #         the right size
348 #       o .tmp_vmlinux2 now has a __kallsyms section of the right size,
349 #         but due to the added section, some addresses have shifted
350 #         From here, we generate a correct .tmp_kallsyms2.o
351 #       o The correct .tmp_kallsyms2.o is linked into the final vmlinux.
352
353 ifdef CONFIG_KALLSYMS
354
355 kallsyms.o := .tmp_kallsyms2.o
356
357 quiet_cmd_kallsyms = KSYM    $@
358 cmd_kallsyms = $(NM) -n $< | scripts/kallsyms > $@
359
360 .tmp_kallsyms1.o .tmp_kallsyms2.o: %.o: %.S scripts FORCE
361         $(call if_changed_dep,as_o_S)
362
363 .tmp_kallsyms%.S: .tmp_vmlinux%
364         $(call cmd,kallsyms)
365
366 .tmp_vmlinux1: $(vmlinux-objs) arch/$(ARCH)/vmlinux.lds.s FORCE
367         $(call if_changed_rule,vmlinux__)
368
369 .tmp_vmlinux2: $(vmlinux-objs) .tmp_kallsyms1.o arch/$(ARCH)/vmlinux.lds.s FORCE
370         $(call if_changed_rule,vmlinux__)
371
372 endif
373
374 #       Finally the vmlinux rule
375
376 vmlinux: $(vmlinux-objs) $(kallsyms.o) arch/$(ARCH)/vmlinux.lds.s FORCE
377         $(call if_changed_rule,vmlinux)
378
379 #       The actual objects are generated when descending, 
380 #       make sure no implicit rule kicks in
381
382 $(sort $(vmlinux-objs)): $(SUBDIRS) ;
383
384 #       Handle descending into subdirectories listed in $(SUBDIRS)
385
386 .PHONY: $(SUBDIRS)
387 $(SUBDIRS): .hdepend prepare
388         $(Q)$(MAKE) -f scripts/Makefile.build obj=$@
389
390 #       Things we need done before we descend to build or make
391 #       module versions are listed in "prepare"
392
393 .PHONY: prepare
394 prepare: include/linux/version.h include/asm include/config/MARKER
395         @echo '  Starting the build. KBUILD_BUILTIN=$(KBUILD_BUILTIN) KBUILD_MODULES=$(KBUILD_MODULES)'
396
397 #       This can be used by arch/$ARCH/Makefile to preprocess
398 #       their vmlinux.lds.S file
399
400 AFLAGS_vmlinux.lds.o += -P -C -U$(ARCH)
401
402 arch/$(ARCH)/vmlinux.lds.s: %.s: %.S scripts FORCE
403         $(call if_changed_dep,as_s_S)
404
405 targets += arch/$(ARCH)/vmlinux.lds.s
406
407 # Single targets
408 # ---------------------------------------------------------------------------
409
410 %.s: %.c scripts FORCE
411         $(Q)$(MAKE) -f scripts/Makefile.build obj=$(@D) $@
412 %.i: %.c scripts FORCE
413         $(Q)$(MAKE) -f scripts/Makefile.build obj=$(@D) $@
414 %.o: %.c scripts FORCE
415         $(Q)$(MAKE) -f scripts/Makefile.build obj=$(@D) $@
416 %.lst: %.c scripts FORCE
417         $(Q)$(MAKE) -f scripts/Makefile.build obj=$(@D) $@
418 %.s: %.S scripts FORCE
419         $(Q)$(MAKE) -f scripts/Makefile.build obj=$(@D) $@
420 %.o: %.S scripts FORCE
421         $(Q)$(MAKE) -f scripts/Makefile.build obj=$(@D) $@
422
423 #       FIXME: The asm symlink changes when $(ARCH) changes. That's
424 #       hard to detect, but I suppose "make mrproper" is a good idea
425 #       before switching between archs anyway.
426
427 include/asm:
428         @echo '  Making asm->asm-$(ARCH) symlink'
429         @ln -s asm-$(ARCH) $@
430
431 #       Split autoconf.h into include/linux/config/*
432
433 include/config/MARKER: scripts/split-include include/linux/autoconf.h
434         @echo '  SPLIT  include/linux/autoconf.h -> include/config/*'
435         @scripts/split-include include/linux/autoconf.h include/config
436         @touch $@
437
438 #       if .config is newer than include/linux/autoconf.h, someone tinkered
439 #       with it and forgot to run make oldconfig
440
441 include/linux/autoconf.h: .config
442         $(Q)$(MAKE) -f scripts/Makefile.build obj=scripts/kconfig scripts/kconfig/conf
443         ./scripts/kconfig/conf -s arch/$(ARCH)/Kconfig
444
445 # Generate some files
446 # ---------------------------------------------------------------------------
447
448 #       version.h changes when $(KERNELRELEASE) etc change, as defined in
449 #       this Makefile
450
451 uts_len := 64
452
453 include/linux/version.h: Makefile
454         @if expr length "$(KERNELRELEASE)" \> $(uts_len) >/dev/null ; then \
455           echo '"$(KERNELRELEASE)" exceeds $(uts_len) characters' >&2; \
456           exit 1; \
457         fi;
458         @echo -n '  Generating $@'
459         @(echo \#define UTS_RELEASE \"$(KERNELRELEASE)\"; \
460           echo \#define LINUX_VERSION_CODE `expr $(VERSION) \\* 65536 + $(PATCHLEVEL) \\* 256 + $(SUBLEVEL)`; \
461          echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))'; \
462         ) > $@.tmp
463         @$(update-if-changed)
464
465 # Generate module versions
466 # ---------------------------------------------------------------------------
467
468 #       The targets are still named depend / dep for traditional
469 #       reasons, but the only thing we do here is generating
470 #       the module version checksums.
471
472 .PHONY: depend dep $(patsubst %,_sfdep_%,$(SUBDIRS))
473
474 depend dep: .hdepend
475
476 #       .hdepend is our (misnomed) marker for whether we've
477 #       generated module versions
478
479 make-versions := $(strip $(if $(filter dep depend,$(MAKECMDGOALS)),1) \
480                          $(if $(wildcard .hdepend),,1))
481
482 .hdepend: prepare FORCE
483 ifneq ($(make-versions),)
484         @$(MAKE) include/linux/modversions.h
485         @touch $@
486 endif
487
488 ifdef CONFIG_MODVERSIONS
489
490 #       Update modversions.h, but only if it would change.
491
492 .PHONY: __rm_tmp_export-objs
493 __rm_tmp_export-objs: 
494         @rm -rf .tmp_export-objs
495
496 include/linux/modversions.h: $(patsubst %,_modver_%,$(SUBDIRS))
497         @echo -n '  Generating $@'
498         @( echo "#ifndef _LINUX_MODVERSIONS_H";\
499            echo "#define _LINUX_MODVERSIONS_H"; \
500            echo "#include <linux/modsetver.h>"; \
501            cd .tmp_export-objs >/dev/null; \
502            for f in `find modules -name \*.ver -print | sort`; do \
503              echo "#include <linux/$${f}>"; \
504            done; \
505            echo "#endif"; \
506         ) > $@.tmp; \
507         $(update-if-changed)
508
509 .PHONY: $(patsubst %, _modver_%, $(SUBDIRS))
510 $(patsubst %, _modver_%, $(SUBDIRS)): __rm_tmp_export-objs
511         $(Q)$(MAKE) -f scripts/Makefile.modver obj=$(patsubst _modver_%,%,$@)
512
513 else # !CONFIG_MODVERSIONS
514
515 .PHONY: include/linux/modversions.h
516
517 include/linux/modversions.h:
518
519 endif # CONFIG_MODVERSIONS
520
521 # ---------------------------------------------------------------------------
522 # Modules
523
524 ifdef CONFIG_MODULES
525
526 #       Build modules
527
528 ifdef CONFIG_MODVERSIONS
529 MODFLAGS += -include include/linux/modversions.h
530 endif
531
532 .PHONY: modules
533 modules: $(SUBDIRS)
534
535 #       Install modules
536
537 .PHONY: modules_install
538 modules_install: _modinst_ $(patsubst %, _modinst_%, $(SUBDIRS)) _modinst_post
539
540 .PHONY: _modinst_
541 _modinst_:
542         @rm -rf $(MODLIB)/kernel
543         @rm -f $(MODLIB)/build
544         @mkdir -p $(MODLIB)/kernel
545         @ln -s $(TOPDIR) $(MODLIB)/build
546
547 # If System.map exists, run depmod.  This deliberately does not have a
548 # dependency on System.map since that would run the dependency tree on
549 # vmlinux.  This depmod is only for convenience to give the initial
550 # boot a modules.dep even before / is mounted read-write.  However the
551 # boot script depmod is the master version.
552 ifeq "$(strip $(INSTALL_MOD_PATH))" ""
553 depmod_opts     :=
554 else
555 depmod_opts     := -b $(INSTALL_MOD_PATH) -r
556 endif
557 .PHONY: _modinst_post
558 _modinst_post:
559         if [ -r System.map ]; then $(DEPMOD) -ae -F System.map $(depmod_opts) $(KERNELRELEASE); fi
560
561 .PHONY: $(patsubst %, _modinst_%, $(SUBDIRS))
562 $(patsubst %, _modinst_%, $(SUBDIRS)) :
563         $(Q)$(MAKE) -rR -f scripts/Makefile.modinst obj=$(patsubst _modinst_%,%,$@)
564 else # CONFIG_MODULES
565
566 # Modules not configured
567 # ---------------------------------------------------------------------------
568
569 modules modules_install: FORCE
570         @echo
571         @echo "The present kernel configuration has modules disabled."
572         @echo "Type 'make config' and enable loadable module support."
573         @echo "Then build a kernel with module support enabled."
574         @echo
575         @exit 1
576
577 endif # CONFIG_MODULES
578
579 # Generate asm-offsets.h 
580 # ---------------------------------------------------------------------------
581
582 define generate-asm-offsets.h
583         (set -e; \
584          echo "#ifndef __ASM_OFFSETS_H__"; \
585          echo "#define __ASM_OFFSETS_H__"; \
586          echo "/*"; \
587          echo " * DO NOT MODIFY."; \
588          echo " *"; \
589          echo " * This file was generated by arch/$(ARCH)/Makefile"; \
590          echo " *"; \
591          echo " */"; \
592          echo ""; \
593          sed -ne "/^->/{s:^->\([^ ]*\) [\$$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; s:->::; p;}"; \
594          echo ""; \
595          echo "#endif" )
596 endef
597
598 # RPM target
599 # ---------------------------------------------------------------------------
600
601 #       If you do a make spec before packing the tarball you can rpm -ta it
602
603 spec:
604         . scripts/mkspec >kernel.spec
605
606 #       Build a tar ball, generate an rpm from it and pack the result
607 #       There arw two bits of magic here
608 #       1) The use of /. to avoid tar packing just the symlink
609 #       2) Removing the .dep files as they have source paths in them that
610 #          will become invalid
611
612 rpm:    clean spec
613         find . $(RCS_FIND_IGNORE) \
614                 \( -size 0 -o -name .depend -o -name .hdepend \) \
615                 -type f -print | xargs rm -f
616         set -e; \
617         cd $(TOPDIR)/.. ; \
618         ln -sf $(TOPDIR) $(KERNELPATH) ; \
619         tar -cvz $(RCS_TAR_IGNORE) -f $(KERNELPATH).tar.gz $(KERNELPATH)/. ; \
620         rm $(KERNELPATH) ; \
621         cd $(TOPDIR) ; \
622         . scripts/mkversion > .version ; \
623         rpm -ta $(TOPDIR)/../$(KERNELPATH).tar.gz ; \
624         rm $(TOPDIR)/../$(KERNELPATH).tar.gz
625
626 else # ifdef include_config
627
628 ifeq ($(filter-out $(noconfig_targets),$(MAKECMDGOALS)),)
629
630 # Targets which don't need .config
631 # ===========================================================================
632 #
633 # These targets basically have their own Makefile - not quite, but at
634 # least its own exclusive section in the same Makefile. The reason for
635 # this is the following:
636 # To know the configuration, the main Makefile has to include
637 # .config. That's a obviously a problem when .config doesn't exist
638 # yet, but that could be kludged around with only including it if it
639 # exists.
640 # However, the larger problem is: If you run make *config, make will
641 # include the old .config, then execute your *config. It will then
642 # notice that a piece it included (.config) did change and restart from
643 # scratch. Which will cause execution of *config again. You get the
644 # picture.
645 # If we don't explicitly let the Makefile know that .config is changed
646 # by *config (the old way), it won't reread .config after *config,
647 # thus working with possibly stale values - we don't that either.
648 #
649 # So we divide things: This part here is for making *config targets,
650 # and other targets which should work when no .config exists yet.
651 # The main part above takes care of the rest after a .config exists.
652
653 # Kernel configuration
654 # ---------------------------------------------------------------------------
655
656 .PHONY: oldconfig xconfig menuconfig config \
657         make_with_config
658
659 scripts/kconfig/conf scripts/kconfig/mconf scripts/kconfig/qconf: scripts/fixdep FORCE
660         $(Q)$(MAKE) -f scripts/Makefile.build obj=scripts/kconfig $@
661
662 xconfig: scripts/kconfig/qconf
663         ./scripts/kconfig/qconf arch/$(ARCH)/Kconfig
664
665 menuconfig: scripts/kconfig/mconf
666         $(Q)$(MAKE) -f scripts/Makefile.build obj=scripts/lxdialog
667         ./scripts/kconfig/mconf arch/$(ARCH)/Kconfig
668
669 config: scripts/kconfig/conf
670         ./scripts/kconfig/conf arch/$(ARCH)/Kconfig
671
672 oldconfig: scripts/kconfig/conf
673         ./scripts/kconfig/conf -o arch/$(ARCH)/Kconfig
674
675 randconfig: scripts/kconfig/conf
676         ./scripts/kconfig/conf -r arch/$(ARCH)/Kconfig
677
678 allyesconfig: scripts/kconfig/conf
679         ./scripts/kconfig/conf -y arch/$(ARCH)/Kconfig
680
681 allnoconfig: scripts/kconfig/conf
682         ./scripts/kconfig/conf -n arch/$(ARCH)/Kconfig
683
684 allmodconfig: scripts/kconfig/conf
685         ./scripts/kconfig/conf -m arch/$(ARCH)/Kconfig
686
687 defconfig: scripts/kconfig/conf
688         ./scripts/kconfig/conf -d arch/$(ARCH)/Kconfig
689
690 ###
691 # Cleaning is done on three levels.
692 # make clean     Delete all automatically generated files, including
693 #                tools and firmware.
694 # make mrproper  Delete the current configuration, and related files
695 #                Any core files spread around is deleted as well
696 # make distclean Remove editor backup files, patch leftover files and the like
697
698 # Files removed with 'make clean'
699 CLEAN_FILES += vmlinux System.map MC*
700
701 # Files removed with 'make mrproper'
702 MRPROPER_FILES += \
703         include/linux/autoconf.h include/linux/version.h \
704         .version .config .config.old config.in config.old \
705         .menuconfig.log \
706         include/asm \
707         .hdepend include/linux/modversions.h \
708         tags TAGS kernel.spec \
709         .tmp*
710
711 # Directories removed with 'make mrproper'
712 MRPROPER_DIRS += \
713         .tmp_export-objs \
714         include/config \
715         include/linux/modules
716
717 # clean - Delete all intermediate files
718 #
719 clean-dirs += $(ALL_SUBDIRS) Documentation/DocBook scripts
720
721 $(addprefix _clean_,$(clean-dirs)):
722         $(Q)$(MAKE) -f scripts/Makefile.clean obj=$(patsubst _clean_%,%,$@)
723
724 quiet_cmd_rmclean = RM  $$(CLEAN_FILES)
725 cmd_rmclean       = rm -f $(CLEAN_FILES)
726 clean: archclean $(addprefix _clean_,$(clean-dirs))
727         $(call cmd,rmclean)
728         @find . $(RCS_FIND_IGNORE) \
729                 \( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \
730                 -o -name '.*.d' -o -name '.*.tmp' \) -type f \
731                 -print | xargs rm -f
732
733 # mrproper - delete configuration + modules + core files
734 #
735 quiet_cmd_mrproper = RM  $$(MRPROPER_DIRS) + $$(MRPROPER_FILES)
736 cmd_mrproper = rm -rf $(MRPROPER_DIRS) && rm -f $(MRPROPER_FILES)
737 mrproper distclean: clean archmrproper
738         @echo '  Making $@ in the srctree'
739         @find . $(RCS_FIND_IGNORE) \
740                 \( -name '*.orig' -o -name '*.rej' -o -name '*~' \
741                 -o -name '*.bak' -o -name '#*#' -o -name '.*.orig' \
742                 -o -name '.*.rej' -o -size 0 \
743                 -o -name '*%' -o -name '.*.cmd' -o -name 'core' \) \
744                 -type f -print | xargs rm -f
745         $(call cmd,mrproper)
746
747 # Generate tags for editors
748 # ---------------------------------------------------------------------------
749
750 define all-sources
751         ( find . $(RCS_FIND_IGNORE) \
752                \( -name include -o -name arch \) -prune -o \
753                -name '*.[chS]' -print; \
754           find arch/$(ARCH) $(RCS_FIND_IGNORE) \
755                -name '*.[chS]' -print; \
756           find include $(RCS_FIND_IGNORE) \
757                \( -name config -o -name 'asm-*' \) -prune \
758                -o -name '*.[chS]' -print; \
759           find include/asm-$(ARCH) $(RCS_FIND_IGNORE) \
760                -name '*.[chS]' -print; \
761           find include/asm-generic $(RCS_FIND_IGNORE) \
762                -name '*.[chS]' -print )
763 endef
764
765 quiet_cmd_TAGS = MAKE   $@
766 cmd_TAGS = $(all-sources) | etags -
767
768 #       Exuberant ctags works better with -I
769
770 quiet_cmd_tags = MAKE   $@
771 define cmd_tags
772         rm -f $@; \
773         CTAGSF=`ctags --version | grep -i exuberant >/dev/null && echo "-I __initdata,__exitdata,EXPORT_SYMBOL,EXPORT_SYMBOL_NOVERS"`; \
774         $(all-sources) | xargs ctags $$CTAGSF -a
775 endef
776
777 TAGS: FORCE
778         $(call cmd,TAGS)
779
780 tags: FORCE
781         $(call cmd,tags)
782
783 # Brief documentation of the typical targets used
784 # ---------------------------------------------------------------------------
785
786 help:
787         @echo  'Cleaning targets:'
788         @echo  '  clean         - remove most generated files but keep the config'
789         @echo  '  mrproper      - remove all generated files + config + various backup files'
790         @echo  ''
791         @echo  'Configuration targets:'
792         @echo  '  oldconfig     - Update current config utilising a line-oriented program'
793         @echo  '  menuconfig    - Update current config utilising a menu based program'
794         @echo  '  xconfig       - Update current config utilising a X-based program'
795         @echo  '  defconfig     - New config with default answer to all options'
796         @echo  '  allmodconfig  - New config selecting modules when possible'
797         @echo  '  allyesconfig  - New config where all options are accepted with yes'
798         @echo  '  allnoconfig   - New minimal config'
799         @echo  ''
800         @echo  'Other generic targets:'
801         @echo  '  all           - Build all targets marked with [*]'
802         @echo  '  dep           - Create module version information'
803         @echo  '* vmlinux       - Build the bare kernel'
804         @echo  '* modules       - Build all modules'
805         @echo  '  dir/file.[ois]- Build specified target only'
806         @echo  '  rpm           - Build a kernel as an RPM package'
807         @echo  '  tags/TAGS     - Generate tags file for editors'
808         @echo  ''
809         @echo  'Documentation targets:'
810         @$(MAKE) --no-print-directory -f Documentation/DocBook/Makefile dochelp
811         @echo  ''
812         @echo  'Architecture specific targets ($(ARCH)):'
813         @$(MAKE) --no-print-directory -f arch/$(ARCH)/boot/Makefile archhelp
814         @echo  ''
815         @echo  'Execute "make" or "make all" to build all targets marked with [*] '
816         @echo  'For further info browse Documentation/kbuild/*'
817
818
819 # Documentation targets
820 # ---------------------------------------------------------------------------
821 sgmldocs psdocs pdfdocs htmldocs: scripts
822         $(Q)$(MAKE) -f scripts/Makefile.build obj=Documentation/DocBook $@
823
824 # Scripts to check various things for consistency
825 # ---------------------------------------------------------------------------
826
827 checkconfig:
828         find * $(RCS_FIND_IGNORE) \
829                 -name '*.[hcS]' -type f -print | sort \
830                 | xargs $(PERL) -w scripts/checkconfig.pl
831
832 checkhelp:
833         find * $(RCS_FIND_IGNORE) \
834                 -name [cC]onfig.in -print | sort \
835                 | xargs $(PERL) -w scripts/checkhelp.pl
836
837 checkincludes:
838         find * $(RCS_FIND_IGNORE) \
839                 -name '*.[hcS]' -type f -print | sort \
840                 | xargs $(PERL) -w scripts/checkincludes.pl
841
842 else # ifneq ($(filter-out $(noconfig_targets),$(MAKECMDGOALS)),)
843
844 # We're called with both targets which do and do not need
845 # .config included. Handle them one after the other.
846 # ===========================================================================
847
848 %:: FORCE
849         $(Q)$(MAKE) $@
850
851 endif # ifeq ($(filter-out $(noconfig_targets),$(MAKECMDGOALS)),)
852 endif # ifdef include_config
853
854 # FIXME Should go into a make.lib or something 
855 # ===========================================================================
856
857 a_flags = -Wp,-MD,$(depfile) $(AFLAGS) $(NOSTDINC_FLAGS) \
858           $(modkern_aflags) $(EXTRA_AFLAGS) $(AFLAGS_$(*F).o)
859
860 quiet_cmd_as_s_S = CPP     $@
861 cmd_as_s_S       = $(CPP) $(a_flags)   -o $@ $< 
862
863 quiet_cmd_as_o_S = AS      $@
864 cmd_as_o_S       = $(CC) $(a_flags) -c -o $@ $<
865
866 # read all saved command lines
867
868 targets := $(wildcard $(sort $(targets)))
869 cmd_files := $(wildcard .*.cmd $(foreach f,$(targets),$(dir $(f)).$(notdir $(f)).cmd))
870
871 ifneq ($(cmd_files),)
872   include $(cmd_files)
873 endif
874
875 # execute the command and also postprocess generated .d dependencies
876 # file
877
878 if_changed_dep = $(if $(strip $? $(filter-out FORCE $(wildcard $^),$^)\
879                           $(filter-out $(cmd_$(1)),$(cmd_$@))\
880                           $(filter-out $(cmd_$@),$(cmd_$(1)))),\
881         @set -e; \
882         $(if $($(quiet)cmd_$(1)),echo '  $($(quiet)cmd_$(1))';) \
883         $(cmd_$(1)); \
884         scripts/fixdep $(depfile) $@ '$(cmd_$(1))' > $(@D)/.$(@F).tmp; \
885         rm -f $(depfile); \
886         mv -f $(@D)/.$(@F).tmp $(@D)/.$(@F).cmd)
887
888 # Usage: $(call if_changed_rule,foo)
889 # will check if $(cmd_foo) changed, or any of the prequisites changed,
890 # and if so will execute $(rule_foo)
891
892 if_changed_rule = $(if $(strip $? \
893                                $(filter-out $(cmd_$(1)),$(cmd_$(@F)))\
894                                $(filter-out $(cmd_$(@F)),$(cmd_$(1)))),\
895                        @$(rule_$(1)))
896
897 # If quiet is set, only print short version of command
898
899 cmd = @$(if $($(quiet)cmd_$(1)),echo '  $($(quiet)cmd_$(1))' &&) $(cmd_$(1))
900
901 define update-if-changed
902         if [ -r $@ ] && cmp -s $@ $@.tmp; then \
903                 echo ' (unchanged)'; \
904                 rm -f $@.tmp; \
905         else \
906                 echo ' (updated)'; \
907                 mv -f $@.tmp $@; \
908         fi
909 endef
910 #       $(call descend,<dir>,<target>)
911 #       Recursively call a sub-make in <dir> with target <target>
912
913 descend =$(Q)$(MAKE) -f scripts/Makefile.build obj=$(1) $(2)
914
915 FORCE: