makefiles.rst 47.5 KB
Newer Older
1
======================
Linus Torvalds's avatar
Linus Torvalds committed
2
Linux Kernel Makefiles
3
======================
Linus Torvalds's avatar
Linus Torvalds committed
4 5 6

This document describes the Linux kernel Makefiles.

7
.. Table of Contents
Linus Torvalds's avatar
Linus Torvalds committed
8 9 10 11 12 13 14 15 16 17 18 19 20 21

	=== 1 Overview
	=== 2 Who does what
	=== 3 The kbuild files
	   --- 3.1 Goal definitions
	   --- 3.2 Built-in object goals - obj-y
	   --- 3.3 Loadable module goals - obj-m
	   --- 3.4 Objects which export symbols
	   --- 3.5 Library file goals - lib-y
	   --- 3.6 Descending down in directories
	   --- 3.7 Compilation flags
	   --- 3.8 Command line dependency
	   --- 3.9 Dependency tracking
	   --- 3.10 Special Rules
22
	   --- 3.11 $(CC) support functions
Sam Ravnborg's avatar
Sam Ravnborg committed
23
	   --- 3.12 $(LD) support functions
Linus Torvalds's avatar
Linus Torvalds committed
24 25 26 27

	=== 4 Host Program support
	   --- 4.1 Simple Host Program
	   --- 4.2 Composite Host Programs
28 29 30 31
	   --- 4.3 Using C++ for host programs
	   --- 4.4 Controlling compiler options for host programs
	   --- 4.5 When host programs are actually built
	   --- 4.6 Using hostprogs-$(CONFIG_FOO)
Linus Torvalds's avatar
Linus Torvalds committed
32 33 34 35 36

	=== 5 Kbuild clean infrastructure

	=== 6 Architecture Makefiles
	   --- 6.1 Set variables to tweak the build to the architecture
37 38 39 40 41 42 43 44 45
	   --- 6.2 Add prerequisites to archheaders:
	   --- 6.3 Add prerequisites to archprepare:
	   --- 6.4 List directories to visit when descending
	   --- 6.5 Architecture-specific boot images
	   --- 6.6 Building non-kbuild targets
	   --- 6.7 Commands useful for building a boot image
	   --- 6.8 Custom kbuild commands
	   --- 6.9 Preprocessing linker scripts
	   --- 6.10 Generic header files
46
	   --- 6.11 Post-link pass
Linus Torvalds's avatar
Linus Torvalds committed
47

48
	=== 7 Kbuild syntax for exported headers
49
		--- 7.1 no-export-headers
50 51 52
		--- 7.2 generic-y
		--- 7.3 generated-y
		--- 7.4 mandatory-y
53 54 55 56 57

	=== 8 Kbuild Variables
	=== 9 Makefile language
	=== 10 Credits
	=== 11 TODO
Linus Torvalds's avatar
Linus Torvalds committed
58

59 60
1 Overview
==========
Linus Torvalds's avatar
Linus Torvalds committed
61

62
The Makefiles have five parts::
Linus Torvalds's avatar
Linus Torvalds committed
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83

	Makefile		the top Makefile.
	.config			the kernel configuration file.
	arch/$(ARCH)/Makefile	the arch Makefile.
	scripts/Makefile.*	common rules etc. for all kbuild Makefiles.
	kbuild Makefiles	there are about 500 of these.

The top Makefile reads the .config file, which comes from the kernel
configuration process.

The top Makefile is responsible for building two major products: vmlinux
(the resident kernel image) and modules (any module files).
It builds these goals by recursively descending into the subdirectories of
the kernel source tree.
The list of subdirectories which are visited depends upon the kernel
configuration. The top Makefile textually includes an arch Makefile
with the name arch/$(ARCH)/Makefile. The arch Makefile supplies
architecture-specific information to the top Makefile.

Each subdirectory has a kbuild Makefile which carries out the commands
passed down from above. The kbuild Makefile uses information from the
84
.config file to construct various file lists used by kbuild to build
Linus Torvalds's avatar
Linus Torvalds committed
85 86 87 88 89 90
any built-in or modular targets.

scripts/Makefile.* contains all the definitions/rules etc. that
are used to build the kernel based on the kbuild makefiles.


91 92
2 Who does what
===============
Linus Torvalds's avatar
Linus Torvalds committed
93 94 95 96 97 98 99 100 101

People have four different relationships with the kernel Makefiles.

*Users* are people who build kernels.  These people type commands such as
"make menuconfig" or "make".  They usually do not read or edit
any kernel Makefiles (or any other source files).

*Normal developers* are people who work on features such as device
drivers, file systems, and network protocols.  These people need to
102
maintain the kbuild Makefiles for the subsystem they are
Linus Torvalds's avatar
Linus Torvalds committed
103 104 105 106 107 108 109 110 111 112 113 114 115 116
working on.  In order to do this effectively, they need some overall
knowledge about the kernel Makefiles, plus detailed knowledge about the
public interface for kbuild.

*Arch developers* are people who work on an entire architecture, such
as sparc or ia64.  Arch developers need to know about the arch Makefile
as well as kbuild Makefiles.

*Kbuild developers* are people who work on the kernel build system itself.
These people need to know about all aspects of the kernel Makefiles.

This document is aimed towards normal developers and arch developers.


117 118
3 The kbuild files
==================
Linus Torvalds's avatar
Linus Torvalds committed
119 120

Most Makefiles within the kernel are kbuild Makefiles that use the
121
kbuild infrastructure. This chapter introduces the syntax used in the
Linus Torvalds's avatar
Linus Torvalds committed
122
kbuild makefiles.
123
The preferred name for the kbuild files are 'Makefile' but 'Kbuild' can
124
be used and if both a 'Makefile' and a 'Kbuild' file exists, then the 'Kbuild'
125
file will be used.
Linus Torvalds's avatar
Linus Torvalds committed
126 127 128 129

Section 3.1 "Goal definitions" is a quick intro, further chapters provide
more details, with real examples.

130 131
3.1 Goal definitions
--------------------
Linus Torvalds's avatar
Linus Torvalds committed
132 133 134 135 136 137 138

	Goal definitions are the main part (heart) of the kbuild Makefile.
	These lines define the files to be built, any special compilation
	options, and any subdirectories to be entered recursively.

	The most simple kbuild makefile contains one line:

139 140
	Example::

Linus Torvalds's avatar
Linus Torvalds committed
141 142
		obj-y += foo.o

Randy Dunlap's avatar
Randy Dunlap committed
143
	This tells kbuild that there is one object in that directory, named
Linus Torvalds's avatar
Linus Torvalds committed
144 145 146 147 148
	foo.o. foo.o will be built from foo.c or foo.S.

	If foo.o shall be built as a module, the variable obj-m is used.
	Therefore the following pattern is often used:

149 150
	Example::

Linus Torvalds's avatar
Linus Torvalds committed
151 152 153 154 155 156
		obj-$(CONFIG_FOO) += foo.o

	$(CONFIG_FOO) evaluates to either y (for built-in) or m (for module).
	If CONFIG_FOO is neither y nor m, then the file will not be compiled
	nor linked.

157 158
3.2 Built-in object goals - obj-y
---------------------------------
Linus Torvalds's avatar
Linus Torvalds committed
159 160

	The kbuild Makefile specifies object files for vmlinux
161
	in the $(obj-y) lists.  These lists depend on the kernel
Linus Torvalds's avatar
Linus Torvalds committed
162 163 164
	configuration.

	Kbuild compiles all the $(obj-y) files.  It then calls
165
	"$(AR) rcSTP" to merge these files into one built-in.a file.
166 167
	This is a thin archive without a symbol table. It will be later
	linked into vmlinux by scripts/link-vmlinux.sh
Linus Torvalds's avatar
Linus Torvalds committed
168 169 170

	The order of files in $(obj-y) is significant.  Duplicates in
	the lists are allowed: the first instance will be linked into
171
	built-in.a and succeeding instances will be ignored.
Linus Torvalds's avatar
Linus Torvalds committed
172 173 174 175

	Link order is significant, because certain functions
	(module_init() / __initcall) will be called during boot in the
	order they appear. So keep in mind that changing the link
176 177
	order may e.g. change the order in which your SCSI
	controllers are detected, and thus your disks are renumbered.
Linus Torvalds's avatar
Linus Torvalds committed
178

179 180
	Example::

Linus Torvalds's avatar
Linus Torvalds committed
181 182 183
		#drivers/isdn/i4l/Makefile
		# Makefile for the kernel ISDN subsystem and device drivers.
		# Each configuration option enables a list of files.
184
		obj-$(CONFIG_ISDN_I4L)         += isdn.o
