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