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

