]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
kbuild: introduce hostprogs-always-y and userprogs-always-y
authorMasahiro Yamada <masahiroy@kernel.org>
Sat, 1 Aug 2020 12:27:18 +0000 (21:27 +0900)
committerMasahiro Yamada <masahiroy@kernel.org>
Sun, 9 Aug 2020 16:32:59 +0000 (01:32 +0900)
To build host programs, you need to add the program names to 'hostprogs'
to use the necessary build rule, but it is not enough to build them
because there is no dependency.

There are two types of host programs: built as the prerequisite of
another (e.g. gen_crc32table in lib/Makefile), or always built when
Kbuild visits the Makefile (e.g. genksyms in scripts/genksyms/Makefile).

The latter is typical in Makefiles under scripts/, which contains host
programs globally used during the kernel build. To build them, you need
to add them to both 'hostprogs' and 'always-y'.

This commit adds hostprogs-always-y as a shorthand.

The same applies to user programs. net/bpfilter/Makefile builds
bpfilter_umh on demand, hence always-y is unneeded. In contrast,
programs under samples/ are added to both 'userprogs' and 'always-y'
so they are always built when Kbuild visits the Makefiles.

userprogs-always-y works as a shorthand.

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Acked-by: Miguel Ojeda <miguel.ojeda.sandonis@gmail.com>
22 files changed:
Documentation/kbuild/makefiles.rst
samples/auxdisplay/Makefile
samples/binderfs/Makefile
samples/connector/Makefile
samples/hidraw/Makefile
samples/mei/Makefile
samples/pidfd/Makefile
samples/seccomp/Makefile
samples/timers/Makefile
samples/uhid/Makefile
samples/vfs/Makefile
samples/watch_queue/Makefile
samples/watchdog/Makefile
scripts/Makefile
scripts/Makefile.clean
scripts/Makefile.lib
scripts/basic/Makefile
scripts/dtc/Makefile
scripts/genksyms/Makefile
scripts/mod/Makefile
scripts/selinux/genheaders/Makefile
scripts/selinux/mdp/Makefile

index 14d8e7d23c0495bac5507a0c7d9c9408c6815560..b81b8913a5a3714c60ef475ea2901bfe9c281808 100644 (file)
@@ -749,6 +749,10 @@ Both possibilities are described in the following.
                hostprogs     := lxdialog
                always-y      := $(hostprogs)
 
+       Kbuild provides the following shorthand for this:
+
+               hostprogs-always-y := lxdialog
+
        This will tell kbuild to build lxdialog even if not referenced in
        any rule.
 
@@ -831,7 +835,32 @@ The syntax is quite similar. The difference is to use "userprogs" instead of
 5.4 When userspace programs are actually built
 ----------------------------------------------
 
-       Same as "When host programs are actually built".
+       Kbuild builds userspace programs only when told to do so.
+       There are two ways to do this.
+
+       (1) Add it as the prerequisite of another file
+
+       Example::
+
+               #net/bpfilter/Makefile
+               userprogs := bpfilter_umh
+               $(obj)/bpfilter_umh_blob.o: $(obj)/bpfilter_umh
+
+       $(obj)/bpfilter_umh is built before $(obj)/bpfilter_umh_blob.o
+
+       (2) Use always-y
+
+       Example::
+
+               userprogs := binderfs_example
+               always-y := $(userprogs)
+
+       Kbuild provides the following shorthand for this:
+
+               userprogs-always-y := binderfs_example
+
+       This will tell Kbuild to build binderfs_example when it visits this
+       Makefile.
 
 6 Kbuild clean infrastructure
 =============================
index dbdf939af94a6945fc13f2943a08d28bbb882b6b..19d5568938c3599258decf03738aabec7c1b46f5 100644 (file)
@@ -1,3 +1,2 @@
 # SPDX-License-Identifier: GPL-2.0
-userprogs := cfag12864b-example
-always-y := $(userprogs)
+userprogs-always-y += cfag12864b-example
index 989e4badaee2dd7cc3eebf325507b2313a10c6bd..629e43b9b12963a68508f1c2e86bcfecf4bb465e 100644 (file)
@@ -1,5 +1,4 @@
 # SPDX-License-Identifier: GPL-2.0-only
