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