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