Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
[pandora-kernel.git] / Documentation / kbuild / makefiles.txt
index 4b3d671..7a77533 100644 (file)
@@ -34,7 +34,7 @@ This document describes the Linux kernel Makefiles.
           --- 6.1 Set variables to tweak the build to the architecture
           --- 6.2 Add prerequisites to archprepare:
           --- 6.3 List directories to visit when descending
-          --- 6.4 Architecture specific boot images
+          --- 6.4 Architecture-specific boot images
           --- 6.5 Building non-kbuild targets
           --- 6.6 Commands useful for building a boot image
           --- 6.7 Custom kbuild commands
@@ -124,7 +124,7 @@ more details, with real examples.
        Example:
                obj-y += foo.o
 
-       This tell kbuild that there is one object in that directory, named
+       This tells kbuild that there is one object in that directory, named
        foo.o. foo.o will be built from foo.c or foo.S.
 
        If foo.o shall be built as a module, the variable obj-m is used.
@@ -276,41 +276,39 @@ more details, with real examples.
 
 --- 3.7 Compilation flags
 
-    EXTRA_CFLAGS, EXTRA_AFLAGS, EXTRA_LDFLAGS, EXTRA_ARFLAGS
+    ccflags-y, asflags-y and ldflags-y
+       The three flags listed above applies only to the kbuild makefile
+       where they are assigned. They are used for all the normal
+       cc, as and ld invocation happenign during a recursive build.
+       Note: Flags with the same behaviour were previously named:
+       EXTRA_CFLAGS, EXTRA_AFLAGS and EXTRA_LDFLAGS.
+       They are yet supported but their use are deprecated.
 
-       All the EXTRA_ variables apply only to the kbuild makefile
-       where they are assigned. The EXTRA_ variables apply to all
-       commands executed in the kbuild makefile.
-
-       $(EXTRA_CFLAGS) specifies options for compiling C files with
-       $(CC).
+       ccflags-y specifies options for compiling C files with $(CC).
 
        Example:
                # drivers/sound/emu10k1/Makefile
-               EXTRA_CFLAGS += -I$(obj)
-               ifdef DEBUG
-                   EXTRA_CFLAGS += -DEMU10K1_DEBUG
-               endif
+               ccflags-y += -I$(obj)
+               ccflags-$(DEBUG) += -DEMU10K1_DEBUG
 
 
        This variable is necessary because the top Makefile owns the
-       variable $(CFLAGS) and uses it for compilation flags for the
+       variable $(KBUILD_CFLAGS) and uses it for compilation flags for the
        entire tree.
 
-       $(EXTRA_AFLAGS) is a similar string for per-directory options
+       asflags-y is a similar string for per-directory options
        when compiling assembly language source.
 
        Example:
                #arch/x86_64/kernel/Makefile
-               EXTRA_AFLAGS := -traditional
+               asflags-y := -traditional
 
 
-       $(EXTRA_LDFLAGS) and $(EXTRA_ARFLAGS) are similar strings for
-       per-directory options to $(LD) and $(AR).
+       ldflags-y is a string for per-directory options to $(LD).
 
        Example:
                #arch/m68k/fpsp040/Makefile
-               EXTRA_LDFLAGS := -x
+               ldflags-y := -x
 
     CFLAGS_$@, AFLAGS_$@
 
@@ -353,7 +351,7 @@ more details, with real examples.
        Special rules are used when the kbuild infrastructure does
        not provide the required support. A typical example is
        header files generated during the build process.
-       Another example are the architecture specific Makefiles which
+       Another example are the architecture-specific Makefiles which
        need special rules to prepare boot images etc.
 
        Special rules are written as normal Make rules.
@@ -416,7 +414,7 @@ more details, with real examples.
                #arch/i386/kernel/Makefile
                vsyscall-flags += $(call ld-option, -Wl$(comma)--hash-style=sysv)
 
-       In the above example vsyscall-flags will be assigned the option
+       In the above example, vsyscall-flags will be assigned the option
        -Wl$(comma)--hash-style=sysv if it is supported by $(CC).
        The second argument is optional, and if supplied will be used
        if first argument is not supported.
@@ -425,6 +423,7 @@ more details, with real examples.
        as-instr checks if the assembler reports a specific instruction
        and then outputs either option1 or option2
        C escapes are supported in the test instruction
+       Note: as-instr-option uses KBUILD_AFLAGS for $(AS) options
 
     cc-option
        cc-option is used to check if $(CC) supports a given option, and not
@@ -434,10 +433,11 @@ more details, with real examples.
                #arch/i386/Makefile
                cflags-y += $(call cc-option,-march=pentium-mmx,-march=i586)
 
