WIP FPC-III support
[linux/fpc-iii.git] / Documentation / kbuild / makefiles.rst
blob9f6a1188195136089fda768bf2ab88cc60c5dae4
1 ======================
2 Linux Kernel Makefiles
3 ======================
5 This document describes the Linux kernel Makefiles.
7 .. Table of Contents
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
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
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
41         === 6 Kbuild clean infrastructure
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
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
62         === 9 Kbuild Variables
63         === 10 Makefile language
64         === 11 Credits
65         === 12 TODO
67 1 Overview
68 ==========
70 The Makefiles have five parts::
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
78 The top Makefile reads the .config file, which comes from the kernel
79 configuration process.
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.
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.
95 scripts/Makefile.* contains all the definitions/rules etc. that
96 are used to build the kernel based on the kbuild makefiles.
99 2 Who does what
100 ===============
102 People have four different relationships with the kernel Makefiles.
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).
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.
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.
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.
122 This document is aimed towards normal developers and arch developers.
125 3 The kbuild files
126 ==================
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.
135 Section 3.1 "Goal definitions" is a quick intro; further chapters provide
136 more details, with real examples.
138 3.1 Goal definitions
139 --------------------
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.
145         The most simple kbuild makefile contains one line:
147         Example::
149                 obj-y += foo.o
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.
154         If foo.o shall be built as a module, the variable obj-m is used.
155         Therefore the following pattern is often used:
157         Example::
159                 obj-$(CONFIG_FOO) += foo.o
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.
165 3.2 Built-in object goals - obj-y
166 ---------------------------------
168         The kbuild Makefile specifies object files for vmlinux
169         in the $(obj-y) lists.  These lists depend on the kernel
170         configuration.
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
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.
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.
187         Example::
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
195 3.3 Loadable module goals - obj-m
196 ---------------------------------
198         $(obj-m) specifies object files which are built as loadable
199         kernel modules.
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).
205         Example::
207                 #drivers/isdn/i4l/Makefile
208                 obj-$(CONFIG_ISDN_PPP_BSDCOMP) += isdn_bsdcomp.o
210         Note: In this example $(CONFIG_ISDN_PPP_BSDCOMP) evaluates to 'm'
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.
218         Example::
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
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.
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.
232         Example::
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
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'.
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.
250 3.4 Objects which export symbols
251 --------------------------------
253         No special notation is required in the makefiles for
254         modules exporting symbols.
256 3.5 Library file goals - lib-y
257 ------------------------------
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.
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.
274         Example::
276                 #arch/x86/lib/Makefile
277                 lib-y    := delay.o
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.
283         See also "7.4 List directories to visit when descending".
285         Use of lib-y is normally restricted to `lib/` and `arch/*/lib`.
287 3.6 Descending down in directories
288 ----------------------------------
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.
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.
300         Example::
302                 #fs/Makefile
303                 obj-$(CONFIG_EXT2_FS) += ext2/
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.
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.
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.
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.
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.
327         Examples::
329                 # scripts/Makefile
330                 subdir-$(CONFIG_GCC_PLUGINS) += gcc-plugins
331                 subdir-$(CONFIG_MODVERSIONS) += genksyms
332                 subdir-$(CONFIG_SECURITY_SELINUX) += selinux
334         Unlike obj-y/m, subdir-y/m does not need the trailing slash since this
335         syntax is always used for directories.
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'.
341 3.7 Non-builtin vmlinux targets - extra-y
342 -----------------------------------------
344         extra-y specifies targets which are needed for building vmlinux,
345         but not combined into built-in.a.
347         Examples are:
349         1) head objects
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.
355             arch/$(SRCARCH)/Makefile should specify such objects as head-y.
357             Discussion:
358               Given that we can control the section order in the linker script,
359               why do we need head-y?
361         2) vmlinux linker script
363             The linker script for vmlinux is located at
364             arch/$(SRCARCH)/kernel/vmlinux.lds
366         Example::
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
375         $(extra-y) should only contain targets needed for vmlinux.
377         Kbuild skips extra-y when vmlinux is apparently not a final goal.
378         (e.g. 'make modules', or building external modules)
380         If you intend to build targets unconditionally, always-y (explained
381         in the next section) is the correct syntax to use.
383 3.8 Always built goals - always-y
384 ---------------------------------
386         always-y specifies targets which are literally always built when
387         Kbuild visits the Makefile.
389         Example::
390           # ./Kbuild
391           offsets-file := include/generated/asm-offsets.h
392           always-y += $(offsets-file)
394 3.9 Compilation flags
395 ---------------------
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.
405         ccflags-y specifies options for compiling with $(CC).
407         Example::
409                 # drivers/acpi/acpica/Makefile
410                 ccflags-y                       := -Os -D_LINUX -DBUILDING_ACPICA
411                 ccflags-$(CONFIG_ACPI_DEBUG)    += -DACPI_DEBUG_OUTPUT
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.
417         asflags-y specifies assembler options.
419         Example::
421                 #arch/sparc/kernel/Makefile
422                 asflags-y := -ansi
424         ldflags-y specifies options for linking with $(LD).
426         Example::
428                 #arch/cris/boot/compressed/Makefile
429                 ldflags-y += -T $(srctree)/$(src)/decompress_$(arch-y).lds
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.
438         Example::
440                 subdir-ccflags-y := -Werror
442     ccflags-remove-y, asflags-remove-y
443         These flags are used to remove particular flags for the compiler,
444         assembler invocations.
446         Example::
448                 ccflags-remove-$(CONFIG_MCOUNT) += -pg
450     CFLAGS_$@, AFLAGS_$@
451         CFLAGS_$@ and AFLAGS_$@ only apply to commands in current
452         kbuild makefile.
454         $(CFLAGS_$@) specifies per-file options for $(CC).  The $@
455         part has a literal value which specifies the file that it is for.
457         CFLAGS_$@ has the higher priority than ccflags-remove-y; CFLAGS_$@
458         can re-add compiler flags that were removed by ccflags-remove-y.
460         Example::
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
467         These two lines specify compilation flags for aha152x.o and gdth.o.
469         $(AFLAGS_$@) is a similar feature for source files in assembly
470         languages.
472         AFLAGS_$@ has the higher priority than asflags-remove-y; AFLAGS_$@
473         can re-add assembler flags that were removed by asflags-remove-y.
475         Example::
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
483 3.10 Dependency tracking
484 ------------------------
486         Kbuild tracks dependencies on the following:
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
492         Thus, if you change an option to $(CC) all affected files will
493         be re-compiled.
495 3.11 Custom Rules
496 -----------------
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.
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.
509         Two variables are used when defining custom rules:
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.
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.
521             Example::
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
527             This is a custom rule, following the normal syntax
528             required by make.
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).
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.
542         Example::
544                 # arch/arm/Makefile
545                 $(BOOT_TARGETS): vmlinux
546                         $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@
547                         @$(kecho) '  Kernel: $(boot)/$@ is ready'
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::
554                 quiet_cmd_<command>     - what shall be echoed
555                       cmd_<command>     - the command to execute
557         Example::
559                 # lib/Makefile
560                 quiet_cmd_crc32 = GEN     $@
561                       cmd_crc32 = $< > $@
563                 $(obj)/crc32table.h: $(obj)/gen_crc32table
564                         $(call cmd,crc32)
566         When updating the $(obj)/crc32table.h target, the line:
568                   GEN     lib/crc32table.h
570         will be displayed with "make KBUILD_VERBOSE=0".
572 3.12 Command change detection
573 -----------------------------
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.
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.
583         if_changed is the macro used for this purpose, in the following form::
585                 quiet_cmd_<command> = ...
586                       cmd_<command> = ...
588                 <target>: <source(s)> FORCE
589                         $(call if_changed,<command>)
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.
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).
600         Assignments to $(targets) are without $(obj)/ prefix. if_changed may be
601         used in conjunction with custom rules as defined in "3.11 Custom Rules".
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)::
607                 target: source(s) FORCE
609         **WRONG!**      $(call if_changed, objcopy)
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.
618 3.13 $(CC) support functions
619 ----------------------------
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.
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.
632         Example::
634                 #arch/sh/Makefile
635                 cflags-y += $(call as-option,-Wa$(comma)-isa=$(isa-y),)
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.
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
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.
652         Example::
654                 #arch/x86/Makefile
655                 cflags-y += $(call cc-option,-march=pentium-mmx,-march=i586)
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
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'.
667         Example::
669                 #arch/ppc/Makefile
670                 biarch := $(call cc-option-yn, -m32)
671                 aflags-$(biarch) += -a32
672                 cflags-$(biarch) += -m32
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
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.
686         Example::
688                 KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable)
690         In the above example, -Wno-unused-but-set-variable will be added to
691         KBUILD_CFLAGS only if gcc really accepts it.
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.
698         Example::
700                 #fs/reiserfs/Makefile
701                 ccflags-y := $(call cc-ifversion, -lt, 0402, -O1)
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.
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.
724         Example::
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
733 3.14 $(LD) support functions
734 ----------------------------
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).
742         Example::
744                 #Makefile
745                 LDFLAGS_vmlinux += $(call ld-option, -X)
747 3.15 Script invocation
748 ----------------------
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.
757         Kbuild provides variables $(CONFIG_SHELL), $(AWK), $(PERL),
758         $(PYTHON) and $(PYTHON3) to refer to interpreters for the respective
759         scripts.
761         Example::
763                 #Makefile
764                 cmd_depmod = $(CONFIG_SHELL) $(srctree)/scripts/depmod.sh $(DEPMOD) \
765                              $(KERNELRELEASE)
767 4 Host Program support
768 ======================
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.
774 The first step is to tell kbuild that a host program exists. This is
775 done utilising the variable "hostprogs".
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.
782 4.1 Simple Host Program
783 -----------------------
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.
790         Example::
792                 hostprogs := bin2hex
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.
798 4.2 Composite Host Programs
799 ---------------------------
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.
807         Example::
809                 #scripts/lxdialog/Makefile
810                 hostprogs     := lxdialog
811                 lxdialog-objs := checklist.o lxdialog.o
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.
817         Finally, the two .o files are linked to the executable, lxdialog.
818         Note: The syntax <executable>-y is not permitted for host-programs.
820 4.3 Using C++ for host programs
821 -------------------------------
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.
827         Example::
829                 #scripts/kconfig/Makefile
830                 hostprogs     := qconf
831                 qconf-cxxobjs := qconf.o
833         In the example above the executable is composed of the C++ file
834         qconf.cc - identified by $(qconf-cxxobjs).
836         If qconf is composed of a mixture of .c and .cc files, then an
837         additional line can be used to identify this.
839         Example::
841                 #scripts/kconfig/Makefile
842                 hostprogs     := qconf
843                 qconf-cxxobjs := qconf.o
844                 qconf-objs    := check.o
846 4.4 Controlling compiler options for host programs
847 --------------------------------------------------
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.
855         Example::
857                 #scripts/lxdialog/Makefile
858                 HOST_EXTRACFLAGS += -I/usr/include/ncurses
860         To set specific flags for a single file the following construction
861         is used:
863         Example::
865                 #arch/ppc64/boot/Makefile
866                 HOSTCFLAGS_piggyback.o := -DKERNELBASE=$(KERNELBASE)
868         It is also possible to specify additional options to the linker.
870         Example::
872                 #scripts/kconfig/Makefile
873                 HOSTLDLIBS_qconf := -L$(QTDIR)/lib
875         When linking qconf, it will be passed the extra option
876         "-L$(QTDIR)/lib".
878 4.5 When host programs are actually built
879 -----------------------------------------
881         Kbuild will only build host-programs when they are referenced
882         as a prerequisite.
883         This is possible in two ways:
885         (1) List the prerequisite explicitly in a custom rule.
887         Example::
889                 #drivers/pci/Makefile
890                 hostprogs := gen-devlist
891                 $(obj)/devlist.h: $(src)/pci.ids $(obj)/gen-devlist
892                         ( cd $(obj); ./gen-devlist ) < $<
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).
898         (2) Use always-y
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.
904         Example::
906                 #scripts/lxdialog/Makefile
907                 hostprogs     := lxdialog
908                 always-y      := $(hostprogs)
910         Kbuild provides the following shorthand for this:
912                 hostprogs-always-y := lxdialog
914         This will tell kbuild to build lxdialog even if not referenced in
915         any rule.
917 5 Userspace Program support
918 ===========================
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).
924 The syntax is quite similar. The difference is to use "userprogs" instead of
925 "hostprogs".
927 5.1 Simple Userspace Program
928 ----------------------------
930         The following line tells kbuild that the program bpf-direct shall be
931         built for the target architecture.
933         Example::
935                 userprogs := bpf-direct
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.
941 5.2 Composite Userspace Programs
942 --------------------------------
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.
950         Example::
952                 #samples/seccomp/Makefile
953                 userprogs      := bpf-fancy
954                 bpf-fancy-objs := bpf-fancy.o bpf-helper.o
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.
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.
963 5.3 Controlling compiler options for userspace programs
964 -------------------------------------------------------
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.
972         Example::
974                 # samples/seccomp/Makefile
975                 userccflags += -I usr/include
977         To set specific flags for a single file the following construction
978         is used:
980         Example::
982                 bpf-helper-userccflags += -I user/include
984         It is also possible to specify additional options to the linker.
986         Example::
988                 # net/bpfilter/Makefile
989                 bpfilter_umh-userldflags += -static
991         When linking bpfilter_umh, it will be passed the extra option -static.
993 5.4 When userspace programs are actually built
994 ----------------------------------------------
996         Kbuild builds userspace programs only when told to do so.
997         There are two ways to do this.
999         (1) Add it as the prerequisite of another file
1001         Example::
1003                 #net/bpfilter/Makefile
1004                 userprogs := bpfilter_umh
1005                 $(obj)/bpfilter_umh_blob.o: $(obj)/bpfilter_umh
1007         $(obj)/bpfilter_umh is built before $(obj)/bpfilter_umh_blob.o
1009         (2) Use always-y
1011         Example::
1013                 userprogs := binderfs_example
1014                 always-y := $(userprogs)
1016         Kbuild provides the following shorthand for this:
1018                 userprogs-always-y := binderfs_example
1020         This will tell Kbuild to build binderfs_example when it visits this
1021         Makefile.
1023 6 Kbuild clean infrastructure
1024 =============================
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.
1034 Additional files or directories can be specified in kbuild makefiles by use of
1035 $(clean-files).
1037         Example::
1039                 #lib/Makefile
1040                 clean-files := crc32table.h
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).
1046 To exclude certain files or directories from make clean, use the
1047 $(no-clean-files) variable.
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.
1053         Example::
1055                 #arch/x86/boot/Makefile
1056                 subdir- := compressed
1058 The above assignment instructs kbuild to descend down in the
1059 directory compressed/ when "make clean" is executed.
1061 To support the clean infrastructure in the Makefiles that build the
1062 final bootimage there is an optional target named archclean:
1064         Example::
1066                 #arch/x86/Makefile
1067                 archclean:
1068                         $(Q)$(MAKE) $(clean)=arch/x86/boot
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.
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.
1078 Note 2: All directories listed in core-y, libs-y, drivers-y and net-y will
1079 be visited during "make clean".
1081 7 Architecture Makefiles
1082 ========================
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.
1092 When kbuild executes, the following steps are followed (roughly):
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
1111 7.1 Set variables to tweak the build to the architecture
1112 --------------------------------------------------------
1114     KBUILD_LDFLAGS
1115         Generic $(LD) options
1117         Flags used for all invocations of the linker.
1118         Often specifying the emulation is sufficient.
1120         Example::
1122                 #arch/s390/Makefile
1123                 KBUILD_LDFLAGS         := -m elf_s390
1125         Note: ldflags-y can be used to further customise
1126         the flags used. See section 3.7.
1128     LDFLAGS_vmlinux
1129         Options for $(LD) when linking vmlinux
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.
1135         Example::
1137                 #arch/x86/Makefile
1138                 LDFLAGS_vmlinux := -e stext
1140     OBJCOPYFLAGS
1141         objcopy flags
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.
1148         Example::
1150                 #arch/s390/Makefile
1151                 OBJCOPYFLAGS := -O binary
1153                 #arch/s390/boot/Makefile
1154                 $(obj)/image: vmlinux FORCE
1155                         $(call if_changed,objcopy)
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.
1160     KBUILD_AFLAGS
1161         Assembler flags
1163         Default value - see top level Makefile
1164         Append or modify as required per architecture.
1166         Example::
1168                 #arch/sparc64/Makefile
1169                 KBUILD_AFLAGS += -m64 -mcpu=ultrasparc
1171     KBUILD_CFLAGS
1172         $(CC) compiler flags
1174         Default value - see top level Makefile
1175         Append or modify as required per architecture.
1177         Often, the KBUILD_CFLAGS variable depends on the configuration.
1179         Example::
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)
1186         Many arch Makefiles dynamically run the target C compiler to
1187         probe supported options::
1189                 #arch/x86/Makefile
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                 ...
1200         The first example utilises the trick that a config option expands
1201         to 'y' when selected.
1203     KBUILD_AFLAGS_KERNEL
1204         Assembler options specific for built-in
1206         $(KBUILD_AFLAGS_KERNEL) contains extra C compiler flags used to compile
1207         resident kernel code.
1209     KBUILD_AFLAGS_MODULE
1210         Assembler options specific for modules
1212         $(KBUILD_AFLAGS_MODULE) is used to add arch-specific options that
1213         are used for assembler.
1215         From commandline AFLAGS_MODULE shall be used (see kbuild.rst).
1217     KBUILD_CFLAGS_KERNEL
1218         $(CC) options specific for built-in
1220         $(KBUILD_CFLAGS_KERNEL) contains extra C compiler flags used to compile
1221         resident kernel code.
1223     KBUILD_CFLAGS_MODULE
1224         Options for $(CC) when building modules
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).
1230     KBUILD_LDFLAGS_MODULE
1231         Options for $(LD) when linking modules
1233         $(KBUILD_LDFLAGS_MODULE) is used to add arch-specific options
1234         used when linking modules. This is often a linker script.
1236         From commandline LDFLAGS_MODULE shall be used (see kbuild.rst).
1238     KBUILD_LDS
1240         The linker script with full path. Assigned by the top-level Makefile.
1242     KBUILD_LDS_MODULE
1244         The module linker script with full path. Assigned by the top-level
1245         Makefile and additionally by the arch Makefile.
1247     KBUILD_VMLINUX_OBJS
1249         All object files for vmlinux. They are linked to vmlinux in the same
1250         order as listed in KBUILD_VMLINUX_OBJS.
1252     KBUILD_VMLINUX_LIBS
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.
1258 7.2 Add prerequisites to archheaders
1259 ------------------------------------
1261         The archheaders: rule is used to generate header files that
1262         may be installed into user space by "make header_install".
1264         It is run before "make archprepare" when run on the
1265         architecture itself.
1268 7.3 Add prerequisites to archprepare
1269 ------------------------------------
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.
1275         Example::
1277                 #arch/arm/Makefile
1278                 archprepare: maketools
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.
1286 7.4 List directories to visit when descending
1287 ---------------------------------------------
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.
1295         head-y, core-y, libs-y, drivers-y
1296             $(head-y) lists objects to be linked first in vmlinux.
1298             $(libs-y) lists directories where a lib.a archive can be located.
1300             The rest list directories where a built-in.a object file can be
1301             located.
1303             Then the rest follows in this order:
1305                 $(core-y), $(libs-y), $(drivers-y)
1307             The top level Makefile defines values for all generic directories,
1308             and arch/$(SRCARCH)/Makefile only adds architecture-specific
1309             directories.
1311             Example::
1313                 # arch/sparc/Makefile
1314                 core-y                 += arch/sparc/
1316                 libs-y                 += arch/sparc/prom/
1317                 libs-y                 += arch/sparc/lib/
1319                 drivers-$(CONFIG_PM) += arch/sparc/power/
1320                 drivers-$(CONFIG_OPROFILE)      += arch/sparc/oprofile/
1322 7.5 Architecture-specific boot images
1323 -------------------------------------
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.
1330         It is common to locate any additional processing in a boot/
1331         directory below arch/$(SRCARCH)/.
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/.
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.
1341         Example::
1343                 #arch/x86/Makefile
1344                 boot := arch/x86/boot
1345                 bzImage: vmlinux
1346                         $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
1348         "$(Q)$(MAKE) $(build)=<dir>" is the recommended way to invoke
1349         make in a subdirectory.
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.
1355         Example::
1357                 #arch/x86/Makefile
1358                 define archhelp
1359                   echo  '* bzImage      - Compressed kernel image (arch/x86/boot/bzImage)'
1360                 endif
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.
1370         Example::
1372                 #arch/x86/Makefile
1373                 all: bzImage
1375         When "make" is executed without arguments, bzImage will be built.
1377 7.7 Commands useful for building a boot image
1378 ---------------------------------------------
1380     Kbuild provides a few macros that are useful when building a
1381     boot image.
1383     ld
1384         Link target. Often, LDFLAGS_$@ is used to set specific options to ld.
1386         Example::
1388                 #arch/x86/boot/Makefile
1389                 LDFLAGS_bootsect := -Ttext 0x0 -s --oformat binary
1390                 LDFLAGS_setup    := -Ttext 0x0 -s --oformat binary -e begtext
1392                 targets += setup setup.o bootsect bootsect.o
1393                 $(obj)/setup $(obj)/bootsect: %: %.o FORCE
1394                         $(call if_changed,ld)
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:
1402                 1) check for commandline changes
1403                 2) delete target during make clean
1405         The ": %: %.o" part of the prerequisite is a shorthand that
1406         frees us from listing the setup.o and bootsect.o files.
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.
1413     objcopy
1414         Copy binary. Uses OBJCOPYFLAGS usually specified in
1415         arch/$(SRCARCH)/Makefile.
1416         OBJCOPYFLAGS_$@ may be used to set additional options.
1418     gzip
1419         Compress target. Use maximum compression to compress target.
1421         Example::
1423                 #arch/x86/boot/compressed/Makefile
1424                 $(obj)/vmlinux.bin.gz: $(vmlinux.bin.all-y) FORCE
1425                         $(call if_changed,gzip)
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().
1433         To use this command, simply add `*.dtb` into obj-y or targets, or make
1434         some other target depend on `%.dtb`
1436         A central rule exists to create `$(obj)/%.dtb` from `$(src)/%.dts`;
1437         architecture Makefiles do no need to explicitly write out that rule.
1439         Example::
1441                 targets += $(dtb-y)
1442                 DTC_FLAGS ?= -p 1024
1444 7.9 Preprocessing linker scripts
1445 --------------------------------
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`.
1453         Example::
1455                 #arch/x86/kernel/Makefile
1456                 extra-y := vmlinux.lds
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.
1463         When building the `*.lds` target, kbuild uses the variables::
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.
1471         The kbuild infrastructure for `*lds` files is used in several
1472         architecture-specific files.
1474 7.10 Generic header files
1475 -------------------------
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.
1483 7.11 Post-link pass
1484 -------------------
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.
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.
1496         For example, powerpc uses this to check relocation sanity of
1497         the linked vmlinux file.
1499 8 Kbuild syntax for exported headers
1500 ------------------------------------
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:
1507 - drop kernel-specific annotations
1508 - drop include of compiler.h
1509 - drop all sections that are kernel internal (guarded by `ifdef __KERNEL__`)
1511 All headers under include/uapi/, include/generated/uapi/,
1512 arch/<arch>/include/uapi/ and arch/<arch>/include/generated/uapi/
1513 are exported.
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.
1519 8.1 no-export-headers
1520 ---------------------
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.
1526 8.2 generic-y
1527 -------------
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:
1533                 Example::
1535                         #arch/x86/include/asm/Kbuild
1536                         generic-y += termios.h
1537                         generic-y += rtc.h
1539         During the prepare phase of the build a wrapper include
1540         file is generated in the directory::
1542                 arch/$(SRCARCH)/include/generated/asm
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::
1548                 usr/include/asm
1550         The generated wrapper will in both cases look like the following:
1552                 Example: termios.h::
1554                         #include <asm-generic/termios.h>
1556 8.3 generated-y
1557 ---------------
1559         If an architecture generates other header files alongside generic-y
1560         wrappers, generated-y specifies them.
1562         This prevents them being treated as stale asm-generic wrappers and
1563         removed.
1565                 Example::
1567                         #arch/x86/include/asm/Kbuild
1568                         generated-y += syscalls_32.h
1570 8.4 mandatory-y
1571 ---------------
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.
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.
1580 9 Kbuild Variables
1581 ==================
1583 The top Makefile exports the following variables:
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.
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.
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.
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.
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.
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::
1612             make ARCH=m68k ...
1614     SRCARCH
1615         This variable specifies the directory in arch/ to build.
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.
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.
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.
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.
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.
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.
1648 10 Makefile language
1649 ====================
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.
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.
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.
1665 There are some cases where "=" is appropriate.  Usually, though, ":="
1666 is the right choice.
1668 11 Credits
1669 ==========
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>
1676 12 TODO
1677 =======
1679 - Describe how kbuild supports shipped files with _shipped.
1680 - Generating offset header files.
1681 - Add more variables to chapters 7 or 9?