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