diff mbox series

[08/19] kbuild: add a phony target to run a command with Kbuild env vars

Message ID 20230722044806.3867434-8-masahiroy@kernel.org (mailing list archive)
State New, archived
Headers show
Series [01/19] kbuild: rpm-pkg: define _arch conditionally | expand

Commit Message

Masahiro Yamada July 22, 2023, 4:47 a.m. UTC
There are some cases where we want to run a command with the same
environment variables as Kbuild uses. For example, 'make coccicheck'
invokes scripts/coccicheck from the top Makefile so that the script can
reference to ${LINUXINCLUDE}, ${KBUILD_EXTMOD}, etc. The top Makefile
defines several phony targets that run a script.

We do it also for an internally used script, which results in a somewhat
complex call graph.

One example:

 debian/rules binary-arch
   -> make intdeb-pkg
      -> scripts/package/builddeb

It is also tedious to add a dedicated target like 'intdeb-pkg' for each
use case.

Add a generic target 'run-command' to run an arbitrary command in an
environment with all Kbuild variables set.

The usage is:

  $ make run-command KBUILD_RUN_COMMAND=<command>

The concept is similar to:

  $ dpkg-architecture -c <command>

This executes <command> in an environment which has all DEB_* variables
defined.

Convert the existing 'make intdeb-pkg'.

Another possible usage is to interrogate a Make variable.

  $ make run-command KBUILD_RUN_COMMAND='echo $(KBUILD_CFLAGS)'

might be useful to see KBUILD_CFLAGS set by the top Makefile.

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
---

 Makefile                 | 4 ++++
 scripts/Makefile.package | 4 ----
 scripts/package/mkdebian | 3 ++-
 3 files changed, 6 insertions(+), 5 deletions(-)

Comments

Nicolas Schier July 24, 2023, 7:53 p.m. UTC | #1
On Sat, Jul 22, 2023 at 01:47:55PM +0900 Masahiro Yamada wrote:
> There are some cases where we want to run a command with the same
> environment variables as Kbuild uses. For example, 'make coccicheck'
> invokes scripts/coccicheck from the top Makefile so that the script can
> reference to ${LINUXINCLUDE}, ${KBUILD_EXTMOD}, etc. The top Makefile
> defines several phony targets that run a script.
> 
> We do it also for an internally used script, which results in a somewhat
> complex call graph.
> 
> One example:
> 
>  debian/rules binary-arch
>    -> make intdeb-pkg
>       -> scripts/package/builddeb
> 
> It is also tedious to add a dedicated target like 'intdeb-pkg' for each
> use case.
> 
> Add a generic target 'run-command' to run an arbitrary command in an
> environment with all Kbuild variables set.
> 
> The usage is:
> 
>   $ make run-command KBUILD_RUN_COMMAND=<command>
> 
> The concept is similar to:
> 
>   $ dpkg-architecture -c <command>
> 
> This executes <command> in an environment which has all DEB_* variables
> defined.
> 
> Convert the existing 'make intdeb-pkg'.
> 
> Another possible usage is to interrogate a Make variable.
> 
>   $ make run-command KBUILD_RUN_COMMAND='echo $(KBUILD_CFLAGS)'

nice idea, I like that.

Reviewed-by: Nicolas Schier <nicolas@fjasle.eu>


> 
> might be useful to see KBUILD_CFLAGS set by the top Makefile.
> 
> Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
> ---
> 
>  Makefile                 | 4 ++++
>  scripts/Makefile.package | 4 ----
>  scripts/package/mkdebian | 3 ++-
>  3 files changed, 6 insertions(+), 5 deletions(-)
> 
> diff --git a/Makefile b/Makefile
> index 47690c28456a..f258ef13fa5d 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -2133,6 +2133,10 @@ kernelversion:
>  image_name:
>  	@echo $(KBUILD_IMAGE)
>  
> +PHONY += run-command
> +run-command:
> +	$(Q)$(KBUILD_RUN_COMMAND)
> +
>  quiet_cmd_rmfiles = $(if $(wildcard $(rm-files)),CLEAN   $(wildcard $(rm-files)))
>        cmd_rmfiles = rm -rf $(rm-files)
>  
> diff --git a/scripts/Makefile.package b/scripts/Makefile.package
> index e9217e997c68..7cd61a374dae 100644
> --- a/scripts/Makefile.package
> +++ b/scripts/Makefile.package
> @@ -146,10 +146,6 @@ deb-pkg srcdeb-pkg bindeb-pkg:
>  		--no-check-builddeps) \
>  	$(DPKG_FLAGS))
>  
> -PHONY += intdeb-pkg
> -intdeb-pkg:
> -	+$(CONFIG_SHELL) $(srctree)/scripts/package/builddeb
> -
>  # snap-pkg
>  # ---------------------------------------------------------------------------
>  PHONY += snap-pkg
> diff --git a/scripts/package/mkdebian b/scripts/package/mkdebian
> index ba2453e08d40..9105abab9728 100755
> --- a/scripts/package/mkdebian
> +++ b/scripts/package/mkdebian
> @@ -283,7 +283,8 @@ build: build-arch
>  binary-indep:
>  binary-arch: build-arch
>  	\$(MAKE) -f \$(srctree)/Makefile ARCH=${ARCH} \
> -	KERNELRELEASE=\$(KERNELRELEASE) intdeb-pkg
> +	KERNELRELEASE=\$(KERNELRELEASE) \
> +	run-command KBUILD_RUN_COMMAND=+\$(srctree)/scripts/package/builddeb
>  
>  clean:
>  	rm -rf debian/files debian/linux-*
> -- 
> 2.39.2
diff mbox series

Patch

diff --git a/Makefile b/Makefile
index 47690c28456a..f258ef13fa5d 100644
--- a/Makefile
+++ b/Makefile
@@ -2133,6 +2133,10 @@  kernelversion:
 image_name:
 	@echo $(KBUILD_IMAGE)
 
+PHONY += run-command
+run-command:
+	$(Q)$(KBUILD_RUN_COMMAND)
+
 quiet_cmd_rmfiles = $(if $(wildcard $(rm-files)),CLEAN   $(wildcard $(rm-files)))
       cmd_rmfiles = rm -rf $(rm-files)
 
diff --git a/scripts/Makefile.package b/scripts/Makefile.package
index e9217e997c68..7cd61a374dae 100644
--- a/scripts/Makefile.package
+++ b/scripts/Makefile.package
@@ -146,10 +146,6 @@  deb-pkg srcdeb-pkg bindeb-pkg:
 		--no-check-builddeps) \
 	$(DPKG_FLAGS))
 
-PHONY += intdeb-pkg
-intdeb-pkg:
-	+$(CONFIG_SHELL) $(srctree)/scripts/package/builddeb
-
 # snap-pkg
 # ---------------------------------------------------------------------------
 PHONY += snap-pkg
diff --git a/scripts/package/mkdebian b/scripts/package/mkdebian
index ba2453e08d40..9105abab9728 100755
--- a/scripts/package/mkdebian
+++ b/scripts/package/mkdebian
@@ -283,7 +283,8 @@  build: build-arch
 binary-indep:
 binary-arch: build-arch
 	\$(MAKE) -f \$(srctree)/Makefile ARCH=${ARCH} \
-	KERNELRELEASE=\$(KERNELRELEASE) intdeb-pkg
+	KERNELRELEASE=\$(KERNELRELEASE) \
+	run-command KBUILD_RUN_COMMAND=+\$(srctree)/scripts/package/builddeb
 
 clean:
 	rm -rf debian/files debian/linux-*