Linus Torvalds's avatar
Linus Torvalds committed
185 186
		obj-$(CONFIG_ISDN_PPP_BSDCOMP) += isdn_bsdcomp.o

187 188
3.3 Loadable module goals - obj-m
---------------------------------
Linus Torvalds's avatar
Linus Torvalds committed
189

190
	$(obj-m) specifies object files which are built as loadable
Linus Torvalds's avatar
Linus Torvalds committed
191 192 193 194 195 196
	kernel modules.

	A module may be built from one source file or several source
	files. In the case of one source file, the kbuild makefile
	simply adds the file to $(obj-m).

197 198
	Example::

Linus Torvalds's avatar
Linus Torvalds committed
199 200 201 202 203 204
		#drivers/isdn/i4l/Makefile
		obj-$(CONFIG_ISDN_PPP_BSDCOMP) += isdn_bsdcomp.o

	Note: In this example $(CONFIG_ISDN_PPP_BSDCOMP) evaluates to 'm'

	If a kernel module is built from several source files, you specify
205 206 207 208
	that you want to build a module in the same way as above; however,
	kbuild needs to know which object files you want to build your
	module from, so you have to tell it by setting a $(<module_name>-y)
	variable.
Linus Torvalds's avatar
Linus Torvalds committed
209

210 211
	Example::

Linus Torvalds's avatar
Linus Torvalds committed
212
		#drivers/isdn/i4l/Makefile
213 214
		obj-$(CONFIG_ISDN_I4L) += isdn.o
		isdn-y := isdn_net_lib.o isdn_v110.o isdn_common.o
Linus Torvalds's avatar
Linus Torvalds committed
215 216

	In this example, the module name will be isdn.o. Kbuild will
217
	compile the objects listed in $(isdn-y) and then run
Linus Torvalds's avatar
Linus Torvalds committed
218 219
	"$(LD) -r" on the list of these files to generate isdn.o.

220
	Due to kbuild recognizing $(<module_name>-y) for composite objects,
221
	you can use the value of a `CONFIG_` symbol to optionally include an
222
	object file as part of a composite object.
Linus Torvalds's avatar
Linus Torvalds committed
223

224 225
	Example::

Linus Torvalds's avatar
Linus Torvalds committed
226
		#fs/ext2/Makefile
227 228 229 230 231 232 233 234 235
	        obj-$(CONFIG_EXT2_FS) += ext2.o
		ext2-y := balloc.o dir.o file.o ialloc.o inode.o ioctl.o \
			  namei.o super.o symlink.o
	        ext2-$(CONFIG_EXT2_FS_XATTR) += xattr.o xattr_user.o \
						xattr_trusted.o

	In this example, xattr.o, xattr_user.o and xattr_trusted.o are only
	part of the composite object ext2.o if $(CONFIG_EXT2_FS_XATTR)
	evaluates to 'y'.
Linus Torvalds's avatar
Linus Torvalds committed
236 237 238 239

	Note: Of course, when you are building objects into the kernel,
	the syntax above will also work. So, if you have CONFIG_EXT2_FS=y,
	kbuild will build an ext2.o file for you out of the individual
240
	parts and then link this into built-in.a, as you would expect.
Linus Torvalds's avatar
Linus Torvalds committed
241

242 243
3.4 Objects which export symbols
--------------------------------
Linus Torvalds's avatar
Linus Torvalds committed
244 245 246 247

	No special notation is required in the makefiles for
	modules exporting symbols.

248 249
3.5 Library file goals - lib-y
------------------------------
Linus Torvalds's avatar
Linus Torvalds committed
250

251
	Objects listed with obj-* are used for modules, or
252
	combined in a built-in.a for that specific directory.
Linus Torvalds's avatar
Linus Torvalds committed
253 254 255 256
	There is also the possibility to list objects that will
	be included in a library, lib.a.
	All objects listed with lib-y are combined in a single
	library for that directory.
257 258 259
	Objects that are listed in obj-y and additionally listed in
	lib-y will not be included in the library, since they will
	be accessible anyway.
260
	For consistency, objects listed in lib-m will be included in lib.a.
Linus Torvalds's avatar
Linus Torvalds committed
261 262 263

	Note that the same kbuild makefile may list files to be built-in
	and to be part of a library. Therefore the same directory
264
	may contain both a built-in.a and a lib.a file.
Linus Torvalds's avatar
Linus Torvalds committed
265

266 267
	Example::

268 269
		#arch/x86/lib/Makefile
		lib-y    := delay.o
Linus Torvalds's avatar
Linus Torvalds committed
270

271 272 273
	This will create a library lib.a based on delay.o. For kbuild to
	actually recognize that there is a lib.a being built, the directory
	shall be listed in libs-y.
274

275
	See also "6.4 List directories to visit when descending".
276

277
	Use of lib-y is normally restricted to `lib/` and `arch/*/lib`.
Linus Torvalds's avatar
Linus Torvalds committed
278

279 280
3.6 Descending down in directories
----------------------------------
Linus Torvalds's avatar
Linus Torvalds committed
281 282 283 284 285 286 287

	A Makefile is only responsible for building objects in its own
	directory. Files in subdirectories should be taken care of by
	Makefiles in these subdirs. The build system will automatically
	invoke make recursively in subdirectories, provided you let it know of
	them.

288
	To do so, obj-y and obj-m are used.
Linus Torvalds's avatar
Linus Torvalds committed
289 290 291
	ext2 lives in a separate directory, and the Makefile present in fs/
	tells kbuild to descend down using the following assignment.

292 293
	Example::

Linus Torvalds's avatar
Linus Torvalds committed
294 295 296 297 298 299 300 301
		#fs/Makefile
		obj-$(CONFIG_EXT2_FS) += ext2/

	If CONFIG_EXT2_FS is set to either 'y' (built-in) or 'm' (modular)
	the corresponding obj- variable will be set, and kbuild will descend
	down in the ext2 directory.
	Kbuild only uses this information to decide that it needs to visit
	the directory, it is the Makefile in the subdirectory that
302
	specifies what is modular and what is built-in.
Linus Torvalds's avatar
Linus Torvalds committed
303

304
	It is good practice to use a `CONFIG_` variable when assigning directory
Linus Torvalds's avatar
Linus Torvalds committed
305
	names. This allows kbuild to totally skip the directory if the
306
	corresponding `CONFIG_` option is neither 'y' nor 'm'.
Linus Torvalds's avatar
Linus Torvalds committed
307

308 309
3.7 Compilation flags
---------------------
Linus Torvalds's avatar
Linus Torvalds committed
310

311
    ccflags-y, asflags-y and ldflags-y
312 313 314
	These three flags apply only to the kbuild makefile in which they
	are assigned. They are used for all the normal cc, as and ld
	invocations happening during a recursive build.
315
	Note: Flags with the same behaviour were previously named:
316 317
	EXTRA_CFLAGS, EXTRA_AFLAGS and EXTRA_LDFLAGS.
	They are still supported but their usage is deprecated.
Linus Torvalds's avatar
Linus Torvalds committed
318

319
	ccflags-y specifies options for compiling with $(CC).
Linus Torvalds's avatar
Linus Torvalds committed
320

321 322
	Example::

323 324 325
		# drivers/acpi/acpica/Makefile
		ccflags-y			:= -Os -D_LINUX -DBUILDING_ACPICA
		ccflags-$(CONFIG_ACPI_DEBUG)	+= -DACPI_DEBUG_OUTPUT
Linus Torvalds's avatar
Linus Torvalds committed
326 327

	This variable is necessary because the top Makefile owns the
328
	variable $(KBUILD_CFLAGS) and uses it for compilation flags for the
Linus Torvalds's avatar
Linus Torvalds committed
329 330
	entire tree.

331
	asflags-y specifies assembler options.
Linus Torvalds's avatar
Linus Torvalds committed
332

333 334
	Example::

335 336
		#arch/sparc/kernel/Makefile
		asflags-y := -ansi
Linus Torvalds's avatar
Linus Torvalds committed
337

338
	ldflags-y specifies options for linking with $(LD).
Linus Torvalds's avatar
Linus Torvalds committed
339

340 341
	Example::

342 343
		#arch/cris/boot/compressed/Makefile
		ldflags-y += -T $(srctree)/$(src)/decompress_$(arch-y).lds
Linus Torvalds's avatar
Linus Torvalds committed
344

345
    subdir-ccflags-y, subdir-asflags-y
346
	The two flags listed above are similar to ccflags-y and asflags-y.
347 348 349 350
	The difference is that the subdir- variants have effect for the kbuild
	file where they are present and all subdirectories.
	Options specified using subdir-* are added to the commandline before
	the options specified using the non-subdir variants.
351

352 353
	Example::

354 355
		subdir-ccflags-y := -Werror

