Lines Matching +full:build +full:- +full:rules

12 	   --- 3.1 Goal definitions
13 --- 3.2 Built-in object goals - obj-y
14 --- 3.3 Loadable module goals - obj-m
15 --- 3.4 Objects which export symbols
16 --- 3.5 Library file goals - lib-y
17 --- 3.6 Descending down in directories
18 --- 3.7 Compilation flags
19 --- 3.8 <deleted>
20 --- 3.9 Dependency tracking
21 --- 3.10 Special Rules
22 --- 3.11 $(CC) support functions
23 --- 3.12 $(LD) support functions
24 --- 3.13 Script Invocation
27 --- 4.1 Simple Host Program
28 --- 4.2 Composite Host Programs
29 --- 4.3 Using C++ for host programs
30 --- 4.4 Controlling compiler options for host programs
31 --- 4.5 When host programs are actually built
34 --- 5.1 Simple Userspace Program
35 --- 5.2 Composite Userspace Programs
36 --- 5.3 Controlling compiler options for userspace programs
37 --- 5.4 When userspace programs are actually built
42 --- 7.1 Set variables to tweak the build to the architecture
43 --- 7.2 Add prerequisites to archheaders
44 --- 7.3 Add prerequisites to archprepare
45 --- 7.4 List directories to visit when descending
46 --- 7.5 Architecture-specific boot images
47 --- 7.6 Building non-kbuild targets
48 --- 7.7 Commands useful for building a boot image
49 --- 7.8 Custom kbuild commands
50 --- 7.9 Preprocessing linker scripts
51 --- 7.10 Generic header files
52 --- 7.11 Post-link pass
55 --- 8.1 no-export-headers
56 --- 8.2 generic-y
57 --- 8.3 generated-y
58 --- 8.4 mandatory-y
73 scripts/Makefile.* common rules etc. for all kbuild Makefiles.
86 architecture-specific information to the top Makefile.
90 .config file to construct various file lists used by kbuild to build
91 any built-in or modular targets.
93 scripts/Makefile.* contains all the definitions/rules etc. that
94 are used to build the kernel based on the kbuild makefiles.
102 *Users* are people who build kernels. These people type commands such as
117 *Kbuild developers* are people who work on the kernel build system itself.
137 --------------------
147 obj-y += foo.o
152 If foo.o shall be built as a module, the variable obj-m is used.
157 obj-$(CONFIG_FOO) += foo.o
159 $(CONFIG_FOO) evaluates to either y (for built-in) or m (for module).
163 3.2 Built-in object goals - obj-y
164 ---------------------------------
167 in the $(obj-y) lists. These lists depend on the kernel
170 Kbuild compiles all the $(obj-y) files. It then calls
171 "$(AR) rcSTP" to merge these files into one built-in.a file.
173 linked into vmlinux by scripts/link-vmlinux.sh
175 The order of files in $(obj-y) is significant. Duplicates in
177 built-in.a and succeeding instances will be ignored.
190 obj-$(CONFIG_ISDN_I4L) += isdn.o
191 obj-$(CONFIG_ISDN_PPP_BSDCOMP) += isdn_bsdcomp.o
193 3.3 Loadable module goals - obj-m
194 ---------------------------------
196 $(obj-m) specifies object files which are built as loadable
201 simply adds the file to $(obj-m).
206 obj-$(CONFIG_ISDN_PPP_BSDCOMP) += isdn_bsdcomp.o
211 that you want to build a module in the same way as above; however,
212 kbuild needs to know which object files you want to build your
213 module from, so you have to tell it by setting a $(<module_name>-y)
219 obj-$(CONFIG_ISDN_I4L) += isdn.o
220 isdn-y := isdn_net_lib.o isdn_v110.o isdn_common.o
223 compile the objects listed in $(isdn-y) and then run
224 "$(LD) -r" on the list of these files to generate isdn.o.
226 Due to kbuild recognizing $(<module_name>-y) for composite objects,
233 obj-$(CONFIG_EXT2_FS) += ext2.o
234 ext2-y := balloc.o dir.o file.o ialloc.o inode.o ioctl.o \
236 ext2-$(CONFIG_EXT2_FS_XATTR) += xattr.o xattr_user.o \
245 kbuild will build an ext2.o file for you out of the individual
246 parts and then link this into built-in.a, as you would expect.
249 --------------------------------
254 3.5 Library file goals - lib-y
255 ------------------------------
257 Objects listed with obj-* are used for modules, or
258 combined in a built-in.a for that specific directory.
261 All objects listed with lib-y are combined in a single
263 Objects that are listed in obj-y and additionally listed in
264 lib-y will not be included in the library, since they will
266 For consistency, objects listed in lib-m will be included in lib.a.
268 Note that the same kbuild makefile may list files to be built-in
270 may contain both a built-in.a and a lib.a file.
275 lib-y := delay.o
279 shall be listed in libs-y.
283 Use of lib-y is normally restricted to `lib/` and `arch/*/lib`.
286 ----------------------------------
290 Makefiles in these subdirs. The build system will automatically
294 To do so, obj-y and obj-m are used.
301 obj-$(CONFIG_EXT2_FS) += ext2/
303 If CONFIG_EXT2_FS is set to either 'y' (built-in) or 'm' (modular)
304 the corresponding obj- variable will be set, and kbuild will descend
311 When Kbuild descends into the directory with 'y', all built-in objects
312 from that directory are combined into the built-in.a, which will be
317 that directory specifies obj-y, those objects will be left orphan.
325 ---------------------
327 ccflags-y, asflags-y and ldflags-y
330 invocations happening during a recursive build.
335 ccflags-y specifies options for compiling with $(CC).
340 ccflags-y := -Os -D_LINUX -DBUILDING_ACPICA
341 ccflags-$(CONFIG_ACPI_DEBUG) += -DACPI_DEBUG_OUTPUT
347 asflags-y specifies assembler options.
352 asflags-y := -ansi
354 ldflags-y specifies options for linking with $(LD).
359 ldflags-y += -T $(srctree)/$(src)/decompress_$(arch-y).lds
361 subdir-ccflags-y, subdir-asflags-y
362 The two flags listed above are similar to ccflags-y and asflags-y.
363 The difference is that the subdir- variants have effect for the kbuild
365 Options specified using subdir-* are added to the commandline before
366 the options specified using the non-subdir variants.
370 subdir-ccflags-y := -Werror
372 ccflags-remove-y, asflags-remove-y
378 ccflags-remove-$(CONFIG_MCOUNT) += -pg
384 $(CFLAGS_$@) specifies per-file options for $(CC). The $@
387 CFLAGS_$@ has the higher priority than ccflags-remove-y; CFLAGS_$@
388 can re-add compiler flags that were removed by ccflags-remove-y.
393 CFLAGS_aha152x.o = -DAHA152X_STAT -DAUTOCONF
394 CFLAGS_gdth.o = # -DDEBUG_GDTH=2 -D__SERIAL__ -D__COM2__ \
395 -DGDTH_STATISTICS
402 AFLAGS_$@ has the higher priority than asflags-remove-y; AFLAGS_$@
403 can re-add assembler flags that were removed by asflags-remove-y.
408 AFLAGS_head.o := -DTEXT_OFFSET=$(TEXT_OFFSET)
409 AFLAGS_crunch-bits.o := -Wa,-mcpu=ep9312
410 AFLAGS_iwmmxt.o := -Wa,-mcpu=iwmmxt
414 -----------------------
420 3) Command-line used to compile target
423 be re-compiled.
425 3.10 Special Rules
426 ------------------
428 Special rules are used when the kbuild infrastructure does
430 header files generated during the build process.
431 Another example are the architecture-specific Makefiles which
432 need special rules to prepare boot images etc.
434 Special rules are written as normal Make rules.
436 located, so all special rules shall provide a relative
439 Two variables are used when defining special rules:
455 $(CPP) -DCHIP=810 - < $< | ... $(src)/script_asm.pl
467 but when execution "make -s" one does not expect to see any output
470 text following $(kecho) to stdout except if "make -s" is used.
481 ----------------------------
489 as-option
490 as-option is used to check if $(CC) -- when used to compile
491 assembler (`*.S`) files -- supports the given option. An optional
497 cflags-y += $(call as-option,-Wa$(comma)-isa=$(isa-y),)
499 In the above example, cflags-y will be assigned the option
500 -Wa$(comma)-isa=$(isa-y) if it is supported by $(CC).
504 as-instr
505 as-instr checks if the assembler reports a specific instruction
508 Note: as-instr-option uses KBUILD_AFLAGS for assembler options
510 cc-option
511 cc-option is used to check if $(CC) supports a given option, and if
517 cflags-y += $(call cc-option,-march=pentium-mmx,-march=i586)
519 In the above example, cflags-y will be assigned the option
520 -march=pentium-mmx if supported by $(CC), otherwise -march=i586.
521 The second argument to cc-option is optional, and if omitted,
522 cflags-y will be assigned no value if first option is not supported.
523 Note: cc-option uses KBUILD_CFLAGS for $(CC) options
525 cc-option-yn
526 cc-option-yn is used to check if gcc supports a given option
532 biarch := $(call cc-option-yn, -m32)
533 aflags-$(biarch) += -a32
534 cflags-$(biarch) += -m32
536 In the above example, $(biarch) is set to y if $(CC) supports the -m32
537 option. When $(biarch) equals 'y', the expanded variables $(aflags-y)
538 and $(cflags-y) will be assigned the values -a32 and -m32,
540 Note: cc-option-yn uses KBUILD_CFLAGS for $(CC) options
542 cc-disable-warning
543 cc-disable-warning checks if gcc supports a given warning and returns
545 because gcc 4.4 and later accept any unknown -Wno-* option and only
550 KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable)
552 In the above example, -Wno-unused-but-set-variable will be added to
555 cc-ifversion
556 cc-ifversion tests the version of $(CC) and equals the fourth parameter
563 ccflags-y := $(call cc-ifversion, -lt, 0402, -O1)
565 In this example, ccflags-y will be assigned the value -O1 if the
567 cc-ifversion takes all the shell operators:
568 -eq, -ne, -lt, -le, -gt, and -ge
572 cc-cross-prefix
573 cc-cross-prefix is used to check if there exists a $(CC) in path with
575 prefix$(CC) in the PATH is returned - and if no prefix$(CC) is found
578 call of cc-cross-prefix.
580 to set CROSS_COMPILE to well-known values but may have several
583 build (host arch is different from target arch). And if CROSS_COMPILE
591 CROSS_COMPILE := $(call cc-cross-prefix, m68k-linux-gnu-)
596 ----------------------------
598 ld-option
599 ld-option is used to check if $(LD) supports the supplied option.
600 ld-option takes two options as arguments.
607 LDFLAGS_vmlinux += $(call ld-option, -X)
610 ----------------------
612 Make rules may invoke scripts to build the kernel. The rules shall
641 or utilise the variable "always-y".
645 -----------------------
648 computer where the build is running.
650 built on the build host.
657 c-source file named bin2hex.c located in the same directory as
661 ---------------------------
666 $(<executable>-objs) lists all objects used to link the final
673 lxdialog-objs := checklist.o lxdialog.o
680 Note: The syntax <executable>-y is not permitted for host-programs.
683 -------------------------------
693 qconf-cxxobjs := qconf.o
696 qconf.cc - identified by $(qconf-cxxobjs).
705 qconf-cxxobjs := qconf.o
706 qconf-objs := check.o
709 --------------------------------------------------
720 HOST_EXTRACFLAGS += -I/usr/include/ncurses
728 HOSTCFLAGS_piggyback.o := -DKERNELBASE=$(KERNELBASE)
735 HOSTLDLIBS_qconf := -L$(QTDIR)/lib
738 "-L$(QTDIR)/lib".
741 -----------------------------------------
743 Kbuild will only build host-programs when they are referenced
752 hostprogs := gen-devlist
753 $(obj)/devlist.h: $(src)/pci.ids $(obj)/gen-devlist
754 ( cd $(obj); ./gen-devlist ) < $<
757 $(obj)/gen-devlist is updated. Note that references to
758 the host programs in special rules must be prefixed with $(obj).
760 (2) Use always-y
763 shall be built when a makefile is entered, the always-y
770 always-y := $(hostprogs)
774 hostprogs-always-y := lxdialog
776 This will tell kbuild to build lxdialog even if not referenced in
790 ----------------------------
792 The following line tells kbuild that the program bpf-direct shall be
797 userprogs := bpf-direct
799 Kbuild assumes in the above example that bpf-direct is made from a
800 single C source file named bpf-direct.c located in the same directory
804 --------------------------------
809 $(<executable>-objs) lists all objects used to link the final
815 userprogs := bpf-fancy
816 bpf-fancy-objs := bpf-fancy.o bpf-helper.o
819 files. In the above example, bpf-fancy.c is compiled to bpf-fancy.o
820 and bpf-helper.c is compiled to bpf-helper.o.
822 Finally, the two .o files are linked to the executable, bpf-fancy.
823 Note: The syntax <executable>-y is not permitted for userspace programs.
826 -------------------------------------------------------
837 userccflags += -I usr/include
844 bpf-helper-userccflags += -I user/include
851 bpfilter_umh-userldflags += -static
853 When linking bpfilter_umh, it will be passed the extra option -static.
856 ----------------------------------------------
871 (2) Use always-y
876 always-y := $(userprogs)
880 userprogs-always-y := binderfs_example
882 This will tell Kbuild to build binderfs_example when it visits this
890 Kbuild knows targets listed in $(hostprogs), $(always-y), $(always-m),
891 $(always-), $(extra-y), $(extra-) and $(targets). They are all deleted
897 $(clean-files).
902 clean-files := crc32table.h
909 $(no-clean-files) variable.
911 Usually kbuild descends down in subdirectories due to "obj-* := dir/",
918 subdir- := compressed
923 To support the clean infrastructure in the Makefiles that build the
934 the subdir- trick to descend further down.
936 Note 1: arch/$(ARCH)/Makefile cannot use "subdir-", because that file is
940 Note 2: All directories listed in core-y, libs-y, drivers-y and net-y will
959 - Additional prerequisites are specified in arch/$(ARCH)/Makefile
961 init-* core* drivers-* net-* libs-* and build all targets.
962 - The values of the above variables are expanded in arch/$(ARCH)/Makefile.
965 The very first objects linked are listed in head-y, assigned by
967 6) Finally, the architecture-specific part does any required post processing
969 - This includes building boot records
970 - Preparing initrd images and the like
973 7.1 Set variables to tweak the build to the architecture
974 --------------------------------------------------------
985 KBUILD_LDFLAGS := -m elf_s390
987 Note: ldflags-y can be used to further customise
1000 LDFLAGS_vmlinux := -e stext
1013 OBJCOPYFLAGS := -O binary
1025 Default value - see top level Makefile
1031 KBUILD_AFLAGS += -m64 -mcpu=ultrasparc
1036 Default value - see top level Makefile
1044 cflags-$(CONFIG_X86_32) := -march=i386
1045 cflags-$(CONFIG_X86_64) := -mcmodel=small
1046 KBUILD_CFLAGS += $(cflags-y)
1054 cflags-$(CONFIG_MPENTIUMII) += $(call cc-option,\
1055 -march=pentium2,-march=i686)
1057 # Disable unit-at-a-time mode ...
1058 KBUILD_CFLAGS += $(call cc-option,-fno-unit-at-a-time)
1066 Assembler options specific for built-in
1074 $(KBUILD_AFLAGS_MODULE) is used to add arch-specific options that
1080 $(CC) options specific for built-in
1088 $(KBUILD_CFLAGS_MODULE) is used to add arch-specific options that
1095 $(KBUILD_LDFLAGS_MODULE) is used to add arch-specific options
1102 The linker script with full path. Assigned by the top-level Makefile.
1106 The module linker script with full path. Assigned by the top-level
1121 ------------------------------------
1131 ------------------------------------
1144 See also chapter XXX-TODO that describes how kbuild supports
1149 ---------------------------------------------
1152 which specify how to build the vmlinux file. Note that there is no
1153 corresponding arch-specific section for modules; the module-building
1154 machinery is all architecture-independent.
1157 head-y, init-y, core-y, libs-y, drivers-y, net-y
1158 $(head-y) lists objects to be linked first in vmlinux.
1160 $(libs-y) lists directories where a lib.a archive can be located.
1162 The rest list directories where a built-in.a object file can be
1165 $(init-y) objects will be located after $(head-y).
1169 $(core-y), $(libs-y), $(drivers-y) and $(net-y).
1172 and arch/$(ARCH)/Makefile only adds architecture-specific
1178 core-y += arch/sparc64/kernel/
1179 libs-y += arch/sparc64/prom/ arch/sparc64/lib/
1180 drivers-$(CONFIG_OPROFILE) += arch/sparc64/oprofile/
1183 7.5 Architecture-specific boot images
1184 -------------------------------------
1196 call make manually to build a target in boot/.
1207 $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
1209 "$(Q)$(MAKE) $(build)=<dir>" is the recommended way to invoke
1212 There are no rules for naming architecture-specific targets,
1220 echo '* bzImage - Image (arch/$(ARCH)/boot/bzImage)'
1226 An architecture shall always, per default, build a bootable image.
1238 7.6 Building non-kbuild targets
1239 -------------------------------
1241 extra-y
1242 extra-y specifies additional targets created in the current
1243 directory, in addition to any targets specified by `obj-*`.
1245 Listing all targets in extra-y is required for two purposes:
1249 - When $(call if_changed,xxx) is used
1256 extra-y := head.o init_task.o
1258 In this example, extra-y is used to list object files that
1259 shall be built, but shall not be linked as part of built-in.a.
1262 ---------------------------------------------
1309 LDFLAGS_bootsect := -Ttext 0x0 -s --oformat binary
1310 LDFLAGS_setup := -Ttext 0x0 -s --oformat binary -e begtext
1318 LDFLAGS_$@ syntax - one for each potential target.
1344 $(obj)/vmlinux.bin.gz: $(vmlinux.bin.all-y) FORCE
1351 blob to non-init memory prior to calling unflatten_device_tree().
1353 To use this command, simply add `*.dtb` into obj-y or targets, or make
1361 targets += $(dtb-y)
1362 DTC_FLAGS ?= -p 1024
1365 --------------------------
1372 quiet_cmd_<command> - what shall be echoed
1373 cmd_<command> - the command to execute
1378 quiet_cmd_image = BUILD $@
1379 cmd_image = $(obj)/tools/build $(BUILDFLAGS) \
1383 $(obj)/bzImage: $(obj)/vmlinux.bin $(obj)/tools/build FORCE
1389 BUILD arch/x86/boot/bzImage
1395 --------------------------------
1401 kbuild knows .lds files and includes a rule `*lds.S` -> `*lds`.
1406 extra-y := vmlinux.lds
1409 export CPPFLAGS_vmlinux.lds += -P -C -U$(ARCH)
1411 The assignment to extra-y is used to tell kbuild to build the
1418 KBUILD_CPPFLAGS : Set in top-level Makefile
1419 cppflags-y : May be set in the kbuild makefile
1420 CPPFLAGS_$(@F) : Target-specific flags.
1425 architecture-specific files.
1428 -------------------------
1430 The directory include/asm-generic contains the header files
1434 See "8.2 generic-y" for further info on syntax etc.
1436 7.11 Post-link pass
1437 -------------------
1440 will be invoked for post-link objects (vmlinux and modules.ko)
1441 for architectures to run post-link passes on. Must also handle
1447 .tmp_vmlinux? targets to be called from link-vmlinux.sh.
1453 ------------------------------------
1456 Many headers can be exported as-is but other headers require a
1457 minimal pre-processing before they are ready for user-space.
1458 The pre-processing does:
1460 - drop kernel-specific annotations
1461 - drop include of compiler.h
1462 - drop all sections that are kernel internal (guarded by `ifdef __KERNEL__`)
1469 arch/<arch>/include/asm/ to list asm files coming from asm-generic.
1472 8.1 no-export-headers
1473 ---------------------
1475 no-export-headers is essentially used by include/uapi/linux/Kbuild to
1479 8.2 generic-y
1480 -------------
1483 include/asm-generic then this is listed in the file
1489 generic-y += termios.h
1490 generic-y += rtc.h
1492 During the prepare phase of the build a wrapper include
1507 #include <asm-generic/termios.h>
1509 8.3 generated-y
1510 ---------------
1512 If an architecture generates other header files alongside generic-y
1513 wrappers, generated-y specifies them.
1515 This prevents them being treated as stale asm-generic wrappers and
1521 generated-y += syscalls_32.h
1523 8.4 mandatory-y
1524 ---------------
1526 mandatory-y is essentially used by include/(uapi/)asm-generic/Kbuild
1529 This works like optional generic-y. If a mandatory header is missing
1531 a wrapper of the asm-generic one.
1544 three-part version number, such as "2", "4", and "0". These three
1547 $(EXTRAVERSION) defines an even tinier sublevel for pre-patches
1548 or additional patches. It is usually some non-numeric string
1549 such as "-pre4", and is often blank.
1552 $(KERNELRELEASE) is a single string such as "2.4.0-pre4", suitable
1562 host system architecture. For a cross build, a user may
1571 Use this for architecture-specific install targets.
1586 default option --strip-debug will be used. Otherwise, the
1598 GNU Make supports elementary list-processing functions. The kernel
1603 immediate evaluation of the right-hand side and stores an actual string
1604 into the left-hand side. "=" is like a formula definition; it stores the
1605 right-hand side in an unevaluated form and then evaluates this form each
1606 time the left-hand side is used.
1614 - Original version made by Michael Elizabeth Chastain, <mailto:mec@shout.net>
1615 - Updates by Kai Germaschewski <kai@tp1.ruhr-uni-bochum.de>
1616 - Updates by Sam Ravnborg <sam@ravnborg.org>
1617 - Language QA by Jan Engelhardt <jengelh@gmx.de>
1622 - Describe how kbuild supports shipped files with _shipped.
1623 - Generating offset header files.
1624 - Add more variables to chapters 7 or 9?