-       In the above example cflags-y will be assigned the option
+       In the above example, cflags-y will be assigned the option
        -march=pentium-mmx if supported by $(CC), otherwise -march=i586.
        The second argument to cc-option is optional, and if omitted,
        cflags-y will be assigned no value if first option is not supported.
+       Note: cc-option uses KBUILD_CFLAGS for $(CC) options
 
    cc-option-yn
        cc-option-yn is used to check if gcc supports a given option
@@ -453,6 +453,7 @@ more details, with real examples.
        option. When $(biarch) equals 'y', the expanded variables $(aflags-y)
        and $(cflags-y) will be assigned the values -a32 and -m32,
        respectively.
+       Note: cc-option-yn uses KBUILD_CFLAGS for $(CC) options
 
     cc-option-align
        gcc versions >= 3.0 changed the type of options used to specify
@@ -464,10 +465,11 @@ more details, with real examples.
                cc-option-align = -falign
 
        Example:
-               CFLAGS += $(cc-option-align)-functions=4
+               KBUILD_CFLAGS += $(cc-option-align)-functions=4
 
        In the above example, the option -falign-functions=4 is used for
        gcc >= 3.00. For gcc < 3.00, -malign-functions=4 is used.
+       Note: cc-option-align uses KBUILD_CFLAGS for $(CC) options
 
     cc-version
        cc-version returns a numerical version of the $(CC) compiler version.
@@ -492,15 +494,51 @@ more details, with real examples.
 
        Example:
                #fs/reiserfs/Makefile
-               EXTRA_CFLAGS := $(call cc-ifversion, -lt, 0402, -O1)
+               ccflags-y := $(call cc-ifversion, -lt, 0402, -O1)
 
-       In this example, EXTRA_CFLAGS will be assigned the value -O1 if the
+       In this example, ccflags-y will be assigned the value -O1 if the
        $(CC) version is less than 4.2.
        cc-ifversion takes all the shell operators:
        -eq, -ne, -lt, -le, -gt, and -ge
        The third parameter may be a text as in this example, but it may also
        be an expanded variable or a macro.
 
+    cc-fullversion
+       cc-fullversion is useful when the exact version of gcc is needed.
+       One typical use-case is when a specific GCC version is broken.
+       cc-fullversion points out a more specific version than cc-version does.
+
+       Example:
+               #arch/powerpc/Makefile
+               $(Q)if test "$(call cc-fullversion)" = "040200" ; then \
+                       echo -n '*** GCC-4.2.0 cannot compile the 64-bit powerpc ' ; \
+                       false ; \
+               fi
+
+       In this example for a specific GCC version the build will error out explaining
+       to the user why it stops.
+
+    cc-cross-prefix
+       cc-cross-prefix is used to check if there exists a $(CC) in path with
+       one of the listed prefixes. The first prefix where there exist a
+       prefix$(CC) in the PATH is returned - and if no prefix$(CC) is found
+       then nothing is returned.
+       Additional prefixes are separated by a single space in the
+       call of cc-cross-prefix.
+       This functionality is useful for architecture Makefiles that try
+       to set CROSS_COMPILE to well-known values but may have several
+       values to select between.
+       It is recommended only to try to set CROSS_COMPILE if it is a cross
+       build (host arch is different from target arch). And if CROSS_COMPILE
+       is already set then leave it with the old value.
+
+       Example:
+               #arch/m68k/Makefile
+               ifneq ($(SUBARCH),$(ARCH))
+                       ifeq ($(CROSS_COMPILE),)
+                              CROSS_COMPILE := $(call cc-cross-prefix, m68k-linux-gnu-)
+                       endif
+               endif
 
 === 4 Host Program support
 
@@ -750,10 +788,10 @@ When kbuild executes, the following steps are followed (roughly):
    located at the root of the obj tree.
    The very first objects linked are listed in head-y, assigned by
    arch/$(ARCH)/Makefile.
-7) Finally, the architecture specific part does any required post processing
+7) Finally, the architecture-specific part does any required post processing
    and builds the final bootimage.
    - This includes building boot records
-   - Preparing initrd images and thelike
+   - Preparing initrd images and the like
 
 
 --- 6.1 Set variables to tweak the build to the architecture
@@ -766,8 +804,8 @@ When kbuild executes, the following steps are followed (roughly):
        Example:
                #arch/s390/Makefile
                LDFLAGS         := -m elf_s390
-       Note: EXTRA_LDFLAGS and LDFLAGS_$@ can be used to further customise
-       the flags used. See chapter 7.
+       Note: ldflags-y can be used to further customise
+       the flags used. See chapter 3.7.
 
     LDFLAGS_MODULE     Options for $(LD) when linking modules
 
