Lines Matching +full:full +full:- +full:custom

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 <deleted>
16 --- 3.5 Library file goals - lib-y
17 --- 3.6 Descending down in directories
18 --- 3.7 Non-builtin vmlinux targets - extra-y
19 --- 3.8 Always built goals - always-y
20 --- 3.9 Compilation flags
21 --- 3.10 Dependency tracking
22 --- 3.11 Custom Rules
23 --- 3.12 Command change detection
24 --- 3.13 $(CC) support functions
25 --- 3.14 $(LD) support functions
26 --- 3.15 Script Invocation
29 --- 4.1 Simple Host Program
30 --- 4.2 Composite Host Programs
31 --- 4.3 Using C++ for host programs
32 --- 4.4 Using Rust for host programs
33 --- 4.5 Controlling compiler options for host programs
34 --- 4.6 When host programs are actually built
37 --- 5.1 Simple Userspace Program
38 --- 5.2 Composite Userspace Programs
39 --- 5.3 Controlling compiler options for userspace programs
40 --- 5.4 When userspace programs are actually built
45 --- 7.1 Set variables to tweak the build to the architecture
46 --- 7.2 Add prerequisites to archheaders
47 --- 7.3 Add prerequisites to archprepare
48 --- 7.4 List directories to visit when descending
49 --- 7.5 Architecture-specific boot images
50 --- 7.6 Building non-kbuild targets
51 --- 7.7 Commands useful for building a boot image
52 --- 7.8 <deleted>
53 --- 7.9 Preprocessing linker scripts
54 --- 7.10 Generic header files
55 --- 7.11 Post-link pass
58 --- 8.1 no-export-headers
59 --- 8.2 generic-y
60 --- 8.3 generated-y
61 --- 8.4 mandatory-y
89 architecture-specific information to the top Makefile.
94 any built-in or modular targets.
140 --------------------
150 obj-y += foo.o
155 If foo.o shall be built as a module, the variable obj-m is used.
160 obj-$(CONFIG_FOO) += foo.o
162 $(CONFIG_FOO) evaluates to either y (for built-in) or m (for module).
166 3.2 Built-in object goals - obj-y
167 ---------------------------------
170 in the $(obj-y) lists. These lists depend on the kernel
173 Kbuild compiles all the $(obj-y) files. It then calls
174 "$(AR) rcSTP" to merge these files into one built-in.a file.
176 linked into vmlinux by scripts/link-vmlinux.sh
178 The order of files in $(obj-y) is significant. Duplicates in
180 built-in.a and succeeding instances will be ignored.
193 obj-$(CONFIG_ISDN_I4L) += isdn.o
194 obj-$(CONFIG_ISDN_PPP_BSDCOMP) += isdn_bsdcomp.o
196 3.3 Loadable module goals - obj-m
197 ---------------------------------
199 $(obj-m) specifies object files which are built as loadable
204 simply adds the file to $(obj-m).
209 obj-$(CONFIG_ISDN_PPP_BSDCOMP) += isdn_bsdcomp.o
216 module from, so you have to tell it by setting a $(<module_name>-y)
222 obj-$(CONFIG_ISDN_I4L) += isdn.o
223 isdn-y := isdn_net_lib.o isdn_v110.o isdn_common.o
226 compile the objects listed in $(isdn-y) and then run
227 "$(LD) -r" on the list of these files to generate isdn.o.
229 Due to kbuild recognizing $(<module_name>-y) for composite objects,
236 obj-$(CONFIG_EXT2_FS) += ext2.o
237 ext2-y := balloc.o dir.o file.o ialloc.o inode.o ioctl.o \
239 ext2-$(CONFIG_EXT2_FS_XATTR) += xattr.o xattr_user.o \
249 parts and then link this into built-in.a, as you would expect.
251 3.5 Library file goals - lib-y
252 ------------------------------
254 Objects listed with obj-* are used for modules, or
255 combined in a built-in.a for that specific directory.
258 All objects listed with lib-y are combined in a single
260 Objects that are listed in obj-y and additionally listed in
261 lib-y will not be included in the library, since they will
263 For consistency, objects listed in lib-m will be included in lib.a.
265 Note that the same kbuild makefile may list files to be built-in
267 may contain both a built-in.a and a lib.a file.
272 lib-y := delay.o
276 shall be listed in libs-y.
280 Use of lib-y is normally restricted to `lib/` and `arch/*/lib`.
283 ----------------------------------
291 To do so, obj-y and obj-m are used.
298 obj-$(CONFIG_EXT2_FS) += ext2/
300 If CONFIG_EXT2_FS is set to either 'y' (built-in) or 'm' (modular)
301 the corresponding obj- variable will be set, and kbuild will descend
308 When Kbuild descends into the directory with 'y', all built-in objects
309 from that directory are combined into the built-in.a, which will be
314 that directory specifies obj-y, those objects will be left orphan.
317 Kbuild also supports dedicated syntax, subdir-y and subdir-m, for
319 do not contain kernel-space objects at all. A typical usage is to let
325 subdir-$(CONFIG_GCC_PLUGINS) += gcc-plugins
326 subdir-$(CONFIG_MODVERSIONS) += genksyms
327 subdir-$(CONFIG_SECURITY_SELINUX) += selinux
329 Unlike obj-y/m, subdir-y/m does not need the trailing slash since this
336 3.7 Non-builtin vmlinux targets - extra-y
337 -----------------------------------------
339 extra-y specifies targets which are needed for building vmlinux,
340 but not combined into built-in.a.
352 extra-y += vmlinux.lds
354 $(extra-y) should only contain targets needed for vmlinux.
356 Kbuild skips extra-y when vmlinux is apparently not a final goal.
359 If you intend to build targets unconditionally, always-y (explained
362 3.8 Always built goals - always-y
363 ---------------------------------
365 always-y specifies targets which are literally always built when
370 offsets-file := include/generated/asm-offsets.h
371 always-y += $(offsets-file)
374 ---------------------
376 ccflags-y, asflags-y and ldflags-y
384 ccflags-y specifies options for compiling with $(CC).
389 ccflags-y := -Os -D_LINUX -DBUILDING_ACPICA
390 ccflags-$(CONFIG_ACPI_DEBUG) += -DACPI_DEBUG_OUTPUT
396 asflags-y specifies assembler options.
401 asflags-y := -ansi
403 ldflags-y specifies options for linking with $(LD).
408 ldflags-y += -T $(srctree)/$(src)/decompress_$(arch-y).lds
410 subdir-ccflags-y, subdir-asflags-y
411 The two flags listed above are similar to ccflags-y and asflags-y.
412 The difference is that the subdir- variants have effect for the kbuild
414 Options specified using subdir-* are added to the commandline before
415 the options specified using the non-subdir variants.
419 subdir-ccflags-y := -Werror
421 ccflags-remove-y, asflags-remove-y
427 ccflags-remove-$(CONFIG_MCOUNT) += -pg
433 $(CFLAGS_$@) specifies per-file options for $(CC). The $@
436 CFLAGS_$@ has the higher priority than ccflags-remove-y; CFLAGS_$@
437 can re-add compiler flags that were removed by ccflags-remove-y.
442 CFLAGS_aha152x.o = -DAHA152X_STAT -DAUTOCONF
449 AFLAGS_$@ has the higher priority than asflags-remove-y; AFLAGS_$@
450 can re-add assembler flags that were removed by asflags-remove-y.
455 AFLAGS_head.o := -DTEXT_OFFSET=$(TEXT_OFFSET)
456 AFLAGS_crunch-bits.o := -Wa,-mcpu=ep9312
457 AFLAGS_iwmmxt.o := -Wa,-mcpu=iwmmxt
461 ------------------------
467 3) Command-line used to compile target
470 be re-compiled.
472 3.11 Custom Rules
473 -----------------
475 Custom rules are used when the kbuild infrastructure does
478 Another example are the architecture-specific Makefiles which
479 need custom rules to prepare boot images etc.
481 Custom rules are written as normal Make rules.
483 located, so all custom rules shall use a relative
486 Two variables are used when defining custom rules:
502 $(CPP) -DCHIP=810 - < $< | ... $(src)/script_asm.pl
504 This is a custom rule, following the normal syntax
514 but when execution "make -s" one does not expect to see any output
517 text following $(kecho) to stdout except if "make -s" is used.
528 To enable this behaviour for custom commands kbuild requires
531 quiet_cmd_<command> - what shall be echoed
532 cmd_<command> - the command to execute
550 -----------------------------
558 Kbuild achieves this by a kind of meta-programming.
573 obj-y/m, lib-y/m, extra-y/m, always-y/m, hostprogs, userprogs, Kbuild
578 used in conjunction with custom rules as defined in "3.11 Custom Rules".
596 ----------------------------
604 as-option
605 as-option is used to check if $(CC) -- when used to compile
606 assembler (`*.S`) files -- supports the given option. An optional
612 cflags-y += $(call as-option,-Wa$(comma)-isa=$(isa-y),)
614 In the above example, cflags-y will be assigned the option
615 -Wa$(comma)-isa=$(isa-y) if it is supported by $(CC).
619 as-instr
620 as-instr checks if the assembler reports a specific instruction
623 Note: as-instr-option uses KBUILD_AFLAGS for assembler options
625 cc-option
626 cc-option is used to check if $(CC) supports a given option, and if
632 cflags-y += $(call cc-option,-march=pentium-mmx,-march=i586)
634 In the above example, cflags-y will be assigned the option
635 -march=pentium-mmx if supported by $(CC), otherwise -march=i586.
636 The second argument to cc-option is optional, and if omitted,
637 cflags-y will be assigned no value if first option is not supported.
638 Note: cc-option uses KBUILD_CFLAGS for $(CC) options
640 cc-option-yn
641 cc-option-yn is used to check if gcc supports a given option
647 biarch := $(call cc-option-yn, -m32)
648 aflags-$(biarch) += -a32
649 cflags-$(biarch) += -m32
651 In the above example, $(biarch) is set to y if $(CC) supports the -m32
652 option. When $(biarch) equals 'y', the expanded variables $(aflags-y)
653 and $(cflags-y) will be assigned the values -a32 and -m32,
655 Note: cc-option-yn uses KBUILD_CFLAGS for $(CC) options
657 cc-disable-warning
658 cc-disable-warning checks if gcc supports a given warning and returns
660 because gcc 4.4 and later accept any unknown -Wno-* option and only
665 KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable)
667 In the above example, -Wno-unused-but-set-variable will be added to
670 gcc-min-version
671 gcc-min-version tests if the value of $(CONFIG_GCC_VERSION) is greater than
676 cflags-$(call gcc-min-version, 70100) := -foo
678 In this example, cflags-y will be assigned the value -foo if $(CC) is gcc and
681 clang-min-version
682 clang-min-version tests if the value of $(CONFIG_CLANG_VERSION) is greater
687 cflags-$(call clang-min-version, 110000) := -foo
689 In this example, cflags-y will be assigned the value -foo if $(CC) is clang
692 cc-cross-prefix
693 cc-cross-prefix is used to check if there exists a $(CC) in path with
695 prefix$(CC) in the PATH is returned - and if no prefix$(CC) is found
698 call of cc-cross-prefix.
700 to set CROSS_COMPILE to well-known values but may have several
711 CROSS_COMPILE := $(call cc-cross-prefix, m68k-linux-gnu-)
716 ----------------------------
718 ld-option
719 ld-option is used to check if $(LD) supports the supplied option.
720 ld-option takes two options as arguments.
727 LDFLAGS_vmlinux += $(call ld-option, -X)
730 ----------------------
761 or utilise the variable "always-y".
765 -----------------------
777 c-source file named bin2hex.c located in the same directory as
781 ---------------------------
786 $(<executable>-objs) lists all objects used to link the final
793 lxdialog-objs := checklist.o lxdialog.o
800 Note: The syntax <executable>-y is not permitted for host-programs.
803 -------------------------------
813 qconf-cxxobjs := qconf.o
816 qconf.cc - identified by $(qconf-cxxobjs).
825 qconf-cxxobjs := qconf.o
826 qconf-objs := check.o
829 --------------------------------
839 target-rust := y
846 --------------------------------------------------
857 HOST_EXTRACFLAGS += -I/usr/include/ncurses
865 HOSTCFLAGS_piggyback.o := -DKERNELBASE=$(KERNELBASE)
872 HOSTLDLIBS_qconf := -L$(QTDIR)/lib
875 "-L$(QTDIR)/lib".
878 -----------------------------------------
880 Kbuild will only build host-programs when they are referenced
884 (1) List the prerequisite explicitly in a custom rule.
889 hostprogs := gen-devlist
890 $(obj)/devlist.h: $(src)/pci.ids $(obj)/gen-devlist
891 ( cd $(obj); ./gen-devlist ) < $<
894 $(obj)/gen-devlist is updated. Note that references to
895 the host programs in custom rules must be prefixed with $(obj).
897 (2) Use always-y
899 When there is no suitable custom rule, and the host program
900 shall be built when a makefile is entered, the always-y
907 always-y := $(hostprogs)
911 hostprogs-always-y := lxdialog
927 ----------------------------
929 The following line tells kbuild that the program bpf-direct shall be
934 userprogs := bpf-direct
936 Kbuild assumes in the above example that bpf-direct is made from a
937 single C source file named bpf-direct.c located in the same directory
941 --------------------------------
946 $(<executable>-objs) lists all objects used to link the final
952 userprogs := bpf-fancy
953 bpf-fancy-objs := bpf-fancy.o bpf-helper.o
956 files. In the above example, bpf-fancy.c is compiled to bpf-fancy.o
957 and bpf-helper.c is compiled to bpf-helper.o.
959 Finally, the two .o files are linked to the executable, bpf-fancy.
960 Note: The syntax <executable>-y is not permitted for userspace programs.
963 -------------------------------------------------------
974 userccflags += -I usr/include
981 bpf-helper-userccflags += -I user/include
988 bpfilter_umh-userldflags += -static
990 When linking bpfilter_umh, it will be passed the extra option -static.
995 ----------------------------------------------
1010 (2) Use always-y
1015 always-y := $(userprogs)
1019 userprogs-always-y := binderfs_example
1029 Kbuild knows targets listed in $(hostprogs), $(always-y), $(always-m),
1030 $(always-), $(extra-y), $(extra-) and $(targets). They are all deleted
1036 $(clean-files).
1041 clean-files := crc32table.h
1048 $(no-clean-files) variable.
1050 Usually kbuild descends down in subdirectories due to "obj-* := dir/",
1057 subdir- := compressed
1062 Note 1: arch/$(SRCARCH)/Makefile cannot use "subdir-", because that file is
1064 "subdir-".
1066 Note 2: All directories listed in core-y, libs-y, drivers-y and net-y will
1085 - Additional prerequisites are specified in arch/$(SRCARCH)/Makefile
1087 init-* core* drivers-* net-* libs-* and build all targets.
1088 - The values of the above variables are expanded in arch/$(SRCARCH)/Makefile.
1091 The very first objects linked are listed in scripts/head-object-list.txt.
1092 6) Finally, the architecture-specific part does any required post processing
1094 - This includes building boot records
1095 - Preparing initrd images and the like
1099 --------------------------------------------------------
1110 KBUILD_LDFLAGS := -m elf_s390
1112 Note: ldflags-y can be used to further customise
1125 LDFLAGS_vmlinux := -e stext
1138 OBJCOPYFLAGS := -O binary
1150 Default value - see top level Makefile
1156 KBUILD_AFLAGS += -m64 -mcpu=ultrasparc
1161 Default value - see top level Makefile
1169 cflags-$(CONFIG_X86_32) := -march=i386
1170 cflags-$(CONFIG_X86_64) := -mcmodel=small
1171 KBUILD_CFLAGS += $(cflags-y)
1179 cflags-$(CONFIG_MPENTIUMII) += $(call cc-option,\
1180 -march=pentium2,-march=i686)
1182 # Disable unit-at-a-time mode ...
1183 KBUILD_CFLAGS += $(call cc-option,-fno-unit-at-a-time)
1193 Default value - see top level Makefile
1198 Note that target specification file generation (for ``--target``)
1202 Assembler options specific for built-in
1210 $(KBUILD_AFLAGS_MODULE) is used to add arch-specific options that
1216 $(CC) options specific for built-in
1224 $(KBUILD_CFLAGS_MODULE) is used to add arch-specific options that
1229 $(RUSTC) options specific for built-in
1237 $(KBUILD_RUSTFLAGS_MODULE) is used to add arch-specific options that
1244 $(KBUILD_LDFLAGS_MODULE) is used to add arch-specific options
1251 The linker script with full path. Assigned by the top-level Makefile.
1255 The module linker script with full path. Assigned by the top-level
1263 The objects listed in scripts/head-object-list.txt are exceptions;
1273 ------------------------------------
1283 ------------------------------------
1296 See also chapter XXX-TODO that describes how kbuild supports
1301 ---------------------------------------------
1305 corresponding arch-specific section for modules; the module-building
1306 machinery is all architecture-independent.
1309 core-y, libs-y, drivers-y
1311 $(libs-y) lists directories where a lib.a archive can be located.
1313 The rest list directories where a built-in.a object file can be
1318 $(core-y), $(libs-y), $(drivers-y)
1321 and arch/$(SRCARCH)/Makefile only adds architecture-specific
1327 core-y += arch/sparc/
1329 libs-y += arch/sparc/prom/
1330 libs-y += arch/sparc/lib/
1332 drivers-$(CONFIG_PM) += arch/sparc/power/
1334 7.5 Architecture-specific boot images
1335 -------------------------------------
1350 arch/$(SRCARCH)/Makefile, and use the full path when calling down
1363 There are no rules for naming architecture-specific targets,
1371 echo '* bzImage - Compressed kernel image (arch/x86/boot/bzImage)'
1390 ---------------------------------------------
1401 LDFLAGS_bootsect := -Ttext 0x0 -s --oformat binary
1402 LDFLAGS_setup := -Ttext 0x0 -s --oformat binary -e begtext
1410 LDFLAGS_$@ syntax - one for each potential target.
1436 $(obj)/vmlinux.bin.gz: $(vmlinux.bin.all-y) FORCE
1443 blob to non-init memory prior to calling unflatten_device_tree().
1445 To use this command, simply add `*.dtb` into obj-y or targets, or make
1453 targets += $(dtb-y)
1454 DTC_FLAGS ?= -p 1024
1457 --------------------------------
1463 kbuild knows .lds files and includes a rule `*lds.S` -> `*lds`.
1468 extra-y := vmlinux.lds
1470 The assignment to extra-y is used to tell kbuild to build the
1477 KBUILD_CPPFLAGS : Set in top-level Makefile
1478 cppflags-y : May be set in the kbuild makefile
1479 CPPFLAGS_$(@F) : Target-specific flags.
1480 Note that the full filename is used in this
1484 architecture-specific files.
1487 -------------------------
1489 The directory include/asm-generic contains the header files
1493 See "8.2 generic-y" for further info on syntax etc.
1495 7.11 Post-link pass
1496 -------------------
1499 will be invoked for post-link objects (vmlinux and modules.ko)
1500 for architectures to run post-link passes on. Must also handle
1506 .tmp_vmlinux? targets to be called from link-vmlinux.sh.
1512 ------------------------------------
1515 Many headers can be exported as-is but other headers require a
1516 minimal pre-processing before they are ready for user-space.
1517 The pre-processing does:
1519 - drop kernel-specific annotations
1520 - drop include of compiler.h
1521 - drop all sections that are kernel internal (guarded by `ifdef __KERNEL__`)
1528 arch/<arch>/include/asm/ to list asm files coming from asm-generic.
1531 8.1 no-export-headers
1532 ---------------------
1534 no-export-headers is essentially used by include/uapi/linux/Kbuild to
1538 8.2 generic-y
1539 -------------
1542 include/asm-generic then this is listed in the file
1548 generic-y += termios.h
1549 generic-y += rtc.h
1566 #include <asm-generic/termios.h>
1568 8.3 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 8.4 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
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
1667 GNU Make supports elementary list-processing functions. The kernel
1672 immediate evaluation of the right-hand side and stores an actual string
1673 into the left-hand side. "=" is like a formula definition; it stores the
1674 right-hand side in an unevaluated form and then evaluates this form each
1675 time the left-hand side is used.
1683 - Original version made by Michael Elizabeth Chastain, <mailto:mec@shout.net>
1684 - Updates by Kai Germaschewski <kai@tp1.ruhr-uni-bochum.de>
1685 - Updates by Sam Ravnborg <sam@ravnborg.org>
1686 - Language QA by Jan Engelhardt <jengelh@gmx.de>
1691 - Describe how kbuild supports shipped files with _shipped.
1692 - Generating offset header files.
1693 - Add more variables to chapters 7 or 9?