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