[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/Makefile

Version: -  FREEBSD  -  FREEBSD8  -  FREEBSD7  -  FREEBSD72  -  FREEBSD71  -  FREEBSD70  -  FREEBSD6  -  FREEBSD64  -  FREEBSD63  -  FREEBSD62  -  FREEBSD61  -  FREEBSD60  -  FREEBSD5  -  FREEBSD55  -  FREEBSD54  -  FREEBSD53  -  FREEBSD52  -  FREEBSD51  -  FREEBSD50  -  FREEBSD4  -  FREEBSD3  -  FREEBSD22  -  linux-2.6  -  linux-2.4.22  -  MK83  -  MK84  -  PLAN9  -  DFBSD  -  NETBSD  -  NETBSD5  -  NETBSD4  -  NETBSD3  -  NETBSD20  -  OPENBSD  -  xnu-517  -  xnu-792  -  xnu-792.6.70  -  xnu-1228  -  xnu-1456.1.26  -  OPENSOLARIS  -  minix-3-1-1  -  FREEBSD-LIBC  -  FREEBSD7-LIBC  -  FREEBSD6-LIBC  -  GLIBC27 
SearchContext: -  none  -  excerpts  -  bigexcerpts 

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

Cache object: 3f7376b10371b449bc9aafac446bb463


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.