Re: [PATCH v2 4/5] kconfig: refactor Makefile to reduce process forks

From: Nicolas Schier
Date: Wed Nov 23 2022 - 16:15:00 EST


On Thu 24 Nov 2022 00:18:27 GMT, Masahiro Yamada wrote:
> Refactor Makefile and use read-file macro. For Make >= 4.2, it can
> read
> out a file by using the built-in function.
>
> Signed-off-by: Masahiro Yamada <masahiroy@xxxxxxxxxx>
> ---

Reviewed-by: Nicolas Schier <nicolas@xxxxxxxxx>

>
> (no changes since v1)
>
> scripts/kconfig/.gitignore | 4 +++-
> scripts/kconfig/Makefile | 43 +++++++++++++++++++-----------------
> scripts/kconfig/gconf-cfg.sh | 7 ++++--
> scripts/kconfig/mconf-cfg.sh | 25 ++++++++++++---------
> scripts/kconfig/nconf-cfg.sh | 23 ++++++++++---------
> scripts/kconfig/qconf-cfg.sh | 10 ++++++---
> scripts/remove-stale-files | 2 ++
> 7 files changed, 67 insertions(+), 47 deletions(-)
>
> diff --git a/scripts/kconfig/.gitignore b/scripts/kconfig/.gitignore
> index 500e7424b3ef..c8a3f9cd52f0 100644
> --- a/scripts/kconfig/.gitignore
> +++ b/scripts/kconfig/.gitignore
> @@ -1,5 +1,7 @@
> # SPDX-License-Identifier: GPL-2.0-only
> /conf
> /[gmnq]conf
> -/[gmnq]conf-cfg
> +/[gmnq]conf-cflags
> +/[gmnq]conf-libs
> +/qconf-bin
> /qconf-moc.cc
> diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile
> index b8ef0fb4bbef..da7da9775a4b 100644
> --- a/scripts/kconfig/Makefile
> +++ b/scripts/kconfig/Makefile
> @@ -159,11 +159,12 @@ conf-objs := conf.o $(common-objs)
> hostprogs += nconf
> nconf-objs := nconf.o nconf.gui.o $(common-objs)
>
> -HOSTLDLIBS_nconf = $(shell . $(obj)/nconf-cfg && echo $$libs)
> -HOSTCFLAGS_nconf.o = $(shell . $(obj)/nconf-cfg && echo $$cflags)
> -HOSTCFLAGS_nconf.gui.o = $(shell . $(obj)/nconf-cfg && echo $$cflags)
> +HOSTLDLIBS_nconf = $(call read-file, $(obj)/nconf-libs)
> +HOSTCFLAGS_nconf.o = $(call read-file, $(obj)/nconf-cflags)
> +HOSTCFLAGS_nconf.gui.o = $(call read-file, $(obj)/nconf-cflags)
>
> -$(obj)/nconf.o $(obj)/nconf.gui.o: $(obj)/nconf-cfg
> +$(obj)/nconf: | $(obj)/nconf-libs
> +$(obj)/nconf.o $(obj)/nconf.gui.o: | $(obj)/nconf-cflags
>
> # mconf: Used for the menuconfig target based on lxdialog
> hostprogs += mconf
> @@ -171,27 +172,28 @@ lxdialog := $(addprefix lxdialog/, \
> checklist.o inputbox.o menubox.o textbox.o util.o yesno.o)
> mconf-objs := mconf.o $(lxdialog) $(common-objs)
>
> -HOSTLDLIBS_mconf = $(shell . $(obj)/mconf-cfg && echo $$libs)
> +HOSTLDLIBS_mconf = $(call read-file, $(obj)/mconf-libs)
> $(foreach f, mconf.o $(lxdialog), \
> - $(eval HOSTCFLAGS_$f = $$(shell . $(obj)/mconf-cfg && echo $$$$cflags)))
> + $(eval HOSTCFLAGS_$f = $$(call read-file, $(obj)/mconf-cflags)))
>
> -$(addprefix $(obj)/, mconf.o $(lxdialog)): $(obj)/mconf-cfg
> +$(obj)/mconf: | $(obj)/mconf-libs
> +$(addprefix $(obj)/, mconf.o $(lxdialog)): | $(obj)/mconf-cflags
>
> # qconf: Used for the xconfig target based on Qt
> hostprogs += qconf
> qconf-cxxobjs := qconf.o qconf-moc.o
> qconf-objs := images.o $(common-objs)
>
> -HOSTLDLIBS_qconf = $(shell . $(obj)/qconf-cfg && echo $$libs)
> -HOSTCXXFLAGS_qconf.o = $(shell . $(obj)/qconf-cfg && echo $$cflags)
> -HOSTCXXFLAGS_qconf-moc.o = $(shell . $(obj)/qconf-cfg && echo $$cflags)
> -
> -$(obj)/qconf.o: $(obj)/qconf-cfg
> +HOSTLDLIBS_qconf = $(call read-file, $(obj)/qconf-libs)
> +HOSTCXXFLAGS_qconf.o = -std=c++11 -fPIC $(call read-file, $(obj)/qconf-cflags)
> +HOSTCXXFLAGS_qconf-moc.o = -std=c++11 -fPIC $(call read-file, $(obj)/qconf-cflags)
> +$(obj)/qconf: | $(obj)/qconf-libs
> +$(obj)/qconf.o $(obj)/qconf-moc.o: | $(obj)/qconf-cflags
>
> quiet_cmd_moc = MOC $@
> - cmd_moc = $(shell . $(obj)/qconf-cfg && echo $$moc) $< -o $@
> + cmd_moc = $(call read-file, $(obj)/qconf-bin)/moc $< -o $@
>
> -$(obj)/qconf-moc.cc: $(src)/qconf.h $(obj)/qconf-cfg FORCE
> +$(obj)/qconf-moc.cc: $(src)/qconf.h FORCE | $(obj)/qconf-bin
> $(call if_changed,moc)
>
> targets += qconf-moc.cc
> @@ -200,15 +202,16 @@ targets += qconf-moc.cc
> hostprogs += gconf
> gconf-objs := gconf.o images.o $(common-objs)
>
> -HOSTLDLIBS_gconf = $(shell . $(obj)/gconf-cfg && echo $$libs)
> -HOSTCFLAGS_gconf.o = $(shell . $(obj)/gconf-cfg && echo $$cflags)
> +HOSTLDLIBS_gconf = $(call read-file, $(obj)/gconf-libs)
> +HOSTCFLAGS_gconf.o = $(call read-file, $(obj)/gconf-cflags)
>
> -$(obj)/gconf.o: $(obj)/gconf-cfg
> +$(obj)/gconf: | $(obj)/gconf-libs
> +$(obj)/gconf.o: | $(obj)/gconf-cflags
>
> # check if necessary packages are available, and configure build flags
> -filechk_conf_cfg = $(CONFIG_SHELL) $<
> +cmd_conf_cfg = $< $(addprefix $(obj)/$*conf-, cflags libs bin)
>
> -$(obj)/%conf-cfg: $(src)/%conf-cfg.sh FORCE
> - $(call filechk,conf_cfg)
> +$(obj)/%conf-cflags $(obj)/%conf-libs $(obj)/%conf-bin: $(src)/%conf-cfg.sh
> + $(call cmd,conf_cfg)
>
> clean-files += *conf-cfg
> diff --git a/scripts/kconfig/gconf-cfg.sh b/scripts/kconfig/gconf-cfg.sh
> index cbd90c28c05f..040d8f338820 100755
> --- a/scripts/kconfig/gconf-cfg.sh
> +++ b/scripts/kconfig/gconf-cfg.sh
> @@ -1,6 +1,9 @@
> #!/bin/sh
> # SPDX-License-Identifier: GPL-2.0
>
> +cflags=$1
> +libs=$2
> +
> PKG="gtk+-2.0 gmodule-2.0 libglade-2.0"
>
> if [ -z "$(command -v ${HOSTPKG_CONFIG})" ]; then
> @@ -26,5 +29,5 @@ if ! ${HOSTPKG_CONFIG} --atleast-version=2.0.0 gtk+-2.0; then
> exit 1
> fi
>
> -echo cflags=\"$(${HOSTPKG_CONFIG} --cflags $PKG)\"
> -echo libs=\"$(${HOSTPKG_CONFIG} --libs $PKG)\"
> +${HOSTPKG_CONFIG} --cflags ${PKG} > ${cflags}
> +${HOSTPKG_CONFIG} --libs ${PKG} > ${libs}
> diff --git a/scripts/kconfig/mconf-cfg.sh b/scripts/kconfig/mconf-cfg.sh
> index 025b565e0b7c..1e61f50a5905 100755
> --- a/scripts/kconfig/mconf-cfg.sh
> +++ b/scripts/kconfig/mconf-cfg.sh
> @@ -1,19 +1,22 @@
> #!/bin/sh
> # SPDX-License-Identifier: GPL-2.0
>
> +cflags=$1
> +libs=$2
> +
> PKG="ncursesw"
> PKG2="ncurses"
>
> if [ -n "$(command -v ${HOSTPKG_CONFIG})" ]; then
> if ${HOSTPKG_CONFIG} --exists $PKG; then
> - echo cflags=\"$(${HOSTPKG_CONFIG} --cflags $PKG)\"
> - echo libs=\"$(${HOSTPKG_CONFIG} --libs $PKG)\"
> + ${HOSTPKG_CONFIG} --cflags ${PKG} > ${cflags}
> + ${HOSTPKG_CONFIG} --libs ${PKG} > ${libs}
> exit 0
> fi
>
> - if ${HOSTPKG_CONFIG} --exists $PKG2; then
> - echo cflags=\"$(${HOSTPKG_CONFIG} --cflags $PKG2)\"
> - echo libs=\"$(${HOSTPKG_CONFIG} --libs $PKG2)\"
> + if ${HOSTPKG_CONFIG} --exists ${PKG2}; then
> + ${HOSTPKG_CONFIG} --cflags ${PKG2} > ${cflags}
> + ${HOSTPKG_CONFIG} --libs ${PKG2} > ${libs}
> exit 0
> fi
> fi
> @@ -22,22 +25,22 @@ fi
> # (Even if it is installed, some distributions such as openSUSE cannot
> # find ncurses by pkg-config.)
> if [ -f /usr/include/ncursesw/ncurses.h ]; then
> - echo cflags=\"-D_GNU_SOURCE -I/usr/include/ncursesw\"
> - echo libs=\"-lncursesw\"
> + echo -D_GNU_SOURCE -I/usr/include/ncursesw > ${cflags}
> + echo -lncursesw > ${libs}
> exit 0
> fi
>
> if [ -f /usr/include/ncurses/ncurses.h ]; then
> - echo cflags=\"-D_GNU_SOURCE -I/usr/include/ncurses\"
> - echo libs=\"-lncurses\"
> + echo -D_GNU_SOURCE -I/usr/include/ncurses > ${cflags}
> + echo -lncurses > ${libs}
> exit 0
> fi
>
> # As a final fallback before giving up, check if $HOSTCC knows of a default
> # ncurses installation (e.g. from a vendor-specific sysroot).
> if echo '#include <ncurses.h>' | ${HOSTCC} -E - >/dev/null 2>&1; then
> - echo cflags=\"-D_GNU_SOURCE\"
> - echo libs=\"-lncurses\"
> + echo -D_GNU_SOURCE > ${cflags}
> + echo -lncurses > ${libs}
> exit 0
> fi
>
> diff --git a/scripts/kconfig/nconf-cfg.sh b/scripts/kconfig/nconf-cfg.sh
> index 3a10bac2adb3..f871a2160e36 100755
> --- a/scripts/kconfig/nconf-cfg.sh
> +++ b/scripts/kconfig/nconf-cfg.sh
> @@ -1,19 +1,22 @@
> #!/bin/sh
> # SPDX-License-Identifier: GPL-2.0
>
> +cflags=$1
> +libs=$2
> +
> PKG="ncursesw menuw panelw"
> PKG2="ncurses menu panel"
>
> if [ -n "$(command -v ${HOSTPKG_CONFIG})" ]; then
> if ${HOSTPKG_CONFIG} --exists $PKG; then
> - echo cflags=\"$(${HOSTPKG_CONFIG} --cflags $PKG)\"
> - echo libs=\"$(${HOSTPKG_CONFIG} --libs $PKG)\"
> + ${HOSTPKG_CONFIG} --cflags ${PKG} > ${cflags}
> + ${HOSTPKG_CONFIG} --libs ${PKG} > ${libs}
> exit 0
> fi
>
> if ${HOSTPKG_CONFIG} --exists $PKG2; then
> - echo cflags=\"$(${HOSTPKG_CONFIG} --cflags $PKG2)\"
> - echo libs=\"$(${HOSTPKG_CONFIG} --libs $PKG2)\"
> + ${HOSTPKG_CONFIG} --cflags ${PKG2} > ${cflags}
> + ${HOSTPKG_CONFIG} --libs ${PKG2} > ${libs}
> exit 0
> fi
> fi
> @@ -22,20 +25,20 @@ fi
> # (Even if it is installed, some distributions such as openSUSE cannot
> # find ncurses by pkg-config.)
> if [ -f /usr/include/ncursesw/ncurses.h ]; then
> - echo cflags=\"-D_GNU_SOURCE -I/usr/include/ncursesw\"
> - echo libs=\"-lncursesw -lmenuw -lpanelw\"
> + echo -D_GNU_SOURCE -I/usr/include/ncursesw > ${cflags}
> + echo -lncursesw -lmenuw -lpanelw > ${libs}
> exit 0
> fi
>
> if [ -f /usr/include/ncurses/ncurses.h ]; then
> - echo cflags=\"-D_GNU_SOURCE -I/usr/include/ncurses\"
> - echo libs=\"-lncurses -lmenu -lpanel\"
> + echo -D_GNU_SOURCE -I/usr/include/ncurses > ${cflags}
> + echo -lncurses -lmenu -lpanel > ${libs}
> exit 0
> fi
>
> if [ -f /usr/include/ncurses.h ]; then
> - echo cflags=\"-D_GNU_SOURCE\"
> - echo libs=\"-lncurses -lmenu -lpanel\"
> + echo -D_GNU_SOURCE > ${cflags}
> + echo -lncurses -lmenu -lpanel > ${libs}
> exit 0
> fi
>
> diff --git a/scripts/kconfig/qconf-cfg.sh b/scripts/kconfig/qconf-cfg.sh
> index ad652cb53947..117f36e568fc 100755
> --- a/scripts/kconfig/qconf-cfg.sh
> +++ b/scripts/kconfig/qconf-cfg.sh
> @@ -1,6 +1,10 @@
> #!/bin/sh
> # SPDX-License-Identifier: GPL-2.0
>
> +cflags=$1
> +libs=$2
> +bin=$3
> +
> PKG="Qt5Core Qt5Gui Qt5Widgets"
>
> if [ -z "$(command -v ${HOSTPKG_CONFIG})" ]; then
> @@ -11,9 +15,9 @@ if [ -z "$(command -v ${HOSTPKG_CONFIG})" ]; then
> fi
>
> if ${HOSTPKG_CONFIG} --exists $PKG; then
> - echo cflags=\"-std=c++11 -fPIC $(${HOSTPKG_CONFIG} --cflags $PKG)\"
> - echo libs=\"$(${HOSTPKG_CONFIG} --libs $PKG)\"
> - echo moc=\"$(${HOSTPKG_CONFIG} --variable=host_bins Qt5Core)/moc\"
> + ${HOSTPKG_CONFIG} --cflags ${PKG} > ${cflags}
> + ${HOSTPKG_CONFIG} --libs ${PKG} > ${libs}
> + ${HOSTPKG_CONFIG} --variable=host_bins Qt5Core > ${bin}
> exit 0
> fi
>
> diff --git a/scripts/remove-stale-files b/scripts/remove-stale-files
> index ccadfa3afb2b..64b14aa5aebf 100755
> --- a/scripts/remove-stale-files
> +++ b/scripts/remove-stale-files
> @@ -47,3 +47,5 @@ rm -f arch/riscv/purgatory/kexec-purgatory.c
> rm -f scripts/extract-cert
>
> rm -f arch/x86/purgatory/kexec-purgatory.c
> +
> +rm -f scripts/kconfig/[gmnq]conf-cfg
> --
> 2.34.1

--
epost|xmpp: nicolas@xxxxxxxxx irc://oftc.net/nsc
↳ gpg: 18ed 52db e34f 860e e9fb c82b 7d97 0932 55a0 ce7f
-- frykten for herren er opphav til kunnskap --

Attachment: signature.asc
Description: PGP signature