Linux 2.6.39-rc7
[linux-2.6.git] / Makefile
1 VERSION = 2
2 PATCHLEVEL = 6
3 SUBLEVEL = 39
4 EXTRAVERSION = -rc7
5 NAME = Flesh-Eating Bats with Fangs
6
7 # *DOCUMENTATION*
8 # To see a list of typical targets execute "make help"
9 # More info can be located in ./README
10 # Comments in this file are targeted only to the developer, do not
11 # expect to learn how to build the kernel reading this file.
12
13 # Do not:
14 # o  use make's built-in rules and variables
15 #    (this increases performance and avoids hard-to-debug behaviour);
16 # o  print "Entering directory ...";
17 MAKEFLAGS += -rR --no-print-directory
18
19 # Avoid funny character set dependencies
20 unexport LC_ALL
21 LC_COLLATE=C
22 LC_NUMERIC=C
23 export LC_COLLATE LC_NUMERIC
24
25 # We are using a recursive build, so we need to do a little thinking
26 # to get the ordering right.
27 #
28 # Most importantly: sub-Makefiles should only ever modify files in
29 # their own directory. If in some directory we have a dependency on
30 # a file in another dir (which doesn't happen often, but it's often
31 # unavoidable when linking the built-in.o targets which finally
32 # turn into vmlinux), we will call a sub make in that other dir, and
33 # after that we are sure that everything which is in that other dir
34 # is now up to date.
35 #
36 # The only cases where we need to modify files which have global
37 # effects are thus separated out and done before the recursive
38 # descending is started. They are now explicitly listed as the
39 # prepare rule.
40
41 # To put more focus on warnings, be less verbose as default
42 # Use 'make V=1' to see the full commands
43
44 ifeq ("$(origin V)", "command line")
45   KBUILD_VERBOSE = $(V)
46 endif
47 ifndef KBUILD_VERBOSE
48   KBUILD_VERBOSE = 0
49 endif
50
51 # Call a source code checker (by default, "sparse") as part of the
52 # C compilation.
53 #
54 # Use 'make C=1' to enable checking of only re-compiled files.
55 # Use 'make C=2' to enable checking of *all* source files, regardless
56 # of whether they are re-compiled or not.
57 #
58 # See the file "Documentation/sparse.txt" for more details, including
59 # where to get the "sparse" utility.
60
61 ifeq ("$(origin C)", "command line")
62   KBUILD_CHECKSRC = $(C)
63 endif
64 ifndef KBUILD_CHECKSRC
65   KBUILD_CHECKSRC = 0
66 endif
67
68 # Use make M=dir to specify directory of external module to build
69 # Old syntax make ... SUBDIRS=$PWD is still supported
70 # Setting the environment variable KBUILD_EXTMOD take precedence
71 ifdef SUBDIRS
72   KBUILD_EXTMOD ?= $(SUBDIRS)
73 endif
74
75 ifeq ("$(origin M)", "command line")
76   KBUILD_EXTMOD := $(M)
77 endif
78
79 # kbuild supports saving output files in a separate directory.
80 # To locate output files in a separate directory two syntaxes are supported.
81 # In both cases the working directory must be the root of the kernel src.
82 # 1) O=
83 # Use "make O=dir/to/store/output/files/"
84 #
85 # 2) Set KBUILD_OUTPUT
86 # Set the environment variable KBUILD_OUTPUT to point to the directory
87 # where the output files shall be placed.
88 # export KBUILD_OUTPUT=dir/to/store/output/files/
89 # make
90 #
91 # The O= assignment takes precedence over the KBUILD_OUTPUT environment
92 # variable.
93
94
95 # KBUILD_SRC is set on invocation of make in OBJ directory
96 # KBUILD_SRC is not intended to be used by the regular user (for now)
97 ifeq ($(KBUILD_SRC),)
98
99 # OK, Make called in directory where kernel src resides
100 # Do we want to locate output files in a separate directory?
101 ifeq ("$(origin O)", "command line")
102   KBUILD_OUTPUT := $(O)
103 endif
104
105 ifeq ("$(origin W)", "command line")
106   export KBUILD_ENABLE_EXTRA_GCC_CHECKS := 1
107 endif
108
109 # That's our default target when none is given on the command line
110 PHONY := _all
111 _all:
112
113 # Cancel implicit rules on top Makefile
114 $(CURDIR)/Makefile Makefile: ;
115
116 ifneq ($(KBUILD_OUTPUT),)
117 # Invoke a second make in the output directory, passing relevant variables
118 # check that the output directory actually exists
119 saved-output := $(KBUILD_OUTPUT)
120 KBUILD_OUTPUT := $(shell cd $(KBUILD_OUTPUT) && /bin/pwd)
121 $(if $(KBUILD_OUTPUT),, \
122      $(error output directory "$(saved-output)" does not exist))
123
124 PHONY += $(MAKECMDGOALS) sub-make
125
126 $(filter-out _all sub-make $(CURDIR)/Makefile, $(MAKECMDGOALS)) _all: sub-make
127         $(Q)@:
128
129 sub-make: FORCE
130         $(if $(KBUILD_VERBOSE:1=),@)$(MAKE) -C $(KBUILD_OUTPUT) \
131         KBUILD_SRC=$(CURDIR) \
132         KBUILD_EXTMOD="$(KBUILD_EXTMOD)" -f $(CURDIR)/Makefile \
133         $(filter-out _all sub-make,$(MAKECMDGOALS))
134
135 # Leave processing to above invocation of make
136 skip-makefile := 1
137 endif # ifneq ($(KBUILD_OUTPUT),)
138 endif # ifeq ($(KBUILD_SRC),)
139
140 # We process the rest of the Makefile if this is the final invocation of make
141 ifeq ($(skip-makefile),)
142
143 # If building an external module we do not care about the all: rule
144 # but instead _all depend on modules
145 PHONY += all
146 ifeq ($(KBUILD_EXTMOD),)
147 _all: all
148 else
149 _all: modules
150 endif
151
152 srctree         := $(if $(KBUILD_SRC),$(KBUILD_SRC),$(CURDIR))
153 objtree         := $(CURDIR)
154 src             := $(srctree)
155 obj             := $(objtree)
156
157 VPATH           := $(srctree)$(if $(KBUILD_EXTMOD),:$(KBUILD_EXTMOD))
158
159 export srctree objtree VPATH
160
161
162 # SUBARCH tells the usermode build what the underlying arch is.  That is set
163 # first, and if a usermode build is happening, the "ARCH=um" on the command
164 # line overrides the setting of ARCH below.  If a native build is happening,
165 # then ARCH is assigned, getting whatever value it gets normally, and 
166 # SUBARCH is subsequently ignored.
167
168 SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
169                                   -e s/arm.*/arm/ -e s/sa110/arm/ \
170                                   -e s/s390x/s390/ -e s/parisc64/parisc/ \
171                                   -e s/ppc.*/powerpc/ -e s/mips.*/mips/ \
172                                   -e s/sh[234].*/sh/ )
173
174 # Cross compiling and selecting different set of gcc/bin-utils
175 # ---------------------------------------------------------------------------
176 #
177 # When performing cross compilation for other architectures ARCH shall be set
178 # to the target architecture. (See arch/* for the possibilities).
179 # ARCH can be set during invocation of make:
180 # make ARCH=ia64
181 # Another way is to have ARCH set in the environment.
182 # The default ARCH is the host where make is executed.
183
184 # CROSS_COMPILE specify the prefix used for all executables used
185 # during compilation. Only gcc and related bin-utils executables
186 # are prefixed with $(CROSS_COMPILE).
187 # CROSS_COMPILE can be set on the command line
188 # make CROSS_COMPILE=ia64-linux-
189 # Alternatively CROSS_COMPILE can be set in the environment.
190 # A third alternative is to store a setting in .config so that plain
191 # "make" in the configured kernel build directory always uses that.
192 # Default value for CROSS_COMPILE is not to prefix executables
193 # Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile
194 export KBUILD_BUILDHOST := $(SUBARCH)
195 ARCH            ?= $(SUBARCH)
196 CROSS_COMPILE   ?= $(CONFIG_CROSS_COMPILE:"%"=%)
197
198 # Architecture as present in compile.h
199 UTS_MACHINE     := $(ARCH)
200 SRCARCH         := $(ARCH)
201
202 # Additional ARCH settings for x86
203 ifeq ($(ARCH),i386)
204         SRCARCH := x86
205 endif
206 ifeq ($(ARCH),x86_64)
207         SRCARCH := x86
208 endif
209
210 # Additional ARCH settings for sparc
211 ifeq ($(ARCH),sparc32)
212        SRCARCH := sparc
213 endif
214 ifeq ($(ARCH),sparc64)
215        SRCARCH := sparc
216 endif
217
218 # Additional ARCH settings for sh
219 ifeq ($(ARCH),sh64)
220        SRCARCH := sh
221 endif
222
223 # Where to locate arch specific headers
224 hdr-arch  := $(SRCARCH)
225
226 ifeq ($(ARCH),m68knommu)
227        hdr-arch  := m68k
228 endif
229
230 KCONFIG_CONFIG  ?= .config
231 export KCONFIG_CONFIG
232
233 # SHELL used by kbuild
234 CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
235           else if [ -x /bin/bash ]; then echo /bin/bash; \
236           else echo sh; fi ; fi)
237
238 HOSTCC       = gcc
239 HOSTCXX      = g++
240 HOSTCFLAGS   = -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer
241 HOSTCXXFLAGS = -O2
242
243 # Decide whether to build built-in, modular, or both.
244 # Normally, just do built-in.
245
246 KBUILD_MODULES :=
247 KBUILD_BUILTIN := 1
248
249 #       If we have only "make modules", don't compile built-in objects.
250 #       When we're building modules with modversions, we need to consider
251 #       the built-in objects during the descend as well, in order to
252 #       make sure the checksums are up to date before we record them.
253
254 ifeq ($(MAKECMDGOALS),modules)
255   KBUILD_BUILTIN := $(if $(CONFIG_MODVERSIONS),1)
256 endif
257
258 #       If we have "make <whatever> modules", compile modules
259 #       in addition to whatever we do anyway.
260 #       Just "make" or "make all" shall build modules as well
261
262 ifneq ($(filter all _all modules,$(MAKECMDGOALS)),)
263   KBUILD_MODULES := 1
264 endif
265
266 ifeq ($(MAKECMDGOALS),)
267   KBUILD_MODULES := 1
268 endif
269
270 export KBUILD_MODULES KBUILD_BUILTIN
271 export KBUILD_CHECKSRC KBUILD_SRC KBUILD_EXTMOD
272
273 # Beautify output
274 # ---------------------------------------------------------------------------
275 #
276 # Normally, we echo the whole command before executing it. By making
277 # that echo $($(quiet)$(cmd)), we now have the possibility to set
278 # $(quiet) to choose other forms of output instead, e.g.
279 #
280 #         quiet_cmd_cc_o_c = Compiling $(RELDIR)/$@
281 #         cmd_cc_o_c       = $(CC) $(c_flags) -c -o $@ $<
282 #
283 # If $(quiet) is empty, the whole command will be printed.
284 # If it is set to "quiet_", only the short version will be printed. 
285 # If it is set to "silent_", nothing will be printed at all, since
286 # the variable $(silent_cmd_cc_o_c) doesn't exist.
287 #
288 # A simple variant is to prefix commands with $(Q) - that's useful
289 # for commands that shall be hidden in non-verbose mode.
290 #
291 #       $(Q)ln $@ :<
292 #
293 # If KBUILD_VERBOSE equals 0 then the above command will be hidden.
294 # If KBUILD_VERBOSE equals 1 then the above command is displayed.
295
296 ifeq ($(KBUILD_VERBOSE),1)
297   quiet =
298   Q =
299 else
300   quiet=quiet_
301   Q = @
302 endif
303
304 # If the user is running make -s (silent mode), suppress echoing of
305 # commands
306
307 ifneq ($(findstring s,$(MAKEFLAGS)),)
308   quiet=silent_
309 endif
310
311 export quiet Q KBUILD_VERBOSE
312
313
314 # Look for make include files relative to root of kernel src
315 MAKEFLAGS += --include-dir=$(srctree)
316
317 # We need some generic definitions (do not try to remake the file).
318 $(srctree)/scripts/Kbuild.include: ;
319 include $(srctree)/scripts/Kbuild.include
320
321 # Make variables (CC, etc...)
322
323 AS              = $(CROSS_COMPILE)as
324 LD              = $(CROSS_COMPILE)ld
325 CC              = $(CROSS_COMPILE)gcc
326 CPP             = $(CC) -E
327 AR              = $(CROSS_COMPILE)ar
328 NM              = $(CROSS_COMPILE)nm
329 STRIP           = $(CROSS_COMPILE)strip
330 OBJCOPY         = $(CROSS_COMPILE)objcopy
331 OBJDUMP         = $(CROSS_COMPILE)objdump
332 AWK             = awk
333 GENKSYMS        = scripts/genksyms/genksyms
334 INSTALLKERNEL  := installkernel
335 DEPMOD          = /sbin/depmod
336 KALLSYMS        = scripts/kallsyms
337 PERL            = perl
338 CHECK           = sparse
339
340 CHECKFLAGS     := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \
341                   -Wbitwise -Wno-return-void $(CF)
342 CFLAGS_MODULE   =
343 AFLAGS_MODULE   =
344 LDFLAGS_MODULE  =
345 CFLAGS_KERNEL   =
346 AFLAGS_KERNEL   =
347 CFLAGS_GCOV     = -fprofile-arcs -ftest-coverage
348
349
350 # Use LINUXINCLUDE when you must reference the include/ directory.
351 # Needed to be compatible with the O= option
352 LINUXINCLUDE    := -I$(srctree)/arch/$(hdr-arch)/include -Iinclude \
353                    $(if $(KBUILD_SRC), -I$(srctree)/include) \
354                    -include include/generated/autoconf.h
355
356 KBUILD_CPPFLAGS := -D__KERNEL__
357
358 KBUILD_CFLAGS   := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
359                    -fno-strict-aliasing -fno-common \
360                    -Werror-implicit-function-declaration \
361                    -Wno-format-security \
362                    -fno-delete-null-pointer-checks
363 KBUILD_AFLAGS_KERNEL :=
364 KBUILD_CFLAGS_KERNEL :=
365 KBUILD_AFLAGS   := -D__ASSEMBLY__
366 KBUILD_AFLAGS_MODULE  := -DMODULE
367 KBUILD_CFLAGS_MODULE  := -DMODULE
368 KBUILD_LDFLAGS_MODULE := -T $(srctree)/scripts/module-common.lds
369
370 # Read KERNELRELEASE from include/config/kernel.release (if it exists)
371 KERNELRELEASE = $(shell cat include/config/kernel.release 2> /dev/null)
372 KERNELVERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
373
374 export VERSION PATCHLEVEL SUBLEVEL KERNELRELEASE KERNELVERSION
375 export ARCH SRCARCH CONFIG_SHELL HOSTCC HOSTCFLAGS CROSS_COMPILE AS LD CC
376 export CPP AR NM STRIP OBJCOPY OBJDUMP
377 export MAKE AWK GENKSYMS INSTALLKERNEL PERL UTS_MACHINE
378 export HOSTCXX HOSTCXXFLAGS LDFLAGS_MODULE CHECK CHECKFLAGS
379
380 export KBUILD_CPPFLAGS NOSTDINC_FLAGS LINUXINCLUDE OBJCOPYFLAGS LDFLAGS
381 export KBUILD_CFLAGS CFLAGS_KERNEL CFLAGS_MODULE CFLAGS_GCOV
382 export KBUILD_AFLAGS AFLAGS_KERNEL AFLAGS_MODULE
383 export KBUILD_AFLAGS_MODULE KBUILD_CFLAGS_MODULE KBUILD_LDFLAGS_MODULE
384 export KBUILD_AFLAGS_KERNEL KBUILD_CFLAGS_KERNEL
385
386 # When compiling out-of-tree modules, put MODVERDIR in the module
387 # tree rather than in the kernel tree. The kernel tree might
388 # even be read-only.
389 export MODVERDIR := $(if $(KBUILD_EXTMOD),$(firstword $(KBUILD_EXTMOD))/).tmp_versions
390
391 # Files to ignore in find ... statements
392
393 RCS_FIND_IGNORE := \( -name SCCS -o -name BitKeeper -o -name .svn -o -name CVS -o -name .pc -o -name .hg -o -name .git \) -prune -o
394 export RCS_TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn --exclude CVS --exclude .pc --exclude .hg --exclude .git
395
396 # ===========================================================================
397 # Rules shared between *config targets and build targets
398
399 # Basic helpers built in scripts/
400 PHONY += scripts_basic
401 scripts_basic:
402         $(Q)$(MAKE) $(build)=scripts/basic
403         $(Q)rm -f .tmp_quiet_recordmcount
404
405 # To avoid any implicit rule to kick in, define an empty command.
406 scripts/basic/%: scripts_basic ;
407
408 PHONY += outputmakefile
409 # outputmakefile generates a Makefile in the output directory, if using a
410 # separate output directory. This allows convenient use of make in the
411 # output directory.
412 outputmakefile:
413 ifneq ($(KBUILD_SRC),)
414         $(Q)ln -fsn $(srctree) source
415         $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile \
416             $(srctree) $(objtree) $(VERSION) $(PATCHLEVEL)
417 endif
418
419 # To make sure we do not include .config for any of the *config targets
420 # catch them early, and hand them over to scripts/kconfig/Makefile
421 # It is allowed to specify more targets when calling make, including
422 # mixing *config targets and build targets.
423 # For example 'make oldconfig all'.
424 # Detect when mixed targets is specified, and make a second invocation
425 # of make so .config is not included in this case either (for *config).
426
427 no-dot-config-targets := clean mrproper distclean \
428                          cscope gtags TAGS tags help %docs check% coccicheck \
429                          include/linux/version.h headers_% \
430                          kernelversion %src-pkg
431
432 config-targets := 0
433 mixed-targets  := 0
434 dot-config     := 1
435
436 ifneq ($(filter $(no-dot-config-targets), $(MAKECMDGOALS)),)
437         ifeq ($(filter-out $(no-dot-config-targets), $(MAKECMDGOALS)),)
438                 dot-config := 0
439         endif
440 endif
441
442 ifeq ($(KBUILD_EXTMOD),)
443         ifneq ($(filter config %config,$(MAKECMDGOALS)),)
444                 config-targets := 1
445                 ifneq ($(filter-out config %config,$(MAKECMDGOALS)),)
446                         mixed-targets := 1
447                 endif
448         endif
449 endif
450
451 ifeq ($(mixed-targets),1)
452 # ===========================================================================
453 # We're called with mixed targets (*config and build targets).
454 # Handle them one by one.
455
456 %:: FORCE
457         $(Q)$(MAKE) -C $(srctree) KBUILD_SRC= $@
458
459 else
460 ifeq ($(config-targets),1)
461 # ===========================================================================
462 # *config targets only - make sure prerequisites are updated, and descend
463 # in scripts/kconfig to make the *config target
464
465 # Read arch specific Makefile to set KBUILD_DEFCONFIG as needed.
466 # KBUILD_DEFCONFIG may point out an alternative default configuration
467 # used for 'make defconfig'
468 include $(srctree)/arch/$(SRCARCH)/Makefile
469 export KBUILD_DEFCONFIG KBUILD_KCONFIG
470
471 config: scripts_basic outputmakefile FORCE
472         $(Q)mkdir -p include/linux include/config
473         $(Q)$(MAKE) $(build)=scripts/kconfig $@
474
475 %config: scripts_basic outputmakefile FORCE
476         $(Q)mkdir -p include/linux include/config
477         $(Q)$(MAKE) $(build)=scripts/kconfig $@
478
479 else
480 # ===========================================================================
481 # Build targets only - this includes vmlinux, arch specific targets, clean
482 # targets and others. In general all targets except *config targets.
483
484 ifeq ($(KBUILD_EXTMOD),)
485 # Additional helpers built in scripts/
486 # Carefully list dependencies so we do not try to build scripts twice
487 # in parallel
488 PHONY += scripts
489 scripts: scripts_basic include/config/auto.conf include/config/tristate.conf
490         $(Q)$(MAKE) $(build)=$(@)
491
492 # Objects we will link into vmlinux / subdirs we need to visit
493 init-y          := init/
494 drivers-y       := drivers/ sound/ firmware/
495 net-y           := net/
496 libs-y          := lib/
497 core-y          := usr/
498 endif # KBUILD_EXTMOD
499
500 ifeq ($(dot-config),1)
501 # Read in config
502 -include include/config/auto.conf
503
504 ifeq ($(KBUILD_EXTMOD),)
505 # Read in dependencies to all Kconfig* files, make sure to run
506 # oldconfig if changes are detected.
507 -include include/config/auto.conf.cmd
508
509 # To avoid any implicit rule to kick in, define an empty command
510 $(KCONFIG_CONFIG) include/config/auto.conf.cmd: ;
511
512 # If .config is newer than include/config/auto.conf, someone tinkered
513 # with it and forgot to run make oldconfig.
514 # if auto.conf.cmd is missing then we are probably in a cleaned tree so
515 # we execute the config step to be sure to catch updated Kconfig files
516 include/config/%.conf: $(KCONFIG_CONFIG) include/config/auto.conf.cmd
517         $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig
518 else
519 # external modules needs include/generated/autoconf.h and include/config/auto.conf
520 # but do not care if they are up-to-date. Use auto.conf to trigger the test
521 PHONY += include/config/auto.conf
522
523 include/config/auto.conf:
524         $(Q)test -e include/generated/autoconf.h -a -e $@ || (          \
525         echo;                                                           \
526         echo "  ERROR: Kernel configuration is invalid.";               \
527         echo "         include/generated/autoconf.h or $@ are missing.";\
528         echo "         Run 'make oldconfig && make prepare' on kernel src to fix it.";  \
529         echo;                                                           \
530         /bin/false)
531
532 endif # KBUILD_EXTMOD
533
534 else
535 # Dummy target needed, because used as prerequisite
536 include/config/auto.conf: ;
537 endif # $(dot-config)
538
539 # The all: target is the default when no target is given on the
540 # command line.
541 # This allow a user to issue only 'make' to build a kernel including modules
542 # Defaults to vmlinux, but the arch makefile usually adds further targets
543 all: vmlinux
544
545 ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
546 KBUILD_CFLAGS   += -Os
547 else
548 KBUILD_CFLAGS   += -O2
549 endif
550
551 include $(srctree)/arch/$(SRCARCH)/Makefile
552
553 ifneq ($(CONFIG_FRAME_WARN),0)
554 KBUILD_CFLAGS += $(call cc-option,-Wframe-larger-than=${CONFIG_FRAME_WARN})
555 endif
556
557 # Force gcc to behave correct even for buggy distributions
558 ifndef CONFIG_CC_STACKPROTECTOR
559 KBUILD_CFLAGS += $(call cc-option, -fno-stack-protector)
560 endif
561
562 ifdef CONFIG_FRAME_POINTER
563 KBUILD_CFLAGS   += -fno-omit-frame-pointer -fno-optimize-sibling-calls
564 else
565 # Some targets (ARM with Thumb2, for example), can't be built with frame
566 # pointers.  For those, we don't have FUNCTION_TRACER automatically
567 # select FRAME_POINTER.  However, FUNCTION_TRACER adds -pg, and this is
568 # incompatible with -fomit-frame-pointer with current GCC, so we don't use
569 # -fomit-frame-pointer with FUNCTION_TRACER.
570 ifndef CONFIG_FUNCTION_TRACER