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