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.


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