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