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.


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