2023-01-13 00:33:17

by Stephen Boyd

[permalink] [raw]
Subject: [PATCH 5.15.y] kbuild: Allow kernel installation packaging to override pkg-config

From: Chun-Tse Shao <[email protected]>

commit d5ea4fece4508bf8e72b659cd22fa4840d8d61e5 upstream.

Add HOSTPKG_CONFIG to allow tooling that builds the kernel to override
what pkg-config and parameters are used.

Signed-off-by: Chun-Tse Shao <[email protected]>
Reviewed-by: Nick Desaulniers <[email protected]>
Signed-off-by: Masahiro Yamada <[email protected]>
[[email protected]: Drop certs/Makefile hunk that doesn't
apply because pkg-config isn't used there, add dtc/Makefile hunk to
fix dtb builds]
Signed-off-by: Stephen Boyd <[email protected]>
---

I need this to properly compile 5.15.y stable kernels in the chromeos
build system. The scripts/dtc/Makefile hunk is manually added because it
has gone away upstream in commit ef8795f3f1ce ("dt-bindings: kbuild: Use
DTB files for validation").

Makefile | 3 ++-
scripts/Makefile | 4 ++--
scripts/dtc/Makefile | 6 +++---
scripts/kconfig/gconf-cfg.sh | 12 ++++++------
scripts/kconfig/mconf-cfg.sh | 16 ++++++++--------
scripts/kconfig/nconf-cfg.sh | 16 ++++++++--------
scripts/kconfig/qconf-cfg.sh | 14 +++++++-------
tools/objtool/Makefile | 4 ++--
8 files changed, 38 insertions(+), 37 deletions(-)

diff --git a/Makefile b/Makefile
index 6a9589c7b1bc..39550f492610 100644
--- a/Makefile
+++ b/Makefile
@@ -430,6 +430,7 @@ else
HOSTCC = gcc
HOSTCXX = g++
endif
+HOSTPKG_CONFIG = pkg-config

export KBUILD_USERCFLAGS := -Wall -Wmissing-prototypes -Wstrict-prototypes \
-O2 -fomit-frame-pointer -std=gnu89
@@ -525,7 +526,7 @@ KBUILD_LDFLAGS_MODULE :=
KBUILD_LDFLAGS :=
CLANG_FLAGS :=

-export ARCH SRCARCH CONFIG_SHELL BASH HOSTCC KBUILD_HOSTCFLAGS CROSS_COMPILE LD CC
+export ARCH SRCARCH CONFIG_SHELL BASH HOSTCC KBUILD_HOSTCFLAGS CROSS_COMPILE LD CC HOSTPKG_CONFIG
export CPP AR NM STRIP OBJCOPY OBJDUMP READELF PAHOLE RESOLVE_BTFIDS LEX YACC AWK INSTALLKERNEL
export PERL PYTHON3 CHECK CHECKFLAGS MAKE UTS_MACHINE HOSTCXX
export KGZIP KBZIP2 KLZOP LZMA LZ4 XZ ZSTD
diff --git a/scripts/Makefile b/scripts/Makefile
index 9adb6d247818..e2a239829556 100644
--- a/scripts/Makefile
+++ b/scripts/Makefile
@@ -3,8 +3,8 @@
# scripts contains sources for various helper programs used throughout
# the kernel for the build process.

-CRYPTO_LIBS = $(shell pkg-config --libs libcrypto 2> /dev/null || echo -lcrypto)
-CRYPTO_CFLAGS = $(shell pkg-config --cflags libcrypto 2> /dev/null)
+CRYPTO_LIBS = $(shell $(HOSTPKG_CONFIG) --libs libcrypto 2> /dev/null || echo -lcrypto)
+CRYPTO_CFLAGS = $(shell $(HOSTPKG_CONFIG) --cflags libcrypto 2> /dev/null)

hostprogs-always-$(CONFIG_BUILD_BIN2C) += bin2c
hostprogs-always-$(CONFIG_KALLSYMS) += kallsyms
diff --git a/scripts/dtc/Makefile b/scripts/dtc/Makefile
index 1cba78e1dce6..2d5f274d6efd 100644
--- a/scripts/dtc/Makefile
+++ b/scripts/dtc/Makefile
@@ -18,7 +18,7 @@ fdtoverlay-objs := $(libfdt) fdtoverlay.o util.o
# Source files need to get at the userspace version of libfdt_env.h to compile
HOST_EXTRACFLAGS += -I $(srctree)/$(src)/libfdt

-ifeq ($(shell pkg-config --exists yaml-0.1 2>/dev/null && echo yes),)
+ifeq ($(shell $(HOSTPKG_CONFIG) --exists yaml-0.1 2>/dev/null && echo yes),)
ifneq ($(CHECK_DT_BINDING)$(CHECK_DTBS),)
$(error dtc needs libyaml for DT schema validation support. \
Install the necessary libyaml development package.)
@@ -27,9 +27,9 @@ HOST_EXTRACFLAGS += -DNO_YAML
else
dtc-objs += yamltree.o
# To include <yaml.h> installed in a non-default path
-HOSTCFLAGS_yamltree.o := $(shell pkg-config --cflags yaml-0.1)
+HOSTCFLAGS_yamltree.o := $(shell $(HOSTPKG_CONFIG) --cflags yaml-0.1)
# To link libyaml installed in a non-default path
-HOSTLDLIBS_dtc := $(shell pkg-config --libs yaml-0.1)
+HOSTLDLIBS_dtc := $(shell $(HOSTPKG_CONFIG) --libs yaml-0.1)
endif

# Generated files need one more search path to include headers in source tree
diff --git a/scripts/kconfig/gconf-cfg.sh b/scripts/kconfig/gconf-cfg.sh
index 480ecd8b9f41..cbd90c28c05f 100755
--- a/scripts/kconfig/gconf-cfg.sh
+++ b/scripts/kconfig/gconf-cfg.sh
@@ -3,14 +3,14 @@

PKG="gtk+-2.0 gmodule-2.0 libglade-2.0"

-if [ -z "$(command -v pkg-config)" ]; then
+if [ -z "$(command -v ${HOSTPKG_CONFIG})" ]; then
echo >&2 "*"
- echo >&2 "* 'make gconfig' requires 'pkg-config'. Please install it."
+ echo >&2 "* 'make gconfig' requires '${HOSTPKG_CONFIG}'. Please install it."
echo >&2 "*"
exit 1
fi

-if ! pkg-config --exists $PKG; then
+if ! ${HOSTPKG_CONFIG} --exists $PKG; then
echo >&2 "*"
echo >&2 "* Unable to find the GTK+ installation. Please make sure that"
echo >&2 "* the GTK+ 2.0 development package is correctly installed."
@@ -19,12 +19,12 @@ if ! pkg-config --exists $PKG; then
exit 1
fi

-if ! pkg-config --atleast-version=2.0.0 gtk+-2.0; then
+if ! ${HOSTPKG_CONFIG} --atleast-version=2.0.0 gtk+-2.0; then
echo >&2 "*"
echo >&2 "* GTK+ is present but version >= 2.0.0 is required."
echo >&2 "*"
exit 1
fi

-echo cflags=\"$(pkg-config --cflags $PKG)\"
-echo libs=\"$(pkg-config --libs $PKG)\"
+echo cflags=\"$(${HOSTPKG_CONFIG} --cflags $PKG)\"
+echo libs=\"$(${HOSTPKG_CONFIG} --libs $PKG)\"
diff --git a/scripts/kconfig/mconf-cfg.sh b/scripts/kconfig/mconf-cfg.sh
index b520e407a8eb..025b565e0b7c 100755
--- a/scripts/kconfig/mconf-cfg.sh
+++ b/scripts/kconfig/mconf-cfg.sh
@@ -4,16 +4,16 @@
PKG="ncursesw"
PKG2="ncurses"

-if [ -n "$(command -v pkg-config)" ]; then
- if pkg-config --exists $PKG; then
- echo cflags=\"$(pkg-config --cflags $PKG)\"
- echo libs=\"$(pkg-config --libs $PKG)\"
+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)\"
exit 0
fi