Linus Torvalds's avatar
Linus Torvalds committed
356 357 358 359 360 361 362
    CFLAGS_$@, AFLAGS_$@
	CFLAGS_$@ and AFLAGS_$@ only apply to commands in current
	kbuild makefile.

	$(CFLAGS_$@) specifies per-file options for $(CC).  The $@
	part has a literal value which specifies the file that it is for.

363 364
	Example::

Linus Torvalds's avatar
Linus Torvalds committed
365 366 367 368 369
		# drivers/scsi/Makefile
		CFLAGS_aha152x.o =   -DAHA152X_STAT -DAUTOCONF
		CFLAGS_gdth.o    = # -DDEBUG_GDTH=2 -D__SERIAL__ -D__COM2__ \
				     -DGDTH_STATISTICS

370
	These two lines specify compilation flags for aha152x.o and gdth.o.
Linus Torvalds's avatar
Linus Torvalds committed
371 372 373 374

	$(AFLAGS_$@) is a similar feature for source files in assembly
	languages.

375 376
	Example::

Linus Torvalds's avatar
Linus Torvalds committed
377
		# arch/arm/kernel/Makefile
378 379 380 381
		AFLAGS_head.o        := -DTEXT_OFFSET=$(TEXT_OFFSET)
		AFLAGS_crunch-bits.o := -Wa,-mcpu=ep9312
		AFLAGS_iwmmxt.o      := -Wa,-mcpu=iwmmxt

Linus Torvalds's avatar
Linus Torvalds committed
382

383 384
3.9 Dependency tracking
-----------------------
Linus Torvalds's avatar
Linus Torvalds committed
385 386

	Kbuild tracks dependencies on the following:
387 388
	1) All prerequisite files (both `*.c` and `*.h`)
	2) `CONFIG_` options used in all prerequisite files
Linus Torvalds's avatar
Linus Torvalds committed
389 390 391 392 393
	3) Command-line used to compile target

	Thus, if you change an option to $(CC) all affected files will
	be re-compiled.

394 395
3.10 Special Rules
------------------
Linus Torvalds's avatar
Linus Torvalds committed
396 397 398 399

	Special rules are used when the kbuild infrastructure does
	not provide the required support. A typical example is
	header files generated during the build process.
Randy Dunlap's avatar
Randy Dunlap committed
400
	Another example are the architecture-specific Makefiles which
401
	need special rules to prepare boot images etc.
Linus Torvalds's avatar
Linus Torvalds committed
402 403 404 405 406 407 408 409

	Special rules are written as normal Make rules.
	Kbuild is not executing in the directory where the Makefile is
	located, so all special rules shall provide a relative
	path to prerequisite files and target files.

	Two variables are used when defining special rules:

410 411 412 413 414 415 416 417 418
	$(src)
	    $(src) is a relative path which points to the directory
	    where the Makefile is located. Always use $(src) when
	    referring to files located in the src tree.

	$(obj)
	    $(obj) is a relative path which points to the directory
	    where the target is saved. Always use $(obj) when
	    referring to generated files.
Linus Torvalds's avatar
Linus Torvalds committed
419

420
	    Example::
Linus Torvalds's avatar
Linus Torvalds committed
421 422 423 424 425

		#drivers/scsi/Makefile
		$(obj)/53c8xx_d.h: $(src)/53c7,8xx.scr $(src)/script_asm.pl
			$(CPP) -DCHIP=810 - < $< | ... $(src)/script_asm.pl

426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442
	    This is a special rule, following the normal syntax
	    required by make.

	    The target file depends on two prerequisite files. References
	    to the target file are prefixed with $(obj), references
	    to prerequisites are referenced with $(src) (because they are not
	    generated files).

	$(kecho)
	    echoing information to user in a rule is often a good practice
	    but when execution "make -s" one does not expect to see any output
	    except for warnings/errors.
	    To support this kbuild defines $(kecho) which will echo out the
	    text following $(kecho) to stdout except if "make -s" is used.

	Example::

443 444 445 446 447 448
		#arch/blackfin/boot/Makefile
		$(obj)/vmImage: $(obj)/vmlinux.gz
			$(call if_changed,uimage)
			@$(kecho) 'Kernel: $@ is ready'


449 450
3.11 $(CC) support functions
----------------------------
451

452
	The kernel may be built with several different versions of
453
	$(CC), each supporting a unique set of features and options.
454
	kbuild provides basic support to check for valid options for $(CC).
455
	$(CC) is usually the gcc compiler, but other alternatives are
456 457 458
	available.

    as-option
459
	as-option is used to check if $(CC) -- when used to compile
460
	assembler (`*.S`) files -- supports the given option. An optional
461
	second option may be specified if the first option is not supported.
462

463 464
	Example::

465 466 467
		#arch/sh/Makefile
		cflags-y += $(call as-option,-Wa$(comma)-isa=$(isa-y),)

468
	In the above example, cflags-y will be assigned the option
469 470 471 472
	-Wa$(comma)-isa=$(isa-y) if it is supported by $(CC).
	The second argument is optional, and if supplied will be used
	if first argument is not supported.

473 474 475 476 477 478 479 480 481 482 483 484 485 486 487
    cc-ldoption
	cc-ldoption is used to check if $(CC) when used to link object files
	supports the given option.  An optional second option may be
	specified if first option are not supported.

	Example::

		#arch/x86/kernel/Makefile
		vsyscall-flags += $(call cc-ldoption, -Wl$(comma)--hash-style=sysv)

	In the above example, vsyscall-flags will be assigned the option
	-Wl$(comma)--hash-style=sysv if it is supported by $(CC).
	The second argument is optional, and if supplied will be used
	if first argument is not supported.

488 489 490 491
    as-instr
	as-instr checks if the assembler reports a specific instruction
	and then outputs either option1 or option2
	C escapes are supported in the test instruction
492
	Note: as-instr-option uses KBUILD_AFLAGS for assembler options
493

494
    cc-option
495 496
	cc-option is used to check if $(CC) supports a given option, and if
	not supported to use an optional second option.
497

498 499
	Example::

500
		#arch/x86/Makefile
501 502
		cflags-y += $(call cc-option,-march=pentium-mmx,-march=i586)

Randy Dunlap's avatar
Randy Dunlap committed
503
	In the above example, cflags-y will be assigned the option
504 505
	-march=pentium-mmx if supported by $(CC), otherwise -march=i586.
	The second argument to cc-option is optional, and if omitted,
506
	cflags-y will be assigned no value if first option is not supported.
507
	Note: cc-option uses KBUILD_CFLAGS for $(CC) options
508 509

   cc-option-yn
510
	cc-option-yn is used to check if gcc supports a given option
511 512
	and return 'y' if supported, otherwise 'n'.

513 514
	Example::

515 516 517 518
		#arch/ppc/Makefile
		biarch := $(call cc-option-yn, -m32)
		aflags-$(biarch) += -a32
		cflags-$(biarch) += -m32
519

520 521 522 523
	In the above example, $(biarch) is set to y if $(CC) supports the -m32
	option. When $(biarch) equals 'y', the expanded variables $(aflags-y)
	and $(cflags-y) will be assigned the values -a32 and -m32,
	respectively.
524
	Note: cc-option-yn uses KBUILD_CFLAGS for $(CC) options
525

526 527 528 529 530 531
    cc-disable-warning
	cc-disable-warning checks if gcc supports a given warning and returns
	the commandline switch to disable it. This special function is needed,
	because gcc 4.4 and later accept any unknown -Wno-* option and only
	warn about it if there is another warning in the source file.

532 533
	Example::

534 535 536 537 538
		KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable)

	In the above example, -Wno-unused-but-set-variable will be added to
	KBUILD_CFLAGS only if gcc really accepts it.

539
    cc-ifversion
540 541 542
	cc-ifversion tests the version of $(CC) and equals the fourth parameter
	if version expression is true, or the fifth (if given) if the version
	expression is false.
543

544 545
	Example::

546
		#fs/reiserfs/Makefile
547
		ccflags-y := $(call cc-ifversion, -lt, 0402, -O1)
548

549
	In this example, ccflags-y will be assigned the value -O1 if the
550
	$(CC) version is less than 4.2.
551
	cc-ifversion takes all the shell operators:
552 553 554 555
	-eq, -ne, -lt, -le, -gt, and -ge
	The third parameter may be a text as in this example, but it may also
	be an expanded variable or a macro.

556
    cc-cross-prefix
557
	cc-cross-prefix is used to check if there exists a $(CC) in path with
558 559 560 561 562
	one of the listed prefixes. The first prefix where there exist a
	prefix$(CC) in the PATH is returned - and if no prefix$(CC) is found
	then nothing is returned.
	Additional prefixes are separated by a single space in the
	call of cc-cross-prefix.