@@ -803,26 +841,26 @@ When kbuild executes, the following steps are followed (roughly):
        In this example, the binary $(obj)/image is a binary version of
        vmlinux. The usage of $(call if_changed,xxx) will be described later.
 
-    AFLAGS             $(AS) assembler flags
+    KBUILD_AFLAGS              $(AS) assembler flags
 
        Default value - see top level Makefile
        Append or modify as required per architecture.
 
        Example:
                #arch/sparc64/Makefile
-               AFLAGS += -m64 -mcpu=ultrasparc
+               KBUILD_AFLAGS += -m64 -mcpu=ultrasparc
 
-    CFLAGS             $(CC) compiler flags
+    KBUILD_CFLAGS              $(CC) compiler flags
 
        Default value - see top level Makefile
        Append or modify as required per architecture.
 
-       Often, the CFLAGS variable depends on the configuration.
+       Often, the KBUILD_CFLAGS variable depends on the configuration.
 
        Example:
                #arch/i386/Makefile
                cflags-$(CONFIG_M386) += -march=i386
-               CFLAGS += $(cflags-y)
+               KBUILD_CFLAGS += $(cflags-y)
 
        Many arch Makefiles dynamically run the target C compiler to
        probe supported options:
@@ -834,7 +872,7 @@ When kbuild executes, the following steps are followed (roughly):
                                                -march=pentium2,-march=i686)
                ...
                # Disable unit-at-a-time mode ...
-               CFLAGS += $(call cc-option,-fno-unit-at-a-time)
+               KBUILD_CFLAGS += $(call cc-option,-fno-unit-at-a-time)
                ...
 
 
@@ -880,7 +918,7 @@ When kbuild executes, the following steps are followed (roughly):
 
        $(head-y) lists objects to be linked first in vmlinux.
        $(libs-y) lists directories where a lib.a archive can be located.
-       The rest lists directories where a built-in.o object file can be
+       The rest list directories where a built-in.o object file can be
        located.
 
        $(init-y) objects will be located after $(head-y).
@@ -888,7 +926,7 @@ When kbuild executes, the following steps are followed (roughly):
        $(core-y), $(libs-y), $(drivers-y) and $(net-y).
 
        The top level Makefile defines values for all generic directories,
-       and arch/$(ARCH)/Makefile only adds architecture specific directories.
+       and arch/$(ARCH)/Makefile only adds architecture-specific directories.
 
        Example:
                #arch/sparc64/Makefile
@@ -897,7 +935,7 @@ When kbuild executes, the following steps are followed (roughly):
                drivers-$(CONFIG_OPROFILE)  += arch/sparc64/oprofile/
 
 
---- 6.4 Architecture specific boot images
+--- 6.4 Architecture-specific boot images
 
        An arch Makefile specifies goals that take the vmlinux file, compress
        it, wrap it in bootstrapping code, and copy the resulting files
@@ -924,7 +962,7 @@ When kbuild executes, the following steps are followed (roughly):
        "$(Q)$(MAKE) $(build)=<dir>" is the recommended way to invoke
        make in a subdirectory.
 
-       There are no rules for naming architecture specific targets,
+       There are no rules for naming architecture-specific targets,
        but executing "make help" will list all relevant targets.
        To support this, $(archhelp) must be defined.
 
@@ -982,7 +1020,7 @@ When kbuild executes, the following steps are followed (roughly):
                        $(call if_changed,ld/objcopy/gzip)
 
        When the rule is evaluated, it is checked to see if any files
-       needs an update, or the command line has changed since the last
+       need an update, or the command line has changed since the last
        invocation. The latter will force a rebuild if any options
        to the executable have changed.
        Any target that utilises if_changed must be listed in $(targets),
@@ -1082,14 +1120,14 @@ When kbuild executes, the following steps are followed (roughly):
        specified options when building the target vmlinux.lds.
 
        When building the *.lds target, kbuild uses the variables:
-       CPPFLAGS        : Set in top-level Makefile
-       EXTRA_CPPFLAGS  : May be set in the kbuild makefile
+       KBUILD_CPPFLAGS : Set in top-level Makefile
+       cppflags-y      : May be set in the kbuild makefile
        CPPFLAGS_$(@F)  : Target specific flags.
                          Note that the full filename is used in this
                          assignment.
 
        The kbuild infrastructure for *lds file are used in several
-       architecture specific files.
+       architecture-specific files.
 
 
 === 7 Kbuild Variables
@@ -1133,7 +1171,7 @@ The top Makefile exports the following variables:
 
        This variable defines a place for the arch Makefiles to install
        the resident kernel image and System.map file.
-       Use this for architecture specific install targets.
+       Use this for architecture-specific install targets.
 
     INSTALL_MOD_PATH, MODLIB