import of upstream 2.4.34.4 from kernel.org
[linux-2.4.git] / Documentation / kbuild / makefiles.txt
1 Linux Kernel Makefiles
2 2000-September-14
3 Michael Elizabeth Chastain, <mec@shout.net>
4
5
6
7 === Table of Contents
8
9 This document describes the Linux kernel Makefiles.
10
11   1  Overview
12   2  Who does what
13   3  Makefile language
14   4  Variables passed down from the top
15   5  The structure of an arch Makefile
16      5.1  Architecture-specific variables
17      5.2  Vmlinux build variables
18      5.3  Post-vmlinux goals
19      5.4  Mandatory arch-specific goals
20   6  The structure of a subdirectory Makefile
21      6.1  Comments
22      6.2  Goal definitions
23      6.3  Rules.make section
24      6.4  Special rules
25   7  Rules.make variables
26      7.1  Subdirectories
27      7.2  Object file goals
28      7.3  Library file goals
29      7.4  Loadable module goals
30      7.5  Multi-part modules
31      7.6  Compilation flags
32      7.7  Miscellaneous variables
33   8  New-style variables
34      8.1  New variables
35      8.2  Converting to old-style
36   9  Credits
37
38
39 === 1 Overview
40
41 The Makefiles have five parts:
42
43     Makefile: the top Makefile.
44     .config: the kernel configuration file.
45     arch/*/Makefile: the arch Makefiles.
46     Subdirectory Makefiles: there are about 300 of these.
47     Rules.make: the common rules for all subdirectory Makefiles.
48
49 The top Makefile reads the .config file, which comes from the
50 kernel configuration process.
51
52 The top Makefile is responsible for building two major products: vmlinux
53 (the resident kernel image) and modules (any module files).  It builds
54 these goals by recursively descending into the subdirectories of the
55 kernel source tree.  The list of subdirectories which are visited depends
56 upon the kernel configuration.
57
58 The top Makefile textually includes an arch Makefile with the name
59 arch/$(ARCH)/Makefile.  The arch Makefile supplies architecture-specific
60 information to the top Makefile.
61
62 Each subdirectory has a Makefile which carries out the commands passed
63 down from above.  The subdirectory Makefile uses information from the
64 .config file to construct various file lists, and then it textually
65 includes the common rules in Rules.make.
66
67 Rules.make defines rules which are common to all the subdirectory
68 Makefiles.  It has a public interface in the form of certain variable
69 lists.  It then declares rules based on those lists.
70
71
72
73 === 2 Who does what
74
75 People have four different relationships with the kernel Makefiles.
76
77 *Users* are people who build kernels.  These people type commands such as
78 "make menuconfig" or "make bzImage".  They usually do not read or edit
79 any kernel Makefiles (or any other source files).
80
81 *Normal developers* are people who work on features such as device
82 drivers, file systems, and network protocols.  These people need to
83 maintain the subdirectory Makefiles for the subsystem that they are
84 working on.  In order to do this effectively, they need some overall
85 knowledge about the kernel Makefiles, plus detailed knowledge about the
86 public interface for Rules.make.
87
88 *Arch developers* are people who work on an entire architecture, such
89 as sparc or ia64.  Arch developers need to know about the arch Makefiles
90 as well as subdirectory Makefiles.
91
92 *Kbuild developers* are people who work on the kernel build system itself.
93 These people need to know about all aspects of the kernel Makefiles.
94
95 This document is aimed towards normal developers and arch developers.
96
97
98
99 === 3 Makefile language
100
101 The kernel Makefiles are designed to run with GNU Make.  The Makefiles
102 use only the documented features of GNU Make, but they do use many
103 GNU extensions.
104
105 GNU Make supports elementary list-processing functions.  The kernel
106 Makefiles use a novel style of list building and manipulation with few
107 "if" statements.
108
109 GNU Make has two assignment operators, ":=" and "=".  ":=" performs
110 immediate evaluation of the right-hand side and stores an actual string
111 into the left-hand side.  "=" is like a formula definition; it stores the
112 right-hand side in an unevaluated form and then evaluates this form each
113 time the left-hand side is used.
114
115 There are some cases where "=" is appropriate.  Usually, though, ":="
116 is the right choice.
117
118 All of the examples in this document were drawn from actual kernel
119 sources.  The examples have been reformatted (white space changed, lines
120 split), but are otherwise exactly the same.
121
122
123
124 === 4 Variables passed down from the top
125
126 The top Makefile exports the following variables:
127
128     VERSION, PATCHLEVEL, SUBLEVEL, EXTRAVERSION
129
130         These variables define the current kernel version.  A few arch
131         Makefiles actually use these values directly; they should use
132         $(KERNELRELEASE) instead.
133
134         $(VERSION), $(PATCHLEVEL), and $(SUBLEVEL) define the basic
135         three-part version number, such as "2", "4", and "0".  These three
136         values are always numeric.
137
138         $(EXTRAVERSION) defines an even tinier sublevel for pre-patches
139         or additional patches.  It is usually some non-numeric string
140         such as "-pre4", and is often blank.
141
142     KERNELRELEASE
143
144         $(KERNELRELEASE) is a single string such as "2.4.0-pre4", suitable
145         for constructing installation directory names or showing in
146         version strings.  Some arch Makefiles use it for this purpose.
147
148     ARCH
149
150         This variable defines the target architecture, such as "i386",
151         "arm", or "sparc".   Many subdirectory Makefiles test $(ARCH)
152         to determine which files to compile.
153
154         By default, the top Makefile sets $(ARCH) to be the same as the
155         host system system architecture.  For a cross build, a user may
156         override the value of $(ARCH) on the command line:
157
158             make ARCH=m68k ...
159
160     TOPDIR, HPATH
161         
162         $(TOPDIR) is the path to the top of the kernel source tree.
163         Subdirectory Makefiles need this so that they can include
164         $(TOPDIR)/Rules.make.
165
166         $(HPATH) is equal to $(TOPDIR)/include.  A few arch Makefiles
167         need to use this to do special things using include files.
168
169     SUBDIRS
170
171         $(SUBDIRS) is a list of directories which the top Makefile
172         enters in order to build either vmlinux or modules.  The actual
173         directories in $(SUBDIRS) depend on the kernel configuration.
174         The top Makefile defines this variable, and the arch Makefile
175         extends it.
176
177     HEAD, CORE_FILES, NETWORKS, DRIVERS, LIBS
178     LINKFLAGS
179
180         $(HEAD), $(CORE_FILES), $(NETWORKS), $(DRIVERS), and $(LIBS)
181         specify lists of object files and libraries to be linked into
182         vmlinux.
183         
184         The files in $(HEAD) are linked first in vmlinux.
185
186         $(LINKFLAGS) specifies the flags to build vmlinux.
187
188         The top Makefile and the arch Makefile jointly define these
189         variables.  The top Makefile defines $(CORE_FILES), $(NETWORKS),
190         $(DRIVERS), and $(LIBS).  The arch Makefile defines $(HEAD)
191         and $(LINKFLAGS), and extends $(CORE_FILES) and $(LIBS).
192
193         Note: there are more variables here than necessary.  $(NETWORKS),
194         $(DRIVERS), and even $(LIBS) could be subsumed into $(CORE_FILES).
195
196     CPP, CC, AS, LD, AR, NM, STRIP, OBJCOPY, OBJDUMP
197     CPPFLAGS, CFLAGS, CFLAGS_KERNEL, MODFLAGS, AFLAGS, LDFLAGS
198     PERL
199     GENKSYMS
200
201         These variables specify the commands and flags that Rules.make
202         uses to build goal files from source files.
203
204         $(CFLAGS_KERNEL) contains extra C compiler flags used to compile
205         resident kernel code.
206
207         $(MODFLAGS) contains extra C compiler flags used to compile code
208         for loadable kernel modules.  In the future, this flag may be
209         renamed to the more regular name $(CFLAGS_MODULE).
210
211         $(AFLAGS) contains assembler flags.
212
213         $(GENKSYMS) contains the command used to generate kernel symbol
214         signatures when CONFIG_MODVERSIONS is enabled.  The genksyms
215         command comes from the modutils package.
216
217     CROSS_COMPILE
218
219         This variable is a prefix path for other variables such as $(CC),
220         $(AS), and $(LD).  The arch Makefiles sometimes use and set this
221         variable explicitly.  Subdirectory Makefiles don't need to worry
222         about it.
223
224         The user may override $(CROSS_COMPILE) on the command line if
225         desired.
226
227     HOSTCC, HOSTCFLAGS
228
229         These variables define the C compiler and C compiler flags to
230         be used for compiling host side programs.  These are separate
231         variables because the target architecture can be different from
232         the host architecture.
233
234         If your Makefile compiles and runs a program that is executed
235         during the course of building the kernel, then it should use
236         $(HOSTCC) and $(HOSTCFLAGS).
237
238         For example, the subdirectory drivers/pci has a helper program
239         named gen-devlist.c.  This program reads a list of PCI ID's and
240         generates C code in the output files classlist.h and devlist.h.
241
242         Suppose that a user has an i386 computer and wants to build a
243         kernel for an ia64 machine.  Then the user would use an ia64
244         cross-compiler for most of the compilation, but would use a
245         native i386 host compiler to compile drivers/pci/gen-devlist.c.
246
247         For another example, kbuild helper programs such as
248         scripts/mkdep.c and scripts/lxdialog/*.c are compiled with
249         $(HOSTCC) rather than $(CC).
250
251     ROOT_DEV, SVGA_MODE, RAMDISK
252
253         End users edit these variables to specify certain information
254         about the configuration of their kernel.  These variables
255         are ancient!  They are also specific to the i386 architecture.
256         They really should be replaced with CONFIG_* options.
257
258     MAKEBOOT
259
260         This variable is defined and used only inside the main arch
261         Makefiles.  The top Makefile should not export it.
262
263     INSTALL_PATH
264
265         This variable defines a place for the arch Makefiles to install
266         the resident kernel image and System.map file.
267
268     INSTALL_MOD_PATH, MODLIB
269
270         $(INSTALL_MOD_PATH) specifies a prefix to $(MODLIB) for module
271         installation.  This variable is not defined in the Makefile but
272         may be passed in by the user if desired.
273
274         $(MODLIB) specifies the directory for module installation.
275         The top Makefile defines $(MODLIB) to
276         $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE).  The user may
277         override this value on the command line if desired.
278
279     CONFIG_SHELL
280
281         This variable is private between Makefile and Rules.make.
282         Arch makefiles and subdirectory Makefiles should never use this.
283
284     MODVERFILE
285
286         An internal variable.  This doesn't need to be exported, as it
287         is never used outside of the top Makefile.
288
289     MAKE, MAKEFILES
290
291         Some variables internal to GNU Make.
292
293         $(MAKEFILES) in particular is used to force the arch Makefiles
294         and subdirectory Makefiles to read $(TOPDIR)/.config without
295         including it explicitly.  (This was an implementational hack
296         and could be fixed).
297
298
299
300 === 5 The structure of an arch Makefile
301
302
303
304 --- 5.1 Architecture-specific variables
305
306 The top Makefile includes one arch Makefile file, arch/$(ARCH)/Makefile.
307 This section describes the functions of the arch Makefile.
308
309 An arch Makefile extends some of the top Makefile's variables with
310 architecture-specific values.
311
312     SUBDIRS
313
314         The top Makefile defines $(SUBDIRS).  The arch Makefile extends
315         $(SUBDIRS) with a list of architecture-specific directories.
316
317         Example:
318
319                 # arch/alpha/Makefile
320
321                 SUBDIRS := $(SUBDIRS) arch/alpha/kernel arch/alpha/mm \
322                            arch/alpha/lib arch/alpha/math-emu
323
324         This list may depend on the configuration:
325
326                 # arch/arm/Makefile
327
328                 ifeq ($(CONFIG_ARCH_ACORN),y)
329                 SUBDIRS         += drivers/acorn
330                 ...
331                 endif
332
333     CPP, CC, AS, LD, AR, NM, STRIP, OBJCOPY, OBJDUMP
334     CPPFLAGS, CFLAGS, CFLAGS_KERNEL, MODFLAGS, AFLAGS, LDFLAGS
335
336         The top Makefile defines these variables, and the arch Makefile
337         extends them.
338
339         Many arch Makefiles dynamically run the target C compiler to
340         probe supported options:
341
342                 # arch/i386/Makefile
343
344                 # prevent gcc from keeping the stack 16 byte aligned
345                 CFLAGS += $(shell if $(CC) -mpreferred-stack-boundary=2 \
346                           -S -o /dev/null -xc /dev/null >/dev/null 2>&1; \
347                           then echo "-mpreferred-stack-boundary=2"; fi)
348
349         And, of course, $(CFLAGS) can depend on the configuration:
350
351                 # arch/i386/Makefile
352
353                 ifdef CONFIG_M386
354                 CFLAGS += -march=i386
355                 endif
356
357                 ifdef CONFIG_M486
358                 CFLAGS += -march=i486
359                 endif
360
361                 ifdef CONFIG_M586
362                 CFLAGS += -march=i586
363                 endif
364
365         Some arch Makefiles redefine the compilation commands in order
366         to add architecture-specific flags:
367
368                 # arch/s390/Makefile
369
370                 LD=$(CROSS_COMPILE)ld -m elf_s390
371                 OBJCOPY=$(CROSS_COMPILE)objcopy -O binary -R .note -R .comment -S
372
373
374
375 --- 5.2 Vmlinux build variables
376
377 An arch Makefile cooperates with the top Makefile to define variables
378 which specify how to build the vmlinux file.  Note that there is no
379 corresponding arch-specific section for modules; the module-building
380 machinery is all architecture-independent.
381
382     HEAD, CORE_FILES, LIBS
383     LINKFLAGS
384
385         The top Makefile defines the architecture-independent core of
386         thse variables, and the arch Makefile extends them.  Note that the
387         arch Makefile defines (not just extends) $(HEAD) and $(LINKFLAGS).
388
389         Example:
390
391                 # arch/m68k/Makefile
392
393                 ifndef CONFIG_SUN3
394                 LINKFLAGS = -T $(TOPDIR)/arch/m68k/vmlinux.lds
395                 else
396                 LINKFLAGS = -T $(TOPDIR)/arch/m68k/vmlinux-sun3.lds -N
397                 endif
398
399                 ...
400
401                 ifndef CONFIG_SUN3
402                 HEAD := arch/m68k/kernel/head.o
403                 else
404                 HEAD := arch/m68k/kernel/sun3-head.o
405                 endif
406
407                 SUBDIRS += arch/m68k/kernel arch/m68k/mm arch/m68k/lib
408                 CORE_FILES := arch/m68k/kernel/kernel.o arch/m68k/mm/mm.o $(CORE_FILES)
409                 LIBS += arch/m68k/lib/lib.a
410
411
412
413 --- 5.3 Post-vmlinux goals
414
415 An arch Makefile specifies goals that take the vmlinux file, compress
416 it, wrap it in bootstrapping code, and copy the resulting files somewhere.
417 This includes various kinds of installation commands.
418
419 These post-vmlinux goals are not standardized across different
420 architectures.  Here is a list of these goals and the architectures
421 that support each of them (as of kernel version 2.4.0-test6-pre5):
422
423     balo                mips
424     bootimage           alpha
425     bootpfile           alpha, ia64
426     bzImage             i386, m68k
427     bzdisk              i386
428     bzlilo              i386
429     compressed          i386, m68k, mips, mips64, sh
430     dasdfmt             s390
431     Image               arm
432     image               s390
433     install             arm, i386
434     lilo                m68k
435     msb                 alpha, ia64
436     my-special-boot     alpha, ia64
437     orionboot           mips
438     rawboot             alpha
439     silo                s390
440     srmboot             alpha
441     tftpboot.img        sparc, sparc64
442     vmlinux.64          mips64
443     vmlinux.aout        sparc64
444     zImage              arm, i386, m68k, mips, mips64, ppc, sh
445     zImage.initrd       ppc
446     zdisk               i386, mips, mips64, sh
447     zinstall            arm
448     zlilo               i386
449     znetboot.initrd     ppc
450
451
452
453 --- 5.4 Mandatory arch-specific goals
454
455 An arch Makefile must define the following arch-specific goals.
456 These goals provide arch-specific actions for the corresponding goals
457 in the top Makefile:
458
459     archclean           clean
460     archdep             dep
461     archmrproper        mrproper
462
463
464
465 === 6 The structure of a subdirectory Makefile
466
467 A subdirectory Makefile has four sections.
468
469
470
471 --- 6.1 Comments
472
473 The first section is a comment header. Historically, many anonymous
474 people have edited kernel Makefiles without leaving any change
475 histories in the header; comments from them would have been valuable.
476
477
478
479 --- 6.2 Goal definitions
480
481 The second section is a bunch of definitions that are the heart of the
482 subdirectory Makefile.  These lines define the files to be built, any
483 special compilation options, and any subdirectories to be recursively
484 entered.  The declarations in these lines depend heavily on the kernel
485 configuration variables (CONFIG_* symbols).
486
487 The second section looks like this:
488
489         # drivers/block/Makefile
490         obj-$(CONFIG_MAC_FLOPPY)        += swim3.o
491         obj-$(CONFIG_BLK_DEV_FD)        += floppy.o
492         obj-$(CONFIG_AMIGA_FLOPPY)      += amiflop.o
493         obj-$(CONFIG_ATARI_FLOPPY)      += ataflop.o
494
495
496 --- 6.3 Rules.make section
497
498 The third section is the single line:
499
500         include $(TOPDIR)/Rules.make
501
502
503
504 --- 6.4 Special rules
505
506 The fourth section contains any special Makefile rules needed that are
507 not available through the common rules in Rules.make.
508
509
510
511 === 7 Rules.make variables
512
513 The public interface of Rules.make consists of the following variables:
514
515
516
517 --- 7.1 Subdirectories
518
519 A Makefile is only responsible for building objects in its own
520 directory. Files in subdirectories should be taken care of by
521 Makefiles in the these subdirs. The build system will automatically
522 invoke make recursively in subdirectories, provided you let it know of
523 them.
524
525 To do so, use the subdir-{y,m,n,} variables:
526
527         subdir-$(CONFIG_ISDN)                   += i4l
528         subdir-$(CONFIG_ISDN_CAPI)              += capi
529
530 When building the actual kernel, i.e. vmlinux ("make
531 {vmlinux,bzImage,...}"), make will recursively descend into
532 directories listed in $(subdir-y).
533
534 When building modules ("make modules"), make will recursively descend
535 into directories listed in $(subdir-m).
536
537 When building the dependencies ("make dep") make needs to visit every
538 subdir, so it'll descend into every directory listed in 
539 $(subdir-y), $(subdir-m), $(subdir-n), $(subdir-).
540
541 You may encounter the case where a config option may be set to "y", but
542 you still want to possibly build modules in that subdirectory.
543
544 For example, drivers/isdn/capi/Makefile has
545
546         obj-$(CONFIG_ISDN_CAPI)                 += kernelcapi.o capiutil.o
547         obj-$(CONFIG_ISDN_CAPI_CAPI20)          += capi.o
548
549 where it's possible that CONFIG_ISDN_CAPI=y, but
550 CONFIG_ISDN_CAPI_CAPI20=m.
551
552 This is expressed by the following construct in the parent Makefile
553 drivers/isdn/Makefile:
554
555         mod-subdirs                             := i4l hisax capi eicon
556         subdir-$(CONFIG_ISDN_CAPI)              += capi
557
558 Having a subdir ("capi") listed in the variable $(mod-subdirs) will
559 make the build system enter the specified subdirectory during "make
560 modules" also, even though the subdir ("capi") is listed only in
561 $(subdir-y), not $(subdir-m).
562
563
564 --- 7.2 Object file goals
565
566     O_TARGET, obj-y
567
568         The subdirectory Makefile specifies object files for vmlinux
569         in the lists $(obj-y).  These lists depend on the kernel
570         configuration.
571
572         Rules.make compiles all the $(obj-y) files.  It then calls
573         "$(LD) -r" to merge these files into one .o file with the name
574         $(O_TARGET).  This $(O_TARGET) is later linked into vmlinux by 
575         a parent Makefile.
576
577         The order of files in $(obj-y) is significant.  Duplicates in
578         the lists are allowed: the first instance will be linked into
579         $(O_TARGET) and succeeding instances will be ignored.
580
581         Link order is significant, because certain functions
582         (module_init() / __initcall) will be called during boot in the
583         order they appear. So keep in mind that changing the link
584         order may e.g.  change the order in which your SCSI
585         controllers are detected, and thus you disks are renumbered.
586
587         Example:
588
589             # Makefile for the kernel ISDN subsystem and device drivers.
590
591             # The target object and module list name.
592
593             O_TARGET        := vmlinux-obj.o
594
595             # Each configuration option enables a list of files.
596
597             obj-$(CONFIG_ISDN)                      += isdn.o
598             obj-$(CONFIG_ISDN_PPP_BSDCOMP)          += isdn_bsdcomp.o
599
600             # The global Rules.make.
601
602             include $(TOPDIR)/Rules.make
603
604 --- 7.3 Library file goals
605
606     L_TARGET
607
608         Instead of building an O_TARGET object file, you may also
609         build an archive which again contains objects listed in
610         $(obj-y). This is normally not necessary and only used in
611         the lib, arch/$(ARCH)/lib directories.
612
613
614 --- 7.4 Loadable module goals
615
616     obj-m
617
618         $(obj-m) specify object files which are built as loadable
619         kernel modules.
620
621         A module may be built from one source file or several source
622         files. In the case of one source file, the subdirectory
623         Makefile simply adds the file to $(obj-m)
624
625         Example:
626
627             obj-$(CONFIG_ISDN_PPP_BSDCOMP)          += isdn_bsdcomp.o
628
629         If a kernel module is built from several source files, you specify
630         that you want to build a module in the same way as above.
631
632         However, the build system of course needs to know which the parts
633         are that you want to build your module of, so you have to tell it
634         by setting an $(<module_name>-objs) variable.
635
636         Example:
637
638             obj-$(CONFIG_ISDN)                      += isdn.o
639
640             isdn-objs := isdn_net.o isdn_tty.o isdn_v110.o isdn_common.o
641
642         In this example, the module name will be isdn.o. Rules.make
643         will compile the objects listed in $(isdn-objs) and then run
644         "$(LD) -r" on the list of these files to generate isdn.o
645
646         Note: Of course, when you are building objects into the kernel,
647         the syntax above will also work. So, if you have CONFIG_ISDN=y,
648         the build system will build an isdn.o for you out of the individual
649         parts and then link this into the $(O_TARGET), as you'd expect.
650
651
652 --- 7.5 Objects which export symbols
653
654     export-objs
655
656         When using loadable modules, not every global symbol in the
657         kernel / other modules is automatically available, only those
658         explicitly exported are available for your module.
659
660         To make a symbol available for use in modules, to "export" it,
661         use the EXPORT_SYMBOL(<symbol>) directive in your source. In
662         addition, you need to list all object files which export symbols
663         (i.e. their source contains an EXPORT_SYMBOL() directive) in the
664         Makefile variable $(export-objs).
665
666         Example:
667
668             # Objects that export symbols.
669
670             export-objs     := isdn_common.o
671
672         since isdn_common.c contains
673
674             EXPORT_SYMBOL(register_isdn);
675
676         which makes the function register_isdn available to
677         low-level ISDN drivers.
678             
679
680 --- 7.6 Compilation flags
681
682     EXTRA_CFLAGS, EXTRA_AFLAGS, EXTRA_LDFLAGS, EXTRA_ARFLAGS
683
684         $(EXTRA_CFLAGS) specifies options for compiling C files with
685         $(CC).  The options in this variable apply to all $(CC) commands
686         for files in the current directory.
687
688         Example:
689
690                 # drivers/sound/emu10k1/Makefile
691                 EXTRA_CFLAGS += -I.
692                 ifdef DEBUG
693                     EXTRA_CFLAGS += -DEMU10K1_DEBUG
694                 endif
695
696         $(EXTRA_CFLAGS) does not apply to subdirectories of the current
697         directory.  Also, it does not apply to files compiled with
698         $(HOSTCC).
699
700         This variable is necessary because the top Makefile owns the
701         variable $(CFLAGS) and uses it for compilation flags for the
702         entire tree.
703
704         $(EXTRA_AFLAGS) is a similar string for per-directory options
705         when compiling assembly language source.
706
707         Example: at the time of writing, there were no examples of
708         $(EXTRA_AFLAGS) in the kernel corpus.
709
710         $(EXTRA_LDFLAGS) and $(EXTRA_ARFLAGS) are similar strings for
711         per-directory options to $(LD) and $(AR).
712
713         Example: at the time of writing, there were no examples of
714         $(EXTRA_LDFLAGS) or $(EXTRA_ARFLAGS) in the kernel corpus.
715
716     CFLAGS_$@, AFLAGS_$@
717
718         $(CFLAGS_$@) specifies per-file options for $(CC).  The $@
719         part has a literal value which specifies the file that it's for.
720
721         Example:
722
723                 # drivers/scsi/Makefile
724                 CFLAGS_aha152x.o =   -DAHA152X_STAT -DAUTOCONF
725                 CFLAGS_gdth.o    = # -DDEBUG_GDTH=2 -D__SERIAL__ -D__COM2__ \
726                                      -DGDTH_STATISTICS
727                 CFLAGS_seagate.o =   -DARBITRATE -DPARITY -DSEAGATE_USE_ASM
728
729         These three lines specify compilation flags for aha152x.o,
730         gdth.o, and seagate.o
731
732         $(AFLAGS_$@) is a similar feature for source files in assembly
733         languages.
734
735         Example:
736
737                 # arch/arm/kernel/Makefile
738                 AFLAGS_head-armv.o := -DTEXTADDR=$(TEXTADDR) -traditional
739                 AFLAGS_head-armo.o := -DTEXTADDR=$(TEXTADDR) -traditional
740
741         Rules.make has a feature where an object file depends on the
742         value of $(CFLAGS_$@) that was used to compile it.  (It also
743         depends on the values of $(CFLAGS) and $(EXTRA_CFLAGS)).  Thus,
744         if you change the value of $(CFLAGS_$@) for a file, either by
745         editing the Makefile or overriding the value some other way,
746         Rules.make will do the right thing and re-compile your source
747         file with the new options.
748
749         Note: because of a deficiency in Rules.make, assembly language
750         files do not have flag dependencies.  If you edit $(AFLAGS_$@)
751         for such a file, you will have to remove the object file in order
752         to re-build from source.
753
754     LD_RFLAG
755
756         This variable is used, but never defined.  It appears to be a
757         vestige of some abandoned experiment.
758
759
760
761 --- 7.7 Miscellaneous variables
762
763     IGNORE_FLAGS_OBJS
764
765         $(IGNORE_FLAGS_OBJS) is a list of object files which will not have
766         their flag dependencies automatically tracked.  This is a hackish
767         feature, used to kludge around a problem in the implementation
768         of flag dependencies.  (The problem is that flag dependencies
769         assume that a %.o file is built from a matching %.S or %.c file.
770         This is sometimes not true).
771
772     USE_STANDARD_AS_RULE
773
774         This is a transition variable.  If $(USE_STANDARD_AS_RULE)
775         is defined, then Rules.make will provide standard rules for
776         assembling %.S files into %.o files or %.s files (%.s files
777         are useful only to developers).
778
779         If $(USE_STANDARD_AS_RULE) is not defined, then Rules.make
780         will not provide these standard rules.  In this case, the
781         subdirectory Makefile must provide its own private rules for
782         assembling %.S files.
783
784         In the past, all Makefiles provided private %.S rules.  Newer
785         Makefiles should define USE_STANDARD_AS_RULE and use the standard
786         Rules.make rules.  As soon as all the Makefiles across all
787         architectures have been converted to USE_STANDARD_AS_RULE, then
788         Rules.make can drop the conditional test on USE_STANDARD_AS_RULE.
789         After that, all the other Makefiles can drop the definition of
790         USE_STANDARD_AS_RULE.
791
792
793
794 === 8 New-style variables
795
796 [ This sections dates back from a time where the way to write Makefiles
797   described above was "new-style". I'm leaving it in as it describes the
798   same thing in other words, so it may be of some use ]
799
800 The "new-style variables" are simpler and more powerful than the
801 "old-style variables".  As a result, many subdirectory Makefiles shrank
802 more than 60%.  This author hopes that, in time, all arch Makefiles and
803 subdirectory Makefiles will convert to the new style.
804
805 Rules.make does not understand new-style variables.  Thus, each new-style
806 Makefile has a section of boilerplate code that converts the new-style
807 variables into old-style variables.  There is also some mixing, where
808 people define most variables using "new style" but then fall back to
809 "old style" for a few lines.
810
811 --- 8.1 New variables
812
813     obj-y obj-m obj-n obj-
814
815         These variables replace $(O_OBJS), $(OX_OBJS), $(M_OBJS),
816         and $(MX_OBJS).
817
818         Example:
819
820                 # drivers/block/Makefile
821                 obj-$(CONFIG_MAC_FLOPPY)        += swim3.o
822                 obj-$(CONFIG_BLK_DEV_FD)        += floppy.o
823                 obj-$(CONFIG_AMIGA_FLOPPY)      += amiflop.o
824                 obj-$(CONFIG_ATARI_FLOPPY)      += ataflop.o
825
826         Notice the use of $(CONFIG_...) substitutions on the left hand
827         side of an assignment operator.  This gives GNU Make the power
828         of associative indexing!  Each of these assignments replaces
829         eight lines of code in an old-style Makefile.
830
831         After executing all of the assignments, the subdirectory
832         Makefile has built up four lists: $(obj-y), $(obj-m), $(obj-n),
833         and $(obj-).
834
835         $(obj-y) is a list of files to include in vmlinux.
836         $(obj-m) is a list of files to build as single-file modules.
837         $(obj-n) and $(obj-) are ignored.
838
839         Each list may contain duplicates items; duplicates are
840         automatically removed later.  Duplicates in both $(obj-y) and
841         $(obj-m) will automatically be removed from the $(obj-m) list.
842
843         Example:
844
845                 # drivers/net/Makefile
846
847                 ...
848                 obj-$(CONFIG_OAKNET) += oaknet.o 8390.o
849                 ...
850                 obj-$(CONFIG_NE2K_PCI) += ne2k-pci.o 8390.o
851                 ...
852                 obj-$(CONFIG_STNIC) += stnic.o 8390.o
853                 ...
854                 obj-$(CONFIG_MAC8390) += daynaport.o 8390.o
855                 ...
856
857         In this example, four different drivers require the code in
858         8390.o.  If one or more of these four drivers are built into
859         vmlinux, then 8390.o will also be built into vmlinux, and will
860         *not* be built as a module -- even if another driver which needs
861         8390.o is built as a module.  (The modular driver is able to
862         use services of the 8390.o code in the resident vmlinux image).
863
864     export-objs
865
866         $(export-objs) is a list of all the files in the subdirectory
867         which potentially export symbols.  The canonical way to construct
868         this list is:
869
870             grep -l EXPORT_SYMBOL *.c
871
872         (but watch out for sneaky files that call EXPORT_SYMBOL from an
873         included header file!)
874
875         This is a potential list, independent of the kernel configuration.
876         All files that export symbols go into $(export-objs).  The
877         boilerplate code then uses the $(export-objs) list to separate
878         the real file lists into $(*_OBJS) and $(*X_OBJS).
879
880         Experience has shown that maintaining the proper X's in an
881         old-style Makefile is difficult and error-prone.  Maintaining the
882         $(export-objs) list in a new-style Makefile is simpler and easier
883         to audit.
884
885     $(foo)-objs
886
887         Some kernel modules are composed of multiple object files linked
888         together.
889
890         For each multi-part kernel modul there is a list of all the
891         object files which make up that module.  For a kernel module
892         named foo.o, its object file list is foo-objs.
893
894         Example:
895
896                 # drivers/scsi/Makefile
897                 list-multi      := scsi_mod.o sr_mod.o initio.o a100u2w.o
898
899                 ...
900
901                 scsi_mod-objs   := hosts.o scsi.o scsi_ioctl.o constants.o \
902                                    scsicam.o scsi_proc.o scsi_error.o \
903                                    scsi_obsolete.o scsi_queue.o scsi_lib.o \
904                                    scsi_merge.o scsi_dma.o scsi_scan.o \
905                                    scsi_syms.o
906                 sr_mod-objs     := sr.o sr_ioctl.o sr_vendor.o
907                 initio-objs     := ini9100u.o i91uscsi.o
908                 a100u2w-objs    := inia100.o i60uscsi.o
909
910         The subdirectory Makefile puts the modules onto obj-* lists in
911         the usual configuration-dependent way:
912
913                 obj-$(CONFIG_SCSI)              += scsi_mod.o
914                 obj-$(CONFIG_BLK_DEV_SR)        += sr_mod.o
915                 obj-$(CONFIG_SCSI_INITIO)       += initio.o
916                 obj-$(CONFIG_SCSI_INIA100)      += a100u2w.o
917
918         Suppose that CONFIG_SCSI=y.  Then vmlinux needs to link in all
919         14 components of scsi_mod.o.
920
921         Suppose that CONFIG_BLK_DEV_SR=m.  Then the 3 components
922         of sr_mod.o will be linked together with "$(LD) -r" to make the
923         kernel module sr_mod.o.
924
925         Also suppose CONFIG_SCSI_INITIO=n.  Then initio.o goes onto
926         the $(obj-n) list and that's the end of it.  Its component
927         files are not compiled, and the composite file is not created.
928
929
930     subdir-y subdir-m subdir-n subdir-
931
932         These variables replace $(ALL_SUB_DIRS), $(SUB_DIRS) and
933         $(MOD_SUB_DIRS).
934
935         Example:
936
937                 # drivers/Makefile
938                 subdir-$(CONFIG_PCI)            += pci
939                 subdir-$(CONFIG_PCMCIA)         += pcmcia
940                 subdir-$(CONFIG_MTD)            += mtd
941                 subdir-$(CONFIG_SBUS)           += sbus
942
943         These variables work similar to obj-*, but are used for
944         subdirectories instead of object files.
945
946         After executing all assignments, the subdirectory Makefile has
947         built up four lists: $(subdir-y), $(subdir-m), $(subdir-n),
948         and $(subdir-).
949
950         $(subdir-y) is a list of directories that should be entered
951                 for making vmlinux.
952         $(subdir-m) is a list of directories that should be entered
953                 for making modules.
954         $(subdir-n) and $(subdir-) are only used for collecting a list
955                 of all subdirectories of this directory.
956
957         Each list besides subdir-y may contain duplicates items; duplicates
958         are automatically removed later.
959
960     mod-subdirs
961
962         $(mod-subdirs) is a list of all the subdirectories that should
963         be added to $(subdir-m), too if they appear in $(subdir-y)
964
965         Example:
966
967                 # fs/Makefile
968                 mod-subdirs :=  nls
969
970         This means nls should be added to (subdir-y) and $(subdir-m) if
971         CONFIG_NFS = y.
972
973 === 9 Credits
974
975 Thanks to the members of the linux-kbuild mailing list for reviewing
976 drafts of this document, with particular thanks to Peter Samuelson
977 and Thomas Molina.