mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2024-12-29 09:13:38 +00:00
kbuild: introduce hostprogs-always-y and userprogs-always-y
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>
This commit is contained in:
parent
85569d19d0
commit
faabed295c
@ -749,6 +749,10 @@ Both possibilities are described in the following.
|
|||||||
hostprogs := lxdialog
|
hostprogs := lxdialog
|
||||||
always-y := $(hostprogs)
|
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
|
This will tell kbuild to build lxdialog even if not referenced in
|
||||||
any rule.
|
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
|
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
|
6 Kbuild clean infrastructure
|
||||||
=============================
|
=============================
|
||||||
|
@ -1,3 +1,2 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
userprogs := cfag12864b-example
|
userprogs-always-y += cfag12864b-example
|
||||||
always-y := $(userprogs)
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0-only
|
# SPDX-License-Identifier: GPL-2.0-only
|
||||||
userprogs := binderfs_example
|
userprogs-always-y += binderfs_example
|
||||||
always-y := $(userprogs)
|
|
||||||
|
|
||||||
userccflags += -I usr/include
|
userccflags += -I usr/include
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
obj-$(CONFIG_SAMPLE_CONNECTOR) += cn_test.o
|
obj-$(CONFIG_SAMPLE_CONNECTOR) += cn_test.o
|
||||||
|
|
||||||
userprogs := ucon
|
userprogs-always-$(CONFIG_CC_CAN_LINK) += ucon
|
||||||
always-$(CONFIG_CC_CAN_LINK) := $(userprogs)
|
|
||||||
|
|
||||||
userccflags += -I usr/include
|
userccflags += -I usr/include
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
userprogs := hid-example
|
userprogs-always-y += hid-example
|
||||||
always-y := $(userprogs)
|
|
||||||
|
|
||||||
userccflags += -I usr/include
|
userccflags += -I usr/include
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
# Copyright (c) 2012-2019, Intel Corporation. All rights reserved.
|
# Copyright (c) 2012-2019, Intel Corporation. All rights reserved.
|
||||||
|
userprogs-always-y += mei-amt-version
|
||||||
userprogs := mei-amt-version
|
|
||||||
always-y := $(userprogs)
|
|
||||||
|
|
||||||
userccflags += -I usr/include
|
userccflags += -I usr/include
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
|
usertprogs-always-y += pidfd-metadata
|
||||||
usertprogs := pidfd-metadata
|
|
||||||
always-y := $(userprogs)
|
|
||||||
|
|
||||||
userccflags += -I usr/include
|
userccflags += -I usr/include
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0
|
# 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
|
bpf-fancy-objs := bpf-fancy.o bpf-helper.o
|
||||||
|
|
||||||
userccflags += -I usr/include
|
userccflags += -I usr/include
|
||||||
|
|
||||||
always-y := $(userprogs)
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
userprogs := hpet_example
|
userprogs-always-y += hpet_example
|
||||||
always-y := $(userprogs)
|
|
||||||
|
|
||||||
userccflags += -I usr/include
|
userccflags += -I usr/include
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0-only
|
# SPDX-License-Identifier: GPL-2.0-only
|
||||||
userprogs := uhid-example
|
userprogs-always-y += uhid-example
|
||||||
always-y := $(userprogs)
|
|
||||||
|
|
||||||
userccflags += -I usr/include
|
userccflags += -I usr/include
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0-only
|
# SPDX-License-Identifier: GPL-2.0-only
|
||||||
userprogs := test-fsmount test-statx
|
userprogs-always-y += test-fsmount test-statx
|
||||||
always-y := $(userprogs)
|
|
||||||
|
|
||||||
userccflags += -I usr/include
|
userccflags += -I usr/include
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0-only
|
# SPDX-License-Identifier: GPL-2.0-only
|
||||||
userprogs := watch_test
|
userprogs-always-y += watch_test
|
||||||
always-y := $(userprogs)
|
|
||||||
|
|
||||||
userccflags += -I usr/include
|
userccflags += -I usr/include
|
||||||
|
@ -1,3 +1,2 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
userprogs := watchdog-simple
|
userprogs-always-y += watchdog-simple
|
||||||
always-y := $(userprogs)
|
|
||||||
|
@ -3,14 +3,14 @@
|
|||||||
# scripts contains sources for various helper programs used throughout
|
# scripts contains sources for various helper programs used throughout
|
||||||
# the kernel for the build process.
|
# the kernel for the build process.
|
||||||
|
|
||||||
always-$(CONFIG_BUILD_BIN2C) += bin2c
|
hostprogs-always-$(CONFIG_BUILD_BIN2C) += bin2c
|
||||||
always-$(CONFIG_KALLSYMS) += kallsyms
|
hostprogs-always-$(CONFIG_KALLSYMS) += kallsyms
|
||||||
always-$(BUILD_C_RECORDMCOUNT) += recordmcount
|
hostprogs-always-$(BUILD_C_RECORDMCOUNT) += recordmcount
|
||||||
always-$(CONFIG_BUILDTIME_TABLE_SORT) += sorttable
|
hostprogs-always-$(CONFIG_BUILDTIME_TABLE_SORT) += sorttable
|
||||||
always-$(CONFIG_ASN1) += asn1_compiler
|
hostprogs-always-$(CONFIG_ASN1) += asn1_compiler
|
||||||
always-$(CONFIG_MODULE_SIG_FORMAT) += sign-file
|
hostprogs-always-$(CONFIG_MODULE_SIG_FORMAT) += sign-file
|
||||||
always-$(CONFIG_SYSTEM_TRUSTED_KEYRING) += extract-cert
|
hostprogs-always-$(CONFIG_SYSTEM_TRUSTED_KEYRING) += extract-cert
|
||||||
always-$(CONFIG_SYSTEM_EXTRA_CERTIFICATE) += insert-sys-cert
|
hostprogs-always-$(CONFIG_SYSTEM_EXTRA_CERTIFICATE) += insert-sys-cert
|
||||||
|
|
||||||
HOSTCFLAGS_sorttable.o = -I$(srctree)/tools/include
|
HOSTCFLAGS_sorttable.o = -I$(srctree)/tools/include
|
||||||
HOSTCFLAGS_asn1_compiler.o = -I$(srctree)/include
|
HOSTCFLAGS_asn1_compiler.o = -I$(srctree)/include
|
||||||
@ -26,8 +26,6 @@ HOSTCFLAGS_sorttable.o += -DUNWINDER_ORC_ENABLED
|
|||||||
HOSTLDLIBS_sorttable = -lpthread
|
HOSTLDLIBS_sorttable = -lpthread
|
||||||
endif
|
endif
|
||||||
|
|
||||||
hostprogs := $(always-y) $(always-m)
|
|
||||||
|
|
||||||
# The following programs are only built on demand
|
# The following programs are only built on demand
|
||||||
hostprogs += unifdef
|
hostprogs += unifdef
|
||||||
|
|
||||||
|
@ -27,9 +27,15 @@ subdir-ymn := $(addprefix $(obj)/,$(subdir-ymn))
|
|||||||
# build a list of files to remove, usually relative to the current
|
# build a list of files to remove, usually relative to the current
|
||||||
# directory
|
# directory
|
||||||
|
|
||||||
__clean-files := $(extra-y) $(extra-m) $(extra-) \
|
__clean-files := \
|
||||||
$(always) $(always-y) $(always-m) $(always-) $(targets) $(clean-files) \
|
$(clean-files) $(targets) $(hostprogs) $(userprogs) \
|
||||||
$(hostprogs) $(hostprogs-y) $(hostprogs-m) $(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))
|
__clean-files := $(filter-out $(no-clean-files), $(__clean-files))
|
||||||
|
|
||||||
|
@ -68,6 +68,17 @@ real-obj-m := $(foreach m, $(obj-m), $(if $(strip $($(m:.o=-objs)) $($(m:.o=-y))
|
|||||||
|
|
||||||
always-y += $(always-m)
|
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
|
# DTB
|
||||||
# If CONFIG_OF_ALL_DTBS is enabled, all DT blobs are built
|
# If CONFIG_OF_ALL_DTBS is enabled, all DT blobs are built
|
||||||
extra-y += $(dtb-y)
|
extra-y += $(dtb-y)
|
||||||
|
@ -2,5 +2,4 @@
|
|||||||
#
|
#
|
||||||
# fixdep: used to generate dependency information during build process
|
# fixdep: used to generate dependency information during build process
|
||||||
|
|
||||||
hostprogs := fixdep
|
hostprogs-always-y += fixdep
|
||||||
always-y := $(hostprogs)
|
|
||||||
|
@ -1,9 +1,8 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
# scripts/dtc makefile
|
# scripts/dtc makefile
|
||||||
|
|
||||||
hostprogs := dtc
|
hostprogs-always-$(CONFIG_DTC) += dtc
|
||||||
always-$(CONFIG_DTC) += $(hostprogs)
|
hostprogs-always-$(CHECK_DT_BINDING) += dtc
|
||||||
always-$(CHECK_DT_BINDING) += $(hostprogs)
|
|
||||||
|
|
||||||
dtc-objs := dtc.o flattree.o fstree.o data.o livetree.o treesource.o \
|
dtc-objs := dtc.o flattree.o fstree.o data.o livetree.o treesource.o \
|
||||||
srcpos.o checks.o util.o
|
srcpos.o checks.o util.o
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
|
|
||||||
hostprogs := genksyms
|
hostprogs-always-y += genksyms
|
||||||
always-y := $(hostprogs)
|
|
||||||
|
|
||||||
genksyms-objs := genksyms.o parse.tab.o lex.lex.o
|
genksyms-objs := genksyms.o parse.tab.o lex.lex.o
|
||||||
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
OBJECT_FILES_NON_STANDARD := y
|
OBJECT_FILES_NON_STANDARD := y
|
||||||
|
|
||||||
hostprogs := modpost mk_elfconfig
|
hostprogs-always-y += modpost mk_elfconfig
|
||||||
always-y := $(hostprogs) empty.o
|
always-y += empty.o
|
||||||
|
|
||||||
modpost-objs := modpost.o file2alias.o sumversion.o
|
modpost-objs := modpost.o file2alias.o sumversion.o
|
||||||
|
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
hostprogs := genheaders
|
hostprogs-always-y += genheaders
|
||||||
HOST_EXTRACFLAGS += \
|
HOST_EXTRACFLAGS += \
|
||||||
-I$(srctree)/include/uapi -I$(srctree)/include \
|
-I$(srctree)/include/uapi -I$(srctree)/include \
|
||||||
-I$(srctree)/security/selinux/include
|
-I$(srctree)/security/selinux/include
|
||||||
|
|
||||||
always-y := $(hostprogs)
|
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
hostprogs := mdp
|
hostprogs-always-y += mdp
|
||||||
HOST_EXTRACFLAGS += \
|
HOST_EXTRACFLAGS += \
|
||||||
-I$(srctree)/include/uapi -I$(srctree)/include \
|
-I$(srctree)/include/uapi -I$(srctree)/include \
|
||||||
-I$(srctree)/security/selinux/include -I$(objtree)/include
|
-I$(srctree)/security/selinux/include -I$(objtree)/include
|
||||||
|
|
||||||
always-y := $(hostprogs)
|
|
||||||
clean-files := policy.* file_contexts
|
clean-files := policy.* file_contexts
|
||||||
|
Loading…
Reference in New Issue
Block a user