563 564
	This functionality is useful for architecture Makefiles that try
	to set CROSS_COMPILE to well-known values but may have several
565
	values to select between.
566 567
	It is recommended only to try to set CROSS_COMPILE if it is a cross
	build (host arch is different from target arch). And if CROSS_COMPILE
568 569
	is already set then leave it with the old value.

570 571
	Example::

572 573 574 575 576 577 578
		#arch/m68k/Makefile
		ifneq ($(SUBARCH),$(ARCH))
		        ifeq ($(CROSS_COMPILE),)
		               CROSS_COMPILE := $(call cc-cross-prefix, m68k-linux-gnu-)
			endif
		endif

579 580
3.12 $(LD) support functions
----------------------------
Sam Ravnborg's avatar
Sam Ravnborg committed
581 582 583 584 585 586 587

    ld-option
	ld-option is used to check if $(LD) supports the supplied option.
	ld-option takes two options as arguments.
	The second argument is an optional option that can be used if the
	first option is not supported by $(LD).

588 589
	Example::

Sam Ravnborg's avatar
Sam Ravnborg committed
590
		#Makefile
591
		LDFLAGS_vmlinux += $(call ld-option, -X)
Sam Ravnborg's avatar
Sam Ravnborg committed
592 593


594 595
4 Host Program support
======================
Linus Torvalds's avatar
Linus Torvalds committed
596 597 598 599 600 601 602 603 604

Kbuild supports building executables on the host for use during the
compilation stage.
Two steps are required in order to use a host executable.

The first step is to tell kbuild that a host program exists. This is
done utilising the variable hostprogs-y.

The second step is to add an explicit dependency to the executable.
605
This can be done in two ways. Either add the dependency in a rule,
Linus Torvalds's avatar
Linus Torvalds committed
606 607 608
or utilise the variable $(always).
Both possibilities are described in the following.

609 610
4.1 Simple Host Program
-----------------------
Linus Torvalds's avatar
Linus Torvalds committed
611 612 613 614 615 616

	In some cases there is a need to compile and run a program on the
	computer where the build is running.
	The following line tells kbuild that the program bin2hex shall be
	built on the build host.

617 618
	Example::

Linus Torvalds's avatar
Linus Torvalds committed
619 620 621 622 623
		hostprogs-y := bin2hex

	Kbuild assumes in the above example that bin2hex is made from a single
	c-source file named bin2hex.c located in the same directory as
	the Makefile.
624

625 626
4.2 Composite Host Programs
---------------------------
Linus Torvalds's avatar
Linus Torvalds committed
627 628 629 630

	Host programs can be made up based on composite objects.
	The syntax used to define composite objects for host programs is
	similar to the syntax used for kernel objects.
631
	$(<executable>-objs) lists all objects used to link the final
Linus Torvalds's avatar
Linus Torvalds committed
632 633
	executable.

634 635
	Example::

Linus Torvalds's avatar
Linus Torvalds committed
636
		#scripts/lxdialog/Makefile
637
		hostprogs-y   := lxdialog
Linus Torvalds's avatar
Linus Torvalds committed
638 639 640
		lxdialog-objs := checklist.o lxdialog.o

	Objects with extension .o are compiled from the corresponding .c
641
	files. In the above example, checklist.c is compiled to checklist.o
Linus Torvalds's avatar
Linus Torvalds committed
642
	and lxdialog.c is compiled to lxdialog.o.
643

644
	Finally, the two .o files are linked to the executable, lxdialog.
Linus Torvalds's avatar
Linus Torvalds committed
645 646
	Note: The syntax <executable>-y is not permitted for host-programs.

647 648
4.3 Using C++ for host programs
-------------------------------
Linus Torvalds's avatar
Linus Torvalds committed
649 650 651 652 653

	kbuild offers support for host programs written in C++. This was
	introduced solely to support kconfig, and is not recommended
	for general use.

654 655
	Example::

Linus Torvalds's avatar
Linus Torvalds committed
656 657 658 659 660 661
		#scripts/kconfig/Makefile
		hostprogs-y   := qconf
		qconf-cxxobjs := qconf.o

	In the example above the executable is composed of the C++ file
	qconf.cc - identified by $(qconf-cxxobjs).
662

663
	If qconf is composed of a mixture of .c and .cc files, then an
Linus Torvalds's avatar
Linus Torvalds committed
664 665
	additional line can be used to identify this.

666 667
	Example::

Linus Torvalds's avatar
Linus Torvalds committed
668 669 670 671
		#scripts/kconfig/Makefile
		hostprogs-y   := qconf
		qconf-cxxobjs := qconf.o
		qconf-objs    := check.o
672

673 674
4.4 Controlling compiler options for host programs
--------------------------------------------------
Linus Torvalds's avatar
Linus Torvalds committed
675 676 677

	When compiling host programs, it is possible to set specific flags.
	The programs will always be compiled utilising $(HOSTCC) passed
678
	the options specified in $(KBUILD_HOSTCFLAGS).
Linus Torvalds's avatar
Linus Torvalds committed
679
	To set flags that will take effect for all host programs created
680
	in that Makefile, use the variable HOST_EXTRACFLAGS.
Linus Torvalds's avatar
Linus Torvalds committed
681

682 683
	Example::

Linus Torvalds's avatar
Linus Torvalds committed
684 685
		#scripts/lxdialog/Makefile
		HOST_EXTRACFLAGS += -I/usr/include/ncurses
686

Linus Torvalds's avatar
Linus Torvalds committed
687 688 689
	To set specific flags for a single file the following construction
	is used:

690 691
	Example::

Linus Torvalds's avatar
Linus Torvalds committed
692 693
		#arch/ppc64/boot/Makefile
		HOSTCFLAGS_piggyback.o := -DKERNELBASE=$(KERNELBASE)
694

Linus Torvalds's avatar
Linus Torvalds committed
695
	It is also possible to specify additional options to the linker.
696

697 698
	Example::

Linus Torvalds's avatar
Linus Torvalds committed
699
		#scripts/kconfig/Makefile
700
		HOSTLDLIBS_qconf := -L$(QTDIR)/lib
Linus Torvalds's avatar
Linus Torvalds committed
701

702 703
	When linking qconf, it will be passed the extra option
	"-L$(QTDIR)/lib".
704

705 706
4.5 When host programs are actually built
-----------------------------------------
Linus Torvalds's avatar
Linus Torvalds committed
707 708 709 710 711 712 713

	Kbuild will only build host-programs when they are referenced
	as a prerequisite.
	This is possible in two ways:

	(1) List the prerequisite explicitly in a special rule.

714 715
	Example::

Linus Torvalds's avatar
Linus Torvalds committed
716 717 718 719 720
		#drivers/pci/Makefile
		hostprogs-y := gen-devlist
		$(obj)/devlist.h: $(src)/pci.ids $(obj)/gen-devlist
			( cd $(obj); ./gen-devlist ) < $<

721
	The target $(obj)/devlist.h will not be built before
Linus Torvalds's avatar
Linus Torvalds committed
722 723 724 725
	$(obj)/gen-devlist is updated. Note that references to
	the host programs in special rules must be prefixed with $(obj).

	(2) Use $(always)
726

Linus Torvalds's avatar
Linus Torvalds committed
727 728 729 730
	When there is no suitable special rule, and the host program
	shall be built when a makefile is entered, the $(always)
	variable shall be used.

731 732
	Example::

Linus Torvalds's avatar
Linus Torvalds committed
733 734 735 736 737 738 739
		#scripts/lxdialog/Makefile
		hostprogs-y   := lxdialog
		always        := $(hostprogs-y)

	This will tell kbuild to build lxdialog even if not referenced in
	any rule.

740 741
4.6 Using hostprogs-$(CONFIG_FOO)
---------------------------------
Linus Torvalds's avatar
Linus Torvalds committed
742

743
	A typical pattern in a Kbuild file looks like this:
Linus Torvalds's avatar
Linus Torvalds committed
744

745 746
	Example::

Linus Torvalds's avatar
Linus Torvalds committed
747 748 749 750
		#scripts/Makefile
		hostprogs-$(CONFIG_KALLSYMS) += kallsyms

	Kbuild knows about both 'y' for built-in and 'm' for module.
751
	So if a config symbol evaluates to 'm', kbuild will still build
752 753 754
	the binary. In other words, Kbuild handles hostprogs-m exactly
	like hostprogs-y. But only hostprogs-y is recommended to be used
	when no CONFIG symbols are involved.
Linus Torvalds's avatar
Linus Torvalds committed
755

756 757
5 Kbuild clean infrastructure
=============================
Linus Torvalds's avatar
Linus Torvalds committed
758