-userprogs := binderfs_example
-always-y := $(userprogs)
+userprogs-always-y += binderfs_example
 
 userccflags += -I usr/include
index 50cb40e09a7bb1ba393b5771fc18c36823dee8f1..d98a9e047c112346ea1dd8c8ac2cdfab5d062066 100644 (file)
@@ -1,7 +1,6 @@
 # SPDX-License-Identifier: GPL-2.0
 obj-$(CONFIG_SAMPLE_CONNECTOR) += cn_test.o
 
-userprogs := ucon
-always-$(CONFIG_CC_CAN_LINK) := $(userprogs)
+userprogs-always-$(CONFIG_CC_CAN_LINK) += ucon
 
 userccflags += -I usr/include
index d2c77ed60b39fb7040f48d59ed0aca1fd9022d3f..594d989e5486eec37d61a3f45465fcf9498f6390 100644 (file)
@@ -1,5 +1,4 @@
 # SPDX-License-Identifier: GPL-2.0
-userprogs := hid-example
-always-y := $(userprogs)
+userprogs-always-y += hid-example
 
 userccflags += -I usr/include
index 329411f82369b9fae0798dabbf0285e72a20fb5b..c54b8a0ab04ed015c3f027be0c5f08317e3800d9 100644 (file)
@@ -1,7 +1,5 @@
 # SPDX-License-Identifier: GPL-2.0
 # Copyright (c) 2012-2019, Intel Corporation. All rights reserved.
-
-userprogs := mei-amt-version
-always-y := $(userprogs)
+userprogs-always-y += mei-amt-version
 
 userccflags += -I usr/include
index 6e5b67e648c22fd87ba4ce2169c168636d13c936..9754e2d81f70d1c513099d903b2a966c40daa7c7 100644 (file)
@@ -1,6 +1,4 @@
 # SPDX-License-Identifier: GPL-2.0
-
-usertprogs := pidfd-metadata
-always-y := $(userprogs)
+usertprogs-always-y += pidfd-metadata
 
 userccflags += -I usr/include
index 75916c23e4161bdee68ea27fa7091996d131f273..c85ae0ed8342a4648fa1b1b3c09495b8a7014a7c 100644 (file)
@@ -1,8 +1,6 @@
 # SPDX-License-Identifier: GPL-2.0
-userprogs := bpf-fancy dropper bpf-direct user-trap
+userprogs-always-y += bpf-fancy dropper bpf-direct user-trap
 
 bpf-fancy-objs := bpf-fancy.o bpf-helper.o
 
 userccflags += -I usr/include
-
-always-y := $(userprogs)
index 15c7ddbc8c5132aa0e7b422ae8ed213db752a34e..e6836cdea4e28d554bab52ab1f600f07c1765df3 100644 (file)
@@ -1,5 +1,4 @@
 # SPDX-License-Identifier: GPL-2.0
-userprogs := hpet_example
-always-y := $(userprogs)
+userprogs-always-y += hpet_example
 
 userccflags += -I usr/include
index 9e652fc34103472a603737321758c1bee5cfee8f..0aa424ec4899c2b80419d45dec51819e3a9a785a 100644 (file)
@@ -1,5 +1,4 @@
 # SPDX-License-Identifier: GPL-2.0-only
-userprogs := uhid-example
-always-y := $(userprogs)
+userprogs-always-y += uhid-example
 
 userccflags += -I usr/include
index 00b6824f9237e7820b14ff061c9c9f50b338d5c7..6377a678134acf0d682151d751d2f5042dbf5e0a 100644 (file)
@@ -1,5 +1,4 @@
 # SPDX-License-Identifier: GPL-2.0-only
-userprogs := test-fsmount test-statx
-always-y := $(userprogs)
+userprogs-always-y += test-fsmount test-statx
 
 userccflags += -I usr/include
index 792b22f593cfa7379511dc1c4306ea469b1b9f9b..c0db3a6bc524d6347e5e125a89fbd040bf6682a6 100644 (file)
@@ -1,5 +1,4 @@
 # SPDX-License-Identifier: GPL-2.0-only
