1====================== 2Linux Kernel Makefiles 3====================== 4 5This document describes the Linux kernel Makefiles. 6 7Overview 8======== 9 10The Makefiles have five parts:: 11 12 Makefile the top Makefile. 13 .config the kernel configuration file. 14 arch/$(SRCARCH)/Makefile the arch Makefile. 15 scripts/Makefile.* common rules etc. for all kbuild Makefiles. 16 kbuild Makefiles exist in every subdirectory 17 18The top Makefile reads the .config file, which comes from the kernel 19configuration process. 20 21The top Makefile is responsible for building two major products: vmlinux 22(the resident kernel image) and modules (any module files). 23It builds these goals by recursively descending into the subdirectories of 24the kernel source tree. 25 26The list of subdirectories which are visited depends upon the kernel 27configuration. The top Makefile textually includes an arch Makefile 28with the name arch/$(SRCARCH)/Makefile. The arch Makefile supplies 29architecture-specific information to the top Makefile. 30 31Each subdirectory has a kbuild Makefile which carries out the commands 32passed down from above. The kbuild Makefile uses information from the 33.config file to construct various file lists used by kbuild to build 34any built-in or modular targets. 35 36scripts/Makefile.* contains all the definitions/rules etc. that 37are used to build the kernel based on the kbuild makefiles. 38 39Who does what 40============= 41 42People have four different relationships with the kernel Makefiles. 43 44*Users* are people who build kernels. These people type commands such as 45``make menuconfig`` or ``make``. They usually do not read or edit 46any kernel Makefiles (or any other source files). 47 48*Normal developers* are people who work on features such as device 49drivers, file systems, and network protocols. These people need to 50maintain the kbuild Makefiles for the subsystem they are 51working on. In order to do this effectively, they need some overall 52knowledge about the kernel Makefiles, plus detailed knowledge about the 53public interface for kbuild. 54 55*Arch developers* are people who work on an entire architecture, such 56as sparc or x86. Arch developers need to know about the arch Makefile 57as well as kbuild Makefiles. 58 59*Kbuild developers* are people who work on the kernel build system itself. 60These people need to know about all aspects of the kernel Makefiles. 61 62This document is aimed towards normal developers and arch developers. 63 64 65The kbuild files 66================ 67 68Most Makefiles within the kernel are kbuild Makefiles that use the 69kbuild infrastructure. This chapter introduces the syntax used in the 70kbuild makefiles. 71 72The preferred name for the kbuild files are ``Makefile`` but ``Kbuild`` can 73be used and if both a ``Makefile`` and a ``Kbuild`` file exists, then the ``Kbuild`` 74file will be used. 75 76Section `Goal definitions`_ is a quick intro; further chapters provide 77more details, with real examples. 78 79Goal definitions 80---------------- 81 82Goal definitions are the main part (heart) of the kbuild Makefile. 83These lines define the files to be built, any special compilation 84options, and any subdirectories to be entered recursively. 85 86The most simple kbuild makefile contains one line: 87 88Example:: 89 90 obj-y += foo.o 91 92This tells kbuild that there is one object in that directory, named 93foo.o. foo.o will be built from foo.c or foo.S. 94 95If foo.o shall be built as a module, the variable obj-m is used. 96Therefore the following pattern is often used: 97 98Example:: 99 100 obj-$(CONFIG_FOO) += foo.o 101 102$(CONFIG_FOO) evaluates to either y (for built-in) or m (for module). 103If CONFIG_FOO is neither y nor m, then the file will not be compiled 104nor linked. 105 106Built-in object goals - obj-y 107----------------------------- 108 109The kbuild Makefile specifies object files for vmlinux 110in the $(obj-y) lists. These lists depend on the kernel 111configuration. 112 113Kbuild compiles all the $(obj-y) files. It then calls 114``$(AR) rcSTP`` to merge these files into one built-in.a file. 115This is a thin archive without a symbol table. It will be later 116linked into vmlinux by scripts/link-vmlinux.sh 117 118The order of files in $(obj-y) is significant. Duplicates in 119the lists are allowed: the first instance will be linked into 120built-in.a and succeeding instances will be ignored. 121 122Link order is significant, because certain functions 123(module_init() / __initcall) will be called during boot in the 124order they appear. So keep in mind that changing the link 125order may e.g. change the order in which your SCSI 126controllers are detected, and thus your disks are renumbered. 127 128Example:: 129 130 #drivers/isdn/i4l/Makefile 131 # Makefile for the kernel ISDN subsystem and device drivers. 132 # Each configuration option enables a list of files. 133 obj-$(CONFIG_ISDN_I4L) += isdn.o 134 obj-$(CONFIG_ISDN_PPP_BSDCOMP) += isdn_bsdcomp.o 135 136Loadable module goals - obj-m 137----------------------------- 138 139$(obj-m) specifies object files which are built as loadable 140kernel modules. 141 142A module may be built from one source file or several source 143files. In the case of one source file, the kbuild makefile 144simply adds the file to $(obj-m). 145 146Example:: 147 148 #drivers/isdn/i4l/Makefile 149 obj-$(CONFIG_ISDN_PPP_BSDCOMP) += isdn_bsdcomp.o 150 151Note: In this example $(CONFIG_ISDN_PPP_BSDCOMP) evaluates to "m" 152 153If a kernel module is built from several source files, you specify 154that you want to build a module in the same way as above; however, 155kbuild needs to know which object files you want to build your 156module from, so you have to tell it by setting a $(<module_name>-y) 157variable. 158 159Example:: 160 161 #drivers/isdn/i4l/Makefile 162 obj-$(CONFIG_ISDN_I4L) += isdn.o 163 isdn-y := isdn_net_lib.o isdn_v110.o isdn_common.o 164 165In this example, the module name will be isdn.o. Kbuild will 166compile the objects listed in $(isdn-y) and then run 167``$(LD) -r`` on the list of these files to generate isdn.o. 168 169Due to kbuild recognizing $(<module_name>-y) for composite objects, 170you can use the value of a ``CONFIG_`` symbol to optionally include an 171object file as part of a composite object. 172 173Example:: 174 175 #fs/ext2/Makefile 176 obj-$(CONFIG_EXT2_FS) += ext2.o 177 ext2-y := balloc.o dir.o file.o ialloc.o inode.o ioctl.o \ 178 namei.o super.o symlink.o 179 ext2-$(CONFIG_EXT2_FS_XATTR) += xattr.o xattr_user.o \ 180 xattr_trusted.o 181 182In this example, xattr.o, xattr_user.o and xattr_trusted.o are only 183part of the composite object ext2.o if $(CONFIG_EXT2_FS_XATTR) 184evaluates to "y". 185 186Note: Of course, when you are building objects into the kernel, 187the syntax above will also work. So, if you have CONFIG_EXT2_FS=y, 188kbuild will build an ext2.o file for you out of the individual 189parts and then link this into built-in.a, as you would expect. 190 191Library file goals - lib-y 192-------------------------- 193 194Objects listed with obj-* are used for modules, or 195combined in a built-in.a for that specific directory. 196There is also the possibility to list objects that will 197be included in a library, lib.a. 198All objects listed with lib-y are combined in a single 199library for that directory. 200Objects that are listed in obj-y and additionally listed in 201lib-y will not be included in the library, since they will 202be accessible anyway. 203For consistency, objects listed in lib-m will be included in lib.a. 204 205Note that the same kbuild makefile may list files to be built-in 206and to be part of a library. Therefore the same directory 207may contain both a built-in.a and a lib.a file. 208 209Example:: 210 211 #arch/x86/lib/Makefile 212 lib-y := delay.o 213 214This will create a library lib.a based on delay.o. For kbuild to 215actually recognize that there is a lib.a being built, the directory 216shall be listed in libs-y. 217 218See also `List directories to visit when descending`_. 219 220Use of lib-y is normally restricted to ``lib/`` and ``arch/*/lib``. 221 222Descending down in directories 223------------------------------ 224 225A Makefile is only responsible for building objects in its own 226directory. Files in subdirectories should be taken care of by 227Makefiles in these subdirs. The build system will automatically 228invoke make recursively in subdirectories, provided you let it know of 229them. 230 231To do so, obj-y and obj-m are used. 232ext2 lives in a separate directory, and the Makefile present in fs/ 233tells kbuild to descend down using the following assignment. 234 235Example:: 236 237 #fs/Makefile 238 obj-$(CONFIG_EXT2_FS) += ext2/ 239 240If CONFIG_EXT2_FS is set to either "y" (built-in) or "m" (modular) 241the corresponding obj- variable will be set, and kbuild will descend 242down in the ext2 directory. 243 244Kbuild uses this information not only to decide that it needs to visit 245the directory, but also to decide whether or not to link objects from 246the directory into vmlinux. 247 248When Kbuild descends into the directory with "y", all built-in objects 249from that directory are combined into the built-in.a, which will be 250eventually linked into vmlinux. 251 252When Kbuild descends into the directory with "m", in contrast, nothing 253from that directory will be linked into vmlinux. If the Makefile in 254that directory specifies obj-y, those objects will be left orphan. 255It is very likely a bug of the Makefile or of dependencies in Kconfig. 256 257Kbuild also supports dedicated syntax, subdir-y and subdir-m, for 258descending into subdirectories. It is a good fit when you know they 259do not contain kernel-space objects at all. A typical usage is to let 260Kbuild descend into subdirectories to build tools. 261 262Examples:: 263 264 # scripts/Makefile 265 subdir-$(CONFIG_GCC_PLUGINS) += gcc-plugins 266 subdir-$(CONFIG_MODVERSIONS) += genksyms 267 subdir-$(CONFIG_SECURITY_SELINUX) += selinux 268 269Unlike obj-y/m, subdir-y/m does not need the trailing slash since this 270syntax is always used for directories. 271 272It is good practice to use a ``CONFIG_`` variable when assigning directory 273names. This allows kbuild to totally skip the directory if the 274corresponding ``CONFIG_`` option is neither "y" nor "m". 275 276Non-builtin vmlinux targets - extra-y 277------------------------------------- 278 279extra-y specifies targets which are needed for building vmlinux, 280but not combined into built-in.a. 281 282Examples are: 283 2841) vmlinux linker script 285 286 The linker script for vmlinux is located at 287 arch/$(SRCARCH)/kernel/vmlinux.lds 288 289Example:: 290 291 # arch/x86/kernel/Makefile 292 extra-y += vmlinux.lds 293 294extra-y is now deprecated because this is equivalent to: 295 296 always-$(KBUILD_BUILTIN) += vmlinux.lds 297 298$(extra-y) should only contain targets needed for vmlinux. 299 300Kbuild skips extra-y when vmlinux is apparently not a final goal. 301(e.g. ``make modules``, or building external modules) 302 303If you intend to build targets unconditionally, always-y (explained 304in the next section) is the correct syntax to use. 305 306Always built goals - always-y 307----------------------------- 308 309always-y specifies targets which are literally always built when 310Kbuild visits the Makefile. 311 312Example:: 313 314 # ./Kbuild 315 offsets-file := include/generated/asm-offsets.h 316 always-y += $(offsets-file) 317 318Compilation flags 319----------------- 320 321ccflags-y, asflags-y and ldflags-y 322 These three flags apply only to the kbuild makefile in which they 323 are assigned. They are used for all the normal cc, as and ld 324 invocations happening during a recursive build. 325 326 ccflags-y specifies options for compiling with $(CC). 327 328 Example:: 329 330 # drivers/acpi/acpica/Makefile 331 ccflags-y := -Os -D_LINUX -DBUILDING_ACPICA 332 ccflags-$(CONFIG_ACPI_DEBUG) += -DACPI_DEBUG_OUTPUT 333 334 This variable is necessary because the top Makefile owns the 335 variable $(KBUILD_CFLAGS) and uses it for compilation flags for the 336 entire tree. 337 338 asflags-y specifies assembler options. 339 340 Example:: 341 342 #arch/sparc/kernel/Makefile 343 asflags-y := -ansi 344 345 ldflags-y specifies options for linking with $(LD). 346 347 Example:: 348 349 #arch/cris/boot/compressed/Makefile 350 ldflags-y += -T $(src)/decompress_$(arch-y).lds 351 352subdir-ccflags-y, subdir-asflags-y 353 The two flags listed above are similar to ccflags-y and asflags-y. 354 The difference is that the subdir- variants have effect for the kbuild 355 file where they are present and all subdirectories. 356 Options specified using subdir-* are added to the commandline before 357 the options specified using the non-subdir variants. 358 359 Example:: 360 361 subdir-ccflags-y := -Werror 362 363ccflags-remove-y, asflags-remove-y 364 These flags are used to remove particular flags for the compiler, 365 assembler invocations. 366 367 Example:: 368 369 ccflags-remove-$(CONFIG_MCOUNT) += -pg 370 371CFLAGS_$@, AFLAGS_$@ 372 CFLAGS_$@ and AFLAGS_$@ only apply to commands in current 373 kbuild makefile. 374 375 $(CFLAGS_$@) specifies per-file options for $(CC). The $@ 376 part has a literal value which specifies the file that it is for. 377 378 CFLAGS_$@ has the higher priority than ccflags-remove-y; CFLAGS_$@ 379 can re-add compiler flags that were removed by ccflags-remove-y. 380 381 Example:: 382 383 # drivers/scsi/Makefile 384 CFLAGS_aha152x.o = -DAHA152X_STAT -DAUTOCONF 385 386 This line specify compilation flags for aha152x.o. 387 388 $(AFLAGS_$@) is a similar feature for source files in assembly 389 languages. 390 391 AFLAGS_$@ has the higher priority than asflags-remove-y; AFLAGS_$@ 392 can re-add assembler flags that were removed by asflags-remove-y. 393 394 Example:: 395 396 # arch/arm/kernel/Makefile 397 AFLAGS_head.o := -DTEXT_OFFSET=$(TEXT_OFFSET) 398 AFLAGS_crunch-bits.o := -Wa,-mcpu=ep9312 399 AFLAGS_iwmmxt.o := -Wa,-mcpu=iwmmxt 400 401Dependency tracking 402------------------- 403 404Kbuild tracks dependencies on the following: 405 4061) All prerequisite files (both ``*.c`` and ``*.h``) 4072) ``CONFIG_`` options used in all prerequisite files 4083) Command-line used to compile target 409 410Thus, if you change an option to $(CC) all affected files will 411be re-compiled. 412 413Custom Rules 414------------ 415 416Custom rules are used when the kbuild infrastructure does 417not provide the required support. A typical example is 418header files generated during the build process. 419Another example are the architecture-specific Makefiles which 420need custom rules to prepare boot images etc. 421 422Custom rules are written as normal Make rules. 423Kbuild is not executing in the directory where the Makefile is 424located, so all custom rules shall use a relative 425path to prerequisite files and target files. 426 427Two variables are used when defining custom rules: 428 429$(src) 430 $(src) is the directory where the Makefile is located. Always use $(src) when 431 referring to files located in the src tree. 432 433$(obj) 434 $(obj) is the directory where the target is saved. Always use $(obj) when 435 referring to generated files. Use $(obj) for pattern rules that need to work 436 for both generated files and real sources (VPATH will help to find the 437 prerequisites not only in the object tree but also in the source tree). 438 439 Example:: 440 441 #drivers/scsi/Makefile 442 $(obj)/53c8xx_d.h: $(src)/53c7,8xx.scr $(src)/script_asm.pl 443 $(CPP) -DCHIP=810 - < $< | ... $(src)/script_asm.pl 444 445 This is a custom rule, following the normal syntax 446 required by make. 447 448 The target file depends on two prerequisite files. References 449 to the target file are prefixed with $(obj), references 450 to prerequisites are referenced with $(src) (because they are not 451 generated files). 452 453$(srcroot) 454 $(srcroot) refers to the root of the source you are building, which can be 455 either the kernel source or the external modules source, depending on whether 456 KBUILD_EXTMOD is set. This can be either a relative or an absolute path, but 457 if KBUILD_ABS_SRCTREE=1 is set, it is always an absolute path. 458 459$(srctree) 460 $(srctree) refers to the root of the kernel source tree. When building the 461 kernel, this is the same as $(srcroot). 462 463$(objtree) 464 $(objtree) refers to the root of the kernel object tree. It is ``.`` when 465 building the kernel, but it is different when building external modules. 466 467$(kecho) 468 echoing information to user in a rule is often a good practice 469 but when execution ``make -s`` one does not expect to see any output 470 except for warnings/errors. 471 To support this kbuild defines $(kecho) which will echo out the 472 text following $(kecho) to stdout except if ``make -s`` is used. 473 474 Example:: 475 476 # arch/arm/Makefile 477 $(BOOT_TARGETS): vmlinux 478 $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@ 479 @$(kecho) ' Kernel: $(boot)/$@ is ready' 480 481 When kbuild is executing with KBUILD_VERBOSE unset, then only a shorthand 482 of a command is normally displayed. 483 To enable this behaviour for custom commands kbuild requires 484 two variables to be set:: 485 486 quiet_cmd_<command> - what shall be echoed 487 cmd_<command> - the command to execute 488 489 Example:: 490 491 # lib/Makefile 492 quiet_cmd_crc32 = GEN $@ 493 cmd_crc32 = $< > $@ 494 495 $(obj)/crc32table.h: $(obj)/gen_crc32table 496 $(call cmd,crc32) 497 498 When updating the $(obj)/crc32table.h target, the line:: 499 500 GEN lib/crc32table.h 501 502 will be displayed with ``make KBUILD_VERBOSE=``. 503 504Command change detection 505------------------------ 506 507When the rule is evaluated, timestamps are compared between the target 508and its prerequisite files. GNU Make updates the target when any of the 509prerequisites is newer than that. 510 511The target should be rebuilt also when the command line has changed 512since the last invocation. This is not supported by Make itself, so 513Kbuild achieves this by a kind of meta-programming. 514 515if_changed is the macro used for this purpose, in the following form:: 516 517 quiet_cmd_<command> = ... 518 cmd_<command> = ... 519 520 <target>: <source(s)> FORCE 521 $(call if_changed,<command>) 522 523Any target that utilizes if_changed must be listed in $(targets), 524otherwise the command line check will fail, and the target will 525always be built. 526 527If the target is already listed in the recognized syntax such as 528obj-y/m, lib-y/m, extra-y/m, always-y/m, hostprogs, userprogs, Kbuild 529automatically adds it to $(targets). Otherwise, the target must be 530explicitly added to $(targets). 531 532Assignments to $(targets) are without $(obj)/ prefix. if_changed may be 533used in conjunction with custom rules as defined in `Custom Rules`_. 534 535Note: It is a typical mistake to forget the FORCE prerequisite. 536Another common pitfall is that whitespace is sometimes significant; for 537instance, the below will fail (note the extra space after the comma):: 538 539 target: source(s) FORCE 540 541**WRONG!** $(call if_changed, objcopy) 542 543Note: 544 if_changed should not be used more than once per target. 545 It stores the executed command in a corresponding .cmd 546 file and multiple calls would result in overwrites and 547 unwanted results when the target is up to date and only the 548 tests on changed commands trigger execution of commands. 549 550$(CC) support functions 551----------------------- 552 553The kernel may be built with several different versions of 554$(CC), each supporting a unique set of features and options. 555kbuild provides basic support to check for valid options for $(CC). 556$(CC) is usually the gcc compiler, but other alternatives are 557available. 558 559as-option 560 as-option is used to check if $(CC) -- when used to compile 561 assembler (``*.S``) files -- supports the given option. An optional 562 second option may be specified if the first option is not supported. 563 564 Example:: 565 566 #arch/sh/Makefile 567 cflags-y += $(call as-option,-Wa$(comma)-isa=$(isa-y),) 568 569 In the above example, cflags-y will be assigned the option 570 -Wa$(comma)-isa=$(isa-y) if it is supported by $(CC). 571 The second argument is optional, and if supplied will be used 572 if first argument is not supported. 573 574as-instr 575 as-instr checks if the assembler reports a specific instruction 576 and then outputs either option1 or option2 577 C escapes are supported in the test instruction 578 Note: as-instr-option uses KBUILD_AFLAGS for assembler options 579 580cc-option 581 cc-option is used to check if $(CC) supports a given option, and if 582 not supported to use an optional second option. 583 584 Example:: 585 586 #arch/x86/Makefile 587 cflags-y += $(call cc-option,-march=pentium-mmx,-march=i586) 588 589 In the above example, cflags-y will be assigned the option 590 -march=pentium-mmx if supported by $(CC), otherwise -march=i586. 591 The second argument to cc-option is optional, and if omitted, 592 cflags-y will be assigned no value if first option is not supported. 593 Note: cc-option uses KBUILD_CFLAGS for $(CC) options 594 595cc-option-yn 596 cc-option-yn is used to check if $(CC) supports a given option 597 and return "y" if supported, otherwise "n". 598 599 Example:: 600 601 #arch/ppc/Makefile 602 biarch := $(call cc-option-yn, -m32) 603 aflags-$(biarch) += -a32 604 cflags-$(biarch) += -m32 605 606 In the above example, $(biarch) is set to y if $(CC) supports the -m32 607 option. When $(biarch) equals "y", the expanded variables $(aflags-y) 608 and $(cflags-y) will be assigned the values -a32 and -m32, 609 respectively. 610 611 Note: cc-option-yn uses KBUILD_CFLAGS for $(CC) options 612 613cc-disable-warning 614 cc-disable-warning checks if $(CC) supports a given warning and returns 615 the commandline switch to disable it. This special function is needed, 616 because gcc 4.4 and later accept any unknown -Wno-* option and only 617 warn about it if there is another warning in the source file. 618 619 Example:: 620 621 KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable) 622 623 In the above example, -Wno-unused-but-set-variable will be added to 624 KBUILD_CFLAGS only if $(CC) really accepts it. 625 626gcc-min-version 627 gcc-min-version tests if the value of $(CONFIG_GCC_VERSION) is greater than 628 or equal to the provided value and evaluates to y if so. 629 630 Example:: 631 632 cflags-$(call gcc-min-version, 110100) := -foo 633 634 In this example, cflags-y will be assigned the value -foo if $(CC) is gcc and 635 $(CONFIG_GCC_VERSION) is >= 11.1. 636 637clang-min-version 638 clang-min-version tests if the value of $(CONFIG_CLANG_VERSION) is greater 639 than or equal to the provided value and evaluates to y if so. 640 641 Example:: 642 643 cflags-$(call clang-min-version, 110000) := -foo 644 645 In this example, cflags-y will be assigned the value -foo if $(CC) is clang 646 and $(CONFIG_CLANG_VERSION) is >= 11.0.0. 647 648cc-cross-prefix 649 cc-cross-prefix is used to check if there exists a $(CC) in path with 650 one of the listed prefixes. The first prefix where there exist a 651 prefix$(CC) in the PATH is returned - and if no prefix$(CC) is found 652 then nothing is returned. 653 654 Additional prefixes are separated by a single space in the 655 call of cc-cross-prefix. 656 657 This functionality is useful for architecture Makefiles that try 658 to set CROSS_COMPILE to well-known values but may have several 659 values to select between. 660 661 It is recommended only to try to set CROSS_COMPILE if it is a cross 662 build (host arch is different from target arch). And if CROSS_COMPILE 663 is already set then leave it with the old value. 664 665 Example:: 666 667 #arch/m68k/Makefile 668 ifneq ($(SUBARCH),$(ARCH)) 669 ifeq ($(CROSS_COMPILE),) 670 CROSS_COMPILE := $(call cc-cross-prefix, m68k-linux-gnu-) 671 endif 672 endif 673 674$(RUSTC) support functions 675-------------------------- 676 677rustc-min-version 678 rustc-min-version tests if the value of $(CONFIG_RUSTC_VERSION) is greater 679 than or equal to the provided value and evaluates to y if so. 680 681 Example:: 682 683 rustflags-$(call rustc-min-version, 108500) := -Cfoo 684 685 In this example, rustflags-y will be assigned the value -Cfoo if 686 $(CONFIG_RUSTC_VERSION) is >= 1.85.0. 687 688$(LD) support functions 689----------------------- 690 691ld-option 692 ld-option is used to check if $(LD) supports the supplied option. 693 ld-option takes two options as arguments. 694 695 The second argument is an optional option that can be used if the 696 first option is not supported by $(LD). 697 698 Example:: 699 700 #Makefile 701 LDFLAGS_vmlinux += $(call ld-option, -X) 702 703Script invocation 704----------------- 705 706Make rules may invoke scripts to build the kernel. The rules shall 707always provide the appropriate interpreter to execute the script. They 708shall not rely on the execute bits being set, and shall not invoke the 709script directly. For the convenience of manual script invocation, such 710as invoking ./scripts/checkpatch.pl, it is recommended to set execute 711bits on the scripts nonetheless. 712 713Kbuild provides variables $(CONFIG_SHELL), $(AWK), $(PERL), 714and $(PYTHON3) to refer to interpreters for the respective 715scripts. 716 717Example:: 718 719 #Makefile 720 cmd_depmod = $(CONFIG_SHELL) $(srctree)/scripts/depmod.sh $(DEPMOD) \ 721 $(KERNELRELEASE) 722 723Host Program support 724==================== 725 726Kbuild supports building executables on the host for use during the 727compilation stage. 728 729Two steps are required in order to use a host executable. 730 731The first step is to tell kbuild that a host program exists. This is 732done utilising the variable ``hostprogs``. 733 734The second step is to add an explicit dependency to the executable. 735This can be done in two ways. Either add the dependency in a rule, 736or utilise the variable ``always-y``. 737Both possibilities are described in the following. 738 739Simple Host Program 740------------------- 741 742In some cases there is a need to compile and run a program on the 743computer where the build is running. 744 745The following line tells kbuild that the program bin2hex shall be 746built on the build host. 747 748Example:: 749 750 hostprogs := bin2hex 751 752Kbuild assumes in the above example that bin2hex is made from a single 753c-source file named bin2hex.c located in the same directory as 754the Makefile. 755 756Composite Host Programs 757----------------------- 758 759Host programs can be made up based on composite objects. 760The syntax used to define composite objects for host programs is 761similar to the syntax used for kernel objects. 762$(<executable>-objs) lists all objects used to link the final 763executable. 764 765Example:: 766 767 #scripts/lxdialog/Makefile 768 hostprogs := lxdialog 769 lxdialog-objs := checklist.o lxdialog.o 770 771Objects with extension .o are compiled from the corresponding .c 772files. In the above example, checklist.c is compiled to checklist.o 773and lxdialog.c is compiled to lxdialog.o. 774 775Finally, the two .o files are linked to the executable, lxdialog. 776Note: The syntax <executable>-y is not permitted for host-programs. 777 778Using C++ for host programs 779--------------------------- 780 781kbuild offers support for host programs written in C++. This was 782introduced solely to support kconfig, and is not recommended 783for general use. 784 785Example:: 786 787 #scripts/kconfig/Makefile 788 hostprogs := qconf 789 qconf-cxxobjs := qconf.o 790 791In the example above the executable is composed of the C++ file 792qconf.cc - identified by $(qconf-cxxobjs). 793 794If qconf is composed of a mixture of .c and .cc files, then an 795additional line can be used to identify this. 796 797Example:: 798 799 #scripts/kconfig/Makefile 800 hostprogs := qconf 801 qconf-cxxobjs := qconf.o 802 qconf-objs := check.o 803 804Using Rust for host programs 805---------------------------- 806 807Kbuild offers support for host programs written in Rust. However, 808since a Rust toolchain is not mandatory for kernel compilation, 809it may only be used in scenarios where Rust is required to be 810available (e.g. when ``CONFIG_RUST`` is enabled). 811 812Example:: 813 814 hostprogs := target 815 target-rust := y 816 817Kbuild will compile ``target`` using ``target.rs`` as the crate root, 818located in the same directory as the ``Makefile``. The crate may 819consist of several source files (see ``samples/rust/hostprogs``). 820 821Controlling compiler options for host programs 822---------------------------------------------- 823 824When compiling host programs, it is possible to set specific flags. 825The programs will always be compiled utilising $(HOSTCC) passed 826the options specified in $(KBUILD_HOSTCFLAGS). 827 828To set flags that will take effect for all host programs created 829in that Makefile, use the variable HOST_EXTRACFLAGS. 830 831Example:: 832 833 #scripts/lxdialog/Makefile 834 HOST_EXTRACFLAGS += -I/usr/include/ncurses 835 836To set specific flags for a single file the following construction 837is used: 838 839Example:: 840 841 #arch/ppc64/boot/Makefile 842 HOSTCFLAGS_piggyback.o := -DKERNELBASE=$(KERNELBASE) 843 844It is also possible to specify additional options to the linker. 845 846Example:: 847 848 #scripts/kconfig/Makefile 849 HOSTLDLIBS_qconf := -L$(QTDIR)/lib 850 851When linking qconf, it will be passed the extra option 852``-L$(QTDIR)/lib``. 853 854When host programs are actually built 855------------------------------------- 856 857Kbuild will only build host-programs when they are referenced 858as a prerequisite. 859 860This is possible in two ways: 861 862(1) List the prerequisite explicitly in a custom rule. 863 864 Example:: 865 866 #drivers/pci/Makefile 867 hostprogs := gen-devlist 868 $(obj)/devlist.h: $(src)/pci.ids $(obj)/gen-devlist 869 ( cd $(obj); ./gen-devlist ) < $< 870 871 The target $(obj)/devlist.h will not be built before 872 $(obj)/gen-devlist is updated. Note that references to 873 the host programs in custom rules must be prefixed with $(obj). 874 875(2) Use always-y 876 877 When there is no suitable custom rule, and the host program 878 shall be built when a makefile is entered, the always-y 879 variable shall be used. 880 881 Example:: 882 883 #scripts/lxdialog/Makefile 884 hostprogs := lxdialog 885 always-y := $(hostprogs) 886 887 Kbuild provides the following shorthand for this:: 888 889 hostprogs-always-y := lxdialog 890 891 This will tell kbuild to build lxdialog even if not referenced in 892 any rule. 893 894Userspace Program support 895========================= 896 897Just like host programs, Kbuild also supports building userspace executables 898for the target architecture (i.e. the same architecture as you are building 899the kernel for). 900 901The syntax is quite similar. The difference is to use ``userprogs`` instead of 902``hostprogs``. 903 904Simple Userspace Program 905------------------------ 906 907The following line tells kbuild that the program bpf-direct shall be 908built for the target architecture. 909 910Example:: 911 912 userprogs := bpf-direct 913 914Kbuild assumes in the above example that bpf-direct is made from a 915single C source file named bpf-direct.c located in the same directory 916as the Makefile. 917 918Composite Userspace Programs 919---------------------------- 920 921Userspace programs can be made up based on composite objects. 922The syntax used to define composite objects for userspace programs is 923similar to the syntax used for kernel objects. 924$(<executable>-objs) lists all objects used to link the final 925executable. 926 927Example:: 928 929 #samples/seccomp/Makefile 930 userprogs := bpf-fancy 931 bpf-fancy-objs := bpf-fancy.o bpf-helper.o 932 933Objects with extension .o are compiled from the corresponding .c 934files. In the above example, bpf-fancy.c is compiled to bpf-fancy.o 935and bpf-helper.c is compiled to bpf-helper.o. 936 937Finally, the two .o files are linked to the executable, bpf-fancy. 938Note: The syntax <executable>-y is not permitted for userspace programs. 939 940Controlling compiler options for userspace programs 941--------------------------------------------------- 942 943When compiling userspace programs, it is possible to set specific flags. 944The programs will always be compiled utilising $(CC) passed 945the options specified in $(KBUILD_USERCFLAGS). 946 947To set flags that will take effect for all userspace programs created 948in that Makefile, use the variable userccflags. 949 950Example:: 951 952 # samples/seccomp/Makefile 953 userccflags += -I usr/include 954 955To set specific flags for a single file the following construction 956is used: 957 958Example:: 959 960 bpf-helper-userccflags += -I user/include 961 962It is also possible to specify additional options to the linker. 963 964Example:: 965 966 # net/bpfilter/Makefile 967 bpfilter_umh-userldflags += -static 968 969To specify libraries linked to a userspace program, you can use 970``<executable>-userldlibs``. The ``userldlibs`` syntax specifies libraries 971linked to all userspace programs created in the current Makefile. 972 973When linking bpfilter_umh, it will be passed the extra option -static. 974 975From command line, :ref:`USERCFLAGS and USERLDFLAGS <userkbuildflags>` will also be used. 976 977When userspace programs are actually built 978------------------------------------------ 979 980Kbuild builds userspace programs only when told to do so. 981There are two ways to do this. 982 983(1) Add it as the prerequisite of another file 984 985 Example:: 986 987 #net/bpfilter/Makefile 988 userprogs := bpfilter_umh 989 $(obj)/bpfilter_umh_blob.o: $(obj)/bpfilter_umh 990 991 $(obj)/bpfilter_umh is built before $(obj)/bpfilter_umh_blob.o 992 993(2) Use always-y 994 995 Example:: 996 997 userprogs := binderfs_example 998 always-y := $(userprogs) 999 1000 Kbuild provides the following shorthand for this:: 1001 1002 userprogs-always-y := binderfs_example 1003 1004 This will tell Kbuild to build binderfs_example when it visits this 1005 Makefile. 1006 1007Kbuild clean infrastructure 1008=========================== 1009 1010``make clean`` deletes most generated files in the obj tree where the kernel 1011is compiled. This includes generated files such as host programs. 1012Kbuild knows targets listed in $(hostprogs), $(always-y), $(always-m), 1013$(always-), $(extra-y), $(extra-) and $(targets). They are all deleted 1014during ``make clean``. Files matching the patterns ``*.[oas]``, ``*.ko``, plus 1015some additional files generated by kbuild are deleted all over the kernel 1016source tree when ``make clean`` is executed. 1017 1018Additional files or directories can be specified in kbuild makefiles by use of 1019$(clean-files). 1020 1021Example:: 1022 1023 #lib/Makefile 1024 clean-files := crc32table.h 1025 1026When executing ``make clean``, the file ``crc32table.h`` will be deleted. 1027Kbuild will assume files to be in the same relative directory as the 1028Makefile. 1029 1030To exclude certain files or directories from make clean, use the 1031$(no-clean-files) variable. 1032 1033Usually kbuild descends down in subdirectories due to ``obj-* := dir/``, 1034but in the architecture makefiles where the kbuild infrastructure 1035is not sufficient this sometimes needs to be explicit. 1036 1037Example:: 1038 1039 #arch/x86/boot/Makefile 1040 subdir- := compressed 1041 1042The above assignment instructs kbuild to descend down in the 1043directory compressed/ when ``make clean`` is executed. 1044 1045Note 1: arch/$(SRCARCH)/Makefile cannot use ``subdir-``, because that file is 1046included in the top level makefile. Instead, arch/$(SRCARCH)/Kbuild can use 1047``subdir-``. 1048 1049Note 2: All directories listed in core-y, libs-y, drivers-y and net-y will 1050be visited during ``make clean``. 1051 1052Architecture Makefiles 1053====================== 1054 1055The top level Makefile sets up the environment and does the preparation, 1056before starting to descend down in the individual directories. 1057 1058The top level makefile contains the generic part, whereas 1059arch/$(SRCARCH)/Makefile contains what is required to set up kbuild 1060for said architecture. 1061 1062To do so, arch/$(SRCARCH)/Makefile sets up a number of variables and defines 1063a few targets. 1064 1065When kbuild executes, the following steps are followed (roughly): 1066 10671) Configuration of the kernel => produce .config 1068 10692) Store kernel version in include/linux/version.h 1070 10713) Updating all other prerequisites to the target prepare: 1072 1073 - Additional prerequisites are specified in arch/$(SRCARCH)/Makefile 1074 10754) Recursively descend down in all directories listed in 1076 init-* core* drivers-* net-* libs-* and build all targets. 1077 1078 - The values of the above variables are expanded in arch/$(SRCARCH)/Makefile. 1079 10805) All object files are then linked and the resulting file vmlinux is 1081 located at the root of the obj tree. 1082 The very first objects linked are listed in scripts/head-object-list.txt. 1083 10846) Finally, the architecture-specific part does any required post processing 1085 and builds the final bootimage. 1086 1087 - This includes building boot records 1088 - Preparing initrd images and the like 1089 1090Set variables to tweak the build to the architecture 1091---------------------------------------------------- 1092 1093KBUILD_LDFLAGS 1094 Generic $(LD) options 1095 1096 Flags used for all invocations of the linker. 1097 Often specifying the emulation is sufficient. 1098 1099 Example:: 1100 1101 #arch/s390/Makefile 1102 KBUILD_LDFLAGS := -m elf_s390 1103 1104 Note: ldflags-y can be used to further customise 1105 the flags used. See `Non-builtin vmlinux targets - extra-y`_. 1106 1107LDFLAGS_vmlinux 1108 Options for $(LD) when linking vmlinux 1109 1110 LDFLAGS_vmlinux is used to specify additional flags to pass to 1111 the linker when linking the final vmlinux image. 1112 1113 LDFLAGS_vmlinux uses the LDFLAGS_$@ support. 1114 1115 Example:: 1116 1117 #arch/x86/Makefile 1118 LDFLAGS_vmlinux := -e stext 1119 1120OBJCOPYFLAGS 1121 objcopy flags 1122 1123 When $(call if_changed,objcopy) is used to translate a .o file, 1124 the flags specified in OBJCOPYFLAGS will be used. 1125 1126 $(call if_changed,objcopy) is often used to generate raw binaries on 1127 vmlinux. 1128 1129 Example:: 1130 1131 #arch/s390/Makefile 1132 OBJCOPYFLAGS := -O binary 1133 1134 #arch/s390/boot/Makefile 1135 $(obj)/image: vmlinux FORCE 1136 $(call if_changed,objcopy) 1137 1138 In this example, the binary $(obj)/image is a binary version of 1139 vmlinux. The usage of $(call if_changed,xxx) will be described later. 1140 1141KBUILD_AFLAGS 1142 Assembler flags 1143 1144 Default value - see top level Makefile. 1145 1146 Append or modify as required per architecture. 1147 1148 Example:: 1149 1150 #arch/sparc64/Makefile 1151 KBUILD_AFLAGS += -m64 -mcpu=ultrasparc 1152 1153KBUILD_CFLAGS 1154 $(CC) compiler flags 1155 1156 Default value - see top level Makefile. 1157 1158 Append or modify as required per architecture. 1159 1160 Often, the KBUILD_CFLAGS variable depends on the configuration. 1161 1162 Example:: 1163 1164 #arch/x86/boot/compressed/Makefile 1165 cflags-$(CONFIG_X86_32) := -march=i386 1166 cflags-$(CONFIG_X86_64) := -mcmodel=small 1167 KBUILD_CFLAGS += $(cflags-y) 1168 1169 Many arch Makefiles dynamically run the target C compiler to 1170 probe supported options:: 1171 1172 #arch/x86/Makefile 1173 1174 ... 1175 cflags-$(CONFIG_MPENTIUMII) += $(call cc-option,\ 1176 -march=pentium2,-march=i686) 1177 ... 1178 # Disable unit-at-a-time mode ... 1179 KBUILD_CFLAGS += $(call cc-option,-fno-unit-at-a-time) 1180 ... 1181 1182 1183 The first example utilises the trick that a config option expands 1184 to "y" when selected. 1185 1186KBUILD_RUSTFLAGS 1187 $(RUSTC) compiler flags 1188 1189 Default value - see top level Makefile. 1190 1191 Append or modify as required per architecture. 1192 1193 Often, the KBUILD_RUSTFLAGS variable depends on the configuration. 1194 1195 Note that target specification file generation (for ``--target``) 1196 is handled in ``scripts/generate_rust_target.rs``. 1197 1198KBUILD_AFLAGS_KERNEL 1199 Assembler options specific for built-in 1200 1201 $(KBUILD_AFLAGS_KERNEL) contains extra C compiler flags used to compile 1202 resident kernel code. 1203 1204KBUILD_AFLAGS_MODULE 1205 Assembler options specific for modules 1206 1207 $(KBUILD_AFLAGS_MODULE) is used to add arch-specific options that 1208 are used for assembler. 1209 1210 From commandline AFLAGS_MODULE shall be used (see kbuild.rst). 1211 1212KBUILD_CFLAGS_KERNEL 1213 $(CC) options specific for built-in 1214 1215 $(KBUILD_CFLAGS_KERNEL) contains extra C compiler flags used to compile 1216 resident kernel code. 1217 1218KBUILD_CFLAGS_MODULE 1219 Options for $(CC) when building modules 1220 1221 $(KBUILD_CFLAGS_MODULE) is used to add arch-specific options that 1222 are used for $(CC). 1223 1224 From commandline CFLAGS_MODULE shall be used (see kbuild.rst). 1225 1226KBUILD_RUSTFLAGS_KERNEL 1227 $(RUSTC) options specific for built-in 1228 1229 $(KBUILD_RUSTFLAGS_KERNEL) contains extra Rust compiler flags used to 1230 compile resident kernel code. 1231 1232KBUILD_RUSTFLAGS_MODULE 1233 Options for $(RUSTC) when building modules 1234 1235 $(KBUILD_RUSTFLAGS_MODULE) is used to add arch-specific options that 1236 are used for $(RUSTC). 1237 1238 From commandline RUSTFLAGS_MODULE shall be used (see kbuild.rst). 1239 1240KBUILD_LDFLAGS_MODULE 1241 Options for $(LD) when linking modules 1242 1243 $(KBUILD_LDFLAGS_MODULE) is used to add arch-specific options 1244 used when linking modules. This is often a linker script. 1245 1246 From commandline LDFLAGS_MODULE shall be used (see kbuild.rst). 1247 1248KBUILD_LDS 1249 The linker script with full path. Assigned by the top-level Makefile. 1250 1251KBUILD_VMLINUX_OBJS 1252 All object files for vmlinux. They are linked to vmlinux in the same 1253 order as listed in KBUILD_VMLINUX_OBJS. 1254 1255 The objects listed in scripts/head-object-list.txt are exceptions; 1256 they are placed before the other objects. 1257 1258KBUILD_VMLINUX_LIBS 1259 All .a ``lib`` files for vmlinux. KBUILD_VMLINUX_OBJS and 1260 KBUILD_VMLINUX_LIBS together specify all the object files used to 1261 link vmlinux. 1262 1263Add prerequisites to archheaders 1264-------------------------------- 1265 1266The archheaders: rule is used to generate header files that 1267may be installed into user space by ``make header_install``. 1268 1269It is run before ``make archprepare`` when run on the 1270architecture itself. 1271 1272Add prerequisites to archprepare 1273-------------------------------- 1274 1275The archprepare: rule is used to list prerequisites that need to be 1276built before starting to descend down in the subdirectories. 1277 1278This is usually used for header files containing assembler constants. 1279 1280Example:: 1281 1282 #arch/arm/Makefile 1283 archprepare: maketools 1284 1285In this example, the file target maketools will be processed 1286before descending down in the subdirectories. 1287 1288See also chapter XXX-TODO that describes how kbuild supports 1289generating offset header files. 1290 1291List directories to visit when descending 1292----------------------------------------- 1293 1294An arch Makefile cooperates with the top Makefile to define variables 1295which specify how to build the vmlinux file. Note that there is no 1296corresponding arch-specific section for modules; the module-building 1297machinery is all architecture-independent. 1298 1299core-y, libs-y, drivers-y 1300 $(libs-y) lists directories where a lib.a archive can be located. 1301 1302 The rest list directories where a built-in.a object file can be 1303 located. 1304 1305 Then the rest follows in this order: 1306 1307 $(core-y), $(libs-y), $(drivers-y) 1308 1309 The top level Makefile defines values for all generic directories, 1310 and arch/$(SRCARCH)/Makefile only adds architecture-specific 1311 directories. 1312 1313 Example:: 1314 1315 # arch/sparc/Makefile 1316 core-y += arch/sparc/ 1317 1318 libs-y += arch/sparc/prom/ 1319 libs-y += arch/sparc/lib/ 1320 1321 drivers-$(CONFIG_PM) += arch/sparc/power/ 1322 1323Architecture-specific boot images 1324--------------------------------- 1325 1326An arch Makefile specifies goals that take the vmlinux file, compress 1327it, wrap it in bootstrapping code, and copy the resulting files 1328somewhere. This includes various kinds of installation commands. 1329The actual goals are not standardized across architectures. 1330 1331It is common to locate any additional processing in a boot/ 1332directory below arch/$(SRCARCH)/. 1333 1334Kbuild does not provide any smart way to support building a 1335target specified in boot/. Therefore arch/$(SRCARCH)/Makefile shall 1336call make manually to build a target in boot/. 1337 1338The recommended approach is to include shortcuts in 1339arch/$(SRCARCH)/Makefile, and use the full path when calling down 1340into the arch/$(SRCARCH)/boot/Makefile. 1341 1342Example:: 1343 1344 #arch/x86/Makefile 1345 boot := arch/x86/boot 1346 bzImage: vmlinux 1347 $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@ 1348 1349``$(Q)$(MAKE) $(build)=<dir>`` is the recommended way to invoke 1350make in a subdirectory. 1351 1352There are no rules for naming architecture-specific targets, 1353but executing ``make help`` will list all relevant targets. 1354To support this, $(archhelp) must be defined. 1355 1356Example:: 1357 1358 #arch/x86/Makefile 1359 define archhelp 1360 echo '* bzImage - Compressed kernel image (arch/x86/boot/bzImage)' 1361 endif 1362 1363When make is executed without arguments, the first goal encountered 1364will be built. In the top level Makefile the first goal present 1365is all:. 1366 1367An architecture shall always, per default, build a bootable image. 1368In ``make help``, the default goal is highlighted with a ``*``. 1369 1370Add a new prerequisite to all: to select a default goal different 1371from vmlinux. 1372 1373Example:: 1374 1375 #arch/x86/Makefile 1376 all: bzImage 1377 1378When ``make`` is executed without arguments, bzImage will be built. 1379 1380Commands useful for building a boot image 1381----------------------------------------- 1382 1383Kbuild provides a few macros that are useful when building a 1384boot image. 1385 1386ld 1387 Link target. Often, LDFLAGS_$@ is used to set specific options to ld. 1388 1389 Example:: 1390 1391 #arch/x86/boot/Makefile 1392 LDFLAGS_bootsect := -Ttext 0x0 -s --oformat binary 1393 LDFLAGS_setup := -Ttext 0x0 -s --oformat binary -e begtext 1394 1395 targets += setup setup.o bootsect bootsect.o 1396 $(obj)/setup $(obj)/bootsect: %: %.o FORCE 1397 $(call if_changed,ld) 1398 1399 In this example, there are two possible targets, requiring different 1400 options to the linker. The linker options are specified using the 1401 LDFLAGS_$@ syntax - one for each potential target. 1402 1403 $(targets) are assigned all potential targets, by which kbuild knows 1404 the targets and will: 1405 1406 1) check for commandline changes 1407 2) delete target during make clean 1408 1409 The ``: %: %.o`` part of the prerequisite is a shorthand that 1410 frees us from listing the setup.o and bootsect.o files. 1411 1412 Note: 1413 It is a common mistake to forget the ``targets :=`` assignment, 1414 resulting in the target file being recompiled for no 1415 obvious reason. 1416 1417objcopy 1418 Copy binary. Uses OBJCOPYFLAGS usually specified in 1419 arch/$(SRCARCH)/Makefile. 1420 1421 OBJCOPYFLAGS_$@ may be used to set additional options. 1422 1423gzip 1424 Compress target. Use maximum compression to compress target. 1425 1426 Example:: 1427 1428 #arch/x86/boot/compressed/Makefile 1429 $(obj)/vmlinux.bin.gz: $(vmlinux.bin.all-y) FORCE 1430 $(call if_changed,gzip) 1431 1432dtc 1433 Create flattened device tree blob object suitable for linking 1434 into vmlinux. Device tree blobs linked into vmlinux are placed 1435 in an init section in the image. Platform code *must* copy the 1436 blob to non-init memory prior to calling unflatten_device_tree(). 1437 1438 To use this command, simply add ``*.dtb`` into obj-y or targets, or make 1439 some other target depend on ``%.dtb`` 1440 1441 A central rule exists to create ``$(obj)/%.dtb`` from ``$(src)/%.dts``; 1442 architecture Makefiles do no need to explicitly write out that rule. 1443 1444 Example:: 1445 1446 targets += $(dtb-y) 1447 DTC_FLAGS ?= -p 1024 1448 1449Preprocessing linker scripts 1450---------------------------- 1451 1452When the vmlinux image is built, the linker script 1453arch/$(SRCARCH)/kernel/vmlinux.lds is used. 1454 1455The script is a preprocessed variant of the file vmlinux.lds.S 1456located in the same directory. 1457 1458kbuild knows .lds files and includes a rule ``*lds.S`` -> ``*lds``. 1459 1460Example:: 1461 1462 #arch/x86/kernel/Makefile 1463 extra-y := vmlinux.lds 1464 1465The assignment to extra-y is used to tell kbuild to build the 1466target vmlinux.lds. 1467 1468The assignment to $(CPPFLAGS_vmlinux.lds) tells kbuild to use the 1469specified options when building the target vmlinux.lds. 1470 1471When building the ``*.lds`` target, kbuild uses the variables:: 1472 1473 KBUILD_CPPFLAGS : Set in top-level Makefile 1474 cppflags-y : May be set in the kbuild makefile 1475 CPPFLAGS_$(@F) : Target-specific flags. 1476 Note that the full filename is used in this 1477 assignment. 1478 1479The kbuild infrastructure for ``*lds`` files is used in several 1480architecture-specific files. 1481 1482Generic header files 1483-------------------- 1484 1485The directory include/asm-generic contains the header files 1486that may be shared between individual architectures. 1487 1488The recommended approach how to use a generic header file is 1489to list the file in the Kbuild file. 1490 1491See `generic-y`_ for further info on syntax etc. 1492 1493Post-link pass 1494-------------- 1495 1496If the file arch/xxx/Makefile.postlink exists, this makefile 1497will be invoked for post-link objects (vmlinux and modules.ko) 1498for architectures to run post-link passes on. Must also handle 1499the clean target. 1500 1501This pass runs after kallsyms generation. If the architecture 1502needs to modify symbol locations, rather than manipulate the 1503kallsyms, it may be easier to add another postlink target for 1504.tmp_vmlinux? targets to be called from link-vmlinux.sh. 1505 1506For example, powerpc uses this to check relocation sanity of 1507the linked vmlinux file. 1508 1509Kbuild syntax for exported headers 1510================================== 1511 1512The kernel includes a set of headers that is exported to userspace. 1513Many headers can be exported as-is but other headers require a 1514minimal pre-processing before they are ready for user-space. 1515 1516The pre-processing does: 1517 1518- drop kernel-specific annotations 1519- drop include of compiler.h 1520- drop all sections that are kernel internal (guarded by ``ifdef __KERNEL__``) 1521 1522All headers under include/uapi/, include/generated/uapi/, 1523arch/<arch>/include/uapi/ and arch/<arch>/include/generated/uapi/ 1524are exported. 1525 1526A Kbuild file may be defined under arch/<arch>/include/uapi/asm/ and 1527arch/<arch>/include/asm/ to list asm files coming from asm-generic. 1528 1529See subsequent chapter for the syntax of the Kbuild file. 1530 1531no-export-headers 1532----------------- 1533 1534no-export-headers is essentially used by include/uapi/linux/Kbuild to 1535avoid exporting specific headers (e.g. kvm.h) on architectures that do 1536not support it. It should be avoided as much as possible. 1537 1538generic-y 1539--------- 1540 1541If an architecture uses a verbatim copy of a header from 1542include/asm-generic then this is listed in the file 1543arch/$(SRCARCH)/include/asm/Kbuild like this: 1544 1545Example:: 1546 1547 #arch/x86/include/asm/Kbuild 1548 generic-y += termios.h 1549 generic-y += rtc.h 1550 1551During the prepare phase of the build a wrapper include 1552file is generated in the directory:: 1553 1554 arch/$(SRCARCH)/include/generated/asm 1555 1556When a header is exported where the architecture uses 1557the generic header a similar wrapper is generated as part 1558of the set of exported headers in the directory:: 1559 1560 usr/include/asm 1561 1562The generated wrapper will in both cases look like the following: 1563 1564Example: termios.h:: 1565 1566 #include <asm-generic/termios.h> 1567 1568generated-y 1569----------- 1570 1571If an architecture generates other header files alongside generic-y 1572wrappers, generated-y specifies them. 1573 1574This prevents them being treated as stale asm-generic wrappers and 1575removed. 1576 1577Example:: 1578 1579 #arch/x86/include/asm/Kbuild 1580 generated-y += syscalls_32.h 1581 1582mandatory-y 1583----------- 1584 1585mandatory-y is essentially used by include/(uapi/)asm-generic/Kbuild 1586to define the minimum set of ASM headers that all architectures must have. 1587 1588This works like optional generic-y. If a mandatory header is missing 1589in arch/$(SRCARCH)/include/(uapi/)/asm, Kbuild will automatically 1590generate a wrapper of the asm-generic one. 1591 1592Kbuild Variables 1593================ 1594 1595The top Makefile exports the following variables: 1596 1597VERSION, PATCHLEVEL, SUBLEVEL, EXTRAVERSION 1598 These variables define the current kernel version. A few arch 1599 Makefiles actually use these values directly; they should use 1600 $(KERNELRELEASE) instead. 1601 1602 $(VERSION), $(PATCHLEVEL), and $(SUBLEVEL) define the basic 1603 three-part version number, such as "2", "4", and "0". These three 1604 values are always numeric. 1605 1606 $(EXTRAVERSION) defines an even tinier sublevel for pre-patches 1607 or additional patches. It is usually some non-numeric string 1608 such as "-pre4", and is often blank. 1609 1610KERNELRELEASE 1611 $(KERNELRELEASE) is a single string such as "2.4.0-pre4", suitable 1612 for constructing installation directory names or showing in 1613 version strings. Some arch Makefiles use it for this purpose. 1614 1615ARCH 1616 This variable defines the target architecture, such as "i386", 1617 "arm", or "sparc". Some kbuild Makefiles test $(ARCH) to 1618 determine which files to compile. 1619 1620 By default, the top Makefile sets $(ARCH) to be the same as the 1621 host system architecture. For a cross build, a user may 1622 override the value of $(ARCH) on the command line:: 1623 1624 make ARCH=m68k ... 1625 1626SRCARCH 1627 This variable specifies the directory in arch/ to build. 1628 1629 ARCH and SRCARCH may not necessarily match. A couple of arch 1630 directories are biarch, that is, a single ``arch/*/`` directory supports 1631 both 32-bit and 64-bit. 1632 1633 For example, you can pass in ARCH=i386, ARCH=x86_64, or ARCH=x86. 1634 For all of them, SRCARCH=x86 because arch/x86/ supports both i386 and 1635 x86_64. 1636 1637INSTALL_PATH 1638 This variable defines a place for the arch Makefiles to install 1639 the resident kernel image and System.map file. 1640 Use this for architecture-specific install targets. 1641 1642INSTALL_MOD_PATH, MODLIB 1643 $(INSTALL_MOD_PATH) specifies a prefix to $(MODLIB) for module 1644 installation. This variable is not defined in the Makefile but 1645 may be passed in by the user if desired. 1646 1647 $(MODLIB) specifies the directory for module installation. 1648 The top Makefile defines $(MODLIB) to 1649 $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE). The user may 1650 override this value on the command line if desired. 1651 1652INSTALL_MOD_STRIP 1653 If this variable is specified, it will cause modules to be stripped 1654 after they are installed. If INSTALL_MOD_STRIP is "1", then the 1655 default option --strip-debug will be used. Otherwise, the 1656 INSTALL_MOD_STRIP value will be used as the option(s) to the strip 1657 command. 1658 1659INSTALL_DTBS_PATH 1660 This variable specifies a prefix for relocations required by build 1661 roots. It defines a place for installing the device tree blobs. Like 1662 INSTALL_MOD_PATH, it isn't defined in the Makefile, but can be passed 1663 by the user if desired. Otherwise it defaults to the kernel install 1664 path. 1665 1666Makefile language 1667================= 1668 1669The kernel Makefiles are designed to be run with GNU Make. The Makefiles 1670use only the documented features of GNU Make, but they do use many 1671GNU extensions. 1672 1673GNU Make supports elementary list-processing functions. The kernel 1674Makefiles use a novel style of list building and manipulation with few 1675``if`` statements. 1676 1677GNU Make has two assignment operators, ``:=`` and ``=``. ``:=`` performs 1678immediate evaluation of the right-hand side and stores an actual string 1679into the left-hand side. ``=`` is like a formula definition; it stores the 1680right-hand side in an unevaluated form and then evaluates this form each 1681time the left-hand side is used. 1682 1683There are some cases where ``=`` is appropriate. Usually, though, ``:=`` 1684is the right choice. 1685 1686Credits 1687======= 1688 1689- Original version made by Michael Elizabeth Chastain, <mailto:mec@shout.net> 1690- Updates by Kai Germaschewski <kai@tp1.ruhr-uni-bochum.de> 1691- Updates by Sam Ravnborg <sam@ravnborg.org> 1692- Language QA by Jan Engelhardt <jengelh@gmx.de> 1693 1694TODO 1695==== 1696 1697- Generating offset header files. 1698- Add more variables to chapters 7 or 9? 1699