759
"make clean" deletes most generated files in the obj tree where the kernel
Linus Torvalds's avatar
Linus Torvalds committed
760 761 762 763 764 765 766 767 768
is compiled. This includes generated files such as host programs.
Kbuild knows targets listed in $(hostprogs-y), $(hostprogs-m), $(always),
$(extra-y) and $(targets). They are all deleted during "make clean".
Files matching the patterns "*.[oas]", "*.ko", plus some additional files
generated by kbuild are deleted all over the kernel src tree when
"make clean" is executed.

Additional files can be specified in kbuild makefiles by use of $(clean-files).

769 770
	Example::

771 772
		#lib/Makefile
		clean-files := crc32table.h
Linus Torvalds's avatar
Linus Torvalds committed
773

774 775
When executing "make clean", the file "crc32table.h" will be deleted.
Kbuild will assume files to be in the same relative directory as the
776
Makefile, except if prefixed with $(objtree).
Linus Torvalds's avatar
Linus Torvalds committed
777

778 779
To delete a directory hierarchy use:

780 781
	Example::

Linus Torvalds's avatar
Linus Torvalds committed
782 783 784
		#scripts/package/Makefile
		clean-dirs := $(objtree)/debian/

785 786
This will delete the directory debian in the toplevel directory, including all
subdirectories.
Linus Torvalds's avatar
Linus Torvalds committed
787

788 789 790
To exclude certain files from make clean, use the $(no-clean-files) variable.
This is only a special case used in the top level Kbuild file:

791 792
	Example::

793 794 795
		#Kbuild
		no-clean-files := $(bounds-file) $(offsets-file)

Linus Torvalds's avatar
Linus Torvalds committed
796 797 798 799
Usually kbuild descends down in subdirectories due to "obj-* := dir/",
but in the architecture makefiles where the kbuild infrastructure
is not sufficient this sometimes needs to be explicit.

800 801
	Example::

802
		#arch/x86/boot/Makefile
Linus Torvalds's avatar
Linus Torvalds committed
803 804 805 806 807
		subdir- := compressed/

The above assignment instructs kbuild to descend down in the
directory compressed/ when "make clean" is executed.

808
To support the clean infrastructure in the Makefiles that build the
Linus Torvalds's avatar
Linus Torvalds committed
809 810
final bootimage there is an optional target named archclean:

811 812
	Example::

813
		#arch/x86/Makefile
Linus Torvalds's avatar
Linus Torvalds committed
814
		archclean:
815
			$(Q)$(MAKE) $(clean)=arch/x86/boot
Linus Torvalds's avatar
Linus Torvalds committed
816

817 818
When "make clean" is executed, make will descend down in arch/x86/boot,
and clean as usual. The Makefile located in arch/x86/boot/ may use
Linus Torvalds's avatar
Linus Torvalds committed
819 820 821 822 823 824 825 826 827
the subdir- trick to descend further down.

Note 1: arch/$(ARCH)/Makefile cannot use "subdir-", because that file is
included in the top level makefile, and the kbuild infrastructure
is not operational at that point.

Note 2: All directories listed in core-y, libs-y, drivers-y and net-y will
be visited during "make clean".

828 829
6 Architecture Makefiles
========================
Linus Torvalds's avatar
Linus Torvalds committed
830 831 832

The top level Makefile sets up the environment and does the preparation,
before starting to descend down in the individual directories.
833 834 835 836
The top level makefile contains the generic part, whereas
arch/$(ARCH)/Makefile contains what is required to set up kbuild
for said architecture.
To do so, arch/$(ARCH)/Makefile sets up a number of variables and defines
Linus Torvalds's avatar
Linus Torvalds committed
837 838
a few targets.

839
When kbuild executes, the following steps are followed (roughly):
840

841
1) Configuration of the kernel => produce .config
Linus Torvalds's avatar
Linus Torvalds committed
842
2) Store kernel version in include/linux/version.h
843
3) Updating all other prerequisites to the target prepare:
Linus Torvalds's avatar
Linus Torvalds committed
844
   - Additional prerequisites are specified in arch/$(ARCH)/Makefile
845
4) Recursively descend down in all directories listed in
Linus Torvalds's avatar
Linus Torvalds committed
846
   init-* core* drivers-* net-* libs-* and build all targets.
847
   - The values of the above variables are expanded in arch/$(ARCH)/Makefile.
848
5) All object files are then linked and the resulting file vmlinux is
849
   located at the root of the obj tree.
Linus Torvalds's avatar
Linus Torvalds committed
850 851
   The very first objects linked are listed in head-y, assigned by
   arch/$(ARCH)/Makefile.
852
6) Finally, the architecture-specific part does any required post processing
Linus Torvalds's avatar
Linus Torvalds committed
853 854
   and builds the final bootimage.
   - This includes building boot records
Randy Dunlap's avatar
Randy Dunlap committed
855
   - Preparing initrd images and the like
Linus Torvalds's avatar
Linus Torvalds committed
856 857


858 859
6.1 Set variables to tweak the build to the architecture
--------------------------------------------------------
Linus Torvalds's avatar
Linus Torvalds committed
860

861 862
    LDFLAGS
	Generic $(LD) options
Linus Torvalds's avatar
Linus Torvalds committed
863 864 865 866

	Flags used for all invocations of the linker.
	Often specifying the emulation is sufficient.

867 868
	Example::

Linus Torvalds's avatar
Linus Torvalds committed
869 870
		#arch/s390/Makefile
		LDFLAGS         := -m elf_s390
871

872
	Note: ldflags-y can be used to further customise
873
	the flags used. See chapter 3.7.
874

875 876
    LDFLAGS_vmlinux
	Options for $(LD) when linking vmlinux
Linus Torvalds's avatar
Linus Torvalds committed
877 878

	LDFLAGS_vmlinux is used to specify additional flags to pass to
879
	the linker when linking the final vmlinux image.
Linus Torvalds's avatar
Linus Torvalds committed
880 881
	LDFLAGS_vmlinux uses the LDFLAGS_$@ support.

882 883
	Example::

884
		#arch/x86/Makefile
Linus Torvalds's avatar
Linus Torvalds committed
885 886
		LDFLAGS_vmlinux := -e stext

887 888
    OBJCOPYFLAGS
	objcopy flags
Linus Torvalds's avatar
Linus Torvalds committed
889 890

	When $(call if_changed,objcopy) is used to translate a .o file,
891
	the flags specified in OBJCOPYFLAGS will be used.
Linus Torvalds's avatar
Linus Torvalds committed
892 893 894
	$(call if_changed,objcopy) is often used to generate raw binaries on
	vmlinux.

895 896
	Example::

Linus Torvalds's avatar
Linus Torvalds committed
897 898 899 900 901 902 903
		#arch/s390/Makefile
		OBJCOPYFLAGS := -O binary

		#arch/s390/boot/Makefile
		$(obj)/image: vmlinux FORCE
			$(call if_changed,objcopy)

904
	In this example, the binary $(obj)/image is a binary version of
Linus Torvalds's avatar
Linus Torvalds committed
905 906
	vmlinux. The usage of $(call if_changed,xxx) will be described later.

907
    KBUILD_AFLAGS
908
	Assembler flags
Linus Torvalds's avatar
Linus Torvalds committed
909 910 911 912

	Default value - see top level Makefile
	Append or modify as required per architecture.

913 914
	Example::

Linus Torvalds's avatar
Linus Torvalds committed
915
		#arch/sparc64/Makefile
916
		KBUILD_AFLAGS += -m64 -mcpu=ultrasparc
Linus Torvalds's avatar
Linus Torvalds committed
917

918 919
    KBUILD_CFLAGS
	$(CC) compiler flags
Linus Torvalds's avatar
Linus Torvalds committed
920 921 922 923

	Default value - see top level Makefile
	Append or modify as required per architecture.

924
	Often, the KBUILD_CFLAGS variable depends on the configuration.
Linus Torvalds's avatar
Linus Torvalds committed
925

926 927
	Example::

928 929 930
		#arch/x86/boot/compressed/Makefile
		cflags-$(CONFIG_X86_32) := -march=i386
		cflags-$(CONFIG_X86_64) := -mcmodel=small
931
		KBUILD_CFLAGS += $(cflags-y)
Linus Torvalds's avatar
Linus Torvalds committed
932 933

	Many arch Makefiles dynamically run the target C compiler to
934
	probe supported options::
Linus Torvalds's avatar
Linus Torvalds committed
935

936
		#arch/x86/Makefile
Linus Torvalds's avatar
Linus Torvalds committed
937 938 939 940 941 942

		...
		cflags-$(CONFIG_MPENTIUMII)     += $(call cc-option,\
						-march=pentium2,-march=i686)
		...
		# Disable unit-at-a-time mode ...
