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