ia64/linux-2.6.18-xen.hg

view Makefile @ 897:329ea0ccb344

balloon: try harder to balloon up under memory pressure.

Currently if the balloon driver is unable to increase the guest's
reservation it assumes the failure was due to reaching its full
allocation, gives up on the ballooning operation and records the limit
it reached as the "hard limit". The driver will not try again until
the target is set again (even to the same value).

However it is possible that ballooning has in fact failed due to
memory pressure in the host and therefore it is desirable to keep
attempting to reach the target in case memory becomes available. The
most likely scenario is that some guests are ballooning down while
others are ballooning up and therefore there is temporary memory
pressure while things stabilise. You would not expect a well behaved
toolstack to ask a domain to balloon to more than its allocation nor
would you expect it to deliberately over-commit memory by setting
balloon targets which exceed the total host memory.

This patch drops the concept of a hard limit and causes the balloon
driver to retry increasing the reservation on a timer in the same
manner as when decreasing the reservation.

Also if we partially succeed in increasing the reservation
(i.e. receive less pages than we asked for) then we may as well keep
those pages rather than returning them to Xen.

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
author Keir Fraser <keir.fraser@citrix.com>
date Fri Jun 05 14:01:20 2009 +0100 (2009-06-05)
parents 3e8752eb6d9c
children
line source
1 VERSION = 2
2 PATCHLEVEL = 6
3 SUBLEVEL = 18
4 EXTRAVERSION = .8
5 NAME=Avast! A bilge rat!
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.
13 # Do not print "Entering directory ..."
14 MAKEFLAGS += --no-print-directory
16 # We are using a recursive build, so we need to do a little thinking
17 # to get the ordering right.
18 #
19 # Most importantly: sub-Makefiles should only ever modify files in
20 # their own directory. If in some directory we have a dependency on
21 # a file in another dir (which doesn't happen often, but it's often
22 # unavoidable when linking the built-in.o targets which finally
23 # turn into vmlinux), we will call a sub make in that other dir, and
24 # after that we are sure that everything which is in that other dir
25 # is now up to date.
26 #
27 # The only cases where we need to modify files which have global
28 # effects are thus separated out and done before the recursive
29 # descending is started. They are now explicitly listed as the
30 # prepare rule.
32 # To put more focus on warnings, be less verbose as default
33 # Use 'make V=1' to see the full commands
35 ifdef V
36 ifeq ("$(origin V)", "command line")
37 KBUILD_VERBOSE = $(V)
38 endif
39 endif
40 ifndef KBUILD_VERBOSE
41 KBUILD_VERBOSE = 0
42 endif
44 # Call checker as part of compilation of C files
45 # Use 'make C=1' to enable checking (sparse, by default)
46 # Override with 'make C=1 CHECK=checker_executable CHECKFLAGS=....'
48 ifdef C
49 ifeq ("$(origin C)", "command line")
50 KBUILD_CHECKSRC = $(C)
51 endif
52 endif
53 ifndef KBUILD_CHECKSRC
54 KBUILD_CHECKSRC = 0
55 endif
57 # Use make M=dir to specify directory of external module to build
58 # Old syntax make ... SUBDIRS=$PWD is still supported
59 # Setting the environment variable KBUILD_EXTMOD take precedence
60 ifdef SUBDIRS
61 KBUILD_EXTMOD ?= $(SUBDIRS)
62 endif
63 ifdef M
64 ifeq ("$(origin M)", "command line")
65 KBUILD_EXTMOD := $(M)
66 endif
67 endif
70 # kbuild supports saving output files in a separate directory.
71 # To locate output files in a separate directory two syntaxes are supported.
72 # In both cases the working directory must be the root of the kernel src.
73 # 1) O=
74 # Use "make O=dir/to/store/output/files/"
75 #
76 # 2) Set KBUILD_OUTPUT
77 # Set the environment variable KBUILD_OUTPUT to point to the directory
78 # where the output files shall be placed.
79 # export KBUILD_OUTPUT=dir/to/store/output/files/
80 # make
81 #
82 # The O= assignment takes precedence over the KBUILD_OUTPUT environment
83 # variable.
86 # KBUILD_SRC is set on invocation of make in OBJ directory
87 # KBUILD_SRC is not intended to be used by the regular user (for now)
88 ifeq ($(KBUILD_SRC),)
90 # OK, Make called in directory where kernel src resides
91 # Do we want to locate output files in a separate directory?
92 ifdef O
93 ifeq ("$(origin O)", "command line")
94 KBUILD_OUTPUT := $(O)
95 endif
96 endif
98 # That's our default target when none is given on the command line
99 PHONY := _all
100 _all:
102 ifneq ($(KBUILD_OUTPUT),)
103 # Invoke a second make in the output directory, passing relevant variables
104 # check that the output directory actually exists
105 saved-output := $(KBUILD_OUTPUT)
106 KBUILD_OUTPUT := $(shell cd $(KBUILD_OUTPUT) && /bin/pwd)
107 $(if $(KBUILD_OUTPUT),, \
108 $(error output directory "$(saved-output)" does not exist))
110 PHONY += $(MAKECMDGOALS)
112 $(filter-out _all,$(MAKECMDGOALS)) _all:
113 $(if $(KBUILD_VERBOSE:1=),@)$(MAKE) -C $(KBUILD_OUTPUT) \
114 KBUILD_SRC=$(CURDIR) \
115 KBUILD_EXTMOD="$(KBUILD_EXTMOD)" -f $(CURDIR)/Makefile $@
117 # Leave processing to above invocation of make
118 skip-makefile := 1
119 endif # ifneq ($(KBUILD_OUTPUT),)
120 endif # ifeq ($(KBUILD_SRC),)
122 # We process the rest of the Makefile if this is the final invocation of make
123 ifeq ($(skip-makefile),)
125 # If building an external module we do not care about the all: rule
126 # but instead _all depend on modules
127 PHONY += all
128 ifeq ($(KBUILD_EXTMOD),)
129 _all: all
130 else
131 _all: modules
132 endif
134 srctree := $(if $(KBUILD_SRC),$(KBUILD_SRC),$(CURDIR))
135 TOPDIR := $(srctree)
136 # FIXME - TOPDIR is obsolete, use srctree/objtree
137 objtree := $(CURDIR)
138 src := $(srctree)
139 obj := $(objtree)
141 VPATH := $(srctree)$(if $(KBUILD_EXTMOD),:$(KBUILD_EXTMOD))
143 export srctree objtree VPATH TOPDIR
146 # SUBARCH tells the usermode build what the underlying arch is. That is set
147 # first, and if a usermode build is happening, the "ARCH=um" on the command
148 # line overrides the setting of ARCH below. If a native build is happening,
149 # then ARCH is assigned, getting whatever value it gets normally, and
150 # SUBARCH is subsequently ignored.
152 SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
153 -e s/arm.*/arm/ -e s/sa110/arm/ \
154 -e s/s390x/s390/ -e s/parisc64/parisc/ \
155 -e s/ppc.*/powerpc/ -e s/mips.*/mips/ )
157 # Cross compiling and selecting different set of gcc/bin-utils
158 # ---------------------------------------------------------------------------
159 #
160 # When performing cross compilation for other architectures ARCH shall be set
161 # to the target architecture. (See arch/* for the possibilities).
162 # ARCH can be set during invocation of make:
163 # make ARCH=ia64
164 # Another way is to have ARCH set in the environment.
165 # The default ARCH is the host where make is executed.
167 # CROSS_COMPILE specify the prefix used for all executables used
168 # during compilation. Only gcc and related bin-utils executables
169 # are prefixed with $(CROSS_COMPILE).
170 # CROSS_COMPILE can be set on the command line
171 # make CROSS_COMPILE=ia64-linux-
172 # Alternatively CROSS_COMPILE can be set in the environment.
173 # Default value for CROSS_COMPILE is not to prefix executables
174 # Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile
176 ARCH ?= $(SUBARCH)
177 CROSS_COMPILE ?=
179 # Architecture as present in compile.h
180 UTS_MACHINE := $(ARCH)
182 KCONFIG_CONFIG ?= .config
184 # SHELL used by kbuild
185 CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
186 else if [ -x /bin/bash ]; then echo /bin/bash; \
187 else echo sh; fi ; fi)
189 HOSTCC = gcc
190 HOSTCXX = g++
191 HOSTCFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer
192 HOSTCXXFLAGS = -O2
194 # Decide whether to build built-in, modular, or both.
195 # Normally, just do built-in.
197 KBUILD_MODULES :=
198 KBUILD_BUILTIN := 1
200 # If we have only "make modules", don't compile built-in objects.
201 # When we're building modules with modversions, we need to consider
202 # the built-in objects during the descend as well, in order to
203 # make sure the checksums are up to date before we record them.
205 ifeq ($(MAKECMDGOALS),modules)
206 KBUILD_BUILTIN := $(if $(CONFIG_MODVERSIONS),1)
207 endif
209 # If we have "make <whatever> modules", compile modules
210 # in addition to whatever we do anyway.
211 # Just "make" or "make all" shall build modules as well
213 ifneq ($(filter all _all modules,$(MAKECMDGOALS)),)
214 KBUILD_MODULES := 1
215 endif
217 ifeq ($(MAKECMDGOALS),)
218 KBUILD_MODULES := 1
219 endif
221 export KBUILD_MODULES KBUILD_BUILTIN
222 export KBUILD_CHECKSRC KBUILD_SRC KBUILD_EXTMOD
224 # Beautify output
225 # ---------------------------------------------------------------------------
226 #
227 # Normally, we echo the whole command before executing it. By making
228 # that echo $($(quiet)$(cmd)), we now have the possibility to set
229 # $(quiet) to choose other forms of output instead, e.g.
230 #
231 # quiet_cmd_cc_o_c = Compiling $(RELDIR)/$@
232 # cmd_cc_o_c = $(CC) $(c_flags) -c -o $@ $<
233 #
234 # If $(quiet) is empty, the whole command will be printed.
235 # If it is set to "quiet_", only the short version will be printed.
236 # If it is set to "silent_", nothing will be printed at all, since
237 # the variable $(silent_cmd_cc_o_c) doesn't exist.
238 #
239 # A simple variant is to prefix commands with $(Q) - that's useful
240 # for commands that shall be hidden in non-verbose mode.
241 #
242 # $(Q)ln $@ :<
243 #
244 # If KBUILD_VERBOSE equals 0 then the above command will be hidden.
245 # If KBUILD_VERBOSE equals 1 then the above command is displayed.
247 ifeq ($(KBUILD_VERBOSE),1)
248 quiet =
249 Q =
250 else
251 quiet=quiet_
252 Q = @
253 endif
255 # If the user is running make -s (silent mode), suppress echoing of
256 # commands
258 ifneq ($(findstring s,$(MAKEFLAGS)),)
259 quiet=silent_
260 endif
262 export quiet Q KBUILD_VERBOSE
265 # Look for make include files relative to root of kernel src
266 MAKEFLAGS += --include-dir=$(srctree)
268 # We need some generic definitions
269 include $(srctree)/scripts/Kbuild.include
271 # Do not use make's built-in rules and variables
272 # This increases performance and avoid hard-to-debug behavour
273 MAKEFLAGS += -rR
275 # Make variables (CC, etc...)
277 AS = $(CROSS_COMPILE)as
278 LD = $(CROSS_COMPILE)ld
279 CC = $(CROSS_COMPILE)gcc
280 CPP = $(CC) -E
281 AR = $(CROSS_COMPILE)ar
282 NM = $(CROSS_COMPILE)nm
283 STRIP = $(CROSS_COMPILE)strip
284 OBJCOPY = $(CROSS_COMPILE)objcopy
285 OBJDUMP = $(CROSS_COMPILE)objdump
286 AWK = awk
287 GENKSYMS = scripts/genksyms/genksyms
288 DEPMOD = /sbin/depmod
289 KALLSYMS = scripts/kallsyms
290 PERL = perl
291 CHECK = sparse
293 CHECKFLAGS := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ -Wbitwise $(CF)
294 MODFLAGS = -DMODULE
295 CFLAGS_MODULE = $(MODFLAGS)
296 AFLAGS_MODULE = $(MODFLAGS)
297 LDFLAGS_MODULE = -r
298 CFLAGS_KERNEL =
299 AFLAGS_KERNEL =
302 # Use LINUXINCLUDE when you must reference the include/ directory.
303 # Needed to be compatible with the O= option
304 LINUXINCLUDE := -Iinclude \
305 $(if $(KBUILD_SRC),-Iinclude2 -I$(srctree)/include) \
306 -include include/linux/autoconf.h
308 CPPFLAGS := -D__KERNEL__ $(LINUXINCLUDE)
310 CFLAGS := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
311 -fno-strict-aliasing -fno-common
312 AFLAGS := -D__ASSEMBLY__
314 # Read KERNELRELEASE from include/config/kernel.release (if it exists)
315 KERNELRELEASE = $(shell cat include/config/kernel.release 2> /dev/null)
316 KERNELVERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
318 export VERSION PATCHLEVEL SUBLEVEL KERNELRELEASE KERNELVERSION
319 export ARCH CONFIG_SHELL HOSTCC HOSTCFLAGS CROSS_COMPILE AS LD CC
320 export CPP AR NM STRIP OBJCOPY OBJDUMP MAKE AWK GENKSYMS PERL UTS_MACHINE
321 export HOSTCXX HOSTCXXFLAGS LDFLAGS_MODULE CHECK CHECKFLAGS
323 export CPPFLAGS NOSTDINC_FLAGS LINUXINCLUDE OBJCOPYFLAGS LDFLAGS
324 export CFLAGS CFLAGS_KERNEL CFLAGS_MODULE
325 export AFLAGS AFLAGS_KERNEL AFLAGS_MODULE
327 # When compiling out-of-tree modules, put MODVERDIR in the module
328 # tree rather than in the kernel tree. The kernel tree might
329 # even be read-only.
330 export MODVERDIR := $(if $(KBUILD_EXTMOD),$(firstword $(KBUILD_EXTMOD))/).tmp_versions
332 # Files to ignore in find ... statements
334 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
335 export RCS_TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn --exclude CVS --exclude .pc --exclude .hg --exclude .git
337 # ===========================================================================
338 # Rules shared between *config targets and build targets
340 # Basic helpers built in scripts/
341 PHONY += scripts_basic
342 scripts_basic:
343 $(Q)$(MAKE) $(build)=scripts/basic
345 # To avoid any implicit rule to kick in, define an empty command.
346 scripts/basic/%: scripts_basic ;
348 PHONY += outputmakefile
349 # outputmakefile generates a Makefile in the output directory, if using a
350 # separate output directory. This allows convenient use of make in the
351 # output directory.
352 outputmakefile:
353 ifneq ($(KBUILD_SRC),)
354 $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile \
355 $(srctree) $(objtree) $(VERSION) $(PATCHLEVEL)
356 endif
358 # To make sure we do not include .config for any of the *config targets
359 # catch them early, and hand them over to scripts/kconfig/Makefile
360 # It is allowed to specify more targets when calling make, including
361 # mixing *config targets and build targets.
362 # For example 'make oldconfig all'.
363 # Detect when mixed targets is specified, and make a second invocation
364 # of make so .config is not included in this case either (for *config).
366 no-dot-config-targets := clean mrproper distclean \
367 cscope TAGS tags help %docs check% \
368 include/linux/version.h headers_% \
369 kernelrelease kernelversion
371 config-targets := 0
372 mixed-targets := 0
373 dot-config := 1
375 ifneq ($(filter $(no-dot-config-targets), $(MAKECMDGOALS)),)
376 ifeq ($(filter-out $(no-dot-config-targets), $(MAKECMDGOALS)),)
377 dot-config := 0
378 endif
379 endif
381 ifeq ($(KBUILD_EXTMOD),)
382 ifneq ($(filter config %config,$(MAKECMDGOALS)),)
383 config-targets := 1
384 ifneq ($(filter-out config %config,$(MAKECMDGOALS)),)
385 mixed-targets := 1
386 endif
387 endif
388 endif
390 ifeq ($(mixed-targets),1)
391 # ===========================================================================
392 # We're called with mixed targets (*config and build targets).
393 # Handle them one by one.
395 %:: FORCE
396 $(Q)$(MAKE) -C $(srctree) KBUILD_SRC= $@
398 else
399 ifeq ($(config-targets),1)
400 # ===========================================================================
401 # *config targets only - make sure prerequisites are updated, and descend
402 # in scripts/kconfig to make the *config target
404 # Read arch specific Makefile to set KBUILD_DEFCONFIG as needed.
405 # KBUILD_DEFCONFIG may point out an alternative default configuration
406 # used for 'make defconfig'
407 include $(srctree)/arch/$(ARCH)/Makefile
408 export KBUILD_DEFCONFIG
410 config %config: scripts_basic outputmakefile FORCE
411 $(Q)mkdir -p include/linux include/config
412 $(Q)$(MAKE) $(build)=scripts/kconfig $@
414 else
415 # ===========================================================================
416 # Build targets only - this includes vmlinux, arch specific targets, clean
417 # targets and others. In general all targets except *config targets.
419 ifeq ($(KBUILD_EXTMOD),)
420 # Additional helpers built in scripts/
421 # Carefully list dependencies so we do not try to build scripts twice
422 # in parallel
423 PHONY += scripts
424 scripts: scripts_basic include/config/auto.conf
425 $(Q)$(MAKE) $(build)=$(@)
427 # Objects we will link into vmlinux / subdirs we need to visit
428 init-y := init/
429 drivers-y := drivers/ sound/
430 net-y := net/
431 libs-y := lib/
432 core-y := usr/
433 endif # KBUILD_EXTMOD
435 ifeq ($(dot-config),1)
436 # Read in config
437 -include include/config/auto.conf
439 ifeq ($(KBUILD_EXTMOD),)
440 # Read in dependencies to all Kconfig* files, make sure to run
441 # oldconfig if changes are detected.
442 -include include/config/auto.conf.cmd
444 # To avoid any implicit rule to kick in, define an empty command
445 $(KCONFIG_CONFIG) include/config/auto.conf.cmd: ;
447 # If .config is newer than include/config/auto.conf, someone tinkered
448 # with it and forgot to run make oldconfig.
449 # if auto.conf.cmd is missing then we are probably in a cleaned tree so
450 # we execute the config step to be sure to catch updated Kconfig files
451 include/config/auto.conf: $(KCONFIG_CONFIG) include/config/auto.conf.cmd
452 $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig
453 else
454 # external modules needs include/linux/autoconf.h and include/config/auto.conf
455 # but do not care if they are up-to-date. Use auto.conf to trigger the test
456 PHONY += include/config/auto.conf
458 include/config/auto.conf:
459 $(Q)test -e include/linux/autoconf.h -a -e $@ || ( \
460 echo; \
461 echo " ERROR: Kernel configuration is invalid."; \
462 echo " include/linux/autoconf.h or $@ are missing."; \
463 echo " Run 'make oldconfig && make prepare' on kernel src to fix it."; \
464 echo; \
465 /bin/false)
467 endif # KBUILD_EXTMOD
469 else
470 # Dummy target needed, because used as prerequisite
471 include/config/auto.conf: ;
472 endif # $(dot-config)
474 # The all: target is the default when no target is given on the
475 # command line.
476 # This allow a user to issue only 'make' to build a kernel including modules
477 # Defaults vmlinux but it is usually overridden in the arch makefile
478 all: vmlinux
480 ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
481 CFLAGS += -Os
482 else
483 CFLAGS += -O2
484 endif
486 include $(srctree)/arch/$(ARCH)/Makefile
488 ifdef CONFIG_FRAME_POINTER
489 CFLAGS += -fno-omit-frame-pointer $(call cc-option,-fno-optimize-sibling-calls,)
490 else
491 CFLAGS += -fomit-frame-pointer
492 endif
494 ifdef CONFIG_UNWIND_INFO
495 CFLAGS += -fasynchronous-unwind-tables
496 endif
498 ifdef CONFIG_DEBUG_INFO
499 CFLAGS += -g
500 endif
502 # Force gcc to behave correct even for buggy distributions
503 CFLAGS += $(call cc-option, -fno-stack-protector)
505 # arch Makefile may override CC so keep this after arch Makefile is included
506 NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
507 CHECKFLAGS += $(NOSTDINC_FLAGS)
509 # warn about C99 declaration after statement
510 CFLAGS += $(call cc-option,-Wdeclaration-after-statement,)
512 # disable pointer signed / unsigned warnings in gcc 4.0
513 CFLAGS += $(call cc-option,-Wno-pointer-sign,)
515 # Default kernel image to build when no specific target is given.
516 # KBUILD_IMAGE may be overruled on the command line or
517 # set in the environment
518 # Also any assignments in arch/$(ARCH)/Makefile take precedence over
519 # this default value
520 export KBUILD_IMAGE ?= vmlinux
522 #
523 # INSTALL_PATH specifies where to place the updated kernel and system map
524 # images. Default is /boot, but you can set it to other values
525 export INSTALL_PATH ?= /boot
527 #
528 # INSTALL_MOD_PATH specifies a prefix to MODLIB for module directory
529 # relocations required by build roots. This is not defined in the
530 # makefile but the argument can be passed to make if needed.
531 #
533 MODLIB = $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE)
534 export MODLIB
536 #
537 # INSTALL_MOD_STRIP, if defined, will cause modules to be
538 # stripped after they are installed. If INSTALL_MOD_STRIP is '1', then
539 # the default option --strip-debug will be used. Otherwise,
540 # INSTALL_MOD_STRIP will used as the options to the strip command.
542 ifdef INSTALL_MOD_STRIP
543 ifeq ($(INSTALL_MOD_STRIP),1)
544 mod_strip_cmd = $(STRIP) --strip-debug
545 else
546 mod_strip_cmd = $(STRIP) $(INSTALL_MOD_STRIP)
547 endif # INSTALL_MOD_STRIP=1
548 else
549 mod_strip_cmd = true
550 endif # INSTALL_MOD_STRIP
551 export mod_strip_cmd
554 ifeq ($(KBUILD_EXTMOD),)
555 core-y += kernel/ mm/ fs/ ipc/ security/ crypto/ block/
557 vmlinux-dirs := $(patsubst %/,%,$(filter %/, $(init-y) $(init-m) \
558 $(core-y) $(core-m) $(drivers-y) $(drivers-m) \
559 $(net-y) $(net-m) $(libs-y) $(libs-m)))
561 vmlinux-alldirs := $(sort $(vmlinux-dirs) $(patsubst %/,%,$(filter %/, \
562 $(init-n) $(init-) \
563 $(core-n) $(core-) $(drivers-n) $(drivers-) \
564 $(net-n) $(net-) $(libs-n) $(libs-))))
566 init-y := $(patsubst %/, %/built-in.o, $(init-y))
567 core-y := $(patsubst %/, %/built-in.o, $(core-y))
568 drivers-y := $(patsubst %/, %/built-in.o, $(drivers-y))
569 net-y := $(patsubst %/, %/built-in.o, $(net-y))
570 libs-y1 := $(patsubst %/, %/lib.a, $(libs-y))
571 libs-y2 := $(patsubst %/, %/built-in.o, $(libs-y))
572 libs-y := $(libs-y1) $(libs-y2)
574 # Build vmlinux
575 # ---------------------------------------------------------------------------
576 # vmlinux is built from the objects selected by $(vmlinux-init) and
577 # $(vmlinux-main). Most are built-in.o files from top-level directories
578 # in the kernel tree, others are specified in arch/$(ARCH)Makefile.
579 # Ordering when linking is important, and $(vmlinux-init) must be first.
580 #
581 # vmlinux
582 # ^
583 # |
584 # +-< $(vmlinux-init)
585 # | +--< init/version.o + more
586 # |
587 # +--< $(vmlinux-main)
588 # | +--< driver/built-in.o mm/built-in.o + more
589 # |
590 # +-< kallsyms.o (see description in CONFIG_KALLSYMS section)
591 #
592 # vmlinux version (uname -v) cannot be updated during normal
593 # descending-into-subdirs phase since we do not yet know if we need to
594 # update vmlinux.
595 # Therefore this step is delayed until just before final link of vmlinux -
596 # except in the kallsyms case where it is done just before adding the
597 # symbols to the kernel.
598 #
599 # System.map is generated to document addresses of all kernel symbols
601 vmlinux-init := $(head-y) $(init-y)
602 vmlinux-main := $(core-y) $(libs-y) $(drivers-y) $(net-y)
603 vmlinux-all := $(vmlinux-init) $(vmlinux-main)
604 vmlinux-lds := arch/$(ARCH)/kernel/vmlinux.lds
606 # Rule to link vmlinux - also used during CONFIG_KALLSYMS
607 # May be overridden by arch/$(ARCH)/Makefile
608 quiet_cmd_vmlinux__ ?= LD $@
609 cmd_vmlinux__ ?= $(LD) $(LDFLAGS) $(LDFLAGS_vmlinux) -o $@ \
610 -T $(vmlinux-lds) $(vmlinux-init) \
611 --start-group $(vmlinux-main) --end-group \
612 $(filter-out $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) FORCE ,$^)
614 # Generate new vmlinux version
615 quiet_cmd_vmlinux_version = GEN .version
616 cmd_vmlinux_version = set -e; \
617 if [ ! -r .version ]; then \
618 rm -f .version; \
619 echo 1 >.version; \
620 else \
621 mv .version .old_version; \
622 expr 0$$(cat .old_version) + 1 >.version; \
623 fi; \
624 $(MAKE) $(build)=init
626 # Generate System.map
627 quiet_cmd_sysmap = SYSMAP
628 cmd_sysmap = $(CONFIG_SHELL) $(srctree)/scripts/mksysmap
630 # Link of vmlinux
631 # If CONFIG_KALLSYMS is set .version is already updated
632 # Generate System.map and verify that the content is consistent
633 # Use + in front of the vmlinux_version rule to silent warning with make -j2
634 # First command is ':' to allow us to use + in front of the rule
635 define rule_vmlinux__
636 :
637 $(if $(CONFIG_KALLSYMS),,+$(call cmd,vmlinux_version))
639 $(call cmd,vmlinux__)
640 $(Q)echo 'cmd_$@ := $(cmd_vmlinux__)' > $(@D)/.$(@F).cmd
642 $(Q)$(if $($(quiet)cmd_sysmap), \
643 echo ' $($(quiet)cmd_sysmap) System.map' &&) \
644 $(cmd_sysmap) $@ System.map; \
645 if [ $$? -ne 0 ]; then \
646 rm -f $@; \
647 /bin/false; \
648 fi;
649 $(verify_kallsyms)
650 endef
653 ifdef CONFIG_KALLSYMS
654 # Generate section listing all symbols and add it into vmlinux $(kallsyms.o)
655 # It's a three stage process:
656 # o .tmp_vmlinux1 has all symbols and sections, but __kallsyms is
657 # empty
658 # Running kallsyms on that gives us .tmp_kallsyms1.o with
659 # the right size - vmlinux version (uname -v) is updated during this step
660 # o .tmp_vmlinux2 now has a __kallsyms section of the right size,
661 # but due to the added section, some addresses have shifted.
662 # From here, we generate a correct .tmp_kallsyms2.o
663 # o The correct .tmp_kallsyms2.o is linked into the final vmlinux.
664 # o Verify that the System.map from vmlinux matches the map from
665 # .tmp_vmlinux2, just in case we did not generate kallsyms correctly.
666 # o If CONFIG_KALLSYMS_EXTRA_PASS is set, do an extra pass using
667 # .tmp_vmlinux3 and .tmp_kallsyms3.o. This is only meant as a
668 # temporary bypass to allow the kernel to be built while the
669 # maintainers work out what went wrong with kallsyms.
671 ifdef CONFIG_KALLSYMS_EXTRA_PASS
672 last_kallsyms := 3
673 else
674 last_kallsyms := 2
675 endif
677 kallsyms.o := .tmp_kallsyms$(last_kallsyms).o
679 define verify_kallsyms
680 $(Q)$(if $($(quiet)cmd_sysmap), \
681 echo ' $($(quiet)cmd_sysmap) .tmp_System.map' &&) \
682 $(cmd_sysmap) .tmp_vmlinux$(last_kallsyms) .tmp_System.map
683 $(Q)cmp -s System.map .tmp_System.map || \
684 (echo Inconsistent kallsyms data; \
685 echo Try setting CONFIG_KALLSYMS_EXTRA_PASS; \
686 rm .tmp_kallsyms* ; /bin/false )
687 endef
689 # Update vmlinux version before link
690 # Use + in front of this rule to silent warning about make -j1
691 # First command is ':' to allow us to use + in front of this rule
692 cmd_ksym_ld = $(cmd_vmlinux__)
693 define rule_ksym_ld
694 :
695 +$(call cmd,vmlinux_version)
696 $(call cmd,vmlinux__)
697 $(Q)echo 'cmd_$@ := $(cmd_vmlinux__)' > $(@D)/.$(@F).cmd
698 endef
700 # Generate .S file with all kernel symbols
701 quiet_cmd_kallsyms = KSYM $@
702 cmd_kallsyms = $(NM) -n $< | $(KALLSYMS) \
703 $(if $(CONFIG_KALLSYMS_ALL),--all-symbols) > $@
705 .tmp_kallsyms1.o .tmp_kallsyms2.o .tmp_kallsyms3.o: %.o: %.S scripts FORCE
706 $(call if_changed_dep,as_o_S)
708 .tmp_kallsyms%.S: .tmp_vmlinux% $(KALLSYMS)
709 $(call cmd,kallsyms)
711 # .tmp_vmlinux1 must be complete except kallsyms, so update vmlinux version
712 .tmp_vmlinux1: $(vmlinux-lds) $(vmlinux-all) FORCE
713 $(call if_changed_rule,ksym_ld)
715 .tmp_vmlinux2: $(vmlinux-lds) $(vmlinux-all) .tmp_kallsyms1.o FORCE
716 $(call if_changed,vmlinux__)
718 .tmp_vmlinux3: $(vmlinux-lds) $(vmlinux-all) .tmp_kallsyms2.o FORCE
719 $(call if_changed,vmlinux__)
721 # Needs to visit scripts/ before $(KALLSYMS) can be used.
722 $(KALLSYMS): scripts ;
724 # Generate some data for debugging strange kallsyms problems
725 debug_kallsyms: .tmp_map$(last_kallsyms)
727 .tmp_map%: .tmp_vmlinux% FORCE
728 ($(OBJDUMP) -h $< | $(AWK) '/^ +[0-9]/{print $$4 " 0 " $$2}'; $(NM) $<) | sort > $@
730 .tmp_map3: .tmp_map2
732 .tmp_map2: .tmp_map1
734 endif # ifdef CONFIG_KALLSYMS
736 # vmlinux image - including updated kernel symbols
737 vmlinux: $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) $(kallsyms.o) FORCE
738 $(call if_changed_rule,vmlinux__)
739 $(Q)rm -f .old_version
741 # The actual objects are generated when descending,
742 # make sure no implicit rule kicks in
743 $(sort $(vmlinux-init) $(vmlinux-main)) $(vmlinux-lds): $(vmlinux-dirs) ;
745 # Handle descending into subdirectories listed in $(vmlinux-dirs)
746 # Preset locale variables to speed up the build process. Limit locale
747 # tweaks to this spot to avoid wrong language settings when running
748 # make menuconfig etc.
749 # Error messages still appears in the original language
751 PHONY += $(vmlinux-dirs)
752 $(vmlinux-dirs): prepare scripts
753 $(Q)$(MAKE) $(build)=$@
755 # Build the kernel release string
756 # The KERNELRELEASE is stored in a file named include/config/kernel.release
757 # to be used when executing for example make install or make modules_install
758 #
759 # Take the contents of any files called localversion* and the config
760 # variable CONFIG_LOCALVERSION and append them to KERNELRELEASE.
761 # LOCALVERSION from the command line override all of this
763 nullstring :=
764 space := $(nullstring) # end of line
766 ___localver = $(objtree)/localversion* $(srctree)/localversion*
767 __localver = $(sort $(wildcard $(___localver)))
768 # skip backup files (containing '~')
769 _localver = $(foreach f, $(__localver), $(if $(findstring ~, $(f)),,$(f)))
771 localver = $(subst $(space),, \
772 $(shell cat /dev/null $(_localver)) \
773 $(patsubst "%",%,$(CONFIG_LOCALVERSION)))
775 # If CONFIG_LOCALVERSION_AUTO is set scripts/setlocalversion is called
776 # and if the SCM is know a tag from the SCM is appended.
777 # The appended tag is determined by the SCM used.
778 #
779 # Currently, only git is supported.
780 # Other SCMs can edit scripts/setlocalversion and add the appropriate
781 # checks as needed.
782 ifdef CONFIG_LOCALVERSION_AUTO
783 _localver-auto = $(shell $(CONFIG_SHELL) \
784 $(srctree)/scripts/setlocalversion $(srctree))
785 localver-auto = $(LOCALVERSION)$(_localver-auto)
786 endif
788 localver-full = $(localver)$(localver-auto)
790 # Store (new) KERNELRELASE string in include/config/kernel.release
791 kernelrelease = $(KERNELVERSION)$(localver-full)
792 include/config/kernel.release: include/config/auto.conf FORCE
793 $(Q)rm -f $@
794 $(Q)echo $(kernelrelease) > $@
797 # Things we need to do before we recursively start building the kernel
798 # or the modules are listed in "prepare".
799 # A multi level approach is used. prepareN is processed before prepareN-1.
800 # archprepare is used in arch Makefiles and when processed asm symlink,
801 # version.h and scripts_basic is processed / created.
803 # Listed in dependency order
804 PHONY += prepare archprepare prepare0 prepare1 prepare2 prepare3
806 # prepare-all is deprecated, use prepare as valid replacement
807 PHONY += prepare-all
809 # prepare3 is used to check if we are building in a separate output directory,
810 # and if so do:
811 # 1) Check that make has not been executed in the kernel src $(srctree)
812 # 2) Create the include2 directory, used for the second asm symlink
813 prepare3: include/config/kernel.release
814 ifneq ($(KBUILD_SRC),)
815 @echo ' Using $(srctree) as source for kernel'
816 $(Q)if [ -f $(srctree)/.config -o -d $(srctree)/include/config ]; then \
817 echo " $(srctree) is not clean, please run 'make mrproper'";\
818 echo " in the '$(srctree)' directory.";\
819 /bin/false; \
820 fi;
821 $(Q)if [ ! -d include2 ]; then mkdir -p include2; fi;
822 $(Q)ln -fsn $(srctree)/include/asm-$(ARCH) include2/asm
823 endif
825 # prepare2 creates a makefile if using a separate output directory
826 prepare2: prepare3 outputmakefile
828 prepare1: prepare2 include/linux/version.h include/linux/utsrelease.h \
829 include/asm include/config/auto.conf
830 ifneq ($(KBUILD_MODULES),)
831 $(Q)mkdir -p $(MODVERDIR)
832 $(Q)rm -f $(MODVERDIR)/*
833 endif
835 archprepare: prepare1 scripts_basic
837 prepare0: archprepare FORCE
838 $(Q)$(MAKE) $(build)=.
840 # All the preparing..
841 prepare prepare-all: prepare0
843 # Leave this as default for preprocessing vmlinux.lds.S, which is now
844 # done in arch/$(ARCH)/kernel/Makefile
846 export CPPFLAGS_vmlinux.lds += -P -C -U$(ARCH)
848 # FIXME: The asm symlink changes when $(ARCH) changes. That's
849 # hard to detect, but I suppose "make mrproper" is a good idea
850 # before switching between archs anyway.
852 include/asm:
853 @echo ' SYMLINK $@ -> include/asm-$(ARCH)'
854 $(Q)if [ ! -d include ]; then mkdir -p include; fi;
855 @ln -fsn asm-$(ARCH) $@
857 # Generate some files
858 # ---------------------------------------------------------------------------
860 # KERNELRELEASE can change from a few different places, meaning version.h
861 # needs to be updated, so this check is forced on all builds
863 uts_len := 64
864 define filechk_utsrelease.h
865 if [ `echo -n "$(KERNELRELEASE)" | wc -c ` -gt $(uts_len) ]; then \
866 echo '"$(KERNELRELEASE)" exceeds $(uts_len) characters' >&2; \
867 exit 1; \
868 fi; \
869 (echo \#define UTS_RELEASE \"$(KERNELRELEASE)\";)
870 endef
872 define filechk_version.h
873 (echo \#define LINUX_VERSION_CODE $(shell \
874 expr $(VERSION) \* 65536 + $(PATCHLEVEL) \* 256 + $(SUBLEVEL)); \
875 echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))';)
876 endef
878 include/linux/version.h: $(srctree)/Makefile FORCE
879 $(call filechk,version.h)
881 include/linux/utsrelease.h: include/config/kernel.release FORCE
882 $(call filechk,utsrelease.h)
884 # ---------------------------------------------------------------------------
886 PHONY += depend dep
887 depend dep:
888 @echo '*** Warning: make $@ is unnecessary now.'
890 # ---------------------------------------------------------------------------
891 # Kernel headers
892 INSTALL_HDR_PATH=$(objtree)/usr
893 export INSTALL_HDR_PATH
895 PHONY += headers_install
896 headers_install: include/linux/version.h
897 @if [ ! -r include/asm-$(ARCH)/Kbuild ]; then \
898 echo '*** Error: Headers not exportable for this architecture ($(ARCH))'; \
899 exit 1 ; fi
900 $(Q)unifdef -Ux /dev/null
901 $(Q)rm -rf $(INSTALL_HDR_PATH)/include
902 $(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.headersinst obj=include
904 PHONY += headers_check
905 headers_check: headers_install
906 $(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.headersinst obj=include HDRCHECK=1
908 # ---------------------------------------------------------------------------
909 # Modules
911 ifdef CONFIG_MODULES
913 # By default, build modules as well
915 all: modules
917 # Build modules
919 PHONY += modules
920 modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux)
921 @echo ' Building modules, stage 2.';
922 $(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.modpost
925 # Target to prepare building external modules
926 PHONY += modules_prepare
927 modules_prepare: prepare scripts
929 # Target to install modules
930 PHONY += modules_install
931 modules_install: _modinst_ _modinst_post
933 PHONY += _modinst_
934 _modinst_:
935 @if [ -z "`$(DEPMOD) -V 2>/dev/null | grep module-init-tools`" ]; then \
936 echo "Warning: you may need to install module-init-tools"; \
937 echo "See http://www.codemonkey.org.uk/docs/post-halloween-2.6.txt";\
938 sleep 1; \
939 fi
940 @rm -rf $(MODLIB)/kernel
941 @rm -f $(MODLIB)/source
942 @mkdir -p $(MODLIB)/kernel
943 @ln -s $(srctree) $(MODLIB)/source
944 @if [ ! $(objtree) -ef $(MODLIB)/build ]; then \
945 rm -f $(MODLIB)/build ; \
946 ln -s $(objtree) $(MODLIB)/build ; \
947 fi
948 $(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.modinst
950 # If System.map exists, run depmod. This deliberately does not have a
951 # dependency on System.map since that would run the dependency tree on
952 # vmlinux. This depmod is only for convenience to give the initial
953 # boot a modules.dep even before / is mounted read-write. However the
954 # boot script depmod is the master version.
955 ifeq "$(strip $(INSTALL_MOD_PATH))" ""
956 depmod_opts :=
957 else
958 depmod_opts := -b $(INSTALL_MOD_PATH) -r
959 endif
960 PHONY += _modinst_post
961 _modinst_post: _modinst_
962 if [ -r System.map -a -x $(DEPMOD) ]; then $(DEPMOD) -ae -F System.map $(depmod_opts) $(KERNELRELEASE); fi
964 else # CONFIG_MODULES
966 # Modules not configured
967 # ---------------------------------------------------------------------------
969 modules modules_install: FORCE
970 @echo
971 @echo "The present kernel configuration has modules disabled."
972 @echo "Type 'make config' and enable loadable module support."
973 @echo "Then build a kernel with module support enabled."
974 @echo
975 @exit 1
977 endif # CONFIG_MODULES
979 ###
980 # Cleaning is done on three levels.
981 # make clean Delete most generated files
982 # Leave enough to build external modules
983 # make mrproper Delete the current configuration, and all generated files
984 # make distclean Remove editor backup files, patch leftover files and the like
986 # Directories & files removed with 'make clean'
987 CLEAN_DIRS += $(MODVERDIR)
988 CLEAN_FILES += vmlinux System.map \
989 .tmp_kallsyms* .tmp_version .tmp_vmlinux* .tmp_System.map
991 # Directories & files removed with 'make mrproper'
992 MRPROPER_DIRS += include/config include2 usr/include
993 MRPROPER_FILES += .config .config.old include/asm .version .old_version \
994 include/linux/autoconf.h include/linux/version.h \
995 include/linux/utsrelease.h \
996 Module.symvers tags TAGS cscope*
998 # clean - Delete most, but leave enough to build external modules
999 #
1000 clean: rm-dirs := $(CLEAN_DIRS)
1001 clean: rm-files := $(CLEAN_FILES)
1002 clean-dirs := $(addprefix _clean_,$(srctree) $(vmlinux-alldirs))
1004 PHONY += $(clean-dirs) clean archclean
1005 $(clean-dirs):
1006 $(Q)$(MAKE) $(clean)=$(patsubst _clean_%,%,$@)
1008 clean: archclean $(clean-dirs)
1009 $(call cmd,rmdirs)
1010 $(call cmd,rmfiles)
1011 @find . $(RCS_FIND_IGNORE) \
1012 \( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \
1013 -o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \
1014 -o -name '*.symtypes' \) \
1015 -type f -print | xargs rm -f
1017 # mrproper - Delete all generated files, including .config
1019 mrproper: rm-dirs := $(wildcard $(MRPROPER_DIRS))
1020 mrproper: rm-files := $(wildcard $(MRPROPER_FILES))
1021 mrproper-dirs := $(addprefix _mrproper_,Documentation/DocBook scripts)
1023 PHONY += $(mrproper-dirs) mrproper archmrproper
1024 $(mrproper-dirs):
1025 $(Q)$(MAKE) $(clean)=$(patsubst _mrproper_%,%,$@)
1027 mrproper: clean archmrproper $(mrproper-dirs)
1028 $(call cmd,rmdirs)
1029 $(call cmd,rmfiles)
1031 # distclean
1033 PHONY += distclean
1035 distclean: mrproper
1036 @find $(srctree) $(RCS_FIND_IGNORE) \
1037 \( -name '*.orig' -o -name '*.rej' -o -name '*~' \
1038 -o -name '*.bak' -o -name '#*#' -o -name '.*.orig' \
1039 -o -name '.*.rej' -o -size 0 \
1040 -o -name '*%' -o -name '.*.cmd' -o -name 'core' \) \
1041 -type f -print | xargs rm -f
1044 # Packaging of the kernel to various formats
1045 # ---------------------------------------------------------------------------
1046 # rpm target kept for backward compatibility
1047 package-dir := $(srctree)/scripts/package
1049 %pkg: include/config/kernel.release FORCE
1050 $(Q)$(MAKE) $(build)=$(package-dir) $@
1051 rpm: include/config/kernel.release FORCE
1052 $(Q)$(MAKE) $(build)=$(package-dir) $@
1055 # Brief documentation of the typical targets used
1056 # ---------------------------------------------------------------------------
1058 boards := $(wildcard $(srctree)/arch/$(ARCH)/configs/*_defconfig)
1059 boards := $(notdir $(boards))
1061 help:
1062 @echo 'Cleaning targets:'
1063 @echo ' clean - remove most generated files but keep the config'
1064 @echo ' mrproper - remove all generated files + config + various backup files'
1065 @echo ''
1066 @echo 'Configuration targets:'
1067 @$(MAKE) -f $(srctree)/scripts/kconfig/Makefile help
1068 @echo ''
1069 @echo 'Other generic targets:'
1070 @echo ' all - Build all targets marked with [*]'
1071 @echo '* vmlinux - Build the bare kernel'
1072 @echo '* modules - Build all modules'
1073 @echo ' modules_install - Install all modules to INSTALL_MOD_PATH (default: /)'
1074 @echo ' dir/ - Build all files in dir and below'
1075 @echo ' dir/file.[ois] - Build specified target only'
1076 @echo ' dir/file.ko - Build module including final link'
1077 @echo ' rpm - Build a kernel as an RPM package'
1078 @echo ' tags/TAGS - Generate tags file for editors'
1079 @echo ' cscope - Generate cscope index'
1080 @echo ' kernelrelease - Output the release version string'
1081 @echo ' kernelversion - Output the version stored in Makefile'
1082 @if [ -r include/asm-$(ARCH)/Kbuild ]; then \
1083 echo ' headers_install - Install sanitised kernel headers to INSTALL_HDR_PATH'; \
1084 fi
1085 @echo ' (default: $(INSTALL_HDR_PATH))'
1086 @echo ''
1087 @echo 'Static analysers'
1088 @echo ' checkstack - Generate a list of stack hogs'
1089 @echo ' namespacecheck - Name space analysis on compiled kernel'
1090 @if [ -r include/asm-$(ARCH)/Kbuild ]; then \
1091 echo ' headers_check - Sanity check on exported headers'; \
1092 fi
1093 @echo ''
1094 @echo 'Kernel packaging:'
1095 @$(MAKE) $(build)=$(package-dir) help
1096 @echo ''
1097 @echo 'Documentation targets:'
1098 @$(MAKE) -f $(srctree)/Documentation/DocBook/Makefile dochelp
1099 @echo ''
1100 @echo 'Architecture specific targets ($(ARCH)):'
1101 @$(if $(archhelp),$(archhelp),\
1102 echo ' No architecture specific help defined for $(ARCH)')
1103 @echo ''
1104 @$(if $(boards), \
1105 $(foreach b, $(boards), \
1106 printf " %-24s - Build for %s\\n" $(b) $(subst _defconfig,,$(b));) \
1107 echo '')
1109 @echo ' make V=0|1 [targets] 0 => quiet build (default), 1 => verbose build'
1110 @echo ' make O=dir [targets] Locate all output files in "dir", including .config'
1111 @echo ' make C=1 [targets] Check all c source with $$CHECK (sparse by default)'
1112 @echo ' make C=2 [targets] Force check of all c source with $$CHECK'
1113 @echo ''
1114 @echo 'Execute "make" or "make all" to build all targets marked with [*] '
1115 @echo 'For further info see the ./README file'
1118 # Documentation targets
1119 # ---------------------------------------------------------------------------
1120 %docs: scripts_basic FORCE
1121 $(Q)$(MAKE) $(build)=Documentation/DocBook $@
1123 else # KBUILD_EXTMOD
1125 ###
1126 # External module support.
1127 # When building external modules the kernel used as basis is considered
1128 # read-only, and no consistency checks are made and the make
1129 # system is not used on the basis kernel. If updates are required
1130 # in the basis kernel ordinary make commands (without M=...) must
1131 # be used.
1133 # The following are the only valid targets when building external
1134 # modules.
1135 # make M=dir clean Delete all automatically generated files
1136 # make M=dir modules Make all modules in specified dir
1137 # make M=dir Same as 'make M=dir modules'
1138 # make M=dir modules_install
1139 # Install the modules built in the module directory
1140 # Assumes install directory is already created
1142 # We are always building modules
1143 KBUILD_MODULES := 1
1144 PHONY += crmodverdir
1145 crmodverdir:
1146 $(Q)mkdir -p $(MODVERDIR)
1147 $(Q)rm -f $(MODVERDIR)/*
1149 PHONY += $(objtree)/Module.symvers
1150 $(objtree)/Module.symvers:
1151 @test -e $(objtree)/Module.symvers || ( \
1152 echo; \
1153 echo " WARNING: Symbol version dump $(objtree)/Module.symvers"; \
1154 echo " is missing; modules will have no dependencies and modversions."; \
1155 echo )
1157 module-dirs := $(addprefix _module_,$(KBUILD_EXTMOD))
1158 PHONY += $(module-dirs) modules
1159 $(module-dirs): crmodverdir $(objtree)/Module.symvers
1160 $(Q)$(MAKE) $(build)=$(patsubst _module_%,%,$@)
1162 modules: $(module-dirs)
1163 @echo ' Building modules, stage 2.';
1164 $(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.modpost
1166 PHONY += modules_install
1167 modules_install: _emodinst_ _emodinst_post
1169 install-dir := $(if $(INSTALL_MOD_DIR),$(INSTALL_MOD_DIR),extra)
1170 PHONY += _emodinst_
1171 _emodinst_:
1172 $(Q)mkdir -p $(MODLIB)/$(install-dir)
1173 $(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.modinst
1175 # Run depmod only is we have System.map and depmod is executable
1176 quiet_cmd_depmod = DEPMOD $(KERNELRELEASE)
1177 cmd_depmod = if [ -r System.map -a -x $(DEPMOD) ]; then \
1178 $(DEPMOD) -ae -F System.map \
1179 $(if $(strip $(INSTALL_MOD_PATH)), \
1180 -b $(INSTALL_MOD_PATH) -r) \
1181 $(KERNELRELEASE); \
1182 fi
1184 PHONY += _emodinst_post
1185 _emodinst_post: _emodinst_
1186 $(call cmd,depmod)
1188 clean-dirs := $(addprefix _clean_,$(KBUILD_EXTMOD))
1190 PHONY += $(clean-dirs) clean
1191 $(clean-dirs):
1192 $(Q)$(MAKE) $(clean)=$(patsubst _clean_%,%,$@)
1194 clean: rm-dirs := $(MODVERDIR)
1195 clean: $(clean-dirs)
1196 $(call cmd,rmdirs)
1197 @find $(KBUILD_EXTMOD) $(RCS_FIND_IGNORE) \
1198 \( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \
1199 -o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \) \
1200 -type f -print | xargs rm -f
1202 help:
1203 @echo ' Building external modules.'
1204 @echo ' Syntax: make -C path/to/kernel/src M=$$PWD target'
1205 @echo ''
1206 @echo ' modules - default target, build the module(s)'
1207 @echo ' modules_install - install the module'
1208 @echo ' clean - remove generated files in module directory only'
1209 @echo ''
1211 # Dummies...
1212 PHONY += prepare scripts
1213 prepare: ;
1214 scripts: ;
1215 endif # KBUILD_EXTMOD
1217 # Generate tags for editors
1218 # ---------------------------------------------------------------------------
1220 #We want __srctree to totally vanish out when KBUILD_OUTPUT is not set
1221 #(which is the most common case IMHO) to avoid unneeded clutter in the big tags file.
1222 #Adding $(srctree) adds about 20M on i386 to the size of the output file!
1224 ifeq ($(src),$(obj))
1225 __srctree =
1226 else
1227 __srctree = $(srctree)/
1228 endif
1230 ifeq ($(ALLSOURCE_ARCHS),)
1231 ifeq ($(ARCH),um)
1232 ALLINCLUDE_ARCHS := $(ARCH) $(SUBARCH)
1233 else
1234 ALLINCLUDE_ARCHS := $(ARCH)
1235 endif
1236 else
1237 #Allow user to specify only ALLSOURCE_PATHS on the command line, keeping existing behavour.
1238 ALLINCLUDE_ARCHS := $(ALLSOURCE_ARCHS)
1239 endif
1241 ALLSOURCE_ARCHS := $(ARCH)
1243 define find-sources
1244 ( find $(__srctree) $(RCS_FIND_IGNORE) \
1245 \( -name include -o -name arch \) -prune -o \
1246 -name $1 -print; \
1247 for ARCH in $(ALLSOURCE_ARCHS) ; do \
1248 find $(__srctree)arch/$${ARCH} $(RCS_FIND_IGNORE) \
1249 -name $1 -print; \
1250 done ; \
1251 find $(__srctree)security/selinux/include $(RCS_FIND_IGNORE) \
1252 -name $1 -print; \
1253 find $(__srctree)include $(RCS_FIND_IGNORE) \
1254 \( -name config -o -name 'asm-*' \) -prune \
1255 -o -name $1 -print; \
1256 for ARCH in $(ALLINCLUDE_ARCHS) ; do \
1257 find $(__srctree)include/asm-$${ARCH} $(RCS_FIND_IGNORE) \
1258 -name $1 -print; \
1259 done ; \
1260 find $(__srctree)include/asm-generic $(RCS_FIND_IGNORE) \
1261 -name $1 -print )
1262 endef
1264 define all-sources
1265 $(call find-sources,'*.[chS]')
1266 endef
1267 define all-kconfigs
1268 $(call find-sources,'Kconfig*')
1269 endef
1270 define all-defconfigs
1271 $(call find-sources,'defconfig')
1272 endef
1274 quiet_cmd_cscope-file = FILELST cscope.files
1275 cmd_cscope-file = (echo \-k; echo \-q; $(all-sources)) > cscope.files
1277 quiet_cmd_cscope = MAKE cscope.out
1278 cmd_cscope = cscope -b
1280 cscope: FORCE
1281 $(call cmd,cscope-file)
1282 $(call cmd,cscope)
1284 quiet_cmd_TAGS = MAKE $@
1285 define cmd_TAGS
1286 rm -f $@; \
1287 ETAGSF=`etags --version | grep -i exuberant >/dev/null && \
1288 echo "-I __initdata,__exitdata,__acquires,__releases \
1289 -I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL \
1290 --extra=+f --c-kinds=+px"`; \
1291 $(all-sources) | xargs etags $$ETAGSF -a; \
1292 if test "x$$ETAGSF" = x; then \
1293 $(all-kconfigs) | xargs etags -a \
1294 --regex='/^config[ \t]+\([a-zA-Z0-9_]+\)/\1/'; \
1295 $(all-defconfigs) | xargs etags -a \
1296 --regex='/^#?[ \t]?\(CONFIG_[a-zA-Z0-9_]+\)/\1/'; \
1297 fi
1298 endef
1300 TAGS: FORCE
1301 $(call cmd,TAGS)
1304 quiet_cmd_tags = MAKE $@
1305 define cmd_tags
1306 rm -f $@; \
1307 CTAGSF=`ctags --version | grep -i exuberant >/dev/null && \
1308 echo "-I __initdata,__exitdata,__acquires,__releases \
1309 -I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL \
1310 --extra=+f --c-kinds=+px"`; \
1311 $(all-sources) | xargs ctags $$CTAGSF -a
1312 endef
1314 tags: FORCE
1315 $(call cmd,tags)
1318 # Scripts to check various things for consistency
1319 # ---------------------------------------------------------------------------
1321 includecheck:
1322 find * $(RCS_FIND_IGNORE) \
1323 -name '*.[hcS]' -type f -print | sort \
1324 | xargs $(PERL) -w scripts/checkincludes.pl
1326 versioncheck:
1327 find * $(RCS_FIND_IGNORE) \
1328 -name '*.[hcS]' -type f -print | sort \
1329 | xargs $(PERL) -w scripts/checkversion.pl
1331 namespacecheck:
1332 $(PERL) $(srctree)/scripts/namespace.pl
1334 endif #ifeq ($(config-targets),1)
1335 endif #ifeq ($(mixed-targets),1)
1337 PHONY += checkstack kernelrelease kernelversion
1338 checkstack:
1339 $(OBJDUMP) -d vmlinux $$(find . -name '*.ko') | \
1340 $(PERL) $(src)/scripts/checkstack.pl $(ARCH)
1342 kernelrelease:
1343 $(if $(wildcard include/config/kernel.release), $(Q)echo $(KERNELRELEASE), \
1344 $(error kernelrelease not valid - run 'make prepare' to update it))
1345 kernelversion:
1346 @echo $(KERNELVERSION)
1348 # Single targets
1349 # ---------------------------------------------------------------------------
1350 # Single targets are compatible with:
1351 # - build whith mixed source and output
1352 # - build with separate output dir 'make O=...'
1353 # - external modules
1355 # target-dir => where to store outputfile
1356 # build-dir => directory in kernel source tree to use
1358 ifeq ($(KBUILD_EXTMOD),)
1359 build-dir = $(patsubst %/,%,$(dir $@))
1360 target-dir = $(dir $@)
1361 else
1362 zap-slash=$(filter-out .,$(patsubst %/,%,$(dir $@)))
1363 build-dir = $(KBUILD_EXTMOD)$(if $(zap-slash),/$(zap-slash))
1364 target-dir = $(if $(KBUILD_EXTMOD),$(dir $<),$(dir $@))
1365 endif
1367 %.s: %.c prepare scripts FORCE
1368 $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
1369 %.i: %.c prepare scripts FORCE
1370 $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
1371 %.o: %.c prepare scripts FORCE
1372 $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
1373 %.lst: %.c prepare scripts FORCE
1374 $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
1375 %.s: %.S prepare scripts FORCE
1376 $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
1377 %.o: %.S prepare scripts FORCE
1378 $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
1379 %.symtypes: %.c prepare scripts FORCE
1380 $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
1382 # Modules
1383 / %/: prepare scripts FORCE
1384 $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \
1385 $(build)=$(build-dir)
1386 %.ko: prepare scripts FORCE
1387 $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \
1388 $(build)=$(build-dir) $(@:.ko=.o)
1389 $(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.modpost
1391 # FIXME Should go into a make.lib or something
1392 # ===========================================================================
1394 quiet_cmd_rmdirs = $(if $(wildcard $(rm-dirs)),CLEAN $(wildcard $(rm-dirs)))
1395 cmd_rmdirs = rm -rf $(rm-dirs)
1397 quiet_cmd_rmfiles = $(if $(wildcard $(rm-files)),CLEAN $(wildcard $(rm-files)))
1398 cmd_rmfiles = rm -f $(rm-files)
1401 a_flags = -Wp,-MD,$(depfile) $(AFLAGS) $(AFLAGS_KERNEL) \
1402 $(NOSTDINC_FLAGS) $(CPPFLAGS) \
1403 $(modkern_aflags) $(EXTRA_AFLAGS) $(AFLAGS_$(basetarget).o)
1405 quiet_cmd_as_o_S = AS $@
1406 cmd_as_o_S = $(CC) $(a_flags) -c -o $@ $<
1408 # read all saved command lines
1410 targets := $(wildcard $(sort $(targets)))
1411 cmd_files := $(wildcard .*.cmd $(foreach f,$(targets),$(dir $(f)).$(notdir $(f)).cmd))
1413 ifneq ($(cmd_files),)
1414 $(cmd_files): ; # Do not try to update included dependency files
1415 include $(cmd_files)
1416 endif
1418 # Shorthand for $(Q)$(MAKE) -f scripts/Makefile.clean obj=dir
1419 # Usage:
1420 # $(Q)$(MAKE) $(clean)=dir
1421 clean := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.clean obj
1423 endif # skip-makefile
1425 PHONY += FORCE
1426 FORCE:
1429 # Declare the contents of the .PHONY variable as phony. We keep that
1430 # information in a variable se we can use it in if_changed and friends.
1431 .PHONY: $(PHONY)