943
		KBUILD_CFLAGS += $(call cc-option,-fno-unit-at-a-time)
Linus Torvalds's avatar
Linus Torvalds committed
944 945 946
		...


947
	The first example utilises the trick that a config option expands
Linus Torvalds's avatar
Linus Torvalds committed
948 949
	to 'y' when selected.

950
    KBUILD_AFLAGS_KERNEL
951
	Assembler options specific for built-in
Linus Torvalds's avatar
Linus Torvalds committed
952

953
	$(KBUILD_AFLAGS_KERNEL) contains extra C compiler flags used to compile
Linus Torvalds's avatar
Linus Torvalds committed
954 955
	resident kernel code.

956
    KBUILD_AFLAGS_MODULE
957
	Assembler options specific for modules
Linus Torvalds's avatar
Linus Torvalds committed
958

959
	$(KBUILD_AFLAGS_MODULE) is used to add arch-specific options that
960
	are used for assembler.
961

962
	From commandline AFLAGS_MODULE shall be used (see kbuild.txt).
Linus Torvalds's avatar
Linus Torvalds committed
963

964 965
    KBUILD_CFLAGS_KERNEL
	$(CC) options specific for built-in
966 967 968 969

	$(KBUILD_CFLAGS_KERNEL) contains extra C compiler flags used to compile
	resident kernel code.

970 971
    KBUILD_CFLAGS_MODULE
	Options for $(CC) when building modules
972

973
	$(KBUILD_CFLAGS_MODULE) is used to add arch-specific options that
974 975 976
	are used for $(CC).
	From commandline CFLAGS_MODULE shall be used (see kbuild.txt).

977 978
    KBUILD_LDFLAGS_MODULE
	Options for $(LD) when linking modules
979

980
	$(KBUILD_LDFLAGS_MODULE) is used to add arch-specific options
981
	used when linking modules. This is often a linker script.
982

983
	From commandline LDFLAGS_MODULE shall be used (see kbuild.txt).
984

985 986 987 988 989
    KBUILD_ARFLAGS   Options for $(AR) when creating archives

	$(KBUILD_ARFLAGS) set by the top level Makefile to "D" (deterministic
	mode) if this option is supported by $(AR).

990 991 992 993 994 995 996 997
    ARCH_CPPFLAGS, ARCH_AFLAGS, ARCH_CFLAGS   Overrides the kbuild defaults

	These variables are appended to the KBUILD_CPPFLAGS,
	KBUILD_AFLAGS, and KBUILD_CFLAGS, respectively, after the
	top-level Makefile has set any other flags. This provides a
	means for an architecture to override the defaults.


998 999
6.2 Add prerequisites to archheaders
------------------------------------
1000 1001

	The archheaders: rule is used to generate header files that
1002
	may be installed into user space by "make header_install".
1003 1004 1005 1006 1007

	It is run before "make archprepare" when run on the
	architecture itself.


1008 1009
6.3 Add prerequisites to archprepare
------------------------------------
Linus Torvalds's avatar
Linus Torvalds committed
1010

1011
	The archprepare: rule is used to list prerequisites that need to be
Linus Torvalds's avatar
Linus Torvalds committed
1012
	built before starting to descend down in the subdirectories.
1013
	This is usually used for header files containing assembler constants.
Linus Torvalds's avatar
Linus Torvalds committed
1014

1015 1016
	Example::

1017 1018
		#arch/arm/Makefile
		archprepare: maketools
Linus Torvalds's avatar
Linus Torvalds committed
1019

1020
	In this example, the file target maketools will be processed
1021
	before descending down in the subdirectories.
Linus Torvalds's avatar
Linus Torvalds committed
1022 1023 1024 1025
	See also chapter XXX-TODO that describe how kbuild supports
	generating offset header files.


1026 1027
6.4 List directories to visit when descending
---------------------------------------------
Linus Torvalds's avatar
Linus Torvalds committed
1028 1029 1030 1031 1032 1033

	An arch Makefile cooperates with the top Makefile to define variables
	which specify how to build the vmlinux file.  Note that there is no
	corresponding arch-specific section for modules; the module-building
	machinery is all architecture-independent.

1034

1035 1036 1037 1038 1039 1040 1041
	head-y, init-y, core-y, libs-y, drivers-y, net-y
	    $(head-y) lists objects to be linked first in vmlinux.

	    $(libs-y) lists directories where a lib.a archive can be located.

	    The rest list directories where a built-in.a object file can be
	    located.
Linus Torvalds's avatar
Linus Torvalds committed
1042

1043
	    $(init-y) objects will be located after $(head-y).
Linus Torvalds's avatar
Linus Torvalds committed
1044

1045
	    Then the rest follows in this order:
Linus Torvalds's avatar
Linus Torvalds committed
1046

1047 1048 1049 1050 1051 1052 1053
		$(core-y), $(libs-y), $(drivers-y) and $(net-y).

	    The top level Makefile defines values for all generic directories,
	    and arch/$(ARCH)/Makefile only adds architecture-specific
	    directories.

	    Example::
Linus Torvalds's avatar
Linus Torvalds committed
1054 1055 1056 1057 1058 1059 1060

		#arch/sparc64/Makefile
		core-y += arch/sparc64/kernel/
		libs-y += arch/sparc64/prom/ arch/sparc64/lib/
		drivers-$(CONFIG_OPROFILE)  += arch/sparc64/oprofile/


1061 1062
6.5 Architecture-specific boot images
-------------------------------------
Linus Torvalds's avatar
Linus Torvalds committed
1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079

	An arch Makefile specifies goals that take the vmlinux file, compress
	it, wrap it in bootstrapping code, and copy the resulting files
	somewhere. This includes various kinds of installation commands.
	The actual goals are not standardized across architectures.

	It is common to locate any additional processing in a boot/
	directory below arch/$(ARCH)/.

	Kbuild does not provide any smart way to support building a
	target specified in boot/. Therefore arch/$(ARCH)/Makefile shall
	call make manually to build a target in boot/.

	The recommended approach is to include shortcuts in
	arch/$(ARCH)/Makefile, and use the full path when calling down
	into the arch/$(ARCH)/boot/Makefile.

1080 1081
	Example::

1082 1083
		#arch/x86/Makefile
		boot := arch/x86/boot
Linus Torvalds's avatar
Linus Torvalds committed
1084 1085 1086 1087 1088 1089
		bzImage: vmlinux
			$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@

	"$(Q)$(MAKE) $(build)=<dir>" is the recommended way to invoke
	make in a subdirectory.

Randy Dunlap's avatar
Randy Dunlap committed
1090
	There are no rules for naming architecture-specific targets,
Linus Torvalds's avatar
Linus Torvalds committed
1091
	but executing "make help" will list all relevant targets.
1092
	To support this, $(archhelp) must be defined.
Linus Torvalds's avatar
Linus Torvalds committed
1093

1094 1095
	Example::

1096
		#arch/x86/Makefile
Linus Torvalds's avatar
Linus Torvalds committed
1097 1098
		define archhelp
		  echo  '* bzImage      - Image (arch/$(ARCH)/boot/bzImage)'
1099
		endif
Linus Torvalds's avatar
Linus Torvalds committed
1100 1101 1102 1103

	When make is executed without arguments, the first goal encountered
	will be built. In the top level Makefile the first goal present
	is all:.
1104 1105
	An architecture shall always, per default, build a bootable image.
	In "make help", the default goal is highlighted with a '*'.
Linus Torvalds's avatar
Linus Torvalds committed
1106 1107 1108
	Add a new prerequisite to all: to select a default goal different
	from vmlinux.

1109 1110
	Example::

1111
		#arch/x86/Makefile
1112
		all: bzImage
Linus Torvalds's avatar
Linus Torvalds committed
1113 1114 1115

	When "make" is executed without arguments, bzImage will be built.

1116 1117
6.6 Building non-kbuild targets
-------------------------------
Linus Torvalds's avatar
Linus Torvalds committed
1118 1119

    extra-y
1120
	extra-y specifies additional targets created in the current
1121
	directory, in addition to any targets specified by `obj-*`.
Linus Torvalds's avatar
Linus Torvalds committed
1122 1123

	Listing all targets in extra-y is required for two purposes:
1124

Linus Torvalds's avatar
Linus Torvalds committed
1125
	1) Enable kbuild to check changes in command lines
1126

Linus Torvalds's avatar
Linus Torvalds committed
1127
	   - When $(call if_changed,xxx) is used
1128

Linus Torvalds's avatar
Linus Torvalds committed
1129 1130
	2) kbuild knows what files to delete during "make clean"

1131 1132
	Example::

1133
		#arch/x86/kernel/Makefile
Linus Torvalds's avatar
Linus Torvalds committed
1134 1135
		extra-y := head.o init_task.o