- if pkg-config --exists $PKG2; then
- echo cflags=\"$(pkg-config --cflags $PKG2)\"
- echo libs=\"$(pkg-config --libs $PKG2)\"
+ if ${HOSTPKG_CONFIG} --exists $PKG2; then
+ echo cflags=\"$(${HOSTPKG_CONFIG} --cflags $PKG2)\"
+ echo libs=\"$(${HOSTPKG_CONFIG} --libs $PKG2)\"
exit 0
fi
fi
@@ -46,7 +46,7 @@ echo >&2 "* Unable to find the ncurses package."
echo >&2 "* Install ncurses (ncurses-devel or libncurses-dev"
echo >&2 "* depending on your distribution)."
echo >&2 "*"
-echo >&2 "* You may also need to install pkg-config to find the"
+echo >&2 "* You may also need to install ${HOSTPKG_CONFIG} to find the"
echo >&2 "* ncurses installed in a non-default location."
echo >&2 "*"
exit 1
diff --git a/scripts/kconfig/nconf-cfg.sh b/scripts/kconfig/nconf-cfg.sh
index c212255070c0..3a10bac2adb3 100755
--- a/scripts/kconfig/nconf-cfg.sh
+++ b/scripts/kconfig/nconf-cfg.sh
@@ -4,16 +4,16 @@
PKG="ncursesw menuw panelw"
PKG2="ncurses menu panel"

