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