Palacios Public Git Repository

To checkout Palacios execute

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


99507c034b74ca3c7d12c6f5ed98f9f39c82bef7
[palacios.git] / kitten / Makefile
1 VERSION = 1
2 PATCHLEVEL = 0
3 SUBLEVEL = 0
4 EXTRAVERSION = Kitten
5 NAME=Kitten
6
7
8 # *DOCUMENTATION*
9 # To see a list of typical targets execute "make help"
10 # More info can be located in ./README
11 # Comments in this file are targeted only to the developer, do not
12 # expect to learn how to build the kernel reading this file.
13
14 # Do not print "Entering directory ..."
15 MAKEFLAGS += --no-print-directory
16
17 # We are using a recursive build, so we need to do a little thinking
18 # to get the ordering right.
19 #
20 # Most importantly: sub-Makefiles should only ever modify files in
21 # their own directory. If in some directory we have a dependency on
22 # a file in another dir (which doesn't happen often, but it's often
23 # unavoidable when linking the built-in.o targets which finally
24 # turn into vmlwk), we will call a sub make in that other dir, and
25 # after that we are sure that everything which is in that other dir
26 # is now up to date.
27 #
28 # The only cases where we need to modify files which have global
29 # effects are thus separated out and done before the recursive
30 # descending is started. They are now explicitly listed as the
31 # prepare rule.
32
33 # To put more focus on warnings, be less verbose as default
34 # Use 'make V=1' to see the full commands
35
36 ifdef V
37   ifeq ("$(origin V)", "command line")
38     KBUILD_VERBOSE = $(V)
39   endif
40 endif
41 ifndef KBUILD_VERBOSE
42   KBUILD_VERBOSE = 0
43 endif
44
45 # Call sparse as part of compilation of C files
46 # Use 'make C=1' to enable sparse checking
47
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
56
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
68
69
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.
84
85
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),)
89
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
97
98 # That's our default target when none is given on the command line
99 PHONY := _all
100 _all:
101
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))
109
110 PHONY += $(MAKECMDGOALS)
111
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 $@
116
117 # Leave processing to above invocation of make
118 skip-makefile := 1
119 endif # ifneq ($(KBUILD_OUTPUT),)
120 endif # ifeq ($(KBUILD_SRC),)
121
122 # We process the rest of the Makefile if this is the final invocation of make
123 ifeq ($(skip-makefile),)
124
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
133
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)
140
141 VPATH           := $(srctree)$(if $(KBUILD_EXTMOD),:$(KBUILD_EXTMOD))
142
143 export srctree objtree VPATH TOPDIR
144
145
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.
151
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/ )
156
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.
166
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
175
176 ARCH            ?= $(SUBARCH)
177 CROSS_COMPILE   ?=
178
179 # Architecture as present in compile.h
180 UTS_MACHINE := $(ARCH)
181
182 # SHELL used by kbuild
183 CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
184           else if [ -x /bin/bash ]; then echo /bin/bash; \
185           else echo sh; fi ; fi)
186
187 HOSTCC          = gcc
188 HOSTCXX         = g++
189 HOSTCFLAGS      = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer
190 HOSTCXXFLAGS    = -O2
191
192 #       Decide whether to build built-in, modular, or both.
193 #       Normally, just do built-in.
194
195 KBUILD_MODULES :=
196 KBUILD_BUILTIN := 1
197
198 #       If we have only "make modules", don't compile built-in objects.
199 #       When we're building modules with modversions, we need to consider
200 #       the built-in objects during the descend as well, in order to
201 #       make sure the checksums are uptodate before we record them.
202
203 ifeq ($(MAKECMDGOALS),modules)
204   KBUILD_BUILTIN := $(if $(CONFIG_MODVERSIONS),1)
205 endif
206
207 #       If we have "make <whatever> modules", compile modules
208 #       in addition to whatever we do anyway.
209 #       Just "make" or "make all" shall build modules as well
210
211 ifneq ($(filter all _all modules,$(MAKECMDGOALS)),)
212   KBUILD_MODULES := 1
213 endif
214
215 ifeq ($(MAKECMDGOALS),)
216   KBUILD_MODULES := 1
217 endif
218
219 export KBUILD_MODULES KBUILD_BUILTIN
220 export KBUILD_CHECKSRC KBUILD_SRC KBUILD_EXTMOD
221
222 # Beautify output
223 # ---------------------------------------------------------------------------
224 #
225 # Normally, we echo the whole command before executing it. By making
226 # that echo $($(quiet)$(cmd)), we now have the possibility to set
227 # $(quiet) to choose other forms of output instead, e.g.
228 #
229 #         quiet_cmd_cc_o_c = Compiling $(RELDIR)/$@
230 #         cmd_cc_o_c       = $(CC) $(c_flags) -c -o $@ $<
231 #
232 # If $(quiet) is empty, the whole command will be printed.
233 # If it is set to "quiet_", only the short version will be printed. 
234 # If it is set to "silent_", nothing wil be printed at all, since
235 # the variable $(silent_cmd_cc_o_c) doesn't exist.
236 #
237 # A simple variant is to prefix commands with $(Q) - that's useful
238 # for commands that shall be hidden in non-verbose mode.
239 #
240 #       $(Q)ln $@ :<
241 #
242 # If KBUILD_VERBOSE equals 0 then the above command will be hidden.
243 # If KBUILD_VERBOSE equals 1 then the above command is displayed.
244
245 ifeq ($(KBUILD_VERBOSE),1)
246   quiet =
247   Q =
248 else
249   quiet=quiet_
250   Q = @
251 endif
252
253 # If the user is running make -s (silent mode), suppress echoing of
254 # commands
255
256 ifneq ($(findstring s,$(MAKEFLAGS)),)
257   quiet=silent_
258 endif
259
260 export quiet Q KBUILD_VERBOSE
261
262
263 # Look for make include files relative to root of kernel src
264 MAKEFLAGS += --include-dir=$(srctree)
265
266 # We need some generic definitions
267 include  $(srctree)/scripts/Kbuild.include
268
269 # For maximum performance (+ possibly random breakage, uncomment
270 # the following)
271
272 #MAKEFLAGS += -rR
273
274 # Make variables (CC, etc...)
275
276 AS              = $(CROSS_COMPILE)as
277 LD              = $(CROSS_COMPILE)ld
278 CC              = $(CROSS_COMPILE)gcc
279 CPP             = $(CC) -E
280 AR              = $(CROSS_COMPILE)ar
281 NM              = $(CROSS_COMPILE)nm
282 STRIP           = $(CROSS_COMPILE)strip
283 OBJCOPY         = $(CROSS_COMPILE)objcopy
284 OBJDUMP         = $(CROSS_COMPILE)objdump
285 AWK             = awk
286 GENKSYMS        = scripts/genksyms/genksyms
287 DEPMOD          = /sbin/depmod
288 KALLSYMS        = scripts/kallsyms
289 PERL            = perl
290 CHECK           = sparse
291
292 CHECKFLAGS     := -D__lwk__ -Dlwk -D__STDC__ -Dunix -D__unix__ -Wbitwise $(CF)
293 MODFLAGS        = -DMODULE
294 CFLAGS_MODULE   = $(MODFLAGS)
295 AFLAGS_MODULE   = $(MODFLAGS)
296 LDFLAGS_MODULE  = -r
297 CFLAGS_KERNEL   =
298 AFLAGS_KERNEL   =
299
300
301 # Use LWKINCLUDE when you must reference the include/ directory.
302 # Needed to be compatible with the O= option
303 LWKINCLUDE      := -Iinclude \
304                    -I../palacios/include \
305                    $(if $(KBUILD_SRC),-Iinclude2 -I$(srctree)/include) \
306                    -include include/lwk/autoconf.h
307
308 CPPFLAGS        := -D__KERNEL__ $(LWKINCLUDE)
309
310 CFLAGS          := -std=gnu99 \
311                    -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
312                    -fno-strict-aliasing -fno-common
313
314 ifeq ($(call cc-option-yn, -fstack-protector),y)
315 CFLAGS          += -fno-stack-protector
316 endif
317
318 ifeq ($(call cc-option-yn, -fgnu89-inline),y)
319 CFLAGS          += -fgnu89-inline
320 endif
321
322 AFLAGS          := -D__ASSEMBLY__
323
324 # Read KERNELRELEASE from .kernelrelease (if it exists)
325 KERNELRELEASE = $(shell cat .kernelrelease 2> /dev/null)
326 KERNELVERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
327
328 export  VERSION PATCHLEVEL SUBLEVEL KERNELRELEASE KERNELVERSION \
329         ARCH CONFIG_SHELL HOSTCC HOSTCFLAGS CROSS_COMPILE AS LD CC \
330         CPP AR NM STRIP OBJCOPY OBJDUMP MAKE AWK GENKSYMS PERL UTS_MACHINE \
331         HOSTCXX HOSTCXXFLAGS LDFLAGS_MODULE CHECK CHECKFLAGS
332
333 export CPPFLAGS NOSTDINC_FLAGS LWKINCLUDE OBJCOPYFLAGS LDFLAGS
334 export CFLAGS CFLAGS_KERNEL CFLAGS_MODULE 
335 export AFLAGS AFLAGS_KERNEL AFLAGS_MODULE
336
337 # When compiling out-of-tree modules, put MODVERDIR in the module
338 # tree rather than in the kernel tree. The kernel tree might
339 # even be read-only.
340 export MODVERDIR := $(if $(KBUILD_EXTMOD),$(firstword $(KBUILD_EXTMOD))/).tmp_versions
341
342 # Files to ignore in find ... statements
343
344 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
345 export RCS_TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn --exclude CVS --exclude .pc --exclude .hg --exclude .git
346
347 # ===========================================================================
348 # Rules shared between *config targets and build targets
349
350 # Basic helpers built in scripts/
351 PHONY += scripts_basic
352 scripts_basic:
353         $(Q)$(MAKE) $(build)=scripts/basic
354
355 # To avoid any implicit rule to kick in, define an empty command.
356 scripts/basic/%: scripts_basic ;
357
358 PHONY += outputmakefile
359 # outputmakefile generates a Makefile in the output directory, if using a
360 # separate output directory. This allows convenient use of make in the
361 # output directory.
362 outputmakefile:
363 ifneq ($(KBUILD_SRC),)
364         $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile \
365             $(srctree) $(objtree) $(VERSION) $(PATCHLEVEL)
366 endif
367
368 # To make sure we do not include .config for any of the *config targets
369 # catch them early, and hand them over to scripts/kconfig/Makefile
370 # It is allowed to specify more targets when calling make, including
371 # mixing *config targets and build targets.
372 # For example 'make oldconfig all'. 
373 # Detect when mixed targets is specified, and make a second invocation
374 # of make so .config is not included in this case either (for *config).
375
376 no-dot-config-targets := clean mrproper distclean \
377                          cscope TAGS tags help %docs check%
378
379 config-targets := 0
380 mixed-targets  := 0
381 dot-config     := 1
382
383 ifneq ($(filter $(no-dot-config-targets), $(MAKECMDGOALS)),)
384         ifeq ($(filter-out $(no-dot-config-targets), $(MAKECMDGOALS)),)
385                 dot-config := 0
386         endif
387 endif
388
389 ifeq ($(KBUILD_EXTMOD),)
390         ifneq ($(filter config %config,$(MAKECMDGOALS)),)
391                 config-targets := 1
392                 ifneq ($(filter-out config %config,$(MAKECMDGOALS)),)
393                         mixed-targets := 1
394                 endif
395         endif
396 endif
397
398 ifeq ($(mixed-targets),1)
399 # ===========================================================================
400 # We're called with mixed targets (*config and build targets).
401 # Handle them one by one.
402
403 %:: FORCE
404         $(Q)$(MAKE) -C $(srctree) KBUILD_SRC= $@
405
406 else
407 ifeq ($(config-targets),1)
408 # ===========================================================================
409 # *config targets only - make sure prerequisites are updated, and descend
410 # in scripts/kconfig to make the *config target
411
412 # Read arch specific Makefile to set KBUILD_DEFCONFIG as needed.
413 # KBUILD_DEFCONFIG may point out an alternative default configuration
414 # used for 'make defconfig'
415 include $(srctree)/arch/$(ARCH)/Makefile
416 export KBUILD_DEFCONFIG
417
418 config %config: scripts_basic outputmakefile FORCE
419         $(Q)mkdir -p include/lwk
420         $(Q)$(MAKE) $(build)=scripts/kconfig $@
421         $(Q)$(MAKE) -C $(srctree) KBUILD_SRC= .kernelrelease
422
423 else
424 # ===========================================================================
425 # Build targets only - this includes vmlwk, arch specific targets, clean
426 # targets and others. In general all targets except *config targets.
427
428 ifeq ($(KBUILD_EXTMOD),)
429 # Additional helpers built in scripts/
430 # Carefully list dependencies so we do not try to build scripts twice
431 # in parrallel
432 PHONY += scripts
433 scripts: scripts_basic include/config/MARKER
434         $(Q)$(MAKE) $(build)=$(@)
435
436 scripts_basic: include/lwk/autoconf.h
437
438 # Objects we will link into vmlwk / subdirs we need to visit
439 init-y          := init/
440 drivers-y       := drivers/
441 #net-y          := net/
442 libs-y          := lib/
443 #core-y         := usr/
444 endif # KBUILD_EXTMOD
445
446 ifeq ($(dot-config),1)
447 # In this section, we need .config
448
449 # Read in dependencies to all Kconfig* files, make sure to run
450 # oldconfig if changes are detected.
451 -include .kconfig.d
452
453 include .config
454
455 # If .config needs to be updated, it will be done via the dependency
456 # that autoconf has on .config.
457 # To avoid any implicit rule to kick in, define an empty command
458 .config .kconfig.d: ;
459
460 # If .config is newer than include/lwk/autoconf.h, someone tinkered
461 # with it and forgot to run make oldconfig.
462 # If kconfig.d is missing then we are probarly in a cleaned tree so
463 # we execute the config step to be sure to catch updated Kconfig files
464 include/lwk/autoconf.h: .kconfig.d .config
465         $(Q)mkdir -p include/lwk
466         $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig
467 else
468 # Dummy target needed, because used as prerequisite
469 include/lwk/autoconf.h: ;
470 endif
471
472 DEFAULT_EXTRA_TARGETS=vmlwk.bin vmlwk.asm init_task
473
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 vmlwk but it is usually overriden in the arch makefile
478 all: vmlwk $(DEFAULT_EXTRA_TARGETS)
479
480 ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
481 CFLAGS          += -Os
482 else
483 CFLAGS          += -O2
484 endif
485
486 ifdef CONFIG_FRAME_POINTER
487 CFLAGS          += -fno-omit-frame-pointer $(call cc-option,-fno-optimize-sibling-calls,)
488 else
489 CFLAGS          += -fomit-frame-pointer
490 endif
491
492 ifdef CONFIG_UNWIND_INFO
493 CFLAGS          += -fasynchronous-unwind-tables
494 endif
495
496 ifdef CONFIG_DEBUG_INFO
497 CFLAGS          += -g
498 endif
499
500 include $(srctree)/arch/$(ARCH)/Makefile
501
502 # arch Makefile may override CC so keep this after arch Makefile is included
503 NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
504 CHECKFLAGS     += $(NOSTDINC_FLAGS)
505
506 # disable pointer signedness warnings in gcc 4.0
507 CFLAGS += $(call cc-option,-Wno-pointer-sign,)
508
509 # Default kernel image to build when no specific target is given.
510 # KBUILD_IMAGE may be overruled on the commandline or
511 # set in the environment
512 # Also any assignments in arch/$(ARCH)/Makefile take precedence over
513 # this default value
514 export KBUILD_IMAGE ?= vmlwk
515
516 #
517 # INSTALL_PATH specifies where to place the updated kernel and system map
518 # images. Default is /boot, but you can set it to other values
519 export  INSTALL_PATH ?= /boot
520
521 #
522 # INSTALL_MOD_PATH specifies a prefix to MODLIB for module directory
523 # relocations required by build roots.  This is not defined in the
524 # makefile but the arguement can be passed to make if needed.
525 #
526
527 MODLIB  = $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE)
528 export MODLIB
529
530
531 ifeq ($(KBUILD_EXTMOD),)
532 #core-y         += kernel/ mm/ fs/ ipc/ security/ crypto/ block/
533 core-y          += kernel/ mm/
534
535 vmlwk-dirs      := $(patsubst %/,%,$(filter %/, $(init-y) $(init-m) \
536                      $(core-y) $(core-m) $(drivers-y) $(drivers-m) \
537                      $(net-y) $(net-m) $(libs-y) $(libs-m)))
538
539 vmlwk-alldirs   := $(sort $(vmlwk-dirs) $(patsubst %/,%,$(filter %/, \
540                      $(init-n) $(init-) \
541                      $(core-n) $(core-) $(drivers-n) $(drivers-) \
542                      $(net-n)  $(net-)  $(libs-n)    $(libs-))))
543
544 init-y          := $(patsubst %/, %/built-in.o, $(init-y))
545 core-y          := $(patsubst %/, %/built-in.o, $(core-y))
546 drivers-y       := $(patsubst %/, %/built-in.o, $(drivers-y))
547 net-y           := $(patsubst %/, %/built-in.o, $(net-y))
548 libs-y1         := $(patsubst %/, %/lib.a, $(libs-y))
549 libs-y2         := $(patsubst %/, %/built-in.o, $(libs-y))
550 libs-y          := $(libs-y1) $(libs-y2)
551
552 libs-$(CONFIG_V3VEE) += palacios/libv3vee.a
553 libs-$(CONFIG_V3VEE) += palacios/libxed32e.a
554
555 # Build vmlwk
556 # ---------------------------------------------------------------------------
557 # vmlwk is build from the objects selected by $(vmlwk-init) and
558 # $(vmlwk-main). Most are built-in.o files from top-level directories
559 # in the kernel tree, others are specified in arch/$(ARCH)Makefile.
560 # Ordering when linking is important, and $(vmlwk-init) must be first.
561 #
562 # vmlwk
563 #   ^
564 #   |
565 #   +-< $(vmlwk-init)
566 #   |   +--< init/version.o + more
567 #   |
568 #   +--< $(vmlwk-main)
569 #   |    +--< driver/built-in.o mm/built-in.o + more
570 #   |
571 #   +-< kallsyms.o (see description in CONFIG_KALLSYMS section)
572 #
573 # vmlwk version (uname -v) cannot be updated during normal
574 # descending-into-subdirs phase since we do not yet know if we need to
575 # update vmlwk.
576 # Therefore this step is delayed until just before final link of vmlwk -
577 # except in the kallsyms case where it is done just before adding the
578 # symbols to the kernel.
579 #
580 # System.map is generated to document addresses of all kernel symbols
581
582 vmlwk-init := $(head-y) $(init-y)
583 vmlwk-main := $(core-y) $(libs-y) $(drivers-y) $(net-y)
584 vmlwk-all  := $(vmlwk-init) $(vmlwk-main)
585 vmlwk-lds  := arch/$(ARCH)/kernel/vmlwk.lds
586
587 # Rule to link vmlwk - also used during CONFIG_KALLSYMS
588 # May be overridden by arch/$(ARCH)/Makefile
589 quiet_cmd_vmlwk__ ?= LD      $@
590       cmd_vmlwk__ ?= $(LD) $(LDFLAGS) $(LDFLAGS_vmlwk) -o $@   \
591       -T $(vmlwk-lds) $(vmlwk-init)                            \
592       --start-group $(vmlwk-main) --end-group                  \
593       $(filter-out $(vmlwk-lds) $(vmlwk-init) $(vmlwk-main) FORCE ,$^)
594
595 # Generate new vmlwk version
596 quiet_cmd_vmlwk_version = GEN     .version
597       cmd_vmlwk_version = set -e;                       \
598         if [ ! -r .version ]; then                      \
599           rm -f .version;                               \
600           echo 1 >.version;                             \
601         else                                            \
602           mv .version .old_version;                     \
603           expr 0$$(cat .old_version) + 1 >.version;     \
604         fi;                                             \
605         $(MAKE) $(build)=init
606
607 # Generate System.map
608 quiet_cmd_sysmap = SYSMAP 
609       cmd_sysmap = $(CONFIG_SHELL) $(srctree)/scripts/mksysmap
610
611 # Link of vmlwk
612 # If CONFIG_KALLSYMS is set .version is already updated
613 # Generate System.map and verify that the content is consistent
614 # Use + in front of the vmlwk_version rule to silent warning with make -j2
615 # First command is ':' to allow us to use + in front of the rule
616 define rule_vmlwk__
617         :
618         $(if $(CONFIG_KALLSYMS),,+$(call cmd,vmlwk_version))
619
620         $(call cmd,vmlwk__)
621         $(Q)echo 'cmd_$@ := $(cmd_vmlwk__)' > $(@D)/.$(@F).cmd
622
623         $(Q)$(if $($(quiet)cmd_sysmap),                 \
624           echo '  $($(quiet)cmd_sysmap) System.map' &&) \
625         $(cmd_sysmap) $@ System.map;                    \
626         if [ $$? -ne 0 ]; then                          \
627                 rm -f $@;                               \
628                 /bin/false;                             \
629         fi;
630         $(verify_kallsyms)
631 endef
632
633
634 ifdef CONFIG_KALLSYMS
635 # Generate section listing all symbols and add it into vmlwk $(kallsyms.o)
636 # It's a three stage process:
637 # o .tmp_vmlwk1 has all symbols and sections, but __kallsyms is
638 #   empty
639 #   Running kallsyms on that gives us .tmp_kallsyms1.o with
640 #   the right size - vmlwk version (uname -v) is updated during this step
641 # o .tmp_vmlwk2 now has a __kallsyms section of the right size,
642 #   but due to the added section, some addresses have shifted.
643 #   From here, we generate a correct .tmp_kallsyms2.o
644 # o The correct .tmp_kallsyms2.o is linked into the final vmlwk.
645 # o Verify that the System.map from vmlwk matches the map from
646 #   .tmp_vmlwk2, just in case we did not generate kallsyms correctly.
647 # o If CONFIG_KALLSYMS_EXTRA_PASS is set, do an extra pass using
648 #   .tmp_vmlwk3 and .tmp_kallsyms3.o.  This is only meant as a
649 #   temporary bypass to allow the kernel to be built while the
650 #   maintainers work out what went wrong with kallsyms.
651
652 ifdef CONFIG_KALLSYMS_EXTRA_PASS
653 last_kallsyms := 3
654 else
655 last_kallsyms := 2
656 endif
657
658 kallsyms.o := .tmp_kallsyms$(last_kallsyms).o
659
660 define verify_kallsyms
661         $(Q)$(if $($(quiet)cmd_sysmap),                       \
662           echo '  $($(quiet)cmd_sysmap) .tmp_System.map' &&)  \
663           $(cmd_sysmap) .tmp_vmlwk$(last_kallsyms) .tmp_System.map
664         $(Q)cmp -s System.map .tmp_System.map ||              \
665                 (echo Inconsistent kallsyms data;             \
666                  echo Try setting CONFIG_KALLSYMS_EXTRA_PASS; \
667                  rm .tmp_kallsyms* ; /bin/false )
668 endef
669
670 # Update vmlwk version before link
671 # Use + in front of this rule to silent warning about make -j1
672 # First command is ':' to allow us to use + in front of this rule
673 cmd_ksym_ld = $(cmd_vmlwk__)
674 define rule_ksym_ld
675         : 
676         +$(call cmd,vmlwk_version)
677         $(call cmd,vmlwk__)
678         $(Q)echo 'cmd_$@ := $(cmd_vmlwk__)' > $(@D)/.$(@F).cmd
679 endef
680
681 # Generate .S file with all kernel symbols
682 quiet_cmd_kallsyms = KSYM    $@
683       cmd_kallsyms = $(NM) -n $< | $(KALLSYMS) \
684                      $(if $(CONFIG_KALLSYMS_ALL),--all-symbols) > $@
685
686 .tmp_kallsyms1.o .tmp_kallsyms2.o .tmp_kallsyms3.o: %.o: %.S scripts FORCE
687         $(call if_changed_dep,as_o_S)
688
689 .tmp_kallsyms%.S: .tmp_vmlwk% $(KALLSYMS)
690         $(call cmd,kallsyms)
691
692 # .tmp_vmlwk1 must be complete except kallsyms, so update vmlwk version
693 .tmp_vmlwk1: $(vmlwk-lds) $(vmlwk-all) FORCE
694         $(call if_changed_rule,ksym_ld)
695
696 .tmp_vmlwk2: $(vmlwk-lds) $(vmlwk-all) .tmp_kallsyms1.o FORCE
697         $(call if_changed,vmlwk__)
698
699 .tmp_vmlwk3: $(vmlwk-lds) $(vmlwk-all) .tmp_kallsyms2.o FORCE
700         $(call if_changed,vmlwk__)
701
702 # Needs to visit scripts/ before $(KALLSYMS) can be used.
703 $(KALLSYMS): scripts ;
704
705 # Generate some data for debugging strange kallsyms problems
706 debug_kallsyms: .tmp_map$(last_kallsyms)
707
708 .tmp_map%: .tmp_vmlwk% FORCE
709         ($(OBJDUMP) -h $< | $(AWK) '/^ +[0-9]/{print $$4 " 0 " $$2}'; $(NM) $<) | sort > $@
710
711 .tmp_map3: .tmp_map2
712
713 .tmp_map2: .tmp_map1
714
715 endif # ifdef CONFIG_KALLSYMS
716
717 # vmlwk image - including updated kernel symbols
718 vmlwk: $(vmlwk-lds) $(vmlwk-init) $(vmlwk-main) $(kallsyms.o) FORCE
719         $(call if_changed_rule,vmlwk__)
720         $(Q)rm -f .old_version
721
722 vmlwk.bin: vmlwk FORCE
723         $(OBJCOPY) -O binary $< $@
724
725 vmlwk.asm: vmlwk
726         $(OBJDUMP) --disassemble $< > $@
727
728 # The actual objects are generated when descending, 
729 # make sure no implicit rule kicks in
730 $(sort $(vmlwk-init) $(vmlwk-main)) $(vmlwk-lds): $(vmlwk-dirs) ;
731
732 # Handle descending into subdirectories listed in $(vmlwk-dirs)
733 # Preset locale variables to speed up the build process. Limit locale
734 # tweaks to this spot to avoid wrong language settings when running
735 # make menuconfig etc.
736 # Error messages still appears in the original language
737
738 PHONY += $(vmlwk-dirs)
739 $(vmlwk-dirs): prepare scripts
740         $(Q)$(MAKE) $(build)=$@
741
742 # Build the kernel release string
743 # The KERNELRELEASE is stored in a file named .kernelrelease
744 # to be used when executing for example make install or make modules_install
745 #
746 # Take the contents of any files called localversion* and the config
747 # variable CONFIG_LOCALVERSION and append them to KERNELRELEASE.
748 # LOCALVERSION from the command line override all of this
749
750 nullstring :=
751 space      := $(nullstring) # end of line
752
753 ___localver = $(objtree)/localversion* $(srctree)/localversion*
754 __localver  = $(sort $(wildcard $(___localver)))
755 # skip backup files (containing '~')
756 _localver = $(foreach f, $(__localver), $(if $(findstring ~, $(f)),,$(f)))
757
758 localver = $(subst $(space),, \
759            $(shell cat /dev/null $(_localver)) \
760            $(patsubst "%",%,$(CONFIG_LOCALVERSION)))
761                
762 # If CONFIG_LOCALVERSION_AUTO is set scripts/setlocalversion is called
763 # and if the SCM is know a tag from the SCM is appended.
764 # The appended tag is determinded by the SCM used.
765 #
766 # Currently, only git is supported.
767 # Other SCMs can edit scripts/setlocalversion and add the appropriate
768 # checks as needed.
769 ifdef CONFIG_LOCALVERSION_AUTO
770         _localver-auto = $(shell $(CONFIG_SHELL) \
771                           $(srctree)/scripts/setlocalversion $(srctree))
772         localver-auto  = $(LOCALVERSION)$(_localver-auto)
773 endif
774
775 localver-full = $(localver)$(localver-auto)
776
777 # Store (new) KERNELRELASE string in .kernelrelease
778 kernelrelease = $(KERNELVERSION)$(localver-full)
779 .kernelrelease: FORCE
780         $(Q)rm -f $@
781         $(Q)echo $(kernelrelease) > $@
782
783
784 # Things we need to do before we recursively start building the kernel
785 # or the modules are listed in "prepare".
786 # A multi level approach is used. prepareN is processed before prepareN-1.
787 # archprepare is used in arch Makefiles and when processed arch symlink,
788 # version.h and scripts_basic is processed / created.
789
790 # Listed in dependency order
791 PHONY += prepare archprepare prepare0 prepare1 prepare2 prepare3
792
793 # prepare-all is deprecated, use prepare as valid replacement
794 PHONY += prepare-all
795
796 # prepare3 is used to check if we are building in a separate output directory,
797 # and if so do:
798 # 1) Check that make has not been executed in the kernel src $(srctree)
799 # 2) Create the include2 directory, used for the second arch symlink
800 prepare3: .kernelrelease
801 ifneq ($(KBUILD_SRC),)
802         @echo '  Using $(srctree) as source for kernel'
803         $(Q)if [ -f $(srctree)/.config ]; then \
804                 echo "  $(srctree) is not clean, please run 'make mrproper'";\
805                 echo "  in the '$(srctree)' directory.";\
806                 /bin/false; \
807         fi;
808         $(Q)if [ ! -d include2 ]; then mkdir -p include2; fi;
809         $(Q)ln -fsn $(srctree)/include/arch-$(ARCH) include2/arch
810 endif
811
812 # prepare2 creates a makefile if using a separate output directory
813 prepare2: prepare3 outputmakefile
814
815 prepare1: prepare2 include/lwk/version.h include/arch \
816                    include/config/MARKER
817 ifneq ($(KBUILD_MODULES),)
818         $(Q)mkdir -p $(MODVERDIR)
819         $(Q)rm -f $(MODVERDIR)/*
820 endif
821
822 archprepare: prepare1 scripts_basic
823
824 prepare0: archprepare FORCE
825         $(Q)$(MAKE) $(build)=.
826
827 # All the preparing..
828 prepare prepare-all: prepare0
829
830 #       Leave this as default for preprocessing vmlwk.lds.S, which is now
831 #       done in arch/$(ARCH)/kernel/Makefile
832
833 export CPPFLAGS_vmlwk.lds += -P -C -U$(ARCH)
834
835 #       FIXME: The arch symlink changes when $(ARCH) changes. That's
836 #       hard to detect, but I suppose "make mrproper" is a good idea
837 #       before switching between archs anyway.
838
839 include/arch:
840         @echo '  SYMLINK $@ -> include/arch-$(ARCH)'
841         $(Q)if [ ! -d include ]; then mkdir -p include; fi;
842         @ln -fsn arch-$(ARCH) $@
843
844 #       Split autoconf.h into include/lwk/config/*
845
846 include/config/MARKER: scripts/basic/split-include include/lwk/autoconf.h
847         @echo '  SPLIT   include/lwk/autoconf.h -> include/config/*'
848         @scripts/basic/split-include include/lwk/autoconf.h include/config
849         @touch $@
850
851 # Generate some files
852 # ---------------------------------------------------------------------------
853
854 # KERNELRELEASE can change from a few different places, meaning version.h
855 # needs to be updated, so this check is forced on all builds
856
857 uts_len := 64
858
859 define filechk_version.h
860         if [ `echo -n "$(KERNELRELEASE)" | wc -c ` -gt $(uts_len) ]; then \
861           echo '"$(KERNELRELEASE)" exceeds $(uts_len) characters' >&2; \
862           exit 1; \
863         fi; \
864         (echo \#define UTS_RELEASE \"$(KERNELRELEASE)\"; \
865           echo \#define LWK_VERSION_CODE `expr $(VERSION) \\* 65536 + $(PATCHLEVEL) \\* 256 + $(SUBLEVEL)`; \
866          echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))'; \
867         )
868 endef
869
870 include/lwk/version.h: $(srctree)/Makefile .config .kernelrelease FORCE
871         $(call filechk,version.h)
872
873 # ---------------------------------------------------------------------------
874
875 PHONY += depend dep
876 depend dep:
877         @echo '*** Warning: make $@ is unnecessary now.'
878
879 # ---------------------------------------------------------------------------
880 # Kernel headers
881 INSTALL_HDR_PATH=$(MODLIB)/abi
882 export INSTALL_HDR_PATH
883
884 PHONY += headers_install
885 headers_install: include/lwk/version.h
886         $(Q)unifdef -Ux /dev/null
887         $(Q)rm -rf $(INSTALL_HDR_PATH)/include
888         $(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.headersinst obj=include
889
890 PHONY += headers_check
891 headers_check: headers_install
892         $(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.headersinst obj=include HDRCHECK=1
893
894 # ---------------------------------------------------------------------------
895 # Modules
896
897 ifdef CONFIG_MODULES
898
899 #       By default, build modules as well
900
901 all: modules
902
903 #       Build modules
904
905 PHONY += modules
906 modules: $(vmlwk-dirs) $(if $(KBUILD_BUILTIN),vmlwk)
907         @echo '  Building modules, stage 2.';
908         $(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.modpost
909
910
911 # Target to prepare building external modules
912 PHONY += modules_prepare
913 modules_prepare: prepare scripts
914
915 # Target to install modules
916 PHONY += modules_install
917 modules_install: _modinst_ _modinst_post
918
919 PHONY += _modinst_
920 _modinst_:
921         @if [ -z "`$(DEPMOD) -V 2>/dev/null | grep module-init-tools`" ]; then \
922                 echo "Warning: you may need to install module-init-tools"; \
923                 echo "See http://www.codemonkey.org.uk/docs/post-halloween-2.6.txt";\
924                 sleep 1; \
925         fi
926         @rm -rf $(MODLIB)/kernel
927         @rm -f $(MODLIB)/source
928         @mkdir -p $(MODLIB)/kernel
929         @ln -s $(srctree) $(MODLIB)/source
930         @if [ ! $(objtree) -ef  $(MODLIB)/build ]; then \
931                 rm -f $(MODLIB)/build ; \
932                 ln -s $(objtree) $(MODLIB)/build ; \
933         fi
934         $(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.modinst
935
936 # If System.map exists, run depmod.  This deliberately does not have a
937 # dependency on System.map since that would run the dependency tree on
938 # vmlwk.  This depmod is only for convenience to give the initial
939 # boot a modules.dep even before / is mounted read-write.  However the
940 # boot script depmod is the master version.
941 ifeq "$(strip $(INSTALL_MOD_PATH))" ""
942 depmod_opts     :=
943 else
944 depmod_opts     := -b $(INSTALL_MOD_PATH) -r
945 endif
946 PHONY += _modinst_post
947 _modinst_post: _modinst_
948         if [ -r System.map -a -x $(DEPMOD) ]; then $(DEPMOD) -ae -F System.map $(depmod_opts) $(KERNELRELEASE); fi
949
950 else # CONFIG_MODULES
951
952 # Modules not configured
953 # ---------------------------------------------------------------------------
954
955 modules modules_install: FORCE
956         @echo
957         @echo "The present kernel configuration has modules disabled."
958         @echo "Type 'make config' and enable loadable module support."
959         @echo "Then build a kernel with module support enabled."
960         @echo
961         @exit 1
962
963 endif # CONFIG_MODULES
964
965 ###
966 # Cleaning is done on three levels.
967 # make clean     Delete most generated files
968 #                Leave enough to build external modules
969 # make mrproper  Delete the current configuration, and all generated files
970 # make distclean Remove editor backup files, patch leftover files and the like
971
972 # Directories & files removed with 'make clean'
973 CLEAN_DIRS  += $(MODVERDIR)
974 CLEAN_FILES +=  vmlwk System.map vmlwk.bin vmlwk.asm \
975                 .tmp_kallsyms* .tmp_version .tmp_vmlwk* .tmp_System.map
976
977 # Directories & files removed with 'make mrproper'
978 MRPROPER_DIRS  += include/config include2
979 MRPROPER_FILES += .config .config.old include/arch .version .old_version \
980                   include/lwk/autoconf.h include/lwk/version.h \
981                   .kernelrelease Module.symvers tags TAGS cscope*
982
983 # clean - Delete most, but leave enough to build external modules
984 #
985 clean: rm-dirs  := $(CLEAN_DIRS)
986 clean: rm-files := $(CLEAN_FILES)
987 clean-dirs      := $(addprefix _clean_,$(srctree) $(vmlwk-alldirs))
988
989 PHONY += $(clean-dirs) clean archclean
990 $(clean-dirs):
991         $(Q)$(MAKE) $(clean)=$(patsubst _clean_%,%,$@)
992
993 clean: archclean $(clean-dirs)
994         $(call cmd,rmdirs)
995         $(call cmd,rmfiles)
996         @find . $(RCS_FIND_IGNORE) \
997                 \( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \
998                 -o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \) \
999                 -type f -print | xargs rm -f
1000         @rm -f init_task
1001
1002 # mrproper - Delete all generated files, including .config
1003 #
1004 mrproper: rm-dirs  := $(wildcard $(MRPROPER_DIRS))
1005 mrproper: rm-files := $(wildcard $(MRPROPER_FILES))
1006 #mrproper-dirs      := $(addprefix _mrproper_,Documentation/DocBook scripts)
1007 mrproper-dirs      := $(addprefix _mrproper_, scripts)
1008
1009 PHONY += $(mrproper-dirs) mrproper archmrproper
1010 $(mrproper-dirs):
1011         $(Q)$(MAKE) $(clean)=$(patsubst _mrproper_%,%,$@)
1012
1013 mrproper: clean archmrproper $(mrproper-dirs)
1014         $(call cmd,rmdirs)
1015         $(call cmd,rmfiles)
1016
1017 # distclean
1018 #
1019 PHONY += distclean
1020
1021 distclean: mrproper
1022         @find $(srctree) $(RCS_FIND_IGNORE) \
1023                 \( -name '*.orig' -o -name '*.rej' -o -name '*~' \
1024                 -o -name '*.bak' -o -name '#*#' -o -name '.*.orig' \
1025                 -o -name '.*.rej' -o -size 0 \
1026                 -o -name '*%' -o -name '.*.cmd' -o -name 'core' \) \
1027                 -type f -print | xargs rm -f
1028
1029
1030 # Packaging of the kernel to various formats
1031 # ---------------------------------------------------------------------------
1032 # rpm target kept for backward compatibility
1033 package-dir     := $(srctree)/scripts/package
1034
1035 %pkg: FORCE
1036         $(Q)$(MAKE) $(build)=$(package-dir) $@
1037 rpm: FORCE
1038         $(Q)$(MAKE) $(build)=$(package-dir) $@
1039
1040
1041 # Brief documentation of the typical targets used
1042 # ---------------------------------------------------------------------------
1043
1044 boards := $(wildcard $(srctree)/arch/$(ARCH)/configs/*_defconfig)
1045 boards := $(notdir $(boards))
1046
1047 help:
1048         @echo  'Cleaning targets:'
1049         @echo  '  clean           - remove most generated files but keep the config'
1050         @echo  '  mrproper        - remove all generated files + config + various backup files'
1051         @echo  ''
1052         @echo  'Configuration targets:'
1053         @$(MAKE) -f $(srctree)/scripts/kconfig/Makefile help
1054         @echo  ''
1055         @echo  'Other generic targets:'
1056         @echo  '  all             - Build all targets marked with [*]'
1057         @echo  '* vmllwk          - Build the bare kernel'
1058         @echo  '* modules         - Build all modules'
1059         @echo  '  modules_install - Install all modules to INSTALL_MOD_PATH (default: /)'
1060         @echo  '  dir/            - Build all files in dir and below'
1061         @echo  '  dir/file.[ois]  - Build specified target only'
1062         @echo  '  dir/file.ko     - Build module including final link'
1063         @echo  '  rpm             - Build a kernel as an RPM package'
1064         @echo  '  tags/TAGS       - Generate tags file for editors'
1065         @echo  '  cscope          - Generate cscope index'
1066         @echo  '  kernelrelease   - Output the release version string'
1067         @echo  '  kernelversion   - Output the version stored in Makefile'
1068         @echo  '  headers_install - Install sanitised kernel headers to INSTALL_HDR_PATH'
1069         @echo  '                    (default: /lib/modules/$$VERSION/abi)'
1070         @echo  ''
1071         @echo  'Static analysers'
1072         @echo  '  checkstack      - Generate a list of stack hogs'
1073         @echo  '  namespacecheck  - Name space analysis on compiled kernel'
1074         @echo  ''
1075         @echo  'Kernel packaging:'
1076         @$(MAKE) $(build)=$(package-dir) help
1077         @echo  ''
1078         @echo  'Documentation targets:'
1079         @$(MAKE) -f $(srctree)/Documentation/DocBook/Makefile dochelp
1080         @echo  ''
1081         @echo  'Architecture specific targets ($(ARCH)):'
1082         @$(if $(archhelp),$(archhelp),\
1083                 echo '  No architecture specific help defined for $(ARCH)')
1084         @echo  ''
1085         @$(if $(boards), \
1086                 $(foreach b, $(boards), \
1087                 printf "  %-24s - Build for %s\\n" $(b) $(subst _defconfig,,$(b));) \
1088                 echo '')
1089
1090         @echo  '  make V=0|1 [targets] 0 => quiet build (default), 1 => verbose build'
1091         @echo  '  make O=dir [targets] Locate all output files in "dir", including .config'
1092         @echo  '  make C=1   [targets] Check all c source with $$CHECK (sparse)'
1093         @echo  '  make C=2   [targets] Force check of all c source with $$CHECK (sparse)'
1094         @echo  ''
1095         @echo  'Execute "make" or "make all" to build all targets marked with [*] '
1096         @echo  'For further info see the ./README file'
1097
1098
1099 # Documentation targets
1100 # ---------------------------------------------------------------------------
1101 %docs: scripts_basic FORCE
1102         $(Q)$(MAKE) $(build)=Documentation/DocBook $@
1103
1104 else # KBUILD_EXTMOD
1105
1106 ###
1107 # External module support.
1108 # When building external modules the kernel used as basis is considered
1109 # read-only, and no consistency checks are made and the make
1110 # system is not used on the basis kernel. If updates are required
1111 # in the basis kernel ordinary make commands (without M=...) must
1112 # be used.
1113 #
1114 # The following are the only valid targets when building external
1115 # modules.
1116 # make M=dir clean     Delete all automatically generated files
1117 # make M=dir modules   Make all modules in specified dir
1118 # make M=dir           Same as 'make M=dir modules'
1119 # make M=dir modules_install
1120 #                      Install the modules build in the module directory
1121 #                      Assumes install directory is already created
1122
1123 # We are always building modules
1124 KBUILD_MODULES := 1
1125 PHONY += crmodverdir
1126 crmodverdir:
1127         $(Q)mkdir -p $(MODVERDIR)
1128         $(Q)rm -f $(MODVERDIR)/*
1129
1130 PHONY += $(objtree)/Module.symvers
1131 $(objtree)/Module.symvers:
1132         @test -e $(objtree)/Module.symvers || ( \
1133         echo; \
1134         echo "  WARNING: Symbol version dump $(objtree)/Module.symvers"; \
1135         echo "           is missing; modules will have no dependencies and modversions."; \
1136         echo )
1137
1138 module-dirs := $(addprefix _module_,$(KBUILD_EXTMOD))
1139 PHONY += $(module-dirs) modules
1140 $(module-dirs): crmodverdir $(objtree)/Module.symvers
1141         $(Q)$(MAKE) $(build)=$(patsubst _module_%,%,$@)
1142
1143 modules: $(module-dirs)
1144         @echo '  Building modules, stage 2.';
1145         $(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.modpost
1146
1147 PHONY += modules_install
1148 modules_install: _emodinst_ _emodinst_post
1149
1150 install-dir := $(if $(INSTALL_MOD_DIR),$(INSTALL_MOD_DIR),extra)
1151 PHONY += _emodinst_
1152 _emodinst_:
1153         $(Q)mkdir -p $(MODLIB)/$(install-dir)
1154         $(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.modinst
1155
1156 # Run depmod only is we have System.map and depmod is executable
1157 quiet_cmd_depmod = DEPMOD  $(KERNELRELEASE)
1158       cmd_depmod = if [ -r System.map -a -x $(DEPMOD) ]; then \
1159                       $(DEPMOD) -ae -F System.map             \
1160                       $(if $(strip $(INSTALL_MOD_PATH)),      \
1161                       -b $(INSTALL_MOD_PATH) -r)              \
1162                       $(KERNELRELEASE);                       \
1163                    fi
1164
1165 PHONY += _emodinst_post
1166 _emodinst_post: _emodinst_
1167         $(call cmd,depmod)
1168
1169 clean-dirs := $(addprefix _clean_,$(KBUILD_EXTMOD))
1170
1171 PHONY += $(clean-dirs) clean
1172 $(clean-dirs):
1173         $(Q)$(MAKE) $(clean)=$(patsubst _clean_%,%,$@)
1174
1175 clean:  rm-dirs := $(MODVERDIR)
1176 clean: $(clean-dirs)
1177         $(call cmd,rmdirs)
1178         @find $(KBUILD_EXTMOD) $(RCS_FIND_IGNORE) \
1179                 \( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \
1180                 -o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \) \
1181                 -type f -print | xargs rm -f
1182
1183 help:
1184         @echo  '  Building external modules.'
1185         @echo  '  Syntax: make -C path/to/kernel/src M=$$PWD target'
1186         @echo  ''
1187         @echo  '  modules         - default target, build the module(s)'
1188         @echo  '  modules_install - install the module'
1189         @echo  '  clean           - remove generated files in module directory only'
1190         @echo  ''
1191
1192 # Dummies...
1193 PHONY += prepare scripts
1194 prepare: ;
1195 scripts: ;
1196 endif # KBUILD_EXTMOD
1197
1198 # Generate tags for editors
1199 # ---------------------------------------------------------------------------
1200
1201 #We want __srctree to totally vanish out when KBUILD_OUTPUT is not set
1202 #(which is the most common case IMHO) to avoid unneeded clutter in the big tags file.
1203 #Adding $(srctree) adds about 20M on i386 to the size of the output file!
1204
1205 ifeq ($(src),$(obj))
1206 __srctree =
1207 else
1208 __srctree = $(srctree)/
1209 endif
1210
1211 ifeq ($(ALLSOURCE_ARCHS),)
1212 ifeq ($(ARCH),um)
1213 ALLINCLUDE_ARCHS := $(ARCH) $(SUBARCH)
1214 else
1215 ALLINCLUDE_ARCHS := $(ARCH)
1216 endif
1217 else
1218 #Allow user to specify only ALLSOURCE_PATHS on the command line, keeping existing behaviour.
1219 ALLINCLUDE_ARCHS := $(ALLSOURCE_ARCHS)
1220 endif
1221
1222 ALLSOURCE_ARCHS := $(ARCH)
1223
1224 define all-sources
1225         ( find $(__srctree) $(RCS_FIND_IGNORE) \
1226                \( -name include -o -name arch \) -prune -o \
1227                -name '*.[chS]' -print; \
1228           for ARCH in $(ALLSOURCE_ARCHS) ; do \
1229                find $(__srctree)arch/$${ARCH} $(RCS_FIND_IGNORE) \
1230                     -name '*.[chS]' -print; \
1231           done ; \
1232           find $(__srctree)include $(RCS_FIND_IGNORE) \
1233                \( -name config -o -name 'arch-*' \) -prune \
1234                -o -name '*.[chS]' -print; \
1235           for ARCH in $(ALLINCLUDE_ARCHS) ; do \
1236                find $(__srctree)include/arch-$${ARCH} $(RCS_FIND_IGNORE) \
1237                     -name '*.[chS]' -print; \
1238           done ; \
1239           find $(__srctree)include/arch-generic $(RCS_FIND_IGNORE) \
1240                -name '*.[chS]' -print )
1241 endef
1242
1243 quiet_cmd_cscope-file = FILELST cscope.files
1244       cmd_cscope-file = (echo \-k; echo \-q; $(all-sources)) > cscope.files
1245
1246 quiet_cmd_cscope = MAKE    cscope.out
1247       cmd_cscope = cscope -b
1248
1249 cscope: FORCE
1250         $(call cmd,cscope-file)
1251         $(call cmd,cscope)
1252
1253 quiet_cmd_TAGS = MAKE   $@
1254 define cmd_TAGS
1255         rm -f $@; \
1256         ETAGSF=`etags --version | grep -i exuberant >/dev/null &&     \
1257                 echo "-I __initdata,__exitdata,__acquires,__releases  \
1258                       -I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL              \
1259                       --extra=+f --c-kinds=+px"`;                     \
1260                 $(all-sources) | xargs etags $$ETAGSF -a
1261 endef
1262
1263 TAGS: FORCE
1264         $(call cmd,TAGS)
1265
1266
1267 quiet_cmd_tags = MAKE   $@
1268 define cmd_tags
1269         rm -f $@; \
1270         CTAGSF=`ctags --version | grep -i exuberant >/dev/null &&     \
1271                 echo "-I __initdata,__exitdata,__acquires,__releases  \
1272                       -I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL              \
1273                       --extra=+f --c-kinds=+px"`;                     \
1274                 $(all-sources) | xargs ctags $$CTAGSF -a
1275 endef
1276
1277 tags: FORCE
1278         $(call cmd,tags)
1279
1280
1281 # Scripts to check various things for consistency
1282 # ---------------------------------------------------------------------------
1283
1284 includecheck:
1285         find * $(RCS_FIND_IGNORE) \
1286                 -name '*.[hcS]' -type f -print | sort \
1287                 | xargs $(PERL) -w scripts/checkincludes.pl
1288
1289 versioncheck:
1290         find * $(RCS_FIND_IGNORE) \
1291                 -name '*.[hcS]' -type f -print | sort \
1292                 | xargs $(PERL) -w scripts/checkversion.pl
1293
1294 namespacecheck:
1295         $(PERL) $(srctree)/scripts/namespace.pl
1296
1297 endif #ifeq ($(config-targets),1)
1298 endif #ifeq ($(mixed-targets),1)
1299
1300 PHONY += checkstack
1301 checkstack:
1302         $(OBJDUMP) -d vmlwk $$(find . -name '*.ko') | \
1303         $(PERL) $(src)/scripts/checkstack.pl $(ARCH)
1304
1305 kernelrelease:
1306         $(if $(wildcard .kernelrelease), $(Q)echo $(KERNELRELEASE), \
1307         $(error kernelrelease not valid - run 'make *config' to update it))
1308 kernelversion:
1309         @echo $(KERNELVERSION)
1310
1311 # Single targets
1312 # ---------------------------------------------------------------------------
1313 # Single targets are compatible with:
1314 # - build whith mixed source and output
1315 # - build with separate output dir 'make O=...'
1316 # - external modules
1317 #
1318 #  target-dir => where to store outputfile
1319 #  build-dir  => directory in kernel source tree to use
1320
1321 ifeq ($(KBUILD_EXTMOD),)
1322         build-dir  = $(patsubst %/,%,$(dir $@))
1323         target-dir = $(dir $@)
1324 else
1325         zap-slash=$(filter-out .,$(patsubst %/,%,$(dir $@)))
1326         build-dir  = $(KBUILD_EXTMOD)$(if $(zap-slash),/$(zap-slash))
1327         target-dir = $(if $(KBUILD_EXTMOD),$(dir $<),$(dir $@))
1328 endif
1329
1330 %.s: %.c prepare scripts FORCE
1331         $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
1332 %.i: %.c prepare scripts FORCE
1333         $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
1334 %.o: %.c prepare scripts FORCE
1335         $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
1336 %.lst: %.c prepare scripts FORCE
1337         $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
1338 %.s: %.S prepare scripts FORCE
1339         $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
1340 %.o: %.S prepare scripts FORCE
1341         $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
1342
1343 # Modules
1344 / %/: prepare scripts FORCE
1345         $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \
1346         $(build)=$(build-dir)
1347 %.ko: prepare scripts FORCE
1348         $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1)   \
1349         $(build)=$(build-dir) $(@:.ko=.o)
1350         $(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.modpost
1351
1352 # FIXME Should go into a make.lib or something 
1353 # ===========================================================================
1354
1355 quiet_cmd_rmdirs = $(if $(wildcard $(rm-dirs)),CLEAN   $(wildcard $(rm-dirs)))
1356       cmd_rmdirs = rm -rf $(rm-dirs)
1357
1358 quiet_cmd_rmfiles = $(if $(wildcard $(rm-files)),CLEAN   $(wildcard $(rm-files)))
1359       cmd_rmfiles = rm -f $(rm-files)
1360
1361
1362 a_flags = -Wp,-MD,$(depfile) $(AFLAGS) $(AFLAGS_KERNEL) \
1363           $(NOSTDINC_FLAGS) $(CPPFLAGS) \
1364           $(modkern_aflags) $(EXTRA_AFLAGS) $(AFLAGS_$(*F).o)
1365
1366 quiet_cmd_as_o_S = AS      $@
1367 cmd_as_o_S       = $(CC) $(a_flags) -c -o $@ $<
1368
1369 # read all saved command lines
1370
1371 targets := $(wildcard $(sort $(targets)))
1372 cmd_files := $(wildcard .*.cmd $(foreach f,$(targets),$(dir $(f)).$(notdir $(f)).cmd))
1373
1374 ifneq ($(cmd_files),)
1375   $(cmd_files): ;       # Do not try to update included dependency files
1376   include $(cmd_files)
1377 endif
1378
1379 # Shorthand for $(Q)$(MAKE) -f scripts/Makefile.clean obj=dir
1380 # Usage:
1381 # $(Q)$(MAKE) $(clean)=dir
1382 clean := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.clean obj
1383
1384 endif   # skip-makefile
1385
1386 # Build LWK user-space libraries and example programs
1387 user: FORCE
1388         cd user/; $(MAKE) all
1389
1390 # A simple user-space app for the LWK to launch at boot
1391 init_task: user FORCE
1392         cp user/hello_world/hello_world ./init_task
1393
1394 PHONY += FORCE
1395 FORCE:
1396
1397
1398 # Declare the contents of the .PHONY variable as phony.  We keep that
1399 # information in a variable se we can use it in if_changed and friends.
1400 .PHONY: $(PHONY)