-if [ -n "$(command -v pkg-config)" ]; then
- if pkg-config --exists $PKG; then
- echo cflags=\"$(pkg-config --cflags $PKG)\"
- echo libs=\"$(pkg-config --libs $PKG)\"
+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)\"
exit 0
fi

- if pkg-config --exists $PKG2; then
- echo cflags=\"$(pkg-config --cflags $PKG2)\"
- echo libs=\"$(pkg-config --libs $PKG2)\"
+ if ${HOSTPKG_CONFIG} --exists $PKG2; then
+ echo cflags=\"$(${HOSTPKG_CONFIG} --cflags $PKG2)\"
+ echo libs=\"$(${HOSTPKG_CONFIG} --libs $PKG2)\"
exit 0
fi
fi
@@ -44,7 +44,7 @@ echo >&2 "* Unable to find the ncurses package."
echo >&2 "* Install ncurses (ncurses-devel or libncurses-dev"
echo >&2 "* depending on your distribution)."
echo >&2 "*"
-echo >&2 "* You may also need to install pkg-config to find the"
+echo >&2 "* You may also need to install ${HOSTPKG_CONFIG} to find the"
echo >&2 "* ncurses installed in a non-default location."
echo >&2 "*"
exit 1
diff --git a/scripts/kconfig/qconf-cfg.sh b/scripts/kconfig/qconf-cfg.sh
index fa564cd795b7..9b695e5cd9b3 100755
--- a/scripts/kconfig/qconf-cfg.sh
+++ b/scripts/kconfig/qconf-cfg.sh
@@ -3,22 +3,22 @@

PKG="Qt5Core Qt5Gui Qt5Widgets"

-if [ -z "$(command -v pkg-config)" ]; then
+if [ -z "$(command -v ${HOSTPKG_CONFIG})" ]; then
echo >&2 "*"
- echo >&2 "* 'make xconfig' requires 'pkg-config'. Please install it."
+ echo >&2 "* 'make xconfig' requires '${HOSTPKG_CONFIG}'. Please install it."
echo >&2 "*"
exit 1
fi

-if pkg-config --exists $PKG; then
- echo cflags=\"-std=c++11 -fPIC $(pkg-config --cflags $PKG)\"
- echo libs=\"$(pkg-config --libs $PKG)\"
- echo moc=\"$(pkg-config --variable=host_bins Qt5Core)/moc\"
+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\"
exit 0
fi

echo >&2 "*"
-echo >&2 "* Could not find Qt5 via pkg-config."
+echo >&2 "* Could not find Qt5 via ${HOSTPKG_CONFIG}."
echo >&2 "* Please install Qt5 and make sure it's in PKG_CONFIG_PATH"
echo >&2 "*"
exit 1
diff --git a/tools/objtool/Makefile b/tools/objtool/Makefile
index 92ce4fce7bc7..549acc5859e9 100644
--- a/tools/objtool/Makefile
+++ b/tools/objtool/Makefile
@@ -19,8 +19,8 @@ LIBSUBCMD = $(LIBSUBCMD_OUTPUT)libsubcmd.a
OBJTOOL := $(OUTPUT)objtool
OBJTOOL_IN := $(OBJTOOL)-in.o

-LIBELF_FLAGS := $(shell pkg-config libelf --cflags 2>/dev/null)
-LIBELF_LIBS := $(shell pkg-config libelf --libs 2>/dev/null || echo -lelf)
+LIBELF_FLAGS := $(shell $(HOSTPKG_CONFIG) libelf --cflags 2>/dev/null)
+LIBELF_LIBS := $(shell $(HOSTPKG_CONFIG) libelf --libs 2>/dev/null || echo -lelf)

all: $(OBJTOOL)

--
https://chromeos.dev


2023-01-14 14:16:46

by Greg Kroah-Hartman

[permalink] [raw]
Subject: Re: [PATCH 5.15.y] kbuild: Allow kernel installation packaging to override pkg-config