1136
	In this example, extra-y is used to list object files that
1137
	shall be built, but shall not be linked as part of built-in.a.
Linus Torvalds's avatar
Linus Torvalds committed
1138

1139 1140 1141 1142 1143
    header-test-y

	header-test-y specifies headers (*.h) in the current directory that
	should be compile tested to ensure they are self-contained,
	i.e. compilable as standalone units. If CONFIG_HEADER_TEST is enabled,
1144
	this builds them as part of extra-y.
1145

1146 1147 1148 1149 1150 1151 1152 1153 1154
    header-test-pattern-y

	This works as a weaker version of header-test-y, and accepts wildcard
	patterns. The typical usage is:

		  header-test-pattern-y += *.h

	This specifies all the files that matches to '*.h' in the current
	directory, but the files in 'header-test-' are excluded.
1155

1156 1157
6.7 Commands useful for building a boot image
---------------------------------------------
Linus Torvalds's avatar
Linus Torvalds committed
1158

1159 1160
    Kbuild provides a few macros that are useful when building a
    boot image.
Linus Torvalds's avatar
Linus Torvalds committed
1161 1162 1163 1164

    if_changed
	if_changed is the infrastructure used for the following commands.

1165 1166
	Usage::

Linus Torvalds's avatar
Linus Torvalds committed
1167
		target: source(s) FORCE
1168
			$(call if_changed,ld/objcopy/gzip/...)
Linus Torvalds's avatar
Linus Torvalds committed
1169

1170
	When the rule is evaluated, it is checked to see if any files
Randy Dunlap's avatar
Randy Dunlap committed
1171
	need an update, or the command line has changed since the last
Linus Torvalds's avatar
Linus Torvalds committed
1172 1173 1174 1175 1176 1177 1178
	invocation. The latter will force a rebuild if any options
	to the executable have changed.
	Any target that utilises if_changed must be listed in $(targets),
	otherwise the command line check will fail, and the target will
	always be built.
	Assignments to $(targets) are without $(obj)/ prefix.
	if_changed may be used in conjunction with custom commands as
1179
	defined in 6.8 "Custom kbuild commands".
1180

Linus Torvalds's avatar
Linus Torvalds committed
1181
	Note: It is a typical mistake to forget the FORCE prerequisite.
1182 1183
	Another common pitfall is that whitespace is sometimes
	significant; for instance, the below will fail (note the extra space
1184 1185
	after the comma)::

1186
		target: source(s) FORCE
Linus Torvalds's avatar
Linus Torvalds committed
1187

1188 1189 1190 1191
	**WRONG!**	$(call if_changed, ld/objcopy/gzip/...)

        Note:
	      if_changed should not be used more than once per target.
1192
              It stores the executed command in a corresponding .cmd
1193

1194 1195 1196 1197
        file and multiple calls would result in overwrites and
        unwanted results when the target is up to date and only the
        tests on changed commands trigger execution of commands.

Linus Torvalds's avatar
Linus Torvalds committed
1198
    ld
1199
	Link target. Often, LDFLAGS_$@ is used to set specific options to ld.
1200

1201 1202
	Example::

1203
		#arch/x86/boot/Makefile
Linus Torvalds's avatar
Linus Torvalds committed
1204 1205 1206 1207 1208 1209 1210
		LDFLAGS_bootsect := -Ttext 0x0 -s --oformat binary
		LDFLAGS_setup    := -Ttext 0x0 -s --oformat binary -e begtext

		targets += setup setup.o bootsect bootsect.o
		$(obj)/setup $(obj)/bootsect: %: %.o FORCE
			$(call if_changed,ld)

1211 1212
	In this example, there are two possible targets, requiring different
	options to the linker. The linker options are specified using the
Linus Torvalds's avatar
Linus Torvalds committed
1213
	LDFLAGS_$@ syntax - one for each potential target.
1214
	$(targets) are assigned all potential targets, by which kbuild knows
Linus Torvalds's avatar
Linus Torvalds committed
1215
	the targets and will:
1216

Linus Torvalds's avatar
Linus Torvalds committed
1217 1218 1219 1220
		1) check for commandline changes
		2) delete target during make clean

	The ": %: %.o" part of the prerequisite is a shorthand that
1221
	frees us from listing the setup.o and bootsect.o files.
1222 1223 1224

	Note:
	      It is a common mistake to forget the "targets :=" assignment,
Linus Torvalds's avatar
Linus Torvalds committed
1225 1226 1227
	      resulting in the target file being recompiled for no
	      obvious reason.

1228 1229 1230 1231 1232 1233 1234 1235
    objcopy
	Copy binary. Uses OBJCOPYFLAGS usually specified in
	arch/$(ARCH)/Makefile.
	OBJCOPYFLAGS_$@ may be used to set additional options.

    gzip
	Compress target. Use maximum compression to compress target.

1236 1237
	Example::

1238 1239 1240 1241
		#arch/x86/boot/compressed/Makefile
		$(obj)/vmlinux.bin.gz: $(vmlinux.bin.all-y) FORCE
			$(call if_changed,gzip)

1242
    dtc
1243
	Create flattened device tree blob object suitable for linking
1244 1245 1246 1247
	into vmlinux. Device tree blobs linked into vmlinux are placed
	in an init section in the image. Platform code *must* copy the
	blob to non-init memory prior to calling unflatten_device_tree().

1248 1249
	To use this command, simply add `*.dtb` into obj-y or targets, or make
	some other target depend on `%.dtb`
1250

1251
	A central rule exists to create `$(obj)/%.dtb` from `$(src)/%.dts`;
1252
	architecture Makefiles do no need to explicitly write out that rule.
1253

1254 1255
	Example::

1256 1257
		targets += $(dtb-y)
		DTC_FLAGS ?= -p 1024
Linus Torvalds's avatar
Linus Torvalds committed
1258

1259 1260
6.8 Custom kbuild commands
--------------------------
Linus Torvalds's avatar
Linus Torvalds committed
1261

1262
	When kbuild is executing with KBUILD_VERBOSE=0, then only a shorthand
Linus Torvalds's avatar
Linus Torvalds committed
1263 1264
	of a command is normally displayed.
	To enable this behaviour for custom commands kbuild requires
1265 1266 1267 1268 1269 1270
	two variables to be set::

		quiet_cmd_<command>	- what shall be echoed
		      cmd_<command>	- the command to execute

	Example::
Linus Torvalds's avatar
Linus Torvalds committed
1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281

		#
		quiet_cmd_image = BUILD   $@
		      cmd_image = $(obj)/tools/build $(BUILDFLAGS) \
		                                     $(obj)/vmlinux.bin > $@

		targets += bzImage
		$(obj)/bzImage: $(obj)/vmlinux.bin $(obj)/tools/build FORCE
			$(call if_changed,image)
			@echo 'Kernel: $@ is ready'

1282
	When updating the $(obj)/bzImage target, the line:
Linus Torvalds's avatar
Linus Torvalds committed
1283

1284
		BUILD    arch/x86/boot/bzImage
Linus Torvalds's avatar
Linus Torvalds committed
1285 1286

	will be displayed with "make KBUILD_VERBOSE=0".
1287

Linus Torvalds's avatar
Linus Torvalds committed
1288

1289
--- 6.9 Preprocessing linker scripts
Linus Torvalds's avatar
Linus Torvalds committed
1290

1291
	When the vmlinux image is built, the linker script
Linus Torvalds's avatar
Linus Torvalds committed
1292 1293 1294
	arch/$(ARCH)/kernel/vmlinux.lds is used.
	The script is a preprocessed variant of the file vmlinux.lds.S
	located in the same directory.
1295 1296 1297
	kbuild knows .lds files and includes a rule `*lds.S` -> `*lds`.

	Example::
1298

1299
		#arch/x86/kernel/Makefile
Linus Torvalds's avatar
Linus Torvalds committed
1300
		always := vmlinux.lds
1301

Linus Torvalds's avatar
Linus Torvalds committed
1302 1303
		#Makefile
		export CPPFLAGS_vmlinux.lds += -P -C -U$(ARCH)
1304 1305

	The assignment to $(always) is used to tell kbuild to build the
1306 1307
	target vmlinux.lds.
	The assignment to $(CPPFLAGS_vmlinux.lds) tells kbuild to use the
Linus Torvalds's avatar
Linus Torvalds committed
1308
	specified options when building the target vmlinux.lds.
1309

1310 1311 1312 1313 1314 1315 1316
	When building the `*.lds` target, kbuild uses the variables::

		KBUILD_CPPFLAGS	: Set in top-level Makefile
		cppflags-y	: May be set in the kbuild makefile
		CPPFLAGS_$(@F)  : Target-specific flags.
				Note that the full filename is used in this
				assignment.
