blob: 093f2d79ab95d9853b8d088f8d47f5acc650ed56 [file] [log] [blame]
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03001======================
Linus Torvalds1da177e2005-04-16 15:20:36 -07002Linux Kernel Makefiles
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03003======================
Linus Torvalds1da177e2005-04-16 15:20:36 -07004
5This document describes the Linux kernel Makefiles.
6
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03007.. Table of Contents
Linus Torvalds1da177e2005-04-16 15:20:36 -07008
9 === 1 Overview
10 === 2 Who does what
11 === 3 The kbuild files
12 --- 3.1 Goal definitions
13 --- 3.2 Built-in object goals - obj-y
14 --- 3.3 Loadable module goals - obj-m
15 --- 3.4 Objects which export symbols
16 --- 3.5 Library file goals - lib-y
17 --- 3.6 Descending down in directories
18 --- 3.7 Compilation flags
19 --- 3.8 Command line dependency
20 --- 3.9 Dependency tracking
21 --- 3.10 Special Rules
Sam Ravnborg20a468b2006-01-22 13:34:15 +010022 --- 3.11 $(CC) support functions
Sam Ravnborg691ef3e2009-09-19 10:31:45 +020023 --- 3.12 $(LD) support functions
Linus Torvalds1da177e2005-04-16 15:20:36 -070024
25 === 4 Host Program support
26 --- 4.1 Simple Host Program
27 --- 4.2 Composite Host Programs
Masahiro Yamada62e22102014-07-16 16:12:21 +090028 --- 4.3 Using C++ for host programs
29 --- 4.4 Controlling compiler options for host programs
30 --- 4.5 When host programs are actually built
31 --- 4.6 Using hostprogs-$(CONFIG_FOO)
Linus Torvalds1da177e2005-04-16 15:20:36 -070032
33 === 5 Kbuild clean infrastructure
34
35 === 6 Architecture Makefiles
36 --- 6.1 Set variables to tweak the build to the architecture
H. Peter Anvin052ad272011-11-17 13:17:35 -080037 --- 6.2 Add prerequisites to archheaders:
38 --- 6.3 Add prerequisites to archprepare:
39 --- 6.4 List directories to visit when descending
40 --- 6.5 Architecture-specific boot images
41 --- 6.6 Building non-kbuild targets
42 --- 6.7 Commands useful for building a boot image
43 --- 6.8 Custom kbuild commands
44 --- 6.9 Preprocessing linker scripts
45 --- 6.10 Generic header files
Nicholas Pigginfbe6e372016-08-24 22:29:21 +100046 --- 6.11 Post-link pass
Linus Torvalds1da177e2005-04-16 15:20:36 -070047
Sam Ravnborgc7bb3492009-04-10 08:52:43 +020048 === 7 Kbuild syntax for exported headers
Nicolas Dichtelfcc84872017-03-27 14:20:15 +020049 --- 7.1 no-export-headers
Masahiro Yamadaae3f4152017-06-09 17:29:52 +090050 --- 7.2 generic-y
51 --- 7.3 generated-y
52 --- 7.4 mandatory-y
Sam Ravnborgc7bb3492009-04-10 08:52:43 +020053
54 === 8 Kbuild Variables
55 === 9 Makefile language
56 === 10 Credits
57 === 11 TODO
Linus Torvalds1da177e2005-04-16 15:20:36 -070058
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300591 Overview
60==========
Linus Torvalds1da177e2005-04-16 15:20:36 -070061
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -030062The Makefiles have five parts::
Linus Torvalds1da177e2005-04-16 15:20:36 -070063
64 Makefile the top Makefile.
65 .config the kernel configuration file.
66 arch/$(ARCH)/Makefile the arch Makefile.
67 scripts/Makefile.* common rules etc. for all kbuild Makefiles.
68 kbuild Makefiles there are about 500 of these.
69
70The top Makefile reads the .config file, which comes from the kernel
71configuration process.
72
73The top Makefile is responsible for building two major products: vmlinux
74(the resident kernel image) and modules (any module files).
75It builds these goals by recursively descending into the subdirectories of
76the kernel source tree.
77The list of subdirectories which are visited depends upon the kernel
78configuration. The top Makefile textually includes an arch Makefile
79with the name arch/$(ARCH)/Makefile. The arch Makefile supplies
80architecture-specific information to the top Makefile.
81
82Each subdirectory has a kbuild Makefile which carries out the commands
83passed down from above. The kbuild Makefile uses information from the
Bryce Harrington39e6e9c2006-09-20 12:43:37 -070084.config file to construct various file lists used by kbuild to build
Linus Torvalds1da177e2005-04-16 15:20:36 -070085any built-in or modular targets.
86
87scripts/Makefile.* contains all the definitions/rules etc. that
88are used to build the kernel based on the kbuild makefiles.
89
90
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300912 Who does what
92===============
Linus Torvalds1da177e2005-04-16 15:20:36 -070093
94People have four different relationships with the kernel Makefiles.
95
96*Users* are people who build kernels. These people type commands such as
97"make menuconfig" or "make". They usually do not read or edit
98any kernel Makefiles (or any other source files).
99
100*Normal developers* are people who work on features such as device
101drivers, file systems, and network protocols. These people need to
Jan Engelhardta07f6032006-07-27 22:14:29 +0200102maintain the kbuild Makefiles for the subsystem they are
Linus Torvalds1da177e2005-04-16 15:20:36 -0700103working on. In order to do this effectively, they need some overall
104knowledge about the kernel Makefiles, plus detailed knowledge about the
105public interface for kbuild.
106
107*Arch developers* are people who work on an entire architecture, such
108as sparc or ia64. Arch developers need to know about the arch Makefile
109as well as kbuild Makefiles.
110
111*Kbuild developers* are people who work on the kernel build system itself.
112These people need to know about all aspects of the kernel Makefiles.
113
114This document is aimed towards normal developers and arch developers.
115
116
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03001173 The kbuild files
118==================
Linus Torvalds1da177e2005-04-16 15:20:36 -0700119
120Most Makefiles within the kernel are kbuild Makefiles that use the
Jan Engelhardta07f6032006-07-27 22:14:29 +0200121kbuild infrastructure. This chapter introduces the syntax used in the
Linus Torvalds1da177e2005-04-16 15:20:36 -0700122kbuild makefiles.
Sam Ravnborg172c3ae2006-03-10 00:23:32 +0100123The preferred name for the kbuild files are 'Makefile' but 'Kbuild' can
Jan Engelhardta07f6032006-07-27 22:14:29 +0200124be used and if both a 'Makefile' and a 'Kbuild' file exists, then the 'Kbuild'
Sam Ravnborg172c3ae2006-03-10 00:23:32 +0100125file will be used.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700126
127Section 3.1 "Goal definitions" is a quick intro, further chapters provide
128more details, with real examples.
129
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03001303.1 Goal definitions
131--------------------
Linus Torvalds1da177e2005-04-16 15:20:36 -0700132
133 Goal definitions are the main part (heart) of the kbuild Makefile.
134 These lines define the files to be built, any special compilation
135 options, and any subdirectories to be entered recursively.
136
137 The most simple kbuild makefile contains one line:
138
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300139 Example::
140
Linus Torvalds1da177e2005-04-16 15:20:36 -0700141 obj-y += foo.o
142
Randy Dunlap5c811e52007-02-17 20:03:14 +0100143 This tells kbuild that there is one object in that directory, named
Linus Torvalds1da177e2005-04-16 15:20:36 -0700144 foo.o. foo.o will be built from foo.c or foo.S.
145
146 If foo.o shall be built as a module, the variable obj-m is used.
147 Therefore the following pattern is often used:
148
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300149 Example::
150
Linus Torvalds1da177e2005-04-16 15:20:36 -0700151 obj-$(CONFIG_FOO) += foo.o
152
153 $(CONFIG_FOO) evaluates to either y (for built-in) or m (for module).
154 If CONFIG_FOO is neither y nor m, then the file will not be compiled
155 nor linked.
156
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03001573.2 Built-in object goals - obj-y
158---------------------------------
Linus Torvalds1da177e2005-04-16 15:20:36 -0700159
160 The kbuild Makefile specifies object files for vmlinux
Jan Engelhardta07f6032006-07-27 22:14:29 +0200161 in the $(obj-y) lists. These lists depend on the kernel
Linus Torvalds1da177e2005-04-16 15:20:36 -0700162 configuration.
163
164 Kbuild compiles all the $(obj-y) files. It then calls
Nicholas Pigginf49821e2018-02-11 00:25:04 +1000165 "$(AR) rcSTP" to merge these files into one built-in.a file.
Masahiro Yamadadee94952019-01-17 09:10:03 +0900166 This is a thin archive without a symbol table. It will be later
167 linked into vmlinux by scripts/link-vmlinux.sh
Linus Torvalds1da177e2005-04-16 15:20:36 -0700168
169 The order of files in $(obj-y) is significant. Duplicates in
170 the lists are allowed: the first instance will be linked into
Nicholas Pigginf49821e2018-02-11 00:25:04 +1000171 built-in.a and succeeding instances will be ignored.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700172
173 Link order is significant, because certain functions
174 (module_init() / __initcall) will be called during boot in the
175 order they appear. So keep in mind that changing the link
Jan Engelhardta07f6032006-07-27 22:14:29 +0200176 order may e.g. change the order in which your SCSI
177 controllers are detected, and thus your disks are renumbered.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700178
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300179 Example::
180
Linus Torvalds1da177e2005-04-16 15:20:36 -0700181 #drivers/isdn/i4l/Makefile
182 # Makefile for the kernel ISDN subsystem and device drivers.
183 # Each configuration option enables a list of files.
Matt Mooney2f5a2f82010-08-05 11:23:11 -0700184 obj-$(CONFIG_ISDN_I4L) += isdn.o
Linus Torvalds1da177e2005-04-16 15:20:36 -0700185 obj-$(CONFIG_ISDN_PPP_BSDCOMP) += isdn_bsdcomp.o
186
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03001873.3 Loadable module goals - obj-m
188---------------------------------
Linus Torvalds1da177e2005-04-16 15:20:36 -0700189
Geert Uytterhoeven39fed702014-08-08 17:23:10 +0200190 $(obj-m) specifies object files which are built as loadable
Linus Torvalds1da177e2005-04-16 15:20:36 -0700191 kernel modules.
192
193 A module may be built from one source file or several source
194 files. In the case of one source file, the kbuild makefile
195 simply adds the file to $(obj-m).
196
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300197 Example::
198
Linus Torvalds1da177e2005-04-16 15:20:36 -0700199 #drivers/isdn/i4l/Makefile
200 obj-$(CONFIG_ISDN_PPP_BSDCOMP) += isdn_bsdcomp.o
201
202 Note: In this example $(CONFIG_ISDN_PPP_BSDCOMP) evaluates to 'm'
203
204 If a kernel module is built from several source files, you specify
Matt Mooney4f827282010-08-05 11:23:11 -0700205 that you want to build a module in the same way as above; however,
206 kbuild needs to know which object files you want to build your
207 module from, so you have to tell it by setting a $(<module_name>-y)
208 variable.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700209
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300210 Example::
211
Linus Torvalds1da177e2005-04-16 15:20:36 -0700212 #drivers/isdn/i4l/Makefile
Matt Mooney4f827282010-08-05 11:23:11 -0700213 obj-$(CONFIG_ISDN_I4L) += isdn.o
214 isdn-y := isdn_net_lib.o isdn_v110.o isdn_common.o
Linus Torvalds1da177e2005-04-16 15:20:36 -0700215
216 In this example, the module name will be isdn.o. Kbuild will
Matt Mooney4f827282010-08-05 11:23:11 -0700217 compile the objects listed in $(isdn-y) and then run
Linus Torvalds1da177e2005-04-16 15:20:36 -0700218 "$(LD) -r" on the list of these files to generate isdn.o.
219
Matt Mooney4f827282010-08-05 11:23:11 -0700220 Due to kbuild recognizing $(<module_name>-y) for composite objects,
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300221 you can use the value of a `CONFIG_` symbol to optionally include an
Matt Mooney4f827282010-08-05 11:23:11 -0700222 object file as part of a composite object.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700223
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300224 Example::
225
Linus Torvalds1da177e2005-04-16 15:20:36 -0700226 #fs/ext2/Makefile
Matt Mooney4f827282010-08-05 11:23:11 -0700227 obj-$(CONFIG_EXT2_FS) += ext2.o
228 ext2-y := balloc.o dir.o file.o ialloc.o inode.o ioctl.o \
229 namei.o super.o symlink.o
230 ext2-$(CONFIG_EXT2_FS_XATTR) += xattr.o xattr_user.o \
231 xattr_trusted.o
Bryce Harrington39e6e9c2006-09-20 12:43:37 -0700232
Matt Mooney4f827282010-08-05 11:23:11 -0700233 In this example, xattr.o, xattr_user.o and xattr_trusted.o are only
234 part of the composite object ext2.o if $(CONFIG_EXT2_FS_XATTR)
235 evaluates to 'y'.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700236
237 Note: Of course, when you are building objects into the kernel,
238 the syntax above will also work. So, if you have CONFIG_EXT2_FS=y,
239 kbuild will build an ext2.o file for you out of the individual
Nicholas Pigginf49821e2018-02-11 00:25:04 +1000240 parts and then link this into built-in.a, as you would expect.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700241
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03002423.4 Objects which export symbols
243--------------------------------
Linus Torvalds1da177e2005-04-16 15:20:36 -0700244
245 No special notation is required in the makefiles for
246 modules exporting symbols.
247
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03002483.5 Library file goals - lib-y
249------------------------------
Linus Torvalds1da177e2005-04-16 15:20:36 -0700250
Jan Engelhardta07f6032006-07-27 22:14:29 +0200251 Objects listed with obj-* are used for modules, or
Nicholas Pigginf49821e2018-02-11 00:25:04 +1000252 combined in a built-in.a for that specific directory.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700253 There is also the possibility to list objects that will
254 be included in a library, lib.a.
255 All objects listed with lib-y are combined in a single
256 library for that directory.
Matt LaPlante5d3f0832006-11-30 05:21:10 +0100257 Objects that are listed in obj-y and additionally listed in
258 lib-y will not be included in the library, since they will
259 be accessible anyway.
Jan Engelhardta07f6032006-07-27 22:14:29 +0200260 For consistency, objects listed in lib-m will be included in lib.a.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700261
262 Note that the same kbuild makefile may list files to be built-in
263 and to be part of a library. Therefore the same directory
Nicholas Pigginf49821e2018-02-11 00:25:04 +1000264 may contain both a built-in.a and a lib.a file.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700265
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300266 Example::
267
Matt Mooney2f5a2f82010-08-05 11:23:11 -0700268 #arch/x86/lib/Makefile
269 lib-y := delay.o
Linus Torvalds1da177e2005-04-16 15:20:36 -0700270
Matt Mooney2f5a2f82010-08-05 11:23:11 -0700271 This will create a library lib.a based on delay.o. For kbuild to
272 actually recognize that there is a lib.a being built, the directory
273 shall be listed in libs-y.
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300274
H. Peter Anvin052ad272011-11-17 13:17:35 -0800275 See also "6.4 List directories to visit when descending".
Bryce Harrington39e6e9c2006-09-20 12:43:37 -0700276
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300277 Use of lib-y is normally restricted to `lib/` and `arch/*/lib`.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700278
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03002793.6 Descending down in directories
280----------------------------------
Linus Torvalds1da177e2005-04-16 15:20:36 -0700281
282 A Makefile is only responsible for building objects in its own
283 directory. Files in subdirectories should be taken care of by
284 Makefiles in these subdirs. The build system will automatically
285 invoke make recursively in subdirectories, provided you let it know of
286 them.
287
Jan Engelhardta07f6032006-07-27 22:14:29 +0200288 To do so, obj-y and obj-m are used.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700289 ext2 lives in a separate directory, and the Makefile present in fs/
290 tells kbuild to descend down using the following assignment.
291
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300292 Example::
293
Linus Torvalds1da177e2005-04-16 15:20:36 -0700294 #fs/Makefile
295 obj-$(CONFIG_EXT2_FS) += ext2/
296
297 If CONFIG_EXT2_FS is set to either 'y' (built-in) or 'm' (modular)
298 the corresponding obj- variable will be set, and kbuild will descend
299 down in the ext2 directory.
300 Kbuild only uses this information to decide that it needs to visit
301 the directory, it is the Makefile in the subdirectory that
Geert Uytterhoeven39fed702014-08-08 17:23:10 +0200302 specifies what is modular and what is built-in.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700303
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300304 It is good practice to use a `CONFIG_` variable when assigning directory
Linus Torvalds1da177e2005-04-16 15:20:36 -0700305 names. This allows kbuild to totally skip the directory if the
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300306 corresponding `CONFIG_` option is neither 'y' nor 'm'.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700307
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03003083.7 Compilation flags
309---------------------
Linus Torvalds1da177e2005-04-16 15:20:36 -0700310
Sam Ravnborgf77bf012007-10-15 22:25:06 +0200311 ccflags-y, asflags-y and ldflags-y
Nicolas Kaiserc95940f2010-08-05 11:23:11 -0700312 These three flags apply only to the kbuild makefile in which they
313 are assigned. They are used for all the normal cc, as and ld
314 invocations happening during a recursive build.
Sam Ravnborgf77bf012007-10-15 22:25:06 +0200315 Note: Flags with the same behaviour were previously named:
Nicolas Kaiserc95940f2010-08-05 11:23:11 -0700316 EXTRA_CFLAGS, EXTRA_AFLAGS and EXTRA_LDFLAGS.
317 They are still supported but their usage is deprecated.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700318
Matt Mooneyeb07e1b2010-08-05 11:23:11 -0700319 ccflags-y specifies options for compiling with $(CC).
Linus Torvalds1da177e2005-04-16 15:20:36 -0700320
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300321 Example::
322
Sedat Dilek3d91a352017-07-24 17:27:05 +0200323 # drivers/acpi/acpica/Makefile
324 ccflags-y := -Os -D_LINUX -DBUILDING_ACPICA
325 ccflags-$(CONFIG_ACPI_DEBUG) += -DACPI_DEBUG_OUTPUT
Linus Torvalds1da177e2005-04-16 15:20:36 -0700326
327 This variable is necessary because the top Makefile owns the
Sam Ravnborga0f97e02007-10-14 22:21:35 +0200328 variable $(KBUILD_CFLAGS) and uses it for compilation flags for the
Linus Torvalds1da177e2005-04-16 15:20:36 -0700329 entire tree.
330
Matt Mooneyeb07e1b2010-08-05 11:23:11 -0700331 asflags-y specifies options for assembling with $(AS).
Linus Torvalds1da177e2005-04-16 15:20:36 -0700332
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300333 Example::
334
Matt Mooneyeb07e1b2010-08-05 11:23:11 -0700335 #arch/sparc/kernel/Makefile
336 asflags-y := -ansi
Linus Torvalds1da177e2005-04-16 15:20:36 -0700337
Matt Mooneyeb07e1b2010-08-05 11:23:11 -0700338 ldflags-y specifies options for linking with $(LD).
Linus Torvalds1da177e2005-04-16 15:20:36 -0700339
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300340 Example::
341
Matt Mooneyeb07e1b2010-08-05 11:23:11 -0700342 #arch/cris/boot/compressed/Makefile
343 ldflags-y += -T $(srctree)/$(src)/decompress_$(arch-y).lds
Linus Torvalds1da177e2005-04-16 15:20:36 -0700344
Sam Ravnborg720097d2009-04-19 11:04:26 +0200345 subdir-ccflags-y, subdir-asflags-y
Matt Mooneyeb07e1b2010-08-05 11:23:11 -0700346 The two flags listed above are similar to ccflags-y and asflags-y.
Nicolas Kaiserc95940f2010-08-05 11:23:11 -0700347 The difference is that the subdir- variants have effect for the kbuild
348 file where they are present and all subdirectories.
349 Options specified using subdir-* are added to the commandline before
350 the options specified using the non-subdir variants.
Sam Ravnborg720097d2009-04-19 11:04:26 +0200351
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300352 Example::
353
Sam Ravnborg720097d2009-04-19 11:04:26 +0200354 subdir-ccflags-y := -Werror
355
Linus Torvalds1da177e2005-04-16 15:20:36 -0700356 CFLAGS_$@, AFLAGS_$@
Linus Torvalds1da177e2005-04-16 15:20:36 -0700357 CFLAGS_$@ and AFLAGS_$@ only apply to commands in current
358 kbuild makefile.
359
360 $(CFLAGS_$@) specifies per-file options for $(CC). The $@
361 part has a literal value which specifies the file that it is for.
362
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300363 Example::
364
Linus Torvalds1da177e2005-04-16 15:20:36 -0700365 # drivers/scsi/Makefile
366 CFLAGS_aha152x.o = -DAHA152X_STAT -DAUTOCONF
367 CFLAGS_gdth.o = # -DDEBUG_GDTH=2 -D__SERIAL__ -D__COM2__ \
368 -DGDTH_STATISTICS
Linus Torvalds1da177e2005-04-16 15:20:36 -0700369
Matt Mooneyeb07e1b2010-08-05 11:23:11 -0700370 These two lines specify compilation flags for aha152x.o and gdth.o.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700371
372 $(AFLAGS_$@) is a similar feature for source files in assembly
373 languages.
374
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300375 Example::
376
Linus Torvalds1da177e2005-04-16 15:20:36 -0700377 # arch/arm/kernel/Makefile
Matt Mooneyeb07e1b2010-08-05 11:23:11 -0700378 AFLAGS_head.o := -DTEXT_OFFSET=$(TEXT_OFFSET)
379 AFLAGS_crunch-bits.o := -Wa,-mcpu=ep9312
380 AFLAGS_iwmmxt.o := -Wa,-mcpu=iwmmxt
381
Linus Torvalds1da177e2005-04-16 15:20:36 -0700382
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03003833.9 Dependency tracking
384-----------------------
Linus Torvalds1da177e2005-04-16 15:20:36 -0700385
386 Kbuild tracks dependencies on the following:
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300387 1) All prerequisite files (both `*.c` and `*.h`)
388 2) `CONFIG_` options used in all prerequisite files
Linus Torvalds1da177e2005-04-16 15:20:36 -0700389 3) Command-line used to compile target
390
391 Thus, if you change an option to $(CC) all affected files will
392 be re-compiled.
393
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03003943.10 Special Rules
395------------------
Linus Torvalds1da177e2005-04-16 15:20:36 -0700396
397 Special rules are used when the kbuild infrastructure does
398 not provide the required support. A typical example is
399 header files generated during the build process.
Randy Dunlap5c811e52007-02-17 20:03:14 +0100400 Another example are the architecture-specific Makefiles which
Jan Engelhardta07f6032006-07-27 22:14:29 +0200401 need special rules to prepare boot images etc.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700402
403 Special rules are written as normal Make rules.
404 Kbuild is not executing in the directory where the Makefile is
405 located, so all special rules shall provide a relative
406 path to prerequisite files and target files.
407
408 Two variables are used when defining special rules:
409
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300410 $(src)
411 $(src) is a relative path which points to the directory
412 where the Makefile is located. Always use $(src) when
413 referring to files located in the src tree.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700414
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300415 $(obj)
416 $(obj) is a relative path which points to the directory
417 where the target is saved. Always use $(obj) when
418 referring to generated files.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700419
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300420 Example::
421
Linus Torvalds1da177e2005-04-16 15:20:36 -0700422 #drivers/scsi/Makefile
423 $(obj)/53c8xx_d.h: $(src)/53c7,8xx.scr $(src)/script_asm.pl
424 $(CPP) -DCHIP=810 - < $< | ... $(src)/script_asm.pl
425
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300426 This is a special rule, following the normal syntax
427 required by make.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700428
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300429 The target file depends on two prerequisite files. References
430 to the target file are prefixed with $(obj), references
431 to prerequisites are referenced with $(src) (because they are not
432 generated files).
Mike Frysinger5410ecc2008-11-06 03:31:34 -0500433
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300434 $(kecho)
435 echoing information to user in a rule is often a good practice
436 but when execution "make -s" one does not expect to see any output
437 except for warnings/errors.
438 To support this kbuild defines $(kecho) which will echo out the
439 text following $(kecho) to stdout except if "make -s" is used.
440
441 Example::
442
Mike Frysinger5410ecc2008-11-06 03:31:34 -0500443 #arch/blackfin/boot/Makefile
444 $(obj)/vmImage: $(obj)/vmlinux.gz
445 $(call if_changed,uimage)
446 @$(kecho) 'Kernel: $@ is ready'
447
448
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03004493.11 $(CC) support functions
450----------------------------
Sam Ravnborg20a468b2006-01-22 13:34:15 +0100451
Jan Engelhardta07f6032006-07-27 22:14:29 +0200452 The kernel may be built with several different versions of
Sam Ravnborg20a468b2006-01-22 13:34:15 +0100453 $(CC), each supporting a unique set of features and options.
Geert Uytterhoeven39fed702014-08-08 17:23:10 +0200454 kbuild provides basic support to check for valid options for $(CC).
Daniel Walkere95be9a2006-10-04 02:15:21 -0700455 $(CC) is usually the gcc compiler, but other alternatives are
Sam Ravnborg20a468b2006-01-22 13:34:15 +0100456 available.
457
458 as-option
Jan Engelhardta07f6032006-07-27 22:14:29 +0200459 as-option is used to check if $(CC) -- when used to compile
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300460 assembler (`*.S`) files -- supports the given option. An optional
Jan Engelhardta07f6032006-07-27 22:14:29 +0200461 second option may be specified if the first option is not supported.
Sam Ravnborg20a468b2006-01-22 13:34:15 +0100462
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300463 Example::
464
Sam Ravnborg20a468b2006-01-22 13:34:15 +0100465 #arch/sh/Makefile
466 cflags-y += $(call as-option,-Wa$(comma)-isa=$(isa-y),)
467
Jan Engelhardta07f6032006-07-27 22:14:29 +0200468 In the above example, cflags-y will be assigned the option
Sam Ravnborg20a468b2006-01-22 13:34:15 +0100469 -Wa$(comma)-isa=$(isa-y) if it is supported by $(CC).
470 The second argument is optional, and if supplied will be used
471 if first argument is not supported.
472
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300473 cc-ldoption
474 cc-ldoption is used to check if $(CC) when used to link object files
475 supports the given option. An optional second option may be
476 specified if first option are not supported.
477
478 Example::
479
480 #arch/x86/kernel/Makefile
481 vsyscall-flags += $(call cc-ldoption, -Wl$(comma)--hash-style=sysv)
482
483 In the above example, vsyscall-flags will be assigned the option
484 -Wl$(comma)--hash-style=sysv if it is supported by $(CC).
485 The second argument is optional, and if supplied will be used
486 if first argument is not supported.
487
Andi Kleene2414912006-09-26 10:52:30 +0200488 as-instr
489 as-instr checks if the assembler reports a specific instruction
490 and then outputs either option1 or option2
491 C escapes are supported in the test instruction
Sam Ravnborg222d3942007-10-15 21:59:31 +0200492 Note: as-instr-option uses KBUILD_AFLAGS for $(AS) options
Andi Kleene2414912006-09-26 10:52:30 +0200493
Sam Ravnborg20a468b2006-01-22 13:34:15 +0100494 cc-option
Geert Uytterhoeven39fed702014-08-08 17:23:10 +0200495 cc-option is used to check if $(CC) supports a given option, and if
496 not supported to use an optional second option.
Sam Ravnborg20a468b2006-01-22 13:34:15 +0100497
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300498 Example::
499
Wanlong Gao25eb6502011-06-13 17:53:53 +0800500 #arch/x86/Makefile
Sam Ravnborg20a468b2006-01-22 13:34:15 +0100501 cflags-y += $(call cc-option,-march=pentium-mmx,-march=i586)
502
Randy Dunlap5c811e52007-02-17 20:03:14 +0100503 In the above example, cflags-y will be assigned the option
Jan Engelhardta07f6032006-07-27 22:14:29 +0200504 -march=pentium-mmx if supported by $(CC), otherwise -march=i586.
505 The second argument to cc-option is optional, and if omitted,
Sam Ravnborg20a468b2006-01-22 13:34:15 +0100506 cflags-y will be assigned no value if first option is not supported.
Sam Ravnborga0f97e02007-10-14 22:21:35 +0200507 Note: cc-option uses KBUILD_CFLAGS for $(CC) options
Sam Ravnborg20a468b2006-01-22 13:34:15 +0100508
509 cc-option-yn
Bryce Harrington39e6e9c2006-09-20 12:43:37 -0700510 cc-option-yn is used to check if gcc supports a given option
Sam Ravnborg20a468b2006-01-22 13:34:15 +0100511 and return 'y' if supported, otherwise 'n'.
512
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300513 Example::
514
Sam Ravnborg20a468b2006-01-22 13:34:15 +0100515 #arch/ppc/Makefile
516 biarch := $(call cc-option-yn, -m32)
517 aflags-$(biarch) += -a32
518 cflags-$(biarch) += -m32
Bryce Harrington39e6e9c2006-09-20 12:43:37 -0700519
Jan Engelhardta07f6032006-07-27 22:14:29 +0200520 In the above example, $(biarch) is set to y if $(CC) supports the -m32
521 option. When $(biarch) equals 'y', the expanded variables $(aflags-y)
522 and $(cflags-y) will be assigned the values -a32 and -m32,
523 respectively.
Sam Ravnborga0f97e02007-10-14 22:21:35 +0200524 Note: cc-option-yn uses KBUILD_CFLAGS for $(CC) options
Sam Ravnborg20a468b2006-01-22 13:34:15 +0100525
Michal Marek8417da6f2011-05-02 12:51:15 +0200526 cc-disable-warning
527 cc-disable-warning checks if gcc supports a given warning and returns
528 the commandline switch to disable it. This special function is needed,
529 because gcc 4.4 and later accept any unknown -Wno-* option and only
530 warn about it if there is another warning in the source file.
531
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300532 Example::
533
Michal Marek8417da6f2011-05-02 12:51:15 +0200534 KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable)
535
536 In the above example, -Wno-unused-but-set-variable will be added to
537 KBUILD_CFLAGS only if gcc really accepts it.
538
Sam Ravnborg20a468b2006-01-22 13:34:15 +0100539 cc-ifversion
Masahiro Yamada6dcb4e52014-12-25 14:31:27 +0900540 cc-ifversion tests the version of $(CC) and equals the fourth parameter
541 if version expression is true, or the fifth (if given) if the version
542 expression is false.
Sam Ravnborg20a468b2006-01-22 13:34:15 +0100543
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300544 Example::
545
Sam Ravnborg20a468b2006-01-22 13:34:15 +0100546 #fs/reiserfs/Makefile
Sam Ravnborgf77bf012007-10-15 22:25:06 +0200547 ccflags-y := $(call cc-ifversion, -lt, 0402, -O1)
Sam Ravnborg20a468b2006-01-22 13:34:15 +0100548
Sam Ravnborgf77bf012007-10-15 22:25:06 +0200549 In this example, ccflags-y will be assigned the value -O1 if the
Sam Ravnborg20a468b2006-01-22 13:34:15 +0100550 $(CC) version is less than 4.2.
Bryce Harrington39e6e9c2006-09-20 12:43:37 -0700551 cc-ifversion takes all the shell operators:
Sam Ravnborg20a468b2006-01-22 13:34:15 +0100552 -eq, -ne, -lt, -le, -gt, and -ge
553 The third parameter may be a text as in this example, but it may also
554 be an expanded variable or a macro.
555
Sam Ravnborg910b4042007-10-19 21:46:01 +0200556 cc-cross-prefix
Geert Uytterhoeven631bcfb2007-10-21 19:55:00 +0200557 cc-cross-prefix is used to check if there exists a $(CC) in path with
Sam Ravnborg910b4042007-10-19 21:46:01 +0200558 one of the listed prefixes. The first prefix where there exist a
559 prefix$(CC) in the PATH is returned - and if no prefix$(CC) is found
560 then nothing is returned.
561 Additional prefixes are separated by a single space in the
562 call of cc-cross-prefix.
Geert Uytterhoeven631bcfb2007-10-21 19:55:00 +0200563 This functionality is useful for architecture Makefiles that try
564 to set CROSS_COMPILE to well-known values but may have several
Sam Ravnborg910b4042007-10-19 21:46:01 +0200565 values to select between.
Geert Uytterhoeven631bcfb2007-10-21 19:55:00 +0200566 It is recommended only to try to set CROSS_COMPILE if it is a cross
567 build (host arch is different from target arch). And if CROSS_COMPILE
Sam Ravnborg910b4042007-10-19 21:46:01 +0200568 is already set then leave it with the old value.
569
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300570 Example::
571
Sam Ravnborg910b4042007-10-19 21:46:01 +0200572 #arch/m68k/Makefile
573 ifneq ($(SUBARCH),$(ARCH))
574 ifeq ($(CROSS_COMPILE),)
575 CROSS_COMPILE := $(call cc-cross-prefix, m68k-linux-gnu-)
576 endif
577 endif
578
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03005793.12 $(LD) support functions
580----------------------------
Sam Ravnborg691ef3e2009-09-19 10:31:45 +0200581
582 ld-option
583 ld-option is used to check if $(LD) supports the supplied option.
584 ld-option takes two options as arguments.
585 The second argument is an optional option that can be used if the
586 first option is not supported by $(LD).
587
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300588 Example::
589
Sam Ravnborg691ef3e2009-09-19 10:31:45 +0200590 #Makefile
Antony Pavlov5b83df22013-04-03 18:42:33 +0400591 LDFLAGS_vmlinux += $(call ld-option, -X)
Sam Ravnborg691ef3e2009-09-19 10:31:45 +0200592
593
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03005944 Host Program support
595======================
Linus Torvalds1da177e2005-04-16 15:20:36 -0700596
597Kbuild supports building executables on the host for use during the
598compilation stage.
599Two steps are required in order to use a host executable.
600
601The first step is to tell kbuild that a host program exists. This is
602done utilising the variable hostprogs-y.
603
604The second step is to add an explicit dependency to the executable.
Bryce Harrington39e6e9c2006-09-20 12:43:37 -0700605This can be done in two ways. Either add the dependency in a rule,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700606or utilise the variable $(always).
607Both possibilities are described in the following.
608
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03006094.1 Simple Host Program
610-----------------------
Linus Torvalds1da177e2005-04-16 15:20:36 -0700611
612 In some cases there is a need to compile and run a program on the
613 computer where the build is running.
614 The following line tells kbuild that the program bin2hex shall be
615 built on the build host.
616
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300617 Example::
618
Linus Torvalds1da177e2005-04-16 15:20:36 -0700619 hostprogs-y := bin2hex
620
621 Kbuild assumes in the above example that bin2hex is made from a single
622 c-source file named bin2hex.c located in the same directory as
623 the Makefile.
Bryce Harrington39e6e9c2006-09-20 12:43:37 -0700624
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03006254.2 Composite Host Programs
626---------------------------
Linus Torvalds1da177e2005-04-16 15:20:36 -0700627
628 Host programs can be made up based on composite objects.
629 The syntax used to define composite objects for host programs is
630 similar to the syntax used for kernel objects.
Matt LaPlante5d3f0832006-11-30 05:21:10 +0100631 $(<executable>-objs) lists all objects used to link the final
Linus Torvalds1da177e2005-04-16 15:20:36 -0700632 executable.
633
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300634 Example::
635
Linus Torvalds1da177e2005-04-16 15:20:36 -0700636 #scripts/lxdialog/Makefile
Bryce Harrington39e6e9c2006-09-20 12:43:37 -0700637 hostprogs-y := lxdialog
Linus Torvalds1da177e2005-04-16 15:20:36 -0700638 lxdialog-objs := checklist.o lxdialog.o
639
640 Objects with extension .o are compiled from the corresponding .c
Jan Engelhardta07f6032006-07-27 22:14:29 +0200641 files. In the above example, checklist.c is compiled to checklist.o
Linus Torvalds1da177e2005-04-16 15:20:36 -0700642 and lxdialog.c is compiled to lxdialog.o.
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300643
Jan Engelhardta07f6032006-07-27 22:14:29 +0200644 Finally, the two .o files are linked to the executable, lxdialog.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700645 Note: The syntax <executable>-y is not permitted for host-programs.
646
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03006474.3 Using C++ for host programs
648-------------------------------
Linus Torvalds1da177e2005-04-16 15:20:36 -0700649
650 kbuild offers support for host programs written in C++. This was
651 introduced solely to support kconfig, and is not recommended
652 for general use.
653
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300654 Example::
655
Linus Torvalds1da177e2005-04-16 15:20:36 -0700656 #scripts/kconfig/Makefile
657 hostprogs-y := qconf
658 qconf-cxxobjs := qconf.o
659
660 In the example above the executable is composed of the C++ file
661 qconf.cc - identified by $(qconf-cxxobjs).
Bryce Harrington39e6e9c2006-09-20 12:43:37 -0700662
Geert Uytterhoeven39fed702014-08-08 17:23:10 +0200663 If qconf is composed of a mixture of .c and .cc files, then an
Linus Torvalds1da177e2005-04-16 15:20:36 -0700664 additional line can be used to identify this.
665
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300666 Example::
667
Linus Torvalds1da177e2005-04-16 15:20:36 -0700668 #scripts/kconfig/Makefile
669 hostprogs-y := qconf
670 qconf-cxxobjs := qconf.o
671 qconf-objs := check.o
Bryce Harrington39e6e9c2006-09-20 12:43:37 -0700672
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03006734.4 Controlling compiler options for host programs
674--------------------------------------------------
Linus Torvalds1da177e2005-04-16 15:20:36 -0700675
676 When compiling host programs, it is possible to set specific flags.
677 The programs will always be compiled utilising $(HOSTCC) passed
Laura Abbott96f14fe2018-07-09 17:45:58 -0700678 the options specified in $(KBUILD_HOSTCFLAGS).
Linus Torvalds1da177e2005-04-16 15:20:36 -0700679 To set flags that will take effect for all host programs created
Jan Engelhardta07f6032006-07-27 22:14:29 +0200680 in that Makefile, use the variable HOST_EXTRACFLAGS.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700681
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300682 Example::
683
Linus Torvalds1da177e2005-04-16 15:20:36 -0700684 #scripts/lxdialog/Makefile
685 HOST_EXTRACFLAGS += -I/usr/include/ncurses
Bryce Harrington39e6e9c2006-09-20 12:43:37 -0700686
Linus Torvalds1da177e2005-04-16 15:20:36 -0700687 To set specific flags for a single file the following construction
688 is used:
689
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300690 Example::
691
Linus Torvalds1da177e2005-04-16 15:20:36 -0700692 #arch/ppc64/boot/Makefile
693 HOSTCFLAGS_piggyback.o := -DKERNELBASE=$(KERNELBASE)
Bryce Harrington39e6e9c2006-09-20 12:43:37 -0700694
Linus Torvalds1da177e2005-04-16 15:20:36 -0700695 It is also possible to specify additional options to the linker.
Bryce Harrington39e6e9c2006-09-20 12:43:37 -0700696
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300697 Example::
698
Linus Torvalds1da177e2005-04-16 15:20:36 -0700699 #scripts/kconfig/Makefile
Michal Suchanekc86b1f92018-08-16 19:05:55 +0200700 HOSTLDLIBS_qconf := -L$(QTDIR)/lib
Linus Torvalds1da177e2005-04-16 15:20:36 -0700701
Jan Engelhardta07f6032006-07-27 22:14:29 +0200702 When linking qconf, it will be passed the extra option
703 "-L$(QTDIR)/lib".
Bryce Harrington39e6e9c2006-09-20 12:43:37 -0700704
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03007054.5 When host programs are actually built
706-----------------------------------------
Linus Torvalds1da177e2005-04-16 15:20:36 -0700707
708 Kbuild will only build host-programs when they are referenced
709 as a prerequisite.
710 This is possible in two ways:
711
712 (1) List the prerequisite explicitly in a special rule.
713
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300714 Example::
715
Linus Torvalds1da177e2005-04-16 15:20:36 -0700716 #drivers/pci/Makefile
717 hostprogs-y := gen-devlist
718 $(obj)/devlist.h: $(src)/pci.ids $(obj)/gen-devlist
719 ( cd $(obj); ./gen-devlist ) < $<
720
Bryce Harrington39e6e9c2006-09-20 12:43:37 -0700721 The target $(obj)/devlist.h will not be built before
Linus Torvalds1da177e2005-04-16 15:20:36 -0700722 $(obj)/gen-devlist is updated. Note that references to
723 the host programs in special rules must be prefixed with $(obj).
724
725 (2) Use $(always)
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300726
Linus Torvalds1da177e2005-04-16 15:20:36 -0700727 When there is no suitable special rule, and the host program
728 shall be built when a makefile is entered, the $(always)
729 variable shall be used.
730
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300731 Example::
732
Linus Torvalds1da177e2005-04-16 15:20:36 -0700733 #scripts/lxdialog/Makefile
734 hostprogs-y := lxdialog
735 always := $(hostprogs-y)
736
737 This will tell kbuild to build lxdialog even if not referenced in
738 any rule.
739
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03007404.6 Using hostprogs-$(CONFIG_FOO)
741---------------------------------
Linus Torvalds1da177e2005-04-16 15:20:36 -0700742
Bryce Harrington39e6e9c2006-09-20 12:43:37 -0700743 A typical pattern in a Kbuild file looks like this:
Linus Torvalds1da177e2005-04-16 15:20:36 -0700744
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300745 Example::
746
Linus Torvalds1da177e2005-04-16 15:20:36 -0700747 #scripts/Makefile
748 hostprogs-$(CONFIG_KALLSYMS) += kallsyms
749
750 Kbuild knows about both 'y' for built-in and 'm' for module.
Geert Uytterhoeven39fed702014-08-08 17:23:10 +0200751 So if a config symbol evaluates to 'm', kbuild will still build
Jan Engelhardta07f6032006-07-27 22:14:29 +0200752 the binary. In other words, Kbuild handles hostprogs-m exactly
753 like hostprogs-y. But only hostprogs-y is recommended to be used
754 when no CONFIG symbols are involved.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700755
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03007565 Kbuild clean infrastructure
757=============================
Linus Torvalds1da177e2005-04-16 15:20:36 -0700758
Jan Engelhardta07f6032006-07-27 22:14:29 +0200759"make clean" deletes most generated files in the obj tree where the kernel
Linus Torvalds1da177e2005-04-16 15:20:36 -0700760is compiled. This includes generated files such as host programs.
761Kbuild knows targets listed in $(hostprogs-y), $(hostprogs-m), $(always),
762$(extra-y) and $(targets). They are all deleted during "make clean".
763Files matching the patterns "*.[oas]", "*.ko", plus some additional files
764generated by kbuild are deleted all over the kernel src tree when
765"make clean" is executed.
766
767Additional files can be specified in kbuild makefiles by use of $(clean-files).
768
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300769 Example::
770
Michal Marek976591812015-01-08 14:45:50 +0100771 #lib/Makefile
772 clean-files := crc32table.h
Linus Torvalds1da177e2005-04-16 15:20:36 -0700773
Jeffrey Rogersbd55daf2015-06-06 17:18:45 -0400774When executing "make clean", the file "crc32table.h" will be deleted.
775Kbuild will assume files to be in the same relative directory as the
Michal Marek976591812015-01-08 14:45:50 +0100776Makefile, except if prefixed with $(objtree).
Linus Torvalds1da177e2005-04-16 15:20:36 -0700777
Bryce Harrington39e6e9c2006-09-20 12:43:37 -0700778To delete a directory hierarchy use:
779
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300780 Example::
781
Linus Torvalds1da177e2005-04-16 15:20:36 -0700782 #scripts/package/Makefile
783 clean-dirs := $(objtree)/debian/
784
Michal Marek976591812015-01-08 14:45:50 +0100785This will delete the directory debian in the toplevel directory, including all
786subdirectories.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700787
Michal Marekef8ff892010-03-09 16:00:20 +0100788To exclude certain files from make clean, use the $(no-clean-files) variable.
789This is only a special case used in the top level Kbuild file:
790
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300791 Example::
792
Michal Marekef8ff892010-03-09 16:00:20 +0100793 #Kbuild
794 no-clean-files := $(bounds-file) $(offsets-file)
795
Linus Torvalds1da177e2005-04-16 15:20:36 -0700796Usually kbuild descends down in subdirectories due to "obj-* := dir/",
797but in the architecture makefiles where the kbuild infrastructure
798is not sufficient this sometimes needs to be explicit.
799
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300800 Example::
801
Wanlong Gao25eb6502011-06-13 17:53:53 +0800802 #arch/x86/boot/Makefile
Linus Torvalds1da177e2005-04-16 15:20:36 -0700803 subdir- := compressed/
804
805The above assignment instructs kbuild to descend down in the
806directory compressed/ when "make clean" is executed.
807
Geert Uytterhoeven39fed702014-08-08 17:23:10 +0200808To support the clean infrastructure in the Makefiles that build the
Linus Torvalds1da177e2005-04-16 15:20:36 -0700809final bootimage there is an optional target named archclean:
810
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300811 Example::
812
Wanlong Gao25eb6502011-06-13 17:53:53 +0800813 #arch/x86/Makefile
Linus Torvalds1da177e2005-04-16 15:20:36 -0700814 archclean:
Wanlong Gao25eb6502011-06-13 17:53:53 +0800815 $(Q)$(MAKE) $(clean)=arch/x86/boot
Linus Torvalds1da177e2005-04-16 15:20:36 -0700816
Wanlong Gao25eb6502011-06-13 17:53:53 +0800817When "make clean" is executed, make will descend down in arch/x86/boot,
818and clean as usual. The Makefile located in arch/x86/boot/ may use
Linus Torvalds1da177e2005-04-16 15:20:36 -0700819the subdir- trick to descend further down.
820
821Note 1: arch/$(ARCH)/Makefile cannot use "subdir-", because that file is
822included in the top level makefile, and the kbuild infrastructure
823is not operational at that point.
824
825Note 2: All directories listed in core-y, libs-y, drivers-y and net-y will
826be visited during "make clean".
827
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03008286 Architecture Makefiles
829========================
Linus Torvalds1da177e2005-04-16 15:20:36 -0700830
831The top level Makefile sets up the environment and does the preparation,
832before starting to descend down in the individual directories.
Jan Engelhardta07f6032006-07-27 22:14:29 +0200833The top level makefile contains the generic part, whereas
834arch/$(ARCH)/Makefile contains what is required to set up kbuild
835for said architecture.
836To do so, arch/$(ARCH)/Makefile sets up a number of variables and defines
Linus Torvalds1da177e2005-04-16 15:20:36 -0700837a few targets.
838
Jan Engelhardta07f6032006-07-27 22:14:29 +0200839When kbuild executes, the following steps are followed (roughly):
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300840
Jan Engelhardta07f6032006-07-27 22:14:29 +02008411) Configuration of the kernel => produce .config
Linus Torvalds1da177e2005-04-16 15:20:36 -07008422) Store kernel version in include/linux/version.h
Geert Uytterhoevenb22ae402014-08-08 17:23:07 +02008433) Updating all other prerequisites to the target prepare:
Linus Torvalds1da177e2005-04-16 15:20:36 -0700844 - Additional prerequisites are specified in arch/$(ARCH)/Makefile
Geert Uytterhoevenb22ae402014-08-08 17:23:07 +02008454) Recursively descend down in all directories listed in
Linus Torvalds1da177e2005-04-16 15:20:36 -0700846 init-* core* drivers-* net-* libs-* and build all targets.
Jan Engelhardta07f6032006-07-27 22:14:29 +0200847 - The values of the above variables are expanded in arch/$(ARCH)/Makefile.
Geert Uytterhoevenb22ae402014-08-08 17:23:07 +02008485) All object files are then linked and the resulting file vmlinux is
Jan Engelhardta07f6032006-07-27 22:14:29 +0200849 located at the root of the obj tree.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700850 The very first objects linked are listed in head-y, assigned by
851 arch/$(ARCH)/Makefile.
Geert Uytterhoevenb22ae402014-08-08 17:23:07 +02008526) Finally, the architecture-specific part does any required post processing
Linus Torvalds1da177e2005-04-16 15:20:36 -0700853 and builds the final bootimage.
854 - This includes building boot records
Randy Dunlap5c811e52007-02-17 20:03:14 +0100855 - Preparing initrd images and the like
Linus Torvalds1da177e2005-04-16 15:20:36 -0700856
857
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03008586.1 Set variables to tweak the build to the architecture
859--------------------------------------------------------
Linus Torvalds1da177e2005-04-16 15:20:36 -0700860
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300861 LDFLAGS
862 Generic $(LD) options
Linus Torvalds1da177e2005-04-16 15:20:36 -0700863
864 Flags used for all invocations of the linker.
865 Often specifying the emulation is sufficient.
866
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300867 Example::
868
Linus Torvalds1da177e2005-04-16 15:20:36 -0700869 #arch/s390/Makefile
870 LDFLAGS := -m elf_s390
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300871
Sam Ravnborgf77bf012007-10-15 22:25:06 +0200872 Note: ldflags-y can be used to further customise
Sam Ravnborga9af3302007-09-30 20:08:25 +0200873 the flags used. See chapter 3.7.
Bryce Harrington39e6e9c2006-09-20 12:43:37 -0700874
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300875 LDFLAGS_vmlinux
876 Options for $(LD) when linking vmlinux
Linus Torvalds1da177e2005-04-16 15:20:36 -0700877
878 LDFLAGS_vmlinux is used to specify additional flags to pass to
Jan Engelhardta07f6032006-07-27 22:14:29 +0200879 the linker when linking the final vmlinux image.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700880 LDFLAGS_vmlinux uses the LDFLAGS_$@ support.
881
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300882 Example::
883
Wanlong Gao25eb6502011-06-13 17:53:53 +0800884 #arch/x86/Makefile
Linus Torvalds1da177e2005-04-16 15:20:36 -0700885 LDFLAGS_vmlinux := -e stext
886
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300887 OBJCOPYFLAGS
888 objcopy flags
Linus Torvalds1da177e2005-04-16 15:20:36 -0700889
890 When $(call if_changed,objcopy) is used to translate a .o file,
Jan Engelhardta07f6032006-07-27 22:14:29 +0200891 the flags specified in OBJCOPYFLAGS will be used.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700892 $(call if_changed,objcopy) is often used to generate raw binaries on
893 vmlinux.
894
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300895 Example::
896
Linus Torvalds1da177e2005-04-16 15:20:36 -0700897 #arch/s390/Makefile
898 OBJCOPYFLAGS := -O binary
899
900 #arch/s390/boot/Makefile
901 $(obj)/image: vmlinux FORCE
902 $(call if_changed,objcopy)
903
Jan Engelhardta07f6032006-07-27 22:14:29 +0200904 In this example, the binary $(obj)/image is a binary version of
Linus Torvalds1da177e2005-04-16 15:20:36 -0700905 vmlinux. The usage of $(call if_changed,xxx) will be described later.
906
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300907 KBUILD_AFLAGS
908 $(AS) assembler flags
Linus Torvalds1da177e2005-04-16 15:20:36 -0700909
910 Default value - see top level Makefile
911 Append or modify as required per architecture.
912
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300913 Example::
914
Linus Torvalds1da177e2005-04-16 15:20:36 -0700915 #arch/sparc64/Makefile
Sam Ravnborg222d3942007-10-15 21:59:31 +0200916 KBUILD_AFLAGS += -m64 -mcpu=ultrasparc
Linus Torvalds1da177e2005-04-16 15:20:36 -0700917
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300918 KBUILD_CFLAGS
919 $(CC) compiler flags
Linus Torvalds1da177e2005-04-16 15:20:36 -0700920
921 Default value - see top level Makefile
922 Append or modify as required per architecture.
923
Sam Ravnborga0f97e02007-10-14 22:21:35 +0200924 Often, the KBUILD_CFLAGS variable depends on the configuration.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700925
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300926 Example::
927
Paul Bolleff4eb042013-04-08 12:51:25 +0200928 #arch/x86/boot/compressed/Makefile
929 cflags-$(CONFIG_X86_32) := -march=i386
930 cflags-$(CONFIG_X86_64) := -mcmodel=small
Sam Ravnborga0f97e02007-10-14 22:21:35 +0200931 KBUILD_CFLAGS += $(cflags-y)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700932
933 Many arch Makefiles dynamically run the target C compiler to
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300934 probe supported options::
Linus Torvalds1da177e2005-04-16 15:20:36 -0700935
Wanlong Gao25eb6502011-06-13 17:53:53 +0800936 #arch/x86/Makefile
Linus Torvalds1da177e2005-04-16 15:20:36 -0700937
938 ...
939 cflags-$(CONFIG_MPENTIUMII) += $(call cc-option,\
940 -march=pentium2,-march=i686)
941 ...
942 # Disable unit-at-a-time mode ...
Sam Ravnborga0f97e02007-10-14 22:21:35 +0200943 KBUILD_CFLAGS += $(call cc-option,-fno-unit-at-a-time)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700944 ...
945
946
Jan Engelhardta07f6032006-07-27 22:14:29 +0200947 The first example utilises the trick that a config option expands
Linus Torvalds1da177e2005-04-16 15:20:36 -0700948 to 'y' when selected.
949
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300950 KBUILD_AFLAGS_KERNEL
951 $(AS) options specific for built-in
Linus Torvalds1da177e2005-04-16 15:20:36 -0700952
Sam Ravnborg80c00ba2010-07-28 19:11:27 +0200953 $(KBUILD_AFLAGS_KERNEL) contains extra C compiler flags used to compile
Linus Torvalds1da177e2005-04-16 15:20:36 -0700954 resident kernel code.
955
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300956 KBUILD_AFLAGS_MODULE
957 Options for $(AS) when building modules
Linus Torvalds1da177e2005-04-16 15:20:36 -0700958
Geert Uytterhoeven39fed702014-08-08 17:23:10 +0200959 $(KBUILD_AFLAGS_MODULE) is used to add arch-specific options that
Sam Ravnborg65881692010-07-28 17:33:09 +0200960 are used for $(AS).
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300961
Sam Ravnborg65881692010-07-28 17:33:09 +0200962 From commandline AFLAGS_MODULE shall be used (see kbuild.txt).
Linus Torvalds1da177e2005-04-16 15:20:36 -0700963
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300964 KBUILD_CFLAGS_KERNEL
965 $(CC) options specific for built-in
Sam Ravnborg80c00ba2010-07-28 19:11:27 +0200966
967 $(KBUILD_CFLAGS_KERNEL) contains extra C compiler flags used to compile
968 resident kernel code.
969
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300970 KBUILD_CFLAGS_MODULE
971 Options for $(CC) when building modules
Sam Ravnborg65881692010-07-28 17:33:09 +0200972
Geert Uytterhoeven39fed702014-08-08 17:23:10 +0200973 $(KBUILD_CFLAGS_MODULE) is used to add arch-specific options that
Sam Ravnborg65881692010-07-28 17:33:09 +0200974 are used for $(CC).
975 From commandline CFLAGS_MODULE shall be used (see kbuild.txt).
976
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300977 KBUILD_LDFLAGS_MODULE
978 Options for $(LD) when linking modules
Sam Ravnborg65881692010-07-28 17:33:09 +0200979
Geert Uytterhoeven39fed702014-08-08 17:23:10 +0200980 $(KBUILD_LDFLAGS_MODULE) is used to add arch-specific options
Sam Ravnborg65881692010-07-28 17:33:09 +0200981 used when linking modules. This is often a linker script.
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300982
Sam Ravnborg65881692010-07-28 17:33:09 +0200983 From commandline LDFLAGS_MODULE shall be used (see kbuild.txt).
Bryce Harrington39e6e9c2006-09-20 12:43:37 -0700984
Michal Marek40df7592011-04-20 13:45:30 +0200985 KBUILD_ARFLAGS Options for $(AR) when creating archives
986
987 $(KBUILD_ARFLAGS) set by the top level Makefile to "D" (deterministic
988 mode) if this option is supported by $(AR).
989
Michal Marek61754c12015-07-01 17:19:30 +0200990 ARCH_CPPFLAGS, ARCH_AFLAGS, ARCH_CFLAGS Overrides the kbuild defaults
991
992 These variables are appended to the KBUILD_CPPFLAGS,
993 KBUILD_AFLAGS, and KBUILD_CFLAGS, respectively, after the
994 top-level Makefile has set any other flags. This provides a
995 means for an architecture to override the defaults.
996
997
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03009986.2 Add prerequisites to archheaders
999------------------------------------
H. Peter Anvin052ad272011-11-17 13:17:35 -08001000
1001 The archheaders: rule is used to generate header files that
Linus Torvalds39ceda52019-07-12 16:03:16 -07001002 may be installed into user space by "make header_install".
H. Peter Anvin052ad272011-11-17 13:17:35 -08001003
1004 It is run before "make archprepare" when run on the
1005 architecture itself.
1006
1007
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -030010086.3 Add prerequisites to archprepare
1009------------------------------------
Linus Torvalds1da177e2005-04-16 15:20:36 -07001010
Jan Engelhardta07f6032006-07-27 22:14:29 +02001011 The archprepare: rule is used to list prerequisites that need to be
Linus Torvalds1da177e2005-04-16 15:20:36 -07001012 built before starting to descend down in the subdirectories.
Jan Engelhardta07f6032006-07-27 22:14:29 +02001013 This is usually used for header files containing assembler constants.
Linus Torvalds1da177e2005-04-16 15:20:36 -07001014
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03001015 Example::
1016
Sam Ravnborg5bb78262005-09-11 22:30:22 +02001017 #arch/arm/Makefile
1018 archprepare: maketools
Linus Torvalds1da177e2005-04-16 15:20:36 -07001019
Jan Engelhardta07f6032006-07-27 22:14:29 +02001020 In this example, the file target maketools will be processed
Sam Ravnborg5bb78262005-09-11 22:30:22 +02001021 before descending down in the subdirectories.
Linus Torvalds1da177e2005-04-16 15:20:36 -07001022 See also chapter XXX-TODO that describe how kbuild supports
1023 generating offset header files.
1024
1025
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -030010266.4 List directories to visit when descending
1027---------------------------------------------
Linus Torvalds1da177e2005-04-16 15:20:36 -07001028
1029 An arch Makefile cooperates with the top Makefile to define variables
1030 which specify how to build the vmlinux file. Note that there is no
1031 corresponding arch-specific section for modules; the module-building
1032 machinery is all architecture-independent.
1033
Bryce Harrington39e6e9c2006-09-20 12:43:37 -07001034
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03001035 head-y, init-y, core-y, libs-y, drivers-y, net-y
1036 $(head-y) lists objects to be linked first in vmlinux.
Linus Torvalds1da177e2005-04-16 15:20:36 -07001037
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03001038 $(libs-y) lists directories where a lib.a archive can be located.
Linus Torvalds1da177e2005-04-16 15:20:36 -07001039
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03001040 The rest list directories where a built-in.a object file can be
1041 located.
Linus Torvalds1da177e2005-04-16 15:20:36 -07001042
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03001043 $(init-y) objects will be located after $(head-y).
Linus Torvalds1da177e2005-04-16 15:20:36 -07001044
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03001045 Then the rest follows in this order:
1046
1047 $(core-y), $(libs-y), $(drivers-y) and $(net-y).
1048
1049 The top level Makefile defines values for all generic directories,
1050 and arch/$(ARCH)/Makefile only adds architecture-specific
1051 directories.
1052
1053 Example::
1054
Linus Torvalds1da177e2005-04-16 15:20:36 -07001055 #arch/sparc64/Makefile
1056 core-y += arch/sparc64/kernel/
1057 libs-y += arch/sparc64/prom/ arch/sparc64/lib/
1058 drivers-$(CONFIG_OPROFILE) += arch/sparc64/oprofile/
1059
1060
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -030010616.5 Architecture-specific boot images
1062-------------------------------------
Linus Torvalds1da177e2005-04-16 15:20:36 -07001063
1064 An arch Makefile specifies goals that take the vmlinux file, compress
1065 it, wrap it in bootstrapping code, and copy the resulting files
1066 somewhere. This includes various kinds of installation commands.
1067 The actual goals are not standardized across architectures.
1068
1069 It is common to locate any additional processing in a boot/
1070 directory below arch/$(ARCH)/.
1071
1072 Kbuild does not provide any smart way to support building a
1073 target specified in boot/. Therefore arch/$(ARCH)/Makefile shall
1074 call make manually to build a target in boot/.
1075
1076 The recommended approach is to include shortcuts in
1077 arch/$(ARCH)/Makefile, and use the full path when calling down
1078 into the arch/$(ARCH)/boot/Makefile.
1079
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03001080 Example::
1081
Wanlong Gao25eb6502011-06-13 17:53:53 +08001082 #arch/x86/Makefile
1083 boot := arch/x86/boot
Linus Torvalds1da177e2005-04-16 15:20:36 -07001084 bzImage: vmlinux
1085 $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
1086
1087 "$(Q)$(MAKE) $(build)=<dir>" is the recommended way to invoke
1088 make in a subdirectory.
1089
Randy Dunlap5c811e52007-02-17 20:03:14 +01001090 There are no rules for naming architecture-specific targets,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001091 but executing "make help" will list all relevant targets.
Jan Engelhardta07f6032006-07-27 22:14:29 +02001092 To support this, $(archhelp) must be defined.
Linus Torvalds1da177e2005-04-16 15:20:36 -07001093
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03001094 Example::
1095
Wanlong Gao25eb6502011-06-13 17:53:53 +08001096 #arch/x86/Makefile
Linus Torvalds1da177e2005-04-16 15:20:36 -07001097 define archhelp
1098 echo '* bzImage - Image (arch/$(ARCH)/boot/bzImage)'
Bryce Harrington39e6e9c2006-09-20 12:43:37 -07001099 endif
Linus Torvalds1da177e2005-04-16 15:20:36 -07001100
1101 When make is executed without arguments, the first goal encountered
1102 will be built. In the top level Makefile the first goal present
1103 is all:.
Jan Engelhardta07f6032006-07-27 22:14:29 +02001104 An architecture shall always, per default, build a bootable image.
1105 In "make help", the default goal is highlighted with a '*'.
Linus Torvalds1da177e2005-04-16 15:20:36 -07001106 Add a new prerequisite to all: to select a default goal different
1107 from vmlinux.
1108
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03001109 Example::
1110
Wanlong Gao25eb6502011-06-13 17:53:53 +08001111 #arch/x86/Makefile
Bryce Harrington39e6e9c2006-09-20 12:43:37 -07001112 all: bzImage
Linus Torvalds1da177e2005-04-16 15:20:36 -07001113
1114 When "make" is executed without arguments, bzImage will be built.
1115
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -030011166.6 Building non-kbuild targets
1117-------------------------------
Linus Torvalds1da177e2005-04-16 15:20:36 -07001118
1119 extra-y
Geert Uytterhoeven39fed702014-08-08 17:23:10 +02001120 extra-y specifies additional targets created in the current
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03001121 directory, in addition to any targets specified by `obj-*`.
Linus Torvalds1da177e2005-04-16 15:20:36 -07001122
1123 Listing all targets in extra-y is required for two purposes:
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03001124
Linus Torvalds1da177e2005-04-16 15:20:36 -07001125 1) Enable kbuild to check changes in command lines
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03001126
Linus Torvalds1da177e2005-04-16 15:20:36 -07001127 - When $(call if_changed,xxx) is used
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03001128
Linus Torvalds1da177e2005-04-16 15:20:36 -07001129 2) kbuild knows what files to delete during "make clean"
1130
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03001131 Example::
1132
Wanlong Gao25eb6502011-06-13 17:53:53 +08001133 #arch/x86/kernel/Makefile
Linus Torvalds1da177e2005-04-16 15:20:36 -07001134 extra-y := head.o init_task.o
1135
Jan Engelhardta07f6032006-07-27 22:14:29 +02001136 In this example, extra-y is used to list object files that
Nicholas Pigginf49821e2018-02-11 00:25:04 +10001137 shall be built, but shall not be linked as part of built-in.a.
Linus Torvalds1da177e2005-04-16 15:20:36 -07001138
Linus Torvalds39ceda52019-07-12 16:03:16 -07001139 header-test-y
1140
1141 header-test-y specifies headers (*.h) in the current directory that
1142 should be compile tested to ensure they are self-contained,
1143 i.e. compilable as standalone units. If CONFIG_HEADER_TEST is enabled,
1144 this builds them as part of extra-y.
1145
1146 header-test-pattern-y
1147
1148 This works as a weaker version of header-test-y, and accepts wildcard
1149 patterns. The typical usage is:
1150
1151 header-test-pattern-y += *.h
1152
1153 This specifies all the files that matches to '*.h' in the current
1154 directory, but the files in 'header-test-' are excluded.
Bryce Harrington39e6e9c2006-09-20 12:43:37 -07001155
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -030011566.7 Commands useful for building a boot image
1157---------------------------------------------
Linus Torvalds1da177e2005-04-16 15:20:36 -07001158
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03001159 Kbuild provides a few macros that are useful when building a
1160 boot image.
Linus Torvalds1da177e2005-04-16 15:20:36 -07001161
1162 if_changed
Linus Torvalds1da177e2005-04-16 15:20:36 -07001163 if_changed is the infrastructure used for the following commands.
1164
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03001165 Usage::
1166
Linus Torvalds1da177e2005-04-16 15:20:36 -07001167 target: source(s) FORCE
Geert Uytterhoevenef80f0a2014-08-08 17:23:08 +02001168 $(call if_changed,ld/objcopy/gzip/...)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001169
Jan Engelhardta07f6032006-07-27 22:14:29 +02001170 When the rule is evaluated, it is checked to see if any files
Randy Dunlap5c811e52007-02-17 20:03:14 +01001171 need an update, or the command line has changed since the last
Linus Torvalds1da177e2005-04-16 15:20:36 -07001172 invocation. The latter will force a rebuild if any options
1173 to the executable have changed.
1174 Any target that utilises if_changed must be listed in $(targets),
1175 otherwise the command line check will fail, and the target will
1176 always be built.
1177 Assignments to $(targets) are without $(obj)/ prefix.
1178 if_changed may be used in conjunction with custom commands as
H. Peter Anvin052ad272011-11-17 13:17:35 -08001179 defined in 6.8 "Custom kbuild commands".
Paolo 'Blaisorblade' Giarrusso49490572005-07-28 17:56:17 +02001180
Linus Torvalds1da177e2005-04-16 15:20:36 -07001181 Note: It is a typical mistake to forget the FORCE prerequisite.
Paolo 'Blaisorblade' Giarrusso49490572005-07-28 17:56:17 +02001182 Another common pitfall is that whitespace is sometimes
1183 significant; for instance, the below will fail (note the extra space
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03001184 after the comma)::
Linus Torvalds1da177e2005-04-16 15:20:36 -07001185
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03001186 target: source(s) FORCE
1187
1188 **WRONG!** $(call if_changed, ld/objcopy/gzip/...)
1189
1190 Note:
1191 if_changed should not be used more than once per target.
Dirk Goudersbb819552018-07-18 11:13:36 +02001192 It stores the executed command in a corresponding .cmd
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03001193
Dirk Goudersbb819552018-07-18 11:13:36 +02001194 file and multiple calls would result in overwrites and
1195 unwanted results when the target is up to date and only the
1196 tests on changed commands trigger execution of commands.
1197
Linus Torvalds1da177e2005-04-16 15:20:36 -07001198 ld
Jan Engelhardta07f6032006-07-27 22:14:29 +02001199 Link target. Often, LDFLAGS_$@ is used to set specific options to ld.
Bryce Harrington39e6e9c2006-09-20 12:43:37 -07001200
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03001201 Example::
1202
Wanlong Gao25eb6502011-06-13 17:53:53 +08001203 #arch/x86/boot/Makefile
Linus Torvalds1da177e2005-04-16 15:20:36 -07001204 LDFLAGS_bootsect := -Ttext 0x0 -s --oformat binary
1205 LDFLAGS_setup := -Ttext 0x0 -s --oformat binary -e begtext
1206
1207 targets += setup setup.o bootsect bootsect.o
1208 $(obj)/setup $(obj)/bootsect: %: %.o FORCE
1209 $(call if_changed,ld)
1210
Jan Engelhardta07f6032006-07-27 22:14:29 +02001211 In this example, there are two possible targets, requiring different
1212 options to the linker. The linker options are specified using the
Linus Torvalds1da177e2005-04-16 15:20:36 -07001213 LDFLAGS_$@ syntax - one for each potential target.
Matt LaPlante5d3f0832006-11-30 05:21:10 +01001214 $(targets) are assigned all potential targets, by which kbuild knows
Linus Torvalds1da177e2005-04-16 15:20:36 -07001215 the targets and will:
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03001216
Linus Torvalds1da177e2005-04-16 15:20:36 -07001217 1) check for commandline changes
1218 2) delete target during make clean
1219
1220 The ": %: %.o" part of the prerequisite is a shorthand that
Geert Uytterhoeven39fed702014-08-08 17:23:10 +02001221 frees us from listing the setup.o and bootsect.o files.
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03001222
1223 Note:
1224 It is a common mistake to forget the "targets :=" assignment,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001225 resulting in the target file being recompiled for no
1226 obvious reason.
1227
Cao jind87e47e2017-10-19 11:17:05 +08001228 objcopy
1229 Copy binary. Uses OBJCOPYFLAGS usually specified in
1230 arch/$(ARCH)/Makefile.
1231 OBJCOPYFLAGS_$@ may be used to set additional options.
1232
1233 gzip
1234 Compress target. Use maximum compression to compress target.
1235
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03001236 Example::
1237
Cao jind87e47e2017-10-19 11:17:05 +08001238 #arch/x86/boot/compressed/Makefile
1239 $(obj)/vmlinux.bin.gz: $(vmlinux.bin.all-y) FORCE
1240 $(call if_changed,gzip)
1241
Dirk Brandewieaab94332010-12-22 11:57:26 -08001242 dtc
Masahiro Yamadac1410562014-06-10 16:36:14 +09001243 Create flattened device tree blob object suitable for linking
Dirk Brandewieaab94332010-12-22 11:57:26 -08001244 into vmlinux. Device tree blobs linked into vmlinux are placed
1245 in an init section in the image. Platform code *must* copy the
1246 blob to non-init memory prior to calling unflatten_device_tree().
1247
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03001248 To use this command, simply add `*.dtb` into obj-y or targets, or make
1249 some other target depend on `%.dtb`
Stephen Warren90b335f2012-11-27 16:29:10 -07001250
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03001251 A central rule exists to create `$(obj)/%.dtb` from `$(src)/%.dts`;
Stephen Warren90b335f2012-11-27 16:29:10 -07001252 architecture Makefiles do no need to explicitly write out that rule.
1253
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03001254 Example::
1255
Stephen Warren90b335f2012-11-27 16:29:10 -07001256 targets += $(dtb-y)
Stephen Warren90b335f2012-11-27 16:29:10 -07001257 DTC_FLAGS ?= -p 1024
Linus Torvalds1da177e2005-04-16 15:20:36 -07001258
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -030012596.8 Custom kbuild commands
1260--------------------------
Linus Torvalds1da177e2005-04-16 15:20:36 -07001261
Jan Engelhardta07f6032006-07-27 22:14:29 +02001262 When kbuild is executing with KBUILD_VERBOSE=0, then only a shorthand
Linus Torvalds1da177e2005-04-16 15:20:36 -07001263 of a command is normally displayed.
1264 To enable this behaviour for custom commands kbuild requires
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03001265 two variables to be set::
Linus Torvalds1da177e2005-04-16 15:20:36 -07001266
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03001267 quiet_cmd_<command> - what shall be echoed
1268 cmd_<command> - the command to execute
1269
1270 Example::
1271
Linus Torvalds1da177e2005-04-16 15:20:36 -07001272 #
1273 quiet_cmd_image = BUILD $@
1274 cmd_image = $(obj)/tools/build $(BUILDFLAGS) \
1275 $(obj)/vmlinux.bin > $@
1276
1277 targets += bzImage
1278 $(obj)/bzImage: $(obj)/vmlinux.bin $(obj)/tools/build FORCE
1279 $(call if_changed,image)
1280 @echo 'Kernel: $@ is ready'
1281
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03001282 When updating the $(obj)/bzImage target, the line:
Linus Torvalds1da177e2005-04-16 15:20:36 -07001283
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03001284 BUILD arch/x86/boot/bzImage
Linus Torvalds1da177e2005-04-16 15:20:36 -07001285
1286 will be displayed with "make KBUILD_VERBOSE=0".
Bryce Harrington39e6e9c2006-09-20 12:43:37 -07001287
Linus Torvalds1da177e2005-04-16 15:20:36 -07001288
H. Peter Anvin052ad272011-11-17 13:17:35 -08001289--- 6.9 Preprocessing linker scripts
Linus Torvalds1da177e2005-04-16 15:20:36 -07001290
Jan Engelhardta07f6032006-07-27 22:14:29 +02001291 When the vmlinux image is built, the linker script
Linus Torvalds1da177e2005-04-16 15:20:36 -07001292 arch/$(ARCH)/kernel/vmlinux.lds is used.
1293 The script is a preprocessed variant of the file vmlinux.lds.S
1294 located in the same directory.
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03001295 kbuild knows .lds files and includes a rule `*lds.S` -> `*lds`.
Bryce Harrington39e6e9c2006-09-20 12:43:37 -07001296
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03001297 Example::
1298
Wanlong Gao25eb6502011-06-13 17:53:53 +08001299 #arch/x86/kernel/Makefile
Linus Torvalds1da177e2005-04-16 15:20:36 -07001300 always := vmlinux.lds
Bryce Harrington39e6e9c2006-09-20 12:43:37 -07001301
Linus Torvalds1da177e2005-04-16 15:20:36 -07001302 #Makefile
1303 export CPPFLAGS_vmlinux.lds += -P -C -U$(ARCH)
Bryce Harrington39e6e9c2006-09-20 12:43:37 -07001304
1305 The assignment to $(always) is used to tell kbuild to build the
Jan Engelhardta07f6032006-07-27 22:14:29 +02001306 target vmlinux.lds.
1307 The assignment to $(CPPFLAGS_vmlinux.lds) tells kbuild to use the
Linus Torvalds1da177e2005-04-16 15:20:36 -07001308 specified options when building the target vmlinux.lds.
Bryce Harrington39e6e9c2006-09-20 12:43:37 -07001309
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03001310 When building the `*.lds` target, kbuild uses the variables::
Linus Torvalds1da177e2005-04-16 15:20:36 -07001311
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03001312 KBUILD_CPPFLAGS : Set in top-level Makefile
1313 cppflags-y : May be set in the kbuild makefile
1314 CPPFLAGS_$(@F) : Target-specific flags.
1315 Note that the full filename is used in this
1316 assignment.
1317
1318 The kbuild infrastructure for `*lds` files is used in several
Randy Dunlap5c811e52007-02-17 20:03:14 +01001319 architecture-specific files.
Linus Torvalds1da177e2005-04-16 15:20:36 -07001320
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -030013216.10 Generic header files
1322-------------------------
Sam Ravnborgd8ecc5c2011-04-27 22:29:49 +02001323
1324 The directory include/asm-generic contains the header files
1325 that may be shared between individual architectures.
1326 The recommended approach how to use a generic header file is
1327 to list the file in the Kbuild file.
Cao jind87e47e2017-10-19 11:17:05 +08001328 See "7.2 generic-y" for further info on syntax etc.
Sam Ravnborgd8ecc5c2011-04-27 22:29:49 +02001329
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -030013306.11 Post-link pass
1331-------------------
Nicholas Pigginfbe6e372016-08-24 22:29:21 +10001332
1333 If the file arch/xxx/Makefile.postlink exists, this makefile
1334 will be invoked for post-link objects (vmlinux and modules.ko)
1335 for architectures to run post-link passes on. Must also handle
1336 the clean target.
1337
1338 This pass runs after kallsyms generation. If the architecture
1339 needs to modify symbol locations, rather than manipulate the
1340 kallsyms, it may be easier to add another postlink target for
1341 .tmp_vmlinux? targets to be called from link-vmlinux.sh.
1342
1343 For example, powerpc uses this to check relocation sanity of
1344 the linked vmlinux file.
1345
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -030013467 Kbuild syntax for exported headers
1347------------------------------------
Linus Torvalds1da177e2005-04-16 15:20:36 -07001348
Geert Uytterhoeven39fed702014-08-08 17:23:10 +02001349The kernel includes a set of headers that is exported to userspace.
Nicolas Kaiserc95940f2010-08-05 11:23:11 -07001350Many headers can be exported as-is but other headers require a
Sam Ravnborgc7bb3492009-04-10 08:52:43 +02001351minimal pre-processing before they are ready for user-space.
1352The pre-processing does:
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03001353
Geert Uytterhoeven39fed702014-08-08 17:23:10 +02001354- drop kernel-specific annotations
Sam Ravnborgc7bb3492009-04-10 08:52:43 +02001355- drop include of compiler.h
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03001356- drop all sections that are kernel internal (guarded by `ifdef __KERNEL__`)
Sam Ravnborgc7bb3492009-04-10 08:52:43 +02001357
Nicolas Dichtelfcc84872017-03-27 14:20:15 +02001358All headers under include/uapi/, include/generated/uapi/,
Nicolas Dichtel61562f982017-03-27 14:20:16 +02001359arch/<arch>/include/uapi/ and arch/<arch>/include/generated/uapi/
Nicolas Dichtelfcc84872017-03-27 14:20:15 +02001360are exported.
1361
1362A Kbuild file may be defined under arch/<arch>/include/uapi/asm/ and
1363arch/<arch>/include/asm/ to list asm files coming from asm-generic.
Sam Ravnborgc7bb3492009-04-10 08:52:43 +02001364See subsequent chapter for the syntax of the Kbuild file.
1365
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -030013667.1 no-export-headers
1367---------------------
Sam Ravnborgc7bb3492009-04-10 08:52:43 +02001368
Nicolas Dichtelfcc84872017-03-27 14:20:15 +02001369 no-export-headers is essentially used by include/uapi/linux/Kbuild to
1370 avoid exporting specific headers (e.g. kvm.h) on architectures that do
1371 not support it. It should be avoided as much as possible.
Sam Ravnborgc7bb3492009-04-10 08:52:43 +02001372
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -030013737.2 generic-y
1374-------------
Sam Ravnborgd8ecc5c2011-04-27 22:29:49 +02001375
1376 If an architecture uses a verbatim copy of a header from
1377 include/asm-generic then this is listed in the file
1378 arch/$(ARCH)/include/asm/Kbuild like this:
1379
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03001380 Example::
1381
Sam Ravnborgd8ecc5c2011-04-27 22:29:49 +02001382 #arch/x86/include/asm/Kbuild
1383 generic-y += termios.h
1384 generic-y += rtc.h
1385
1386 During the prepare phase of the build a wrapper include
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03001387 file is generated in the directory::
Sam Ravnborgd8ecc5c2011-04-27 22:29:49 +02001388
1389 arch/$(ARCH)/include/generated/asm
1390
1391 When a header is exported where the architecture uses
1392 the generic header a similar wrapper is generated as part
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03001393 of the set of exported headers in the directory::
Sam Ravnborgd8ecc5c2011-04-27 22:29:49 +02001394
1395 usr/include/asm
1396
1397 The generated wrapper will in both cases look like the following:
1398
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03001399 Example: termios.h::
1400
Sam Ravnborgd8ecc5c2011-04-27 22:29:49 +02001401 #include <asm-generic/termios.h>
Sam Ravnborgc7bb3492009-04-10 08:52:43 +02001402
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -030014037.3 generated-y
1404---------------
James Hogan54b880c2016-06-24 23:42:23 +01001405
1406 If an architecture generates other header files alongside generic-y
Masahiro Yamadaae3f4152017-06-09 17:29:52 +09001407 wrappers, generated-y specifies them.
James Hogan54b880c2016-06-24 23:42:23 +01001408
1409 This prevents them being treated as stale asm-generic wrappers and
1410 removed.
1411
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03001412 Example::
1413
James Hogan54b880c2016-06-24 23:42:23 +01001414 #arch/x86/include/asm/Kbuild
1415 generated-y += syscalls_32.h
1416
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -030014177.4 mandatory-y
1418---------------
Nicolas Dichtelfcc84872017-03-27 14:20:15 +02001419
Masahiro Yamada037fc332019-03-17 11:01:09 +09001420 mandatory-y is essentially used by include/(uapi/)asm-generic/Kbuild
Masahiro Yamada91998732019-01-03 10:10:38 +09001421 to define the minimum set of ASM headers that all architectures must have.
1422
1423 This works like optional generic-y. If a mandatory header is missing
1424 in arch/$(ARCH)/include/(uapi/)/asm, Kbuild will automatically generate
1425 a wrapper of the asm-generic one.
Nicolas Dichtelfcc84872017-03-27 14:20:15 +02001426
1427 The convention is to list one subdir per line and
1428 preferably in alphabetic order.
1429
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -030014308 Kbuild Variables
1431==================
Linus Torvalds1da177e2005-04-16 15:20:36 -07001432
1433The top Makefile exports the following variables:
1434
1435 VERSION, PATCHLEVEL, SUBLEVEL, EXTRAVERSION
Linus Torvalds1da177e2005-04-16 15:20:36 -07001436 These variables define the current kernel version. A few arch
1437 Makefiles actually use these values directly; they should use
1438 $(KERNELRELEASE) instead.
1439
1440 $(VERSION), $(PATCHLEVEL), and $(SUBLEVEL) define the basic
1441 three-part version number, such as "2", "4", and "0". These three
1442 values are always numeric.
1443
1444 $(EXTRAVERSION) defines an even tinier sublevel for pre-patches
1445 or additional patches. It is usually some non-numeric string
1446 such as "-pre4", and is often blank.
1447
1448 KERNELRELEASE
Linus Torvalds1da177e2005-04-16 15:20:36 -07001449 $(KERNELRELEASE) is a single string such as "2.4.0-pre4", suitable
1450 for constructing installation directory names or showing in
1451 version strings. Some arch Makefiles use it for this purpose.
1452
1453 ARCH
Linus Torvalds1da177e2005-04-16 15:20:36 -07001454 This variable defines the target architecture, such as "i386",
1455 "arm", or "sparc". Some kbuild Makefiles test $(ARCH) to
1456 determine which files to compile.
1457
1458 By default, the top Makefile sets $(ARCH) to be the same as the
1459 host system architecture. For a cross build, a user may
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03001460 override the value of $(ARCH) on the command line::
Linus Torvalds1da177e2005-04-16 15:20:36 -07001461
1462 make ARCH=m68k ...
1463
1464
1465 INSTALL_PATH
Linus Torvalds1da177e2005-04-16 15:20:36 -07001466 This variable defines a place for the arch Makefiles to install
1467 the resident kernel image and System.map file.
Randy Dunlap5c811e52007-02-17 20:03:14 +01001468 Use this for architecture-specific install targets.
Linus Torvalds1da177e2005-04-16 15:20:36 -07001469
1470 INSTALL_MOD_PATH, MODLIB
Linus Torvalds1da177e2005-04-16 15:20:36 -07001471 $(INSTALL_MOD_PATH) specifies a prefix to $(MODLIB) for module
1472 installation. This variable is not defined in the Makefile but
1473 may be passed in by the user if desired.
1474
1475 $(MODLIB) specifies the directory for module installation.
1476 The top Makefile defines $(MODLIB) to
1477 $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE). The user may
1478 override this value on the command line if desired.
1479
Theodore Ts'oac031f22006-06-21 20:53:09 -04001480 INSTALL_MOD_STRIP
Geert Uytterhoeven39fed702014-08-08 17:23:10 +02001481 If this variable is specified, it will cause modules to be stripped
Theodore Ts'oac031f22006-06-21 20:53:09 -04001482 after they are installed. If INSTALL_MOD_STRIP is '1', then the
Geert Uytterhoeven39fed702014-08-08 17:23:10 +02001483 default option --strip-debug will be used. Otherwise, the
Gilles Espinasse177b2412011-01-09 08:59:49 +01001484 INSTALL_MOD_STRIP value will be used as the option(s) to the strip
1485 command.
Theodore Ts'oac031f22006-06-21 20:53:09 -04001486
1487
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -030014889 Makefile language
1489===================
Linus Torvalds1da177e2005-04-16 15:20:36 -07001490
Jan Engelhardta07f6032006-07-27 22:14:29 +02001491The kernel Makefiles are designed to be run with GNU Make. The Makefiles
Linus Torvalds1da177e2005-04-16 15:20:36 -07001492use only the documented features of GNU Make, but they do use many
1493GNU extensions.
1494
1495GNU Make supports elementary list-processing functions. The kernel
1496Makefiles use a novel style of list building and manipulation with few
1497"if" statements.
1498
1499GNU Make has two assignment operators, ":=" and "=". ":=" performs
1500immediate evaluation of the right-hand side and stores an actual string
1501into the left-hand side. "=" is like a formula definition; it stores the
1502right-hand side in an unevaluated form and then evaluates this form each
1503time the left-hand side is used.
1504
1505There are some cases where "=" is appropriate. Usually, though, ":="
1506is the right choice.
1507
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300150810 Credits
1509==========
Linus Torvalds1da177e2005-04-16 15:20:36 -07001510
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -03001511- Original version made by Michael Elizabeth Chastain, <mailto:mec@shout.net>
1512- Updates by Kai Germaschewski <kai@tp1.ruhr-uni-bochum.de>
1513- Updates by Sam Ravnborg <sam@ravnborg.org>
1514- Language QA by Jan Engelhardt <jengelh@gmx.de>
Linus Torvalds1da177e2005-04-16 15:20:36 -07001515
Mauro Carvalho Chehabcd238ef2019-06-12 14:52:48 -0300151611 TODO
1517=======
Linus Torvalds1da177e2005-04-16 15:20:36 -07001518
Jan Engelhardta07f6032006-07-27 22:14:29 +02001519- Describe how kbuild supports shipped files with _shipped.
Linus Torvalds1da177e2005-04-16 15:20:36 -07001520- Generating offset header files.
1521- Add more variables to section 7?