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

15 	scripts/Makefile.*          common rules etc. for all kbuild Makefiles.
29 architecture-specific information to the top Makefile.
33 .config file to construct various file lists used by kbuild to build
34 any built-in or modular targets.
36 scripts/Makefile.* contains all the definitions/rules etc. that
37 are used to build the kernel based on the kbuild makefiles.
44 *Users* are people who build kernels. These people type commands such as
59 *Kbuild developers* are people who work on the kernel build system itself.
80 ----------------
90 obj-y += foo.o
95 If foo.o shall be built as a module, the variable obj-m is used.
100 obj-$(CONFIG_FOO) += foo.o
102 $(CONFIG_FOO) evaluates to either y (for built-in) or m (for module).
106 Built-in object goals - obj-y
107 -----------------------------
110 in the $(obj-y) lists. These lists depend on the kernel
113 Kbuild compiles all the $(obj-y) files. It then calls
114 ``$(AR) rcSTP`` to merge these files into one built-in.a file.
116 linked into vmlinux by scripts/link-vmlinux.sh
118 The order of files in $(obj-y) is significant. Duplicates in
120 built-in.a and succeeding instances will be ignored.
133 obj-$(CONFIG_ISDN_I4L) += isdn.o
134 obj-$(CONFIG_ISDN_PPP_BSDCOMP) += isdn_bsdcomp.o
136 Loadable module goals - obj-m
137 -----------------------------
139 $(obj-m) specifies object files which are built as loadable
144 simply adds the file to $(obj-m).
149 obj-$(CONFIG_ISDN_PPP_BSDCOMP) += isdn_bsdcomp.o
154 that you want to build a module in the same way as above; however,
155 kbuild needs to know which object files you want to build your
156 module from, so you have to tell it by setting a $(<module_name>-y)
162 obj-$(CONFIG_ISDN_I4L) += isdn.o
163 isdn-y := isdn_net_lib.o isdn_v110.o isdn_common.o
166 compile the objects listed in $(isdn-y) and then run
167 ``$(LD) -r`` on the list of these files to generate isdn.o.
169 Due to kbuild recognizing $(<module_name>-y) for composite objects,
176 obj-$(CONFIG_EXT2_FS) += ext2.o
177 ext2-y := balloc.o dir.o file.o ialloc.o inode.o ioctl.o \
179 ext2-$(CONFIG_EXT2_FS_XATTR) += xattr.o xattr_user.o \
188 kbuild will build an ext2.o file for you out of the individual
189 parts and then link this into built-in.a, as you would expect.
191 Library file goals - lib-y
192 --------------------------
194 Objects listed with obj-* are used for modules, or
195 combined in a built-in.a for that specific directory.
198 All objects listed with lib-y are combined in a single
200 Objects that are listed in obj-y and additionally listed in
201 lib-y will not be included in the library, since they will
203 For consistency, objects listed in lib-m will be included in lib.a.
205 Note that the same kbuild makefile may list files to be built-in
207 may contain both a built-in.a and a lib.a file.
212 lib-y := delay.o
216 shall be listed in libs-y.
220 Use of lib-y is normally restricted to ``lib/`` and ``arch/*/lib``.
223 ------------------------------
227 Makefiles in these subdirs. The build system will automatically
231 To do so, obj-y and obj-m are used.
238 obj-$(CONFIG_EXT2_FS) += ext2/
240 If CONFIG_EXT2_FS is set to either "y" (built-in) or "m" (modular)
241 the corresponding obj- variable will be set, and kbuild will descend
248 When Kbuild descends into the directory with "y", all built-in objects
249 from that directory are combined into the built-in.a, which will be
254 that directory specifies obj-y, those objects will be left orphan.
257 Kbuild also supports dedicated syntax, subdir-y and subdir-m, for
259 do not contain kernel-space objects at all. A typical usage is to let
260 Kbuild descend into subdirectories to build tools.
265 subdir-$(CONFIG_GCC_PLUGINS) += gcc-plugins
266 subdir-$(CONFIG_MODVERSIONS) += genksyms
267 subdir-$(CONFIG_SECURITY_SELINUX) += selinux
269 Unlike obj-y/m, subdir-y/m does not need the trailing slash since this
276 Non-builtin vmlinux targets - extra-y
277 -------------------------------------
279 extra-y specifies targets which are needed for building vmlinux,
280 but not combined into built-in.a.
292 extra-y += vmlinux.lds
294 extra-y is now deprecated because this is equivalent to:
296 always-$(KBUILD_BUILTIN) += vmlinux.lds
298 $(extra-y) should only contain targets needed for vmlinux.
300 Kbuild skips extra-y when vmlinux is apparently not a final goal.
303 If you intend to build targets unconditionally, always-y (explained
306 Always built goals - always-y
307 -----------------------------
309 always-y specifies targets which are literally always built when
315 offsets-file := include/generated/asm-offsets.h
316 always-y += $(offsets-file)
319 -----------------
321 ccflags-y, asflags-y and ldflags-y
324 invocations happening during a recursive build.
326 ccflags-y specifies options for compiling with $(CC).
331 ccflags-y := -Os -D_LINUX -DBUILDING_ACPICA
332 ccflags-$(CONFIG_ACPI_DEBUG) += -DACPI_DEBUG_OUTPUT
338 asflags-y specifies assembler options.
343 asflags-y := -ansi
345 ldflags-y specifies options for linking with $(LD).
350 ldflags-y += -T $(src)/decompress_$(arch-y).lds
352 subdir-ccflags-y, subdir-asflags-y
353 The two flags listed above are similar to ccflags-y and asflags-y.
354 The difference is that the subdir- variants have effect for the kbuild
356 Options specified using subdir-* are added to the commandline before
357 the options specified using the non-subdir variants.
361 subdir-ccflags-y := -Werror
363 ccflags-remove-y, asflags-remove-y
369 ccflags-remove-$(CONFIG_MCOUNT) += -pg
375 $(CFLAGS_$@) specifies per-file options for $(CC). The $@
378 CFLAGS_$@ has the higher priority than ccflags-remove-y; CFLAGS_$@
379 can re-add compiler flags that were removed by ccflags-remove-y.
384 CFLAGS_aha152x.o = -DAHA152X_STAT -DAUTOCONF
391 AFLAGS_$@ has the higher priority than asflags-remove-y; AFLAGS_$@
392 can re-add assembler flags that were removed by asflags-remove-y.
397 AFLAGS_head.o := -DTEXT_OFFSET=$(TEXT_OFFSET)
398 AFLAGS_crunch-bits.o := -Wa,-mcpu=ep9312
399 AFLAGS_iwmmxt.o := -Wa,-mcpu=iwmmxt
402 -------------------
408 3) Command-line used to compile target
411 be re-compiled.
413 Custom Rules
414 ------------
416 Custom rules are used when the kbuild infrastructure does
418 header files generated during the build process.
419 Another example are the architecture-specific Makefiles which
420 need custom rules to prepare boot images etc.
422 Custom rules are written as normal Make rules.
424 located, so all custom rules shall use a relative
427 Two variables are used when defining custom rules:
435 referring to generated files. Use $(obj) for pattern rules that need to work
443 $(CPP) -DCHIP=810 - < $< | ... $(src)/script_asm.pl
469 but when execution ``make -s`` one does not expect to see any output
472 text following $(kecho) to stdout except if ``make -s`` is used.
478 $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@
486 quiet_cmd_<command> - what shall be echoed
487 cmd_<command> - the command to execute
505 ------------------------
513 Kbuild achieves this by a kind of meta-programming.
528 obj-y/m, lib-y/m, extra-y/m, always-y/m, hostprogs, userprogs, Kbuild
533 used in conjunction with custom rules as defined in `Custom Rules`_.
551 -----------------------
559 as-option
560 as-option is used to check if $(CC) -- when used to compile
561 assembler (``*.S``) files -- supports the given option. An optional
567 cflags-y += $(call as-option,-Wa$(comma)-isa=$(isa-y),)
569 In the above example, cflags-y will be assigned the option
570 -Wa$(comma)-isa=$(isa-y) if it is supported by $(CC).
574 as-instr
575 as-instr checks if the assembler reports a specific instruction
578 Note: as-instr-option uses KBUILD_AFLAGS for assembler options
580 cc-option
581 cc-option is used to check if $(CC) supports a given option, and if
587 cflags-y += $(call cc-option,-march=pentium-mmx,-march=i586)
589 In the above example, cflags-y will be assigned the option
590 -march=pentium-mmx if supported by $(CC), otherwise -march=i586.
591 The second argument to cc-option is optional, and if omitted,
592 cflags-y will be assigned no value if first option is not supported.
593 Note: cc-option uses KBUILD_CFLAGS for $(CC) options
595 cc-option-yn
596 cc-option-yn is used to check if $(CC) supports a given option
602 biarch := $(call cc-option-yn, -m32)
603 aflags-$(biarch) += -a32
604 cflags-$(biarch) += -m32
606 In the above example, $(biarch) is set to y if $(CC) supports the -m32
607 option. When $(biarch) equals "y", the expanded variables $(aflags-y)
608 and $(cflags-y) will be assigned the values -a32 and -m32,
611 Note: cc-option-yn uses KBUILD_CFLAGS for $(CC) options
613 cc-disable-warning
614 cc-disable-warning checks if $(CC) supports a given warning and returns
616 because gcc 4.4 and later accept any unknown -Wno-* option and only
621 KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable)
623 In the above example, -Wno-unused-but-set-variable will be added to
626 gcc-min-version
627 gcc-min-version tests if the value of $(CONFIG_GCC_VERSION) is greater than
632 cflags-$(call gcc-min-version, 110100) := -foo
634 In this example, cflags-y will be assigned the value -foo if $(CC) is gcc and
637 clang-min-version
638 clang-min-version tests if the value of $(CONFIG_CLANG_VERSION) is greater
643 cflags-$(call clang-min-version, 110000) := -foo
645 In this example, cflags-y will be assigned the value -foo if $(CC) is clang
648 cc-cross-prefix
649 cc-cross-prefix is used to check if there exists a $(CC) in path with
651 prefix$(CC) in the PATH is returned - and if no prefix$(CC) is found
655 call of cc-cross-prefix.
658 to set CROSS_COMPILE to well-known values but may have several
662 build (host arch is different from target arch). And if CROSS_COMPILE
670 CROSS_COMPILE := $(call cc-cross-prefix, m68k-linux-gnu-)
675 --------------------------
677 rustc-min-version
678 rustc-min-version tests if the value of $(CONFIG_RUSTC_VERSION) is greater
683 rustflags-$(call rustc-min-version, 108500) := -Cfoo
685 In this example, rustflags-y will be assigned the value -Cfoo if
689 -----------------------
691 ld-option
692 ld-option is used to check if $(LD) supports the supplied option.
693 ld-option takes two options as arguments.
701 LDFLAGS_vmlinux += $(call ld-option, -X)
704 -----------------
706 Make rules may invoke scripts to build the kernel. The rules shall
736 or utilise the variable ``always-y``.
740 -------------------
743 computer where the build is running.
746 built on the build host.
753 c-source file named bin2hex.c located in the same directory as
757 -----------------------
762 $(<executable>-objs) lists all objects used to link the final
769 lxdialog-objs := checklist.o lxdialog.o
776 Note: The syntax <executable>-y is not permitted for host-programs.
779 ---------------------------
789 qconf-cxxobjs := qconf.o
792 qconf.cc - identified by $(qconf-cxxobjs).
801 qconf-cxxobjs := qconf.o
802 qconf-objs := check.o
805 ----------------------------
815 target-rust := y
822 ----------------------------------------------
834 HOST_EXTRACFLAGS += -I/usr/include/ncurses
842 HOSTCFLAGS_piggyback.o := -DKERNELBASE=$(KERNELBASE)
849 HOSTLDLIBS_qconf := -L$(QTDIR)/lib
852 ``-L$(QTDIR)/lib``.
855 -------------------------------------
857 Kbuild will only build host-programs when they are referenced
867 hostprogs := gen-devlist
868 $(obj)/devlist.h: $(src)/pci.ids $(obj)/gen-devlist
869 ( cd $(obj); ./gen-devlist ) < $<
872 $(obj)/gen-devlist is updated. Note that references to
873 the host programs in custom rules must be prefixed with $(obj).
875 (2) Use always-y
878 shall be built when a makefile is entered, the always-y
885 always-y := $(hostprogs)
889 hostprogs-always-y := lxdialog
891 This will tell kbuild to build lxdialog even if not referenced in
905 ------------------------
907 The following line tells kbuild that the program bpf-direct shall be
912 userprogs := bpf-direct
914 Kbuild assumes in the above example that bpf-direct is made from a
915 single C source file named bpf-direct.c located in the same directory
919 ----------------------------
924 $(<executable>-objs) lists all objects used to link the final
930 userprogs := bpf-fancy
931 bpf-fancy-objs := bpf-fancy.o bpf-helper.o
934 files. In the above example, bpf-fancy.c is compiled to bpf-fancy.o
935 and bpf-helper.c is compiled to bpf-helper.o.
937 Finally, the two .o files are linked to the executable, bpf-fancy.
938 Note: The syntax <executable>-y is not permitted for userspace programs.
941 ---------------------------------------------------
953 userccflags += -I usr/include
960 bpf-helper-userccflags += -I user/include
967 bpfilter_umh-userldflags += -static
970 ``<executable>-userldlibs``. The ``userldlibs`` syntax specifies libraries
973 When linking bpfilter_umh, it will be passed the extra option -static.
978 ------------------------------------------
993 (2) Use always-y
998 always-y := $(userprogs)
1002 userprogs-always-y := binderfs_example
1004 This will tell Kbuild to build binderfs_example when it visits this
1012 Kbuild knows targets listed in $(hostprogs), $(always-y), $(always-m),
1013 $(always-), $(extra-y), $(extra-) and $(targets). They are all deleted
1019 $(clean-files).
1024 clean-files := crc32table.h
1031 $(no-clean-files) variable.
1033 Usually kbuild descends down in subdirectories due to ``obj-* := dir/``,
1040 subdir- := compressed
1045 Note 1: arch/$(SRCARCH)/Makefile cannot use ``subdir-``, because that file is
1047 ``subdir-``.
1049 Note 2: All directories listed in core-y, libs-y, drivers-y and net-y will
1073 - Additional prerequisites are specified in arch/$(SRCARCH)/Makefile
1076 init-* core* drivers-* net-* libs-* and build all targets.
1078 - The values of the above variables are expanded in arch/$(SRCARCH)/Makefile.
1082 The very first objects linked are listed in scripts/head-object-list.txt.
1084 6) Finally, the architecture-specific part does any required post processing
1087 - This includes building boot records
1088 - Preparing initrd images and the like
1090 Set variables to tweak the build to the architecture
1091 ----------------------------------------------------
1102 KBUILD_LDFLAGS := -m elf_s390
1104 Note: ldflags-y can be used to further customise
1105 the flags used. See `Non-builtin vmlinux targets - extra-y`_.
1118 LDFLAGS_vmlinux := -e stext
1132 OBJCOPYFLAGS := -O binary
1144 Default value - see top level Makefile.
1151 KBUILD_AFLAGS += -m64 -mcpu=ultrasparc
1156 Default value - see top level Makefile.
1165 cflags-$(CONFIG_X86_32) := -march=i386
1166 cflags-$(CONFIG_X86_64) := -mcmodel=small
1167 KBUILD_CFLAGS += $(cflags-y)
1175 cflags-$(CONFIG_MPENTIUMII) += $(call cc-option,\
1176 -march=pentium2,-march=i686)
1178 # Disable unit-at-a-time mode ...
1179 KBUILD_CFLAGS += $(call cc-option,-fno-unit-at-a-time)
1189 Default value - see top level Makefile.
1195 Note that target specification file generation (for ``--target``)
1199 Assembler options specific for built-in
1207 $(KBUILD_AFLAGS_MODULE) is used to add arch-specific options that
1213 $(CC) options specific for built-in
1221 $(KBUILD_CFLAGS_MODULE) is used to add arch-specific options that
1227 $(RUSTC) options specific for built-in
1235 $(KBUILD_RUSTFLAGS_MODULE) is used to add arch-specific options that
1243 $(KBUILD_LDFLAGS_MODULE) is used to add arch-specific options
1249 The linker script with full path. Assigned by the top-level Makefile.
1255 The objects listed in scripts/head-object-list.txt are exceptions;
1264 --------------------------------
1273 --------------------------------
1288 See also chapter XXX-TODO that describes how kbuild supports
1292 -----------------------------------------
1295 which specify how to build the vmlinux file. Note that there is no
1296 corresponding arch-specific section for modules; the module-building
1297 machinery is all architecture-independent.
1299 core-y, libs-y, drivers-y
1300 $(libs-y) lists directories where a lib.a archive can be located.
1302 The rest list directories where a built-in.a object file can be
1307 $(core-y), $(libs-y), $(drivers-y)
1310 and arch/$(SRCARCH)/Makefile only adds architecture-specific
1316 core-y += arch/sparc/
1318 libs-y += arch/sparc/prom/
1319 libs-y += arch/sparc/lib/
1321 drivers-$(CONFIG_PM) += arch/sparc/power/
1323 Architecture-specific boot images
1324 ---------------------------------
1336 call make manually to build a target in boot/.
1347 $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
1349 ``$(Q)$(MAKE) $(build)=<dir>`` is the recommended way to invoke
1352 There are no rules for naming architecture-specific targets,
1360 echo '* bzImage - Compressed kernel image (arch/x86/boot/bzImage)'
1367 An architecture shall always, per default, build a bootable image.
1381 -----------------------------------------
1392 LDFLAGS_bootsect := -Ttext 0x0 -s --oformat binary
1393 LDFLAGS_setup := -Ttext 0x0 -s --oformat binary -e begtext
1401 LDFLAGS_$@ syntax - one for each potential target.
1429 $(obj)/vmlinux.bin.gz: $(vmlinux.bin.all-y) FORCE
1436 blob to non-init memory prior to calling unflatten_device_tree().
1438 To use this command, simply add ``*.dtb`` into obj-y or targets, or make
1446 targets += $(dtb-y)
1447 DTC_FLAGS ?= -p 1024
1450 ----------------------------
1458 kbuild knows .lds files and includes a rule ``*lds.S`` -> ``*lds``.
1463 extra-y := vmlinux.lds
1465 The assignment to extra-y is used to tell kbuild to build the
1473 KBUILD_CPPFLAGS : Set in top-level Makefile
1474 cppflags-y : May be set in the kbuild makefile
1475 CPPFLAGS_$(@F) : Target-specific flags.
1480 architecture-specific files.
1483 --------------------
1485 The directory include/asm-generic contains the header files
1491 See `generic-y`_ for further info on syntax etc.
1493 Post-link pass
1494 --------------
1497 will be invoked for post-link objects (vmlinux and modules.ko)
1498 for architectures to run post-link passes on. Must also handle
1504 .tmp_vmlinux? targets to be called from link-vmlinux.sh.
1513 Many headers can be exported as-is but other headers require a
1514 minimal pre-processing before they are ready for user-space.
1516 The pre-processing does:
1518 - drop kernel-specific annotations
1519 - drop include of compiler.h
1520 - drop all sections that are kernel internal (guarded by ``ifdef __KERNEL__``)
1527 arch/<arch>/include/asm/ to list asm files coming from asm-generic.
1531 no-export-headers
1532 -----------------
1534 no-export-headers is essentially used by include/uapi/linux/Kbuild to
1538 generic-y
1539 ---------
1542 include/asm-generic then this is listed in the file
1548 generic-y += termios.h
1549 generic-y += rtc.h
1551 During the prepare phase of the build a wrapper include
1566 #include <asm-generic/termios.h>
1568 generated-y
1569 -----------
1571 If an architecture generates other header files alongside generic-y
1572 wrappers, generated-y specifies them.
1574 This prevents them being treated as stale asm-generic wrappers and
1580 generated-y += syscalls_32.h
1582 mandatory-y
1583 -----------
1585 mandatory-y is essentially used by include/(uapi/)asm-generic/Kbuild
1588 This works like optional generic-y. If a mandatory header is missing
1590 generate a wrapper of the asm-generic one.
1603 three-part version number, such as "2", "4", and "0". These three
1606 $(EXTRAVERSION) defines an even tinier sublevel for pre-patches
1607 or additional patches. It is usually some non-numeric string
1608 such as "-pre4", and is often blank.
1611 $(KERNELRELEASE) is a single string such as "2.4.0-pre4", suitable
1621 host system architecture. For a cross build, a user may
1627 This variable specifies the directory in arch/ to build.
1631 both 32-bit and 64-bit.
1640 Use this for architecture-specific install targets.
1655 default option --strip-debug will be used. Otherwise, the
1660 This variable specifies a prefix for relocations required by build
1673 GNU Make supports elementary list-processing functions. The kernel
1678 immediate evaluation of the right-hand side and stores an actual string
1679 into the left-hand side. ``=`` is like a formula definition; it stores the
1680 right-hand side in an unevaluated form and then evaluates this form each
1681 time the left-hand side is used.
1689 - Original version made by Michael Elizabeth Chastain, <mailto:mec@shout.net>
1690 - Updates by Kai Germaschewski <kai@tp1.ruhr-uni-bochum.de>
1691 - Updates by Sam Ravnborg <sam@ravnborg.org>
1692 - Language QA by Jan Engelhardt <jengelh@gmx.de>
1697 - Generating offset header files.
1698 - Add more variables to chapters 7 or 9?