Linus Torvalds's avatar
Linus Torvalds committed
1317

1318
	The kbuild infrastructure for `*lds` files is used in several
Randy Dunlap's avatar
Randy Dunlap committed
1319
	architecture-specific files.
Linus Torvalds's avatar
Linus Torvalds committed
1320

1321 1322
6.10 Generic header files
-------------------------
Sam Ravnborg's avatar
Sam Ravnborg committed
1323 1324 1325 1326 1327

	The directory include/asm-generic contains the header files
	that may be shared between individual architectures.
	The recommended approach how to use a generic header file is
	to list the file in the Kbuild file.
1328
	See "7.2 generic-y" for further info on syntax etc.
Sam Ravnborg's avatar
Sam Ravnborg committed
1329

1330 1331
6.11 Post-link pass
-------------------
1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345

	If the file arch/xxx/Makefile.postlink exists, this makefile
	will be invoked for post-link objects (vmlinux and modules.ko)
	for architectures to run post-link passes on. Must also handle
	the clean target.

	This pass runs after kallsyms generation. If the architecture
	needs to modify symbol locations, rather than manipulate the
	kallsyms, it may be easier to add another postlink target for
	.tmp_vmlinux? targets to be called from link-vmlinux.sh.

	For example, powerpc uses this to check relocation sanity of
	the linked vmlinux file.

1346 1347
7 Kbuild syntax for exported headers
------------------------------------
1348

1349
The kernel includes a set of headers that is exported to userspace.
1350
Many headers can be exported as-is but other headers require a
1351 1352
minimal pre-processing before they are ready for user-space.
The pre-processing does:
1353

1354
- drop kernel-specific annotations
1355
- drop include of compiler.h
1356
- drop all sections that are kernel internal (guarded by `ifdef __KERNEL__`)
1357

1358
All headers under include/uapi/, include/generated/uapi/,
1359
arch/<arch>/include/uapi/ and arch/<arch>/include/generated/uapi/
1360
are exported.
1361

1362 1363 1364
A Kbuild file may be defined under arch/<arch>/include/uapi/asm/ and
arch/<arch>/include/asm/ to list asm files coming from asm-generic.
See subsequent chapter for the syntax of the Kbuild file.
1365

1366 1367
7.1 no-export-headers
---------------------
1368

1369 1370 1371
	no-export-headers is essentially used by include/uapi/linux/Kbuild to
	avoid exporting specific headers (e.g. kvm.h) on architectures that do
	not support it. It should be avoided as much as possible.
1372

1373 1374
7.2 generic-y
-------------
Sam Ravnborg's avatar
Sam Ravnborg committed
1375 1376 1377 1378 1379

	If an architecture uses a verbatim copy of a header from
	include/asm-generic then this is listed in the file
	arch/$(ARCH)/include/asm/Kbuild like this:

1380 1381
		Example::

Sam Ravnborg's avatar
Sam Ravnborg committed
1382 1383 1384 1385 1386
			#arch/x86/include/asm/Kbuild
			generic-y += termios.h
			generic-y += rtc.h

	During the prepare phase of the build a wrapper include
1387
	file is generated in the directory::
Sam Ravnborg's avatar
Sam Ravnborg committed
1388 1389 1390 1391 1392

		arch/$(ARCH)/include/generated/asm

	When a header is exported where the architecture uses
	the generic header a similar wrapper is generated as part
1393
	of the set of exported headers in the directory::
Sam Ravnborg's avatar
Sam Ravnborg committed
1394 1395 1396 1397 1398

		usr/include/asm

	The generated wrapper will in both cases look like the following:

1399 1400
		Example: termios.h::

Sam Ravnborg's avatar
Sam Ravnborg committed
1401
			#include <asm-generic/termios.h>
1402

1403 1404
7.3 generated-y
---------------
1405 1406

	If an architecture generates other header files alongside generic-y
1407
	wrappers, generated-y specifies them.
1408 1409 1410 1411

	This prevents them being treated as stale asm-generic wrappers and
	removed.

1412 1413
		Example::

1414 1415 1416
			#arch/x86/include/asm/Kbuild
			generated-y += syscalls_32.h

1417 1418
7.4 mandatory-y
---------------
1419

1420
	mandatory-y is essentially used by include/(uapi/)asm-generic/Kbuild
1421 1422 1423 1424 1425
	to define the minimum set of ASM headers that all architectures must have.

	This works like optional generic-y. If a mandatory header is missing
	in arch/$(ARCH)/include/(uapi/)/asm, Kbuild will automatically generate
	a wrapper of the asm-generic one.
1426 1427 1428 1429

	The convention is to list one subdir per line and
	preferably in alphabetic order.

1430 1431
8 Kbuild Variables
==================
Linus Torvalds's avatar
Linus Torvalds committed
1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459

The top Makefile exports the following variables:

    VERSION, PATCHLEVEL, SUBLEVEL, EXTRAVERSION
	These variables define the current kernel version.  A few arch
	Makefiles actually use these values directly; they should use
	$(KERNELRELEASE) instead.

	$(VERSION), $(PATCHLEVEL), and $(SUBLEVEL) define the basic
	three-part version number, such as "2", "4", and "0".  These three
	values are always numeric.

	$(EXTRAVERSION) defines an even tinier sublevel for pre-patches
	or additional patches.	It is usually some non-numeric string
	such as "-pre4", and is often blank.

    KERNELRELEASE
	$(KERNELRELEASE) is a single string such as "2.4.0-pre4", suitable
	for constructing installation directory names or showing in
	version strings.  Some arch Makefiles use it for this purpose.

    ARCH
	This variable defines the target architecture, such as "i386",
	"arm", or "sparc". Some kbuild Makefiles test $(ARCH) to
	determine which files to compile.

	By default, the top Makefile sets $(ARCH) to be the same as the
	host system architecture.  For a cross build, a user may
1460
	override the value of $(ARCH) on the command line::
Linus Torvalds's avatar
Linus Torvalds committed
1461 1462 1463 1464 1465 1466 1467

	    make ARCH=m68k ...


    INSTALL_PATH
	This variable defines a place for the arch Makefiles to install
	the resident kernel image and System.map file.
Randy Dunlap's avatar
Randy Dunlap committed
1468
	Use this for architecture-specific install targets.
Linus Torvalds's avatar
Linus Torvalds committed
1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479

    INSTALL_MOD_PATH, MODLIB
	$(INSTALL_MOD_PATH) specifies a prefix to $(MODLIB) for module
	installation.  This variable is not defined in the Makefile but
	may be passed in by the user if desired.

	$(MODLIB) specifies the directory for module installation.
	The top Makefile defines $(MODLIB) to
	$(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE).  The user may
	override this value on the command line if desired.

1480
    INSTALL_MOD_STRIP
1481
	If this variable is specified, it will cause modules to be stripped
1482
	after they are installed.  If INSTALL_MOD_STRIP is '1', then the
1483
	default option --strip-debug will be used.  Otherwise, the
1484 1485
	INSTALL_MOD_STRIP value will be used as the option(s) to the strip
	command.
1486 1487


1488 1489
9 Makefile language
===================
Linus Torvalds's avatar
Linus Torvalds committed
1490

1491
The kernel Makefiles are designed to be run with GNU Make.  The Makefiles
Linus Torvalds's avatar
Linus Torvalds committed
1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507
use only the documented features of GNU Make, but they do use many
GNU extensions.

GNU Make supports elementary list-processing functions.  The kernel
Makefiles use a novel style of list building and manipulation with few
"if" statements.

GNU Make has two assignment operators, ":=" and "=".  ":=" performs
immediate evaluation of the right-hand side and stores an actual string
into the left-hand side.  "=" is like a formula definition; it stores the
right-hand side in an unevaluated form and then evaluates this form each
time the left-hand side is used.

There are some cases where "=" is appropriate.  Usually, though, ":="
is the right choice.

1508 1509
10 Credits
==========
Linus Torvalds's avatar
Linus Torvalds committed
1510

1511 1512 1513 1514
- Original version made by Michael Elizabeth Chastain, <mailto:mec@shout.net>
- Updates by Kai Germaschewski <kai@tp1.ruhr-uni-bochum.de>
- Updates by Sam Ravnborg <sam@ravnborg.org>
- Language QA by Jan Engelhardt <jengelh@gmx.de>
Linus Torvalds's avatar
Linus Torvalds committed
1515

1516 1517
11 TODO
=======
Linus Torvalds's avatar
Linus Torvalds committed
1518

1519
- Describe how kbuild supports shipped files with _shipped.
Linus Torvalds's avatar
Linus Torvalds committed
1520 1521
- Generating offset header files.
- Add more variables to section 7?