source: MondoRescue/branches/3.3/mindi-busybox/Makefile@ 3902

Last change on this file since 3902 was 3621, checked in by Bruno Cornec, 10 years ago

New 3?3 banch for incorporation of latest busybox 1.25. Changing minor version to handle potential incompatibilities.

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