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