On Thu, Jan 12, 2023 at 04:21:49PM -0800, Stephen Boyd wrote:
> From: Chun-Tse Shao <[email protected]>
>
> commit d5ea4fece4508bf8e72b659cd22fa4840d8d61e5 upstream.
>
> Add HOSTPKG_CONFIG to allow tooling that builds the kernel to override
> what pkg-config and parameters are used.
>
> Signed-off-by: Chun-Tse Shao <[email protected]>
> Reviewed-by: Nick Desaulniers <[email protected]>
> Signed-off-by: Masahiro Yamada <[email protected]>
> [[email protected]: Drop certs/Makefile hunk that doesn't
> apply because pkg-config isn't used there, add dtc/Makefile hunk to
> fix dtb builds]
> Signed-off-by: Stephen Boyd <[email protected]>
> ---
>
> I need this to properly compile 5.15.y stable kernels in the chromeos
> build system.

Is this a new issue? A regression? This feels odd to add a new build
feature to an old kernel when nothing changed to require it other than
an external tool suddenly requiring something new?

confused,

greg k-h

2023-01-17 23:08:48

by Stephen Boyd

[permalink] [raw]
Subject: Re: [PATCH 5.15.y] kbuild: Allow kernel installation packaging to override pkg-config

Quoting Greg KH (2023-01-14 05:49:09)
> On Thu, Jan 12, 2023 at 04:21:49PM -0800, Stephen Boyd wrote:
> > From: Chun-Tse Shao <[email protected]>
> >
> > commit d5ea4fece4508bf8e72b659cd22fa4840d8d61e5 upstream.
> >
> > Add HOSTPKG_CONFIG to allow tooling that builds the kernel to override
> > what pkg-config and parameters are used.
> >
> > Signed-off-by: Chun-Tse Shao <[email protected]>
> > Reviewed-by: Nick Desaulniers <[email protected]>
> > Signed-off-by: Masahiro Yamada <[email protected]>
> > [[email protected]: Drop certs/Makefile hunk that doesn't
> > apply because pkg-config isn't used there, add dtc/Makefile hunk to
> > fix dtb builds]
> > Signed-off-by: Stephen Boyd <[email protected]>
> > ---
> >
> > I need this to properly compile 5.15.y stable kernels in the chromeos
> > build system.
>
> Is this a new issue? A regression? This feels odd to add a new build
> feature to an old kernel when nothing changed to require it other than
> an external tool suddenly requiring something new?
>

The chromeos build system checks for pkg-config being called directly
and fails the build if the proper wrapper isn't used. We set
HOSTPKG_CONFIG in the environment when building the kernel so that it
doesn't fail.

It's not exactly a new issue, but a self-inflicted one that makes
building the stable kernel annoying. I figured it was similar to fixing
problems with compiling stable kernels with newer toolchains, but if it
feels odd then I'll just have to remember to pick this patch whenever
bisecting stable trees. No worries.

2023-01-30 10:22:37

by Greg Kroah-Hartman

[permalink] [raw]
Subject: Re: [PATCH 5.15.y] kbuild: Allow kernel installation packaging to override pkg-config

On Tue, Jan 17, 2023 at 12:09:29PM -0800, Stephen Boyd wrote:
> Quoting Greg KH (2023-01-14 05:49:09)
> > On Thu, Jan 12, 2023 at 04:21:49PM -0800, Stephen Boyd wrote:
> > > From: Chun-Tse Shao <[email protected]>
> > >
> > > commit d5ea4fece4508bf8e72b659cd22fa4840d8d61e5 upstream.
> > >
> > > Add HOSTPKG_CONFIG to allow tooling that builds the kernel to override
> > > what pkg-config and parameters are used.
> > >
> > > Signed-off-by: Chun-Tse Shao <[email protected]>
> > > Reviewed-by: Nick Desaulniers <[email protected]>
> > > Signed-off-by: Masahiro Yamada <[email protected]>
> > > [[email protected]: Drop certs/Makefile hunk that doesn't
> > > apply because pkg-config isn't used there, add dtc/Makefile hunk to
> > > fix dtb builds]
> > > Signed-off-by: Stephen Boyd <[email protected]>
> > > ---
> > >
> > > I need this to properly compile 5.15.y stable kernels in the chromeos
> > > build system.
> >
> > Is this a new issue? A regression? This feels odd to add a new build
> > feature to an old kernel when nothing changed to require it other than
> > an external tool suddenly requiring something new?
> >
>
> The chromeos build system checks for pkg-config being called directly
> and fails the build if the proper wrapper isn't used. We set
> HOSTPKG_CONFIG in the environment when building the kernel so that it
> doesn't fail.
>
> It's not exactly a new issue, but a self-inflicted one that makes
> building the stable kernel annoying. I figured it was similar to fixing
> problems with compiling stable kernels with newer toolchains, but if it
> feels odd then I'll just have to remember to pick this patch whenever
> bisecting stable trees. No worries.

Now queued up, thanks.

greg k-h