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