source: MondoRescue/branches/stable/mindi-busybox/Makefile@ 1770

Last change on this file since 1770 was 1770, checked in by Bruno Cornec, 16 years ago
  • Better output for mindi-busybox revision
  • Remove dummy file created on NFS - report from Arnaud Tiger <arnaud.tiger_at_hp.com>
  • strace useful for debug
  • fix new versions for pb (2.0.0 for mindi and 1.7.2 for mindi-busybox)
  • fix build process for mindi-busybox + options used in that version (dd for label-partitions-as-necessary)
  • fix typo in label-partitions-as-necessary which doesn't seem to work
  • Update to busybox 1.7.2
  • perl is now required at restore time to support uuid swap partitions (and will be used for many other thigs

in the future for sure)

  • next mindi version will be 2.0.0 due to all the changes made in it (udev may break working distros)
  • small optimization in mindi on keyboard handling (one single find instead of multiple)
  • better interaction for USB device when launching mindi manually
  • attempt to automatically guess block disk size for ramdisk
  • fix typos in bkphw
  • Fix the remaining problem with UUID support for swap partitions
  • Updates mondoarchive man page for USB support
  • Adds preliminary Hardware support to mindi (Proliant SSSTK)
  • Tries to add udev support also for rhel4
  • Fix UUID support which was still broken.
  • Be conservative in test for the start-nfs script
  • Update config file for mindi-busybox for 1.7.2 migration
  • Try to run around a busybox bug (1.2.2 pb on inexistant links)
  • Add build content for mindi-busybox in pb
  • Remove distributions content for mindi-busybox
  • Fix a warning on inexistant raidtab
  • Solve problem on tmpfs in restore init (Problem of inexistant symlink and busybox)
  • Create MONDO_CACHE and use it everywhere + creation at start
  • Really never try to eject a USB device
  • Fix a issue with &> usage (replaced with 1> and 2>)
  • Adds magic file to depllist in order to have file working + ldd which helps for debugging issues
  • tty modes correct to avoid sh error messages
  • Use ext3 normally and not ext2 instead
  • USB device should be corrected after reading (take 1st part)
  • Adds a mount_USB_here function derived from mount_CDROM_here
  • usb detection place before /dev detection in device name at restore time
  • Fix when restoring from USB: media is asked in interactive mode
  • Adds USB support for mondorestore
  • mount_cdrom => mount_media
  • elilo.efi is now searched throughout /boot/efi and not in a fixed place as there is no standard
  • untar-and-softlink => untar (+ interface change)
  • suppress useless softlinks creation/removal in boot process
  • avoids udevd messages on groups
  • Increase # of disks to 99 as in mindi at restore time (should be a conf file parameter)
  • skip existing big file creation
  • seems to work correctly for USB mindi boot
  • Adds group and tty link to udev conf
  • Always load usb-torage (even 2.6) to initiate USB bus discovery
  • Better printing of messages
  • Attempt to fix a bug in supporting OpenSusE 10.3 kernel for initramfs (mindi may now use multiple regex for kernel initrd detection)
  • Links were not correctly done as non relative for modules in mindi
  • exclusion of modules denied now works
  • Also create modules in their ordinary place, so that classical modprobe works + copy modules.dep
  • Fix bugs for DENY_MODS handling
  • Add device /dev/console for udev
  • ide-generic should now really be excluded
  • Fix a bug in major number for tty
  • If udev then adds modprobe/insmod to rootfs
  • tty0 is also cretaed with udev
  • ide-generic put rather in DENY_MODS
  • udevd remove from deplist s handled in mindi directly
  • better default for mindi when using --usb
  • Handles dynamically linked busybox (in case we want to use it soon ;-)
  • Adds fixed devices to create for udev
  • ide-generic should not be part of the initrd when using libata v2
  • support a dynamically linked udev (case on Ubuntu 7.10 and Mandriva 2008.0 so should be quite generic) This will give incitation to move to dyn. linked binaries in the initrd which will help for other tasks (ia6 4)
  • Improvement in udev support (do not use cl options not available in busybox)
  • Udev in mindi
    • auto creation of the right links at boot time with udev-links.conf(from Mandriva 2008.0)
    • rework startup of udev as current makes kernel crash (from Mandriva 2008.0)
    • add support for 64 bits udev
  • Try to render MyInsmod silent at boot time
  • Adds udev support (mandatory for newest distributions to avoid remapping of devices in a different way as on the original system)
  • We also need vaft format support for USB boot
  • Adds libusual support (Ubuntu 7.10 needs it for USB)
  • Improve Ubuntu/Debian keyboard detection and support
  • pbinit adapted to new pb (0.8.10). Filtering of docs done in it
  • Suppress some mondo warnings and errors on USB again
  • Tries to fix lack of files in deb mindi package
  • Verify should now work for USB devices
  • More log/mesages improvement for USB support
  • - Supress g_erase_tmpdir_and_scratchdir
  • Improve some log messages for USB support
  • Try to improve install in mindi to avoid issues with isolinux.cfg not installed vene if in the pkg :-(
  • Improve mindi-busybox build
  • In conformity with pb 0.8.9
  • Add support for Ubuntu 7.10 in build process
  • Add USB Key button to Menu UI (CD streamer removed)
  • Attempt to fix error messages on tmp/scratch files at the end by removing those dir at the latest possible.
  • Fix a bug linked to the size of the -E param which could be used (Arnaud Tiger/René Ribaud).
  • Integrate ~/.pbrc content into mondorescue.pb (required project-builder >= 0.8.7)
  • Put mondorescue in conformity with new pb filtering rules
  • Add USB support at restore time (no test done yet). New start-usb script PB varibale added where useful
  • Unmounting USB device before removal of temporary scratchdir
  • Stil refining USB copy back to mondo (one command was not executed)
  • No need to have the image subdor in the csratchdir when USB.
  • umount the USB partition before attempting to use it
  • Remove useless copy from mindi to mondo at end of USB handling

(risky merge, we are raising the limits of 2 diverging branches. The status of stable is not completely sure as such. Will need lots of tests, but it's not yet done :-()
(merge -r1692:1769 $SVN_M/branches/2.2.5)

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