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