-userprogs := watch_test
-always-y := $(userprogs)
+userprogs-always-y += watch_test
 
 userccflags += -I usr/include
index 17384cfb387e9e72031b101779dffe1c484711cf..ab39d23dc96bed22ae024931803dd11baf5e6477 100644 (file)
@@ -1,3 +1,2 @@
 # SPDX-License-Identifier: GPL-2.0
-userprogs := watchdog-simple
-always-y := $(userprogs)
+userprogs-always-y += watchdog-simple
index 95ecf970c74c3eb727244861baf05e90498802ca..bc018e4b733edf33c6fd05236bf4afe0a357b9d7 100644 (file)
@@ -3,14 +3,14 @@
 # scripts contains sources for various helper programs used throughout
 # the kernel for the build process.
 
-always-$(CONFIG_BUILD_BIN2C)                   += bin2c
-always-$(CONFIG_KALLSYMS)                      += kallsyms
-always-$(BUILD_C_RECORDMCOUNT)                 += recordmcount
-always-$(CONFIG_BUILDTIME_TABLE_SORT)          += sorttable
-always-$(CONFIG_ASN1)                          += asn1_compiler
-always-$(CONFIG_MODULE_SIG_FORMAT)             += sign-file
-always-$(CONFIG_SYSTEM_TRUSTED_KEYRING)                += extract-cert
-always-$(CONFIG_SYSTEM_EXTRA_CERTIFICATE)      += insert-sys-cert
+hostprogs-always-$(CONFIG_BUILD_BIN2C)                 += bin2c
+hostprogs-always-$(CONFIG_KALLSYMS)                    += kallsyms
+hostprogs-always-$(BUILD_C_RECORDMCOUNT)               += recordmcount
+hostprogs-always-$(CONFIG_BUILDTIME_TABLE_SORT)                += sorttable
+hostprogs-always-$(CONFIG_ASN1)                                += asn1_compiler
+hostprogs-always-$(CONFIG_MODULE_SIG_FORMAT)           += sign-file
+hostprogs-always-$(CONFIG_SYSTEM_TRUSTED_KEYRING)      += extract-cert
+hostprogs-always-$(CONFIG_SYSTEM_EXTRA_CERTIFICATE)    += insert-sys-cert
 
 HOSTCFLAGS_sorttable.o = -I$(srctree)/tools/include
 HOSTCFLAGS_asn1_compiler.o = -I$(srctree)/include
@@ -26,8 +26,6 @@ HOSTCFLAGS_sorttable.o += -DUNWINDER_ORC_ENABLED
 HOSTLDLIBS_sorttable = -lpthread
 endif
 
-hostprogs := $(always-y) $(always-m)
-
 # The following programs are only built on demand
 hostprogs += unifdef
 
index 3cdf31218198b1c278c84f6765105391be4bb67e..d9e0ceace6a64f35cdfe2819a591b6149edd3d38 100644 (file)
@@ -27,9 +27,15 @@ subdir-ymn   := $(addprefix $(obj)/,$(subdir-ymn))
 # build a list of files to remove, usually relative to the current
 # directory
 
-__clean-files  := $(extra-y) $(extra-m) $(extra-)       \
-                  $(always) $(always-y) $(always-m) $(always-) $(targets) $(clean-files)   \
-                  $(hostprogs) $(hostprogs-y) $(hostprogs-m) $(hostprogs-) $(userprogs)
+__clean-files  := \
+       $(clean-files) $(targets) $(hostprogs) $(userprogs) \
+       $(extra-y) $(extra-m) $(extra-) \
+       $(always-y) $(always-m) $(always-) \
+       $(hostprogs-always-y) $(hostprogs-always-m) $(hostprogs-always-) \
+       $(userprogs-always-y) $(userprogs-always-m) $(userprogs-always-)
+
+# deprecated
+__clean-files  += $(always) $(hostprogs-y) $(hostprogs-m) $(hostprogs-)
 
 __clean-files   := $(filter-out $(no-clean-files), $(__clean-files))
 
