linux/Documentation/kbuild/makefiles.txt
<<
>>
Prefs
   1Linux Kernel Makefiles
   2
   3This document describes the Linux kernel Makefiles.
   4
   5=== Table of Contents
   6
   7        === 1 Overview
   8        === 2 Who does what
   9        === 3 The kbuild files
  10           --- 3.1 Goal definitions
  11           --- 3.2 Built-in object goals - obj-y
  12           --- 3.3 Loadable module goals - obj-m
  13           --- 3.4 Objects which export symbols
  14           --- 3.5 Library file goals - lib-y
  15           --- 3.6 Descending down in directories
  16           --- 3.7 Compilation flags
  17           --- 3.8 Command line dependency
  18           --- 3.9 Dependency tracking
  19           --- 3.10 Special Rules
  20           --- 3.11 $(CC) support functions
  21
  22        === 4 Host Program support
  23           --- 4.1 Simple Host Program
  24           --- 4.2 Composite Host Programs
  25           --- 4.3 Defining shared libraries
  26           --- 4.4 Using C++ for host programs
  27           --- 4.5 Controlling compiler options for host programs
  28           --- 4.6 When host programs are actually built
  29           --- 4.7 Using hostprogs-$(CONFIG_FOO)
  30
  31        === 5 Kbuild clean infrastructure
  32
  33        === 6 Architecture Makefiles
  34           --- 6.1 Set variables to tweak the build to the architecture
  35           --- 6.2 Add prerequisites to archprepare:
  36           --- 6.3 List directories to visit when descending
  37           --- 6.4 Architecture-specific boot images
  38           --- 6.5 Building non-kbuild targets
  39           --- 6.6 Commands useful for building a boot image
  40           --- 6.7 Custom kbuild commands
  41           --- 6.8 Preprocessing linker scripts
  42
  43        === 7 Kbuild Variables
  44        === 8 Makefile language
  45        === 9 Credits
  46        === 10 TODO
  47
  48=== 1 Overview
  49
  50The Makefiles have five parts:
  51
  52        Makefile                the top Makefile.
  53        .config                 the kernel configuration file.
  54        arch/$(ARCH)/Makefile   the arch Makefile.
  55        scripts/Makefile.*      common rules etc. for all kbuild Makefiles.
  56        kbuild Makefiles        there are about 500 of these.
  57
  58The top Makefile reads the .config file, which comes from the kernel
  59configuration process.
  60
  61The top Makefile is responsible for building two major products: vmlinux
  62(the resident kernel image) and modules (any module files).
  63It builds these goals by recursively descending into the subdirectories of
  64the kernel source tree.
  65The list of subdirectories which are visited depends upon the kernel
  66configuration. The top Makefile textually includes an arch Makefile
  67with the name arch/$(ARCH)/Makefile. The arch Makefile supplies
  68architecture-specific information to the top Makefile.
  69
  70Each subdirectory has a kbuild Makefile which carries out the commands
  71passed down from above. The kbuild Makefile uses information from the
  72.config file to construct various file lists used by kbuild to build
  73any built-in or modular targets.
  74
  75scripts/Makefile.* contains all the definitions/rules etc. that
  76are used to build the kernel based on the kbuild makefiles.
  77
  78
  79=== 2 Who does what
  80
  81People have four different relationships with the kernel Makefiles.
  82
  83*Users* are people who build kernels.  These people type commands such as
  84"make menuconfig" or "make".  They usually do not read or edit
  85any kernel Makefiles (or any other source files).
  86
  87*Normal developers* are people who work on features such as device
  88drivers, file systems, and network protocols.  These people need to
  89maintain the kbuild Makefiles for the subsystem they are
  90working on.  In order to do this effectively, they need some overall
  91knowledge about the kernel Makefiles, plus detailed knowledge about the
  92public interface for kbuild.
  93
  94*Arch developers* are people who work on an entire architecture, such
  95as sparc or ia64.  Arch developers need to know about the arch Makefile
  96as well as kbuild Makefiles.
  97
  98*Kbuild developers* are people who work on the kernel build system itself.
  99These people need to know about all aspects of the kernel Makefiles.
 100
 101This document is aimed towards normal developers and arch developers.
 102
 103
 104=== 3 The kbuild files
 105
 106Most Makefiles within the kernel are kbuild Makefiles that use the
 107kbuild infrastructure. This chapter introduces the syntax used in the
 108kbuild makefiles.
 109The preferred name for the kbuild files are 'Makefile' but 'Kbuild' can
 110be used and if both a 'Makefile' and a 'Kbuild' file exists, then the 'Kbuild'
 111file will be used.
 112
 113Section 3.1 "Goal definitions" is a quick intro, further chapters provide
 114more details, with real examples.
 115
 116--- 3.1 Goal definitions
 117
 118        Goal definitions are the main part (heart) of the kbuild Makefile.
 119        These lines define the files to be built, any special compilation
 120        options, and any subdirectories to be entered recursively.
 121
 122        The most simple kbuild makefile contains one line:
 123
 124        Example:
 125                obj-y += foo.o
 126
 127        This tells kbuild that there is one object in that directory, named
 128        foo.o. foo.o will be built from foo.c or foo.S.
 129
 130        If foo.o shall be built as a module, the variable obj-m is used.
 131        Therefore the following pattern is often used:
 132
 133        Example:
 134                obj-$(CONFIG_FOO) += foo.o
 135
 136        $(CONFIG_FOO) evaluates to either y (for built-in) or m (for module).
 137        If CONFIG_FOO is neither y nor m, then the file will not be compiled
 138        nor linked.
 139
 140--- 3.2 Built-in object goals - obj-y
 141
 142        The kbuild Makefile specifies object files for vmlinux
 143        in the $(obj-y) lists.  These lists depend on the kernel
 144        configuration.
 145
 146        Kbuild compiles all the $(obj-y) files.  It then calls
 147        "$(LD) -r" to merge these files into one built-in.o file.
 148        built-in.o is later linked into vmlinux by the parent Makefile.
 149
 150        The order of files in $(obj-y) is significant.  Duplicates in
 151        the lists are allowed: the first instance will be linked into
 152        built-in.o and succeeding instances will be ignored.
 153
 154        Link order is significant, because certain functions
 155        (module_init() / __initcall) will be called during boot in the
 156        order they appear. So keep in mind that changing the link
 157        order may e.g. change the order in which your SCSI
 158        controllers are detected, and thus your disks are renumbered.
 159
 160        Example:
 161                #drivers/isdn/i4l/Makefile
 162                # Makefile for the kernel ISDN subsystem and device drivers.
 163                # Each configuration option enables a list of files.
 164                obj-$(CONFIG_ISDN)             += isdn.o
 165                obj-$(CONFIG_ISDN_PPP_BSDCOMP) += isdn_bsdcomp.o
 166
 167--- 3.3 Loadable module goals - obj-m
 168
 169        $(obj-m) specify object files which are built as loadable
 170        kernel modules.
 171
 172        A module may be built from one source file or several source
 173        files. In the case of one source file, the kbuild makefile
 174        simply adds the file to $(obj-m).
 175
 176        Example:
 177                #drivers/isdn/i4l/Makefile
 178                obj-$(CONFIG_ISDN_PPP_BSDCOMP) += isdn_bsdcomp.o
 179
 180        Note: In this example $(CONFIG_ISDN_PPP_BSDCOMP) evaluates to 'm'
 181
 182        If a kernel module is built from several source files, you specify
 183        that you want to build a module in the same way as above.
 184
 185        Kbuild needs to know which the parts that you want to build your
 186        module from, so you have to tell it by setting an
 187        $(<module_name>-objs) variable.
 188
 189        Example:
 190                #drivers/isdn/i4l/Makefile
 191                obj-$(CONFIG_ISDN) += isdn.o
 192                isdn-objs := isdn_net_lib.o isdn_v110.o isdn_common.o
 193
 194        In this example, the module name will be isdn.o. Kbuild will
 195        compile the objects listed in $(isdn-objs) and then run
 196        "$(LD) -r" on the list of these files to generate isdn.o.
 197
 198        Kbuild recognises objects used for composite objects by the suffix
 199        -objs, and the suffix -y. This allows the Makefiles to use
 200        the value of a CONFIG_ symbol to determine if an object is part
 201        of a composite object.
 202
 203        Example:
 204                #fs/ext2/Makefile
 205                obj-$(CONFIG_EXT2_FS)        += ext2.o
 206                ext2-y                       := balloc.o bitmap.o
 207                ext2-$(CONFIG_EXT2_FS_XATTR) += xattr.o
 208
 209        In this example, xattr.o is only part of the composite object
 210        ext2.o if $(CONFIG_EXT2_FS_XATTR) evaluates to 'y'.
 211
 212        Note: Of course, when you are building objects into the kernel,
 213        the syntax above will also work. So, if you have CONFIG_EXT2_FS=y,
 214        kbuild will build an ext2.o file for you out of the individual
 215        parts and then link this into built-in.o, as you would expect.
 216
 217--- 3.4 Objects which export symbols
 218
 219        No special notation is required in the makefiles for
 220        modules exporting symbols.
 221
 222--- 3.5 Library file goals - lib-y
 223
 224        Objects listed with obj-* are used for modules, or
 225        combined in a built-in.o for that specific directory.
 226        There is also the possibility to list objects that will
 227        be included in a library, lib.a.
 228        All objects listed with lib-y are combined in a single
 229        library for that directory.
 230        Objects that are listed in obj-y and additionally listed in
 231        lib-y will not be included in the library, since they will
 232        be accessible anyway.
 233        For consistency, objects listed in lib-m will be included in lib.a.
 234
 235        Note that the same kbuild makefile may list files to be built-in
 236        and to be part of a library. Therefore the same directory
 237        may contain both a built-in.o and a lib.a file.
 238
 239        Example:
 240                #arch/i386/lib/Makefile
 241                lib-y    := checksum.o delay.o
 242
 243        This will create a library lib.a based on checksum.o and delay.o.
 244        For kbuild to actually recognize that there is a lib.a being built,
 245        the directory shall be listed in libs-y.
 246        See also "6.3 List directories to visit when descending".
 247
 248        Use of lib-y is normally restricted to lib/ and arch/*/lib.
 249
 250--- 3.6 Descending down in directories
 251
 252        A Makefile is only responsible for building objects in its own
 253        directory. Files in subdirectories should be taken care of by
 254        Makefiles in these subdirs. The build system will automatically
 255        invoke make recursively in subdirectories, provided you let it know of
 256        them.
 257
 258        To do so, obj-y and obj-m are used.
 259        ext2 lives in a separate directory, and the Makefile present in fs/
 260        tells kbuild to descend down using the following assignment.
 261
 262        Example:
 263                #fs/Makefile
 264                obj-$(CONFIG_EXT2_FS) += ext2/
 265
 266        If CONFIG_EXT2_FS is set to either 'y' (built-in) or 'm' (modular)
 267        the corresponding obj- variable will be set, and kbuild will descend
 268        down in the ext2 directory.
 269        Kbuild only uses this information to decide that it needs to visit
 270        the directory, it is the Makefile in the subdirectory that
 271        specifies what is modules and what is built-in.
 272
 273        It is good practice to use a CONFIG_ variable when assigning directory
 274        names. This allows kbuild to totally skip the directory if the
 275        corresponding CONFIG_ option is neither 'y' nor 'm'.
 276
 277--- 3.7 Compilation flags
 278
 279    ccflags-y, asflags-y and ldflags-y
 280        The three flags listed above applies only to the kbuild makefile
 281        where they are assigned. They are used for all the normal
 282        cc, as and ld invocation happenign during a recursive build.
 283        Note: Flags with the same behaviour were previously named:
 284        EXTRA_CFLAGS, EXTRA_AFLAGS and EXTRA_LDFLAGS.
 285        They are yet supported but their use are deprecated.
 286
 287        ccflags-y specifies options for compiling C files with $(CC).
 288
 289        Example:
 290                # drivers/sound/emu10k1/Makefile
 291                ccflags-y += -I$(obj)
 292                ccflags-$(DEBUG) += -DEMU10K1_DEBUG
 293
 294
 295        This variable is necessary because the top Makefile owns the
 296        variable $(KBUILD_CFLAGS) and uses it for compilation flags for the
 297        entire tree.
 298
 299        asflags-y is a similar string for per-directory options
 300        when compiling assembly language source.
 301
 302        Example:
 303                #arch/x86_64/kernel/Makefile
 304                asflags-y := -traditional
 305
 306
 307        ldflags-y is a string for per-directory options to $(LD).
 308
 309        Example:
 310                #arch/m68k/fpsp040/Makefile
 311                ldflags-y := -x
 312
 313    CFLAGS_$@, AFLAGS_$@
 314
 315        CFLAGS_$@ and AFLAGS_$@ only apply to commands in current
 316        kbuild makefile.
 317
 318        $(CFLAGS_$@) specifies per-file options for $(CC).  The $@
 319        part has a literal value which specifies the file that it is for.
 320
 321        Example:
 322                # drivers/scsi/Makefile
 323                CFLAGS_aha152x.o =   -DAHA152X_STAT -DAUTOCONF
 324                CFLAGS_gdth.o    = # -DDEBUG_GDTH=2 -D__SERIAL__ -D__COM2__ \
 325                                     -DGDTH_STATISTICS
 326                CFLAGS_seagate.o =   -DARBITRATE -DPARITY -DSEAGATE_USE_ASM
 327
 328        These three lines specify compilation flags for aha152x.o,
 329        gdth.o, and seagate.o
 330
 331        $(AFLAGS_$@) is a similar feature for source files in assembly
 332        languages.
 333
 334        Example:
 335                # arch/arm/kernel/Makefile
 336                AFLAGS_head-armv.o := -DTEXTADDR=$(TEXTADDR) -traditional
 337                AFLAGS_head-armo.o := -DTEXTADDR=$(TEXTADDR) -traditional
 338
 339--- 3.9 Dependency tracking
 340
 341        Kbuild tracks dependencies on the following:
 342        1) All prerequisite files (both *.c and *.h)
 343        2) CONFIG_ options used in all prerequisite files
 344        3) Command-line used to compile target
 345
 346        Thus, if you change an option to $(CC) all affected files will
 347        be re-compiled.
 348
 349--- 3.10 Special Rules
 350
 351        Special rules are used when the kbuild infrastructure does
 352        not provide the required support. A typical example is
 353        header files generated during the build process.
 354        Another example are the architecture-specific Makefiles which
 355        need special rules to prepare boot images etc.
 356
 357        Special rules are written as normal Make rules.
 358        Kbuild is not executing in the directory where the Makefile is
 359        located, so all special rules shall provide a relative
 360        path to prerequisite files and target files.
 361
 362        Two variables are used when defining special rules:
 363
 364    $(src)
 365        $(src) is a relative path which points to the directory
 366        where the Makefile is located. Always use $(src) when
 367        referring to files located in the src tree.
 368
 369    $(obj)
 370        $(obj) is a relative path which points to the directory
 371        where the target is saved. Always use $(obj) when
 372        referring to generated files.
 373
 374        Example:
 375                #drivers/scsi/Makefile
 376                $(obj)/53c8xx_d.h: $(src)/53c7,8xx.scr $(src)/script_asm.pl
 377                        $(CPP) -DCHIP=810 - < $< | ... $(src)/script_asm.pl
 378
 379        This is a special rule, following the normal syntax
 380        required by make.
 381        The target file depends on two prerequisite files. References
 382        to the target file are prefixed with $(obj), references
 383        to prerequisites are referenced with $(src) (because they are not
 384        generated files).
 385
 386--- 3.11 $(CC) support functions
 387
 388        The kernel may be built with several different versions of
 389        $(CC), each supporting a unique set of features and options.
 390        kbuild provide basic support to check for valid options for $(CC).
 391        $(CC) is usually the gcc compiler, but other alternatives are
 392        available.
 393
 394    as-option
 395        as-option is used to check if $(CC) -- when used to compile
 396        assembler (*.S) files -- supports the given option. An optional
 397        second option may be specified if the first option is not supported.
 398
 399        Example:
 400                #arch/sh/Makefile
 401                cflags-y += $(call as-option,-Wa$(comma)-isa=$(isa-y),)
 402
 403        In the above example, cflags-y will be assigned the option
 404        -Wa$(comma)-isa=$(isa-y) if it is supported by $(CC).
 405        The second argument is optional, and if supplied will be used
 406        if first argument is not supported.
 407
 408    ld-option
 409        ld-option is used to check if $(CC) when used to link object files
 410        supports the given option.  An optional second option may be
 411        specified if first option are not supported.
 412
 413        Example:
 414                #arch/i386/kernel/Makefile
 415                vsyscall-flags += $(call ld-option, -Wl$(comma)--hash-style=sysv)
 416
 417        In the above example, vsyscall-flags will be assigned the option
 418        -Wl$(comma)--hash-style=sysv if it is supported by $(CC).
 419        The second argument is optional, and if supplied will be used
 420        if first argument is not supported.
 421
 422    as-instr
 423        as-instr checks if the assembler reports a specific instruction
 424        and then outputs either option1 or option2
 425        C escapes are supported in the test instruction
 426        Note: as-instr-option uses KBUILD_AFLAGS for $(AS) options
 427
 428    cc-option
 429        cc-option is used to check if $(CC) supports a given option, and not
 430        supported to use an optional second option.
 431
 432        Example:
 433                #arch/i386/Makefile
 434                cflags-y += $(call cc-option,-march=pentium-mmx,-march=i586)
 435
 436        In the above example, cflags-y will be assigned the option
 437        -march=pentium-mmx if supported by $(CC), otherwise -march=i586.
 438        The second argument to cc-option is optional, and if omitted,
 439        cflags-y will be assigned no value if first option is not supported.
 440        Note: cc-option uses KBUILD_CFLAGS for $(CC) options
 441
 442   cc-option-yn
 443        cc-option-yn is used to check if gcc supports a given option
 444        and return 'y' if supported, otherwise 'n'.
 445
 446        Example:
 447                #arch/ppc/Makefile
 448                biarch := $(call cc-option-yn, -m32)
 449                aflags-$(biarch) += -a32
 450                cflags-$(biarch) += -m32
 451
 452        In the above example, $(biarch) is set to y if $(CC) supports the -m32
 453        option. When $(biarch) equals 'y', the expanded variables $(aflags-y)
 454        and $(cflags-y) will be assigned the values -a32 and -m32,
 455        respectively.
 456        Note: cc-option-yn uses KBUILD_CFLAGS for $(CC) options
 457
 458    cc-option-align
 459        gcc versions >= 3.0 changed the type of options used to specify
 460        alignment of functions, loops etc. $(cc-option-align), when used
 461        as prefix to the align options, will select the right prefix:
 462        gcc < 3.00
 463                cc-option-align = -malign
 464        gcc >= 3.00
 465                cc-option-align = -falign
 466
 467        Example:
 468                KBUILD_CFLAGS += $(cc-option-align)-functions=4
 469
 470        In the above example, the option -falign-functions=4 is used for
 471        gcc >= 3.00. For gcc < 3.00, -malign-functions=4 is used.
 472        Note: cc-option-align uses KBUILD_CFLAGS for $(CC) options
 473
 474    cc-version
 475        cc-version returns a numerical version of the $(CC) compiler version.
 476        The format is <major><minor> where both are two digits. So for example
 477        gcc 3.41 would return 0341.
 478        cc-version is useful when a specific $(CC) version is faulty in one
 479        area, for example -mregparm=3 was broken in some gcc versions
 480        even though the option was accepted by gcc.
 481
 482        Example:
 483                #arch/i386/Makefile
 484                cflags-y += $(shell \
 485                if [ $(call cc-version) -ge 0300 ] ; then \
 486                        echo "-mregparm=3"; fi ;)
 487
 488        In the above example, -mregparm=3 is only used for gcc version greater
 489        than or equal to gcc 3.0.
 490
 491    cc-ifversion
 492        cc-ifversion tests the version of $(CC) and equals last argument if
 493        version expression is true.
 494
 495        Example:
 496                #fs/reiserfs/Makefile
 497                ccflags-y := $(call cc-ifversion, -lt, 0402, -O1)
 498
 499        In this example, ccflags-y will be assigned the value -O1 if the
 500        $(CC) version is less than 4.2.
 501        cc-ifversion takes all the shell operators:
 502        -eq, -ne, -lt, -le, -gt, and -ge
 503        The third parameter may be a text as in this example, but it may also
 504        be an expanded variable or a macro.
 505
 506    cc-fullversion
 507        cc-fullversion is useful when the exact version of gcc is needed.
 508        One typical use-case is when a specific GCC version is broken.
 509        cc-fullversion points out a more specific version than cc-version does.
 510
 511        Example:
 512                #arch/powerpc/Makefile
 513                $(Q)if test "$(call cc-fullversion)" = "040200" ; then \
 514                        echo -n '*** GCC-4.2.0 cannot compile the 64-bit powerpc ' ; \
 515                        false ; \
 516                fi
 517
 518        In this example for a specific GCC version the build will error out explaining
 519        to the user why it stops.
 520
 521    cc-cross-prefix
 522        cc-cross-prefix is used to check if there exists a $(CC) in path with
 523        one of the listed prefixes. The first prefix where there exist a
 524        prefix$(CC) in the PATH is returned - and if no prefix$(CC) is found
 525        then nothing is returned.
 526        Additional prefixes are separated by a single space in the
 527        call of cc-cross-prefix.
 528        This functionality is useful for architecture Makefiles that try
 529        to set CROSS_COMPILE to well-known values but may have several
 530        values to select between.
 531        It is recommended only to try to set CROSS_COMPILE if it is a cross
 532        build (host arch is different from target arch). And if CROSS_COMPILE
 533        is already set then leave it with the old value.
 534
 535        Example:
 536                #arch/m68k/Makefile
 537                ifneq ($(SUBARCH),$(ARCH))
 538                        ifeq ($(CROSS_COMPILE),)
 539                               CROSS_COMPILE := $(call cc-cross-prefix, m68k-linux-gnu-)
 540                        endif
 541                endif
 542
 543=== 4 Host Program support
 544
 545Kbuild supports building executables on the host for use during the
 546compilation stage.
 547Two steps are required in order to use a host executable.
 548
 549The first step is to tell kbuild that a host program exists. This is
 550done utilising the variable hostprogs-y.
 551
 552The second step is to add an explicit dependency to the executable.
 553This can be done in two ways. Either add the dependency in a rule,
 554or utilise the variable $(always).
 555Both possibilities are described in the following.
 556
 557--- 4.1 Simple Host Program
 558
 559        In some cases there is a need to compile and run a program on the
 560        computer where the build is running.
 561        The following line tells kbuild that the program bin2hex shall be
 562        built on the build host.
 563
 564        Example:
 565                hostprogs-y := bin2hex
 566
 567        Kbuild assumes in the above example that bin2hex is made from a single
 568        c-source file named bin2hex.c located in the same directory as
 569        the Makefile.
 570
 571--- 4.2 Composite Host Programs
 572
 573        Host programs can be made up based on composite objects.
 574        The syntax used to define composite objects for host programs is
 575        similar to the syntax used for kernel objects.
 576        $(<executable>-objs) lists all objects used to link the final
 577        executable.
 578
 579        Example:
 580                #scripts/lxdialog/Makefile
 581                hostprogs-y   := lxdialog
 582                lxdialog-objs := checklist.o lxdialog.o
 583
 584        Objects with extension .o are compiled from the corresponding .c
 585        files. In the above example, checklist.c is compiled to checklist.o
 586        and lxdialog.c is compiled to lxdialog.o.
 587        Finally, the two .o files are linked to the executable, lxdialog.
 588        Note: The syntax <executable>-y is not permitted for host-programs.
 589
 590--- 4.3 Defining shared libraries
 591
 592        Objects with extension .so are considered shared libraries, and
 593        will be compiled as position independent objects.
 594        Kbuild provides support for shared libraries, but the usage
 595        shall be restricted.
 596        In the following example the libkconfig.so shared library is used
 597        to link the executable conf.
 598
 599        Example:
 600                #scripts/kconfig/Makefile
 601                hostprogs-y     := conf
 602                conf-objs       := conf.o libkconfig.so
 603                libkconfig-objs := expr.o type.o
 604
 605        Shared libraries always require a corresponding -objs line, and
 606        in the example above the shared library libkconfig is composed by
 607        the two objects expr.o and type.o.
 608        expr.o and type.o will be built as position independent code and
 609        linked as a shared library libkconfig.so. C++ is not supported for
 610        shared libraries.
 611
 612--- 4.4 Using C++ for host programs
 613
 614        kbuild offers support for host programs written in C++. This was
 615        introduced solely to support kconfig, and is not recommended
 616        for general use.
 617
 618        Example:
 619                #scripts/kconfig/Makefile
 620                hostprogs-y   := qconf
 621                qconf-cxxobjs := qconf.o
 622
 623        In the example above the executable is composed of the C++ file
 624        qconf.cc - identified by $(qconf-cxxobjs).
 625
 626        If qconf is composed by a mixture of .c and .cc files, then an
 627        additional line can be used to identify this.
 628
 629        Example:
 630                #scripts/kconfig/Makefile
 631                hostprogs-y   := qconf
 632                qconf-cxxobjs := qconf.o
 633                qconf-objs    := check.o
 634
 635--- 4.5 Controlling compiler options for host programs
 636
 637        When compiling host programs, it is possible to set specific flags.
 638        The programs will always be compiled utilising $(HOSTCC) passed
 639        the options specified in $(HOSTCFLAGS).
 640        To set flags that will take effect for all host programs created
 641        in that Makefile, use the variable HOST_EXTRACFLAGS.
 642
 643        Example:
 644                #scripts/lxdialog/Makefile
 645                HOST_EXTRACFLAGS += -I/usr/include/ncurses
 646
 647        To set specific flags for a single file the following construction
 648        is used:
 649
 650        Example:
 651                #arch/ppc64/boot/Makefile
 652                HOSTCFLAGS_piggyback.o := -DKERNELBASE=$(KERNELBASE)
 653
 654        It is also possible to specify additional options to the linker.
 655
 656        Example:
 657                #scripts/kconfig/Makefile
 658                HOSTLOADLIBES_qconf := -L$(QTDIR)/lib
 659
 660        When linking qconf, it will be passed the extra option
 661        "-L$(QTDIR)/lib".
 662
 663--- 4.6 When host programs are actually built
 664
 665        Kbuild will only build host-programs when they are referenced
 666        as a prerequisite.
 667        This is possible in two ways:
 668
 669        (1) List the prerequisite explicitly in a special rule.
 670
 671        Example:
 672                #drivers/pci/Makefile
 673                hostprogs-y := gen-devlist
 674                $(obj)/devlist.h: $(src)/pci.ids $(obj)/gen-devlist
 675                        ( cd $(obj); ./gen-devlist ) < $<
 676
 677        The target $(obj)/devlist.h will not be built before
 678        $(obj)/gen-devlist is updated. Note that references to
 679        the host programs in special rules must be prefixed with $(obj).
 680
 681        (2) Use $(always)
 682        When there is no suitable special rule, and the host program
 683        shall be built when a makefile is entered, the $(always)
 684        variable shall be used.
 685
 686        Example:
 687                #scripts/lxdialog/Makefile
 688                hostprogs-y   := lxdialog
 689                always        := $(hostprogs-y)
 690
 691        This will tell kbuild to build lxdialog even if not referenced in
 692        any rule.
 693
 694--- 4.7 Using hostprogs-$(CONFIG_FOO)
 695
 696        A typical pattern in a Kbuild file looks like this:
 697
 698        Example:
 699                #scripts/Makefile
 700                hostprogs-$(CONFIG_KALLSYMS) += kallsyms
 701
 702        Kbuild knows about both 'y' for built-in and 'm' for module.
 703        So if a config symbol evaluate to 'm', kbuild will still build
 704        the binary. In other words, Kbuild handles hostprogs-m exactly
 705        like hostprogs-y. But only hostprogs-y is recommended to be used
 706        when no CONFIG symbols are involved.
 707
 708=== 5 Kbuild clean infrastructure
 709
 710"make clean" deletes most generated files in the obj tree where the kernel
 711is compiled. This includes generated files such as host programs.
 712Kbuild knows targets listed in $(hostprogs-y), $(hostprogs-m), $(always),
 713$(extra-y) and $(targets). They are all deleted during "make clean".
 714Files matching the patterns "*.[oas]", "*.ko", plus some additional files
 715generated by kbuild are deleted all over the kernel src tree when
 716"make clean" is executed.
 717
 718Additional files can be specified in kbuild makefiles by use of $(clean-files).
 719
 720        Example:
 721                #drivers/pci/Makefile
 722                clean-files := devlist.h classlist.h
 723
 724When executing "make clean", the two files "devlist.h classlist.h" will
 725be deleted. Kbuild will assume files to be in same relative directory as the
 726Makefile except if an absolute path is specified (path starting with '/').
 727
 728To delete a directory hierarchy use:
 729
 730        Example:
 731                #scripts/package/Makefile
 732                clean-dirs := $(objtree)/debian/
 733
 734This will delete the directory debian, including all subdirectories.
 735Kbuild will assume the directories to be in the same relative path as the
 736Makefile if no absolute path is specified (path does not start with '/').
 737
 738Usually kbuild descends down in subdirectories due to "obj-* := dir/",
 739but in the architecture makefiles where the kbuild infrastructure
 740is not sufficient this sometimes needs to be explicit.
 741
 742        Example:
 743                #arch/i386/boot/Makefile
 744                subdir- := compressed/
 745
 746The above assignment instructs kbuild to descend down in the
 747directory compressed/ when "make clean" is executed.
 748
 749To support the clean infrastructure in the Makefiles that builds the
 750final bootimage there is an optional target named archclean:
 751
 752        Example:
 753                #arch/i386/Makefile
 754                archclean:
 755                        $(Q)$(MAKE) $(clean)=arch/i386/boot
 756
 757When "make clean" is executed, make will descend down in arch/i386/boot,
 758and clean as usual. The Makefile located in arch/i386/boot/ may use
 759the subdir- trick to descend further down.
 760
 761Note 1: arch/$(ARCH)/Makefile cannot use "subdir-", because that file is
 762included in the top level makefile, and the kbuild infrastructure
 763is not operational at that point.
 764
 765Note 2: All directories listed in core-y, libs-y, drivers-y and net-y will
 766be visited during "make clean".
 767
 768=== 6 Architecture Makefiles
 769
 770The top level Makefile sets up the environment and does the preparation,
 771before starting to descend down in the individual directories.
 772The top level makefile contains the generic part, whereas
 773arch/$(ARCH)/Makefile contains what is required to set up kbuild
 774for said architecture.
 775To do so, arch/$(ARCH)/Makefile sets up a number of variables and defines
 776a few targets.
 777
 778When kbuild executes, the following steps are followed (roughly):
 7791) Configuration of the kernel => produce .config
 7802) Store kernel version in include/linux/version.h
 7813) Symlink include/asm to include/asm-$(ARCH)
 7824) Updating all other prerequisites to the target prepare:
 783   - Additional prerequisites are specified in arch/$(ARCH)/Makefile
 7845) Recursively descend down in all directories listed in
 785   init-* core* drivers-* net-* libs-* and build all targets.
 786   - The values of the above variables are expanded in arch/$(ARCH)/Makefile.
 7876) All object files are then linked and the resulting file vmlinux is
 788   located at the root of the obj tree.
 789   The very first objects linked are listed in head-y, assigned by
 790   arch/$(ARCH)/Makefile.
 7917) Finally, the architecture-specific part does any required post processing
 792   and builds the final bootimage.
 793   - This includes building boot records
 794   - Preparing initrd images and the like
 795
 796
 797--- 6.1 Set variables to tweak the build to the architecture
 798
 799    LDFLAGS             Generic $(LD) options
 800
 801        Flags used for all invocations of the linker.
 802        Often specifying the emulation is sufficient.
 803
 804        Example:
 805                #arch/s390/Makefile
 806                LDFLAGS         := -m elf_s390
 807        Note: ldflags-y can be used to further customise
 808        the flags used. See chapter 3.7.
 809
 810    LDFLAGS_MODULE      Options for $(LD) when linking modules
 811
 812        LDFLAGS_MODULE is used to set specific flags for $(LD) when
 813        linking the .ko files used for modules.
 814        Default is "-r", for relocatable output.
 815
 816    LDFLAGS_vmlinux     Options for $(LD) when linking vmlinux
 817
 818        LDFLAGS_vmlinux is used to specify additional flags to pass to
 819        the linker when linking the final vmlinux image.
 820        LDFLAGS_vmlinux uses the LDFLAGS_$@ support.
 821
 822        Example:
 823                #arch/i386/Makefile
 824                LDFLAGS_vmlinux := -e stext
 825
 826    OBJCOPYFLAGS        objcopy flags
 827
 828        When $(call if_changed,objcopy) is used to translate a .o file,
 829        the flags specified in OBJCOPYFLAGS will be used.
 830        $(call if_changed,objcopy) is often used to generate raw binaries on
 831        vmlinux.
 832
 833        Example:
 834                #arch/s390/Makefile
 835                OBJCOPYFLAGS := -O binary
 836
 837                #arch/s390/boot/Makefile
 838                $(obj)/image: vmlinux FORCE
 839                        $(call if_changed,objcopy)
 840
 841        In this example, the binary $(obj)/image is a binary version of
 842        vmlinux. The usage of $(call if_changed,xxx) will be described later.
 843
 844    KBUILD_AFLAGS               $(AS) assembler flags
 845
 846        Default value - see top level Makefile
 847        Append or modify as required per architecture.
 848
 849        Example:
 850                #arch/sparc64/Makefile
 851                KBUILD_AFLAGS += -m64 -mcpu=ultrasparc
 852
 853    KBUILD_CFLAGS               $(CC) compiler flags
 854
 855        Default value - see top level Makefile
 856        Append or modify as required per architecture.
 857
 858        Often, the KBUILD_CFLAGS variable depends on the configuration.
 859
 860        Example:
 861                #arch/i386/Makefile
 862                cflags-$(CONFIG_M386) += -march=i386
 863                KBUILD_CFLAGS += $(cflags-y)
 864
 865        Many arch Makefiles dynamically run the target C compiler to
 866        probe supported options:
 867
 868                #arch/i386/Makefile
 869
 870                ...
 871                cflags-$(CONFIG_MPENTIUMII)     += $(call cc-option,\
 872                                                -march=pentium2,-march=i686)
 873                ...
 874                # Disable unit-at-a-time mode ...
 875                KBUILD_CFLAGS += $(call cc-option,-fno-unit-at-a-time)
 876                ...
 877
 878
 879        The first example utilises the trick that a config option expands
 880        to 'y' when selected.
 881
 882    CFLAGS_KERNEL       $(CC) options specific for built-in
 883
 884        $(CFLAGS_KERNEL) contains extra C compiler flags used to compile
 885        resident kernel code.
 886
 887    CFLAGS_MODULE       $(CC) options specific for modules
 888
 889        $(CFLAGS_MODULE) contains extra C compiler flags used to compile code
 890        for loadable kernel modules.
 891
 892
 893--- 6.2 Add prerequisites to archprepare:
 894
 895        The archprepare: rule is used to list prerequisites that need to be
 896        built before starting to descend down in the subdirectories.
 897        This is usually used for header files containing assembler constants.
 898
 899                Example:
 900                #arch/arm/Makefile
 901                archprepare: maketools
 902
 903        In this example, the file target maketools will be processed
 904        before descending down in the subdirectories.
 905        See also chapter XXX-TODO that describe how kbuild supports
 906        generating offset header files.
 907
 908
 909--- 6.3 List directories to visit when descending
 910
 911        An arch Makefile cooperates with the top Makefile to define variables
 912        which specify how to build the vmlinux file.  Note that there is no
 913        corresponding arch-specific section for modules; the module-building
 914        machinery is all architecture-independent.
 915
 916
 917    head-y, init-y, core-y, libs-y, drivers-y, net-y
 918
 919        $(head-y) lists objects to be linked first in vmlinux.
 920        $(libs-y) lists directories where a lib.a archive can be located.
 921        The rest list directories where a built-in.o object file can be
 922        located.
 923
 924        $(init-y) objects will be located after $(head-y).
 925        Then the rest follows in this order:
 926        $(core-y), $(libs-y), $(drivers-y) and $(net-y).
 927
 928        The top level Makefile defines values for all generic directories,
 929        and arch/$(ARCH)/Makefile only adds architecture-specific directories.
 930
 931        Example:
 932                #arch/sparc64/Makefile
 933                core-y += arch/sparc64/kernel/
 934                libs-y += arch/sparc64/prom/ arch/sparc64/lib/
 935                drivers-$(CONFIG_OPROFILE)  += arch/sparc64/oprofile/
 936
 937
 938--- 6.4 Architecture-specific boot images
 939
 940        An arch Makefile specifies goals that take the vmlinux file, compress
 941        it, wrap it in bootstrapping code, and copy the resulting files
 942        somewhere. This includes various kinds of installation commands.
 943        The actual goals are not standardized across architectures.
 944
 945        It is common to locate any additional processing in a boot/
 946        directory below arch/$(ARCH)/.
 947
 948        Kbuild does not provide any smart way to support building a
 949        target specified in boot/. Therefore arch/$(ARCH)/Makefile shall
 950        call make manually to build a target in boot/.
 951
 952        The recommended approach is to include shortcuts in
 953        arch/$(ARCH)/Makefile, and use the full path when calling down
 954        into the arch/$(ARCH)/boot/Makefile.
 955
 956        Example:
 957                #arch/i386/Makefile
 958                boot := arch/i386/boot
 959                bzImage: vmlinux
 960                        $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
 961
 962        "$(Q)$(MAKE) $(build)=<dir>" is the recommended way to invoke
 963        make in a subdirectory.
 964
 965        There are no rules for naming architecture-specific targets,
 966        but executing "make help" will list all relevant targets.
 967        To support this, $(archhelp) must be defined.
 968
 969        Example:
 970                #arch/i386/Makefile
 971                define archhelp
 972                  echo  '* bzImage      - Image (arch/$(ARCH)/boot/bzImage)'
 973                endif
 974
 975        When make is executed without arguments, the first goal encountered
 976        will be built. In the top level Makefile the first goal present
 977        is all:.
 978        An architecture shall always, per default, build a bootable image.
 979        In "make help", the default goal is highlighted with a '*'.
 980        Add a new prerequisite to all: to select a default goal different
 981        from vmlinux.
 982
 983        Example:
 984                #arch/i386/Makefile
 985                all: bzImage
 986
 987        When "make" is executed without arguments, bzImage will be built.
 988
 989--- 6.5 Building non-kbuild targets
 990
 991    extra-y
 992
 993        extra-y specify additional targets created in the current
 994        directory, in addition to any targets specified by obj-*.
 995
 996        Listing all targets in extra-y is required for two purposes:
 997        1) Enable kbuild to check changes in command lines
 998           - When $(call if_changed,xxx) is used
 999        2) kbuild knows what files to delete during "make clean"
1000
1001        Example:
1002                #arch/i386/kernel/Makefile
1003                extra-y := head.o init_task.o
1004
1005        In this example, extra-y is used to list object files that
1006        shall be built, but shall not be linked as part of built-in.o.
1007
1008
1009--- 6.6 Commands useful for building a boot image
1010
1011        Kbuild provides a few macros that are useful when building a
1012        boot image.
1013
1014    if_changed
1015
1016        if_changed is the infrastructure used for the following commands.
1017
1018        Usage:
1019                target: source(s) FORCE
1020                        $(call if_changed,ld/objcopy/gzip)
1021
1022        When the rule is evaluated, it is checked to see if any files
1023        need an update, or the command line has changed since the last
1024        invocation. The latter will force a rebuild if any options
1025        to the executable have changed.
1026        Any target that utilises if_changed must be listed in $(targets),
1027        otherwise the command line check will fail, and the target will
1028        always be built.
1029        Assignments to $(targets) are without $(obj)/ prefix.
1030        if_changed may be used in conjunction with custom commands as
1031        defined in 6.7 "Custom kbuild commands".
1032
1033        Note: It is a typical mistake to forget the FORCE prerequisite.
1034        Another common pitfall is that whitespace is sometimes
1035        significant; for instance, the below will fail (note the extra space
1036        after the comma):
1037                target: source(s) FORCE
1038        #WRONG!#        $(call if_changed, ld/objcopy/gzip)
1039
1040    ld
1041        Link target. Often, LDFLAGS_$@ is used to set specific options to ld.
1042
1043    objcopy
1044        Copy binary. Uses OBJCOPYFLAGS usually specified in
1045        arch/$(ARCH)/Makefile.
1046        OBJCOPYFLAGS_$@ may be used to set additional options.
1047
1048    gzip
1049        Compress target. Use maximum compression to compress target.
1050
1051        Example:
1052                #arch/i386/boot/Makefile
1053                LDFLAGS_bootsect := -Ttext 0x0 -s --oformat binary
1054                LDFLAGS_setup    := -Ttext 0x0 -s --oformat binary -e begtext
1055
1056                targets += setup setup.o bootsect bootsect.o
1057                $(obj)/setup $(obj)/bootsect: %: %.o FORCE
1058                        $(call if_changed,ld)
1059
1060        In this example, there are two possible targets, requiring different
1061        options to the linker. The linker options are specified using the
1062        LDFLAGS_$@ syntax - one for each potential target.
1063        $(targets) are assigned all potential targets, by which kbuild knows
1064        the targets and will:
1065                1) check for commandline changes
1066                2) delete target during make clean
1067
1068        The ": %: %.o" part of the prerequisite is a shorthand that
1069        free us from listing the setup.o and bootsect.o files.
1070        Note: It is a common mistake to forget the "target :=" assignment,
1071              resulting in the target file being recompiled for no
1072              obvious reason.
1073
1074
1075--- 6.7 Custom kbuild commands
1076
1077        When kbuild is executing with KBUILD_VERBOSE=0, then only a shorthand
1078        of a command is normally displayed.
1079        To enable this behaviour for custom commands kbuild requires
1080        two variables to be set:
1081        quiet_cmd_<command>     - what shall be echoed
1082              cmd_<command>     - the command to execute
1083
1084        Example:
1085                #
1086                quiet_cmd_image = BUILD   $@
1087                      cmd_image = $(obj)/tools/build $(BUILDFLAGS) \
1088                                                     $(obj)/vmlinux.bin > $@
1089
1090                targets += bzImage
1091                $(obj)/bzImage: $(obj)/vmlinux.bin $(obj)/tools/build FORCE
1092                        $(call if_changed,image)
1093                        @echo 'Kernel: $@ is ready'
1094
1095        When updating the $(obj)/bzImage target, the line
1096
1097        BUILD    arch/i386/boot/bzImage
1098
1099        will be displayed with "make KBUILD_VERBOSE=0".
1100
1101
1102--- 6.8 Preprocessing linker scripts
1103
1104        When the vmlinux image is built, the linker script
1105        arch/$(ARCH)/kernel/vmlinux.lds is used.
1106        The script is a preprocessed variant of the file vmlinux.lds.S
1107        located in the same directory.
1108        kbuild knows .lds files and includes a rule *lds.S -> *lds.
1109
1110        Example:
1111                #arch/i386/kernel/Makefile
1112                always := vmlinux.lds
1113
1114                #Makefile
1115                export CPPFLAGS_vmlinux.lds += -P -C -U$(ARCH)
1116
1117        The assignment to $(always) is used to tell kbuild to build the
1118        target vmlinux.lds.
1119        The assignment to $(CPPFLAGS_vmlinux.lds) tells kbuild to use the
1120        specified options when building the target vmlinux.lds.
1121
1122        When building the *.lds target, kbuild uses the variables:
1123        KBUILD_CPPFLAGS : Set in top-level Makefile
1124        cppflags-y      : May be set in the kbuild makefile
1125        CPPFLAGS_$(@F)  : Target specific flags.
1126                          Note that the full filename is used in this
1127                          assignment.
1128
1129        The kbuild infrastructure for *lds file are used in several
1130        architecture-specific files.
1131
1132
1133=== 7 Kbuild Variables
1134
1135The top Makefile exports the following variables:
1136
1137    VERSION, PATCHLEVEL, SUBLEVEL, EXTRAVERSION
1138
1139        These variables define the current kernel version.  A few arch
1140        Makefiles actually use these values directly; they should use
1141        $(KERNELRELEASE) instead.
1142
1143        $(VERSION), $(PATCHLEVEL), and $(SUBLEVEL) define the basic
1144        three-part version number, such as "2", "4", and "0".  These three
1145        values are always numeric.
1146
1147        $(EXTRAVERSION) defines an even tinier sublevel for pre-patches
1148        or additional patches.  It is usually some non-numeric string
1149        such as "-pre4", and is often blank.
1150
1151    KERNELRELEASE
1152
1153        $(KERNELRELEASE) is a single string such as "2.4.0-pre4", suitable
1154        for constructing installation directory names or showing in
1155        version strings.  Some arch Makefiles use it for this purpose.
1156
1157    ARCH
1158
1159        This variable defines the target architecture, such as "i386",
1160        "arm", or "sparc". Some kbuild Makefiles test $(ARCH) to
1161        determine which files to compile.
1162
1163        By default, the top Makefile sets $(ARCH) to be the same as the
1164        host system architecture.  For a cross build, a user may
1165        override the value of $(ARCH) on the command line:
1166
1167            make ARCH=m68k ...
1168
1169
1170    INSTALL_PATH
1171
1172        This variable defines a place for the arch Makefiles to install
1173        the resident kernel image and System.map file.
1174        Use this for architecture-specific install targets.
1175
1176    INSTALL_MOD_PATH, MODLIB
1177
1178        $(INSTALL_MOD_PATH) specifies a prefix to $(MODLIB) for module
1179        installation.  This variable is not defined in the Makefile but
1180        may be passed in by the user if desired.
1181
1182        $(MODLIB) specifies the directory for module installation.
1183        The top Makefile defines $(MODLIB) to
1184        $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE).  The user may
1185        override this value on the command line if desired.
1186
1187    INSTALL_MOD_STRIP
1188
1189        If this variable is specified, will cause modules to be stripped
1190        after they are installed.  If INSTALL_MOD_STRIP is '1', then the
1191        default option --strip-debug will be used.  Otherwise,
1192        INSTALL_MOD_STRIP will used as the option(s) to the strip command.
1193
1194
1195=== 8 Makefile language
1196
1197The kernel Makefiles are designed to be run with GNU Make.  The Makefiles
1198use only the documented features of GNU Make, but they do use many
1199GNU extensions.
1200
1201GNU Make supports elementary list-processing functions.  The kernel
1202Makefiles use a novel style of list building and manipulation with few
1203"if" statements.
1204
1205GNU Make has two assignment operators, ":=" and "=".  ":=" performs
1206immediate evaluation of the right-hand side and stores an actual string
1207into the left-hand side.  "=" is like a formula definition; it stores the
1208right-hand side in an unevaluated form and then evaluates this form each
1209time the left-hand side is used.
1210
1211There are some cases where "=" is appropriate.  Usually, though, ":="
1212is the right choice.
1213
1214=== 9 Credits
1215
1216Original version made by Michael Elizabeth Chastain, <mailto:mec@shout.net>
1217Updates by Kai Germaschewski <kai@tp1.ruhr-uni-bochum.de>
1218Updates by Sam Ravnborg <sam@ravnborg.org>
1219Language QA by Jan Engelhardt <jengelh@gmx.de>
1220
1221=== 10 TODO
1222
1223- Describe how kbuild supports shipped files with _shipped.
1224- Generating offset header files.
1225- Add more variables to section 7?
1226
1227
1228
1229
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.