Commit faabed29 authored by Masahiro Yamada's avatar Masahiro Yamada
Browse files

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: default avatarMasahiro Yamada <masahiroy@kernel.org>
Acked-by: default avatarMiguel Ojeda <miguel.ojeda.sandonis@gmail.com>
parent 85569d19
Loading
Loading
Loading
Loading
+30 −1
Original line number Diff line number Diff line
@@ -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
=============================
+1 −2
Original line number Diff line number Diff line
# SPDX-License-Identifier: GPL-2.0
userprogs := cfag12864b-example
always-y := $(userprogs)
userprogs-always-y += cfag12864b-example
+1 −2
Original line number Diff line number Diff line
# SPDX-License-Identifier: GPL-2.0-only
userprogs := binderfs_example
always-y := $(userprogs)
userprogs-always-y += binderfs_example

userccflags += -I usr/include
+1 −2
Original line number Diff line number Diff line
# 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
+1 −2
Original line number Diff line number Diff line
# SPDX-License-Identifier: GPL-2.0
userprogs := hid-example
always-y := $(userprogs)
userprogs-always-y += hid-example

userccflags += -I usr/include
Loading