index 5cfd377778b47a23744d05f66531f096a3f207e8..841ac038132b52c9ddeb60ee5b3371b12e9fe0b3 100644 (file)
@@ -68,6 +68,17 @@ real-obj-m := $(foreach m, $(obj-m), $(if $(strip $($(m:.o=-objs)) $($(m:.o=-y))
 
 always-y += $(always-m)
 
+# hostprogs-always-y += foo
+# ... is a shorthand for
+# hostprogs += foo
+# always-y  += foo
+hostprogs += $(hostprogs-always-y) $(hostprogs-always-m)
+always-y += $(hostprogs-always-y) $(hostprogs-always-m)
+
+# userprogs-always-y is likewise.
+userprogs += $(userprogs-always-y) $(userprogs-always-m)
+always-y += $(userprogs-always-y) $(userprogs-always-m)
+
 # DTB
 # If CONFIG_OF_ALL_DTBS is enabled, all DT blobs are built
 extra-y                                += $(dtb-y)
index 290dd27d28093f86cdbb72e358ed7099a28fb41d..eeb6a38c5551516bc3b1539e5f236ff952fea394 100644 (file)
@@ -2,5 +2,4 @@
 #
 # fixdep: used to generate dependency information during build process
 
-hostprogs      := fixdep
-always-y       := $(hostprogs)
+hostprogs-always-y     += fixdep
index 0b44917f981c7506b3870cc3b52cae8c57fa8579..a698ece43fff0db02bc5086ca3d4f67f8dbfdeb4 100644 (file)
@@ -1,9 +1,8 @@
 # SPDX-License-Identifier: GPL-2.0
 # scripts/dtc makefile
 
-hostprogs                      := dtc
-always-$(CONFIG_DTC)           += $(hostprogs)
-always-$(CHECK_DT_BINDING)     += $(hostprogs)
+hostprogs-always-$(CONFIG_DTC)         += dtc
+hostprogs-always-$(CHECK_DT_BINDING)   += dtc
 
 dtc-objs       := dtc.o flattree.o fstree.o data.o livetree.o treesource.o \
                   srcpos.o checks.o util.o
index d328de1e10eeca1ef0205a662b3f42feeafb1cf0..ce4f99935de59012883ab39ba2f2f8b85203083d 100644 (file)
@@ -1,7 +1,6 @@
 # SPDX-License-Identifier: GPL-2.0
 
-hostprogs      := genksyms
-always-y       := $(hostprogs)
+hostprogs-always-y     += genksyms
 
 genksyms-objs  := genksyms.o parse.tab.o lex.lex.o
 
index 296b6a3878b22e96f537524252bc3c425a64bef6..78071681d924225d7b6083de13c7c58b031fe07d 100644 (file)
@@ -1,8 +1,8 @@
 # SPDX-License-Identifier: GPL-2.0
 OBJECT_FILES_NON_STANDARD := y
 
-hostprogs      := modpost mk_elfconfig
-always-y       := $(hostprogs) empty.o
+hostprogs-always-y     += modpost mk_elfconfig
+always-y               += empty.o
 
 modpost-objs   := modpost.o file2alias.o sumversion.o
 
index 70cf8d95d07c7c44fbbd5aed64d66f75c40aa524..1faf7f07e8db3841fcc7a41206e9ce0f24844782 100644 (file)
@@ -1,7 +1,5 @@
 # SPDX-License-Identifier: GPL-2.0
-hostprogs      := genheaders
+hostprogs-always-y += genheaders
 HOST_EXTRACFLAGS += \
        -I$(srctree)/include/uapi -I$(srctree)/include \
        -I$(srctree)/security/selinux/include
-
-always-y       := $(hostprogs)
index 3026f3c2aa2b04993d8490e3b59b36e934dd9877..d61058ddd15cf7c2d36168c4ec53aab722666b1a 100644 (file)
@@ -1,8 +1,7 @@
 # SPDX-License-Identifier: GPL-2.0
-hostprogs      := mdp
+hostprogs-always-y += mdp
 HOST_EXTRACFLAGS += \
        -I$(srctree)/include/uapi -I$(srctree)/include \
        -I$(srctree)/security/selinux/include -I$(objtree)/include
 
-always-y       := $(hostprogs)
 clean-files    := policy.* file_contexts