public inbox for openembedded-core@lists.openembedded.org
 help / color / mirror / Atom feed
From: Munehisa Kamata <kamatam@amazon.com>
To: <bruce.ashfield@gmail.com>
Cc: <kamatam@amazon.com>, <openembedded-core@lists.openembedded.org>
Subject: Re: [PATCH v2] kernel.bbclass: Set pkg-config variables for building modules
Date: Fri, 23 Feb 2024 23:21:06 -0800	[thread overview]
Message-ID: <20240224072106.2702207-1-kamatam@amazon.com> (raw)
In-Reply-To: <CADkTA4OD_rO2CPSHjA240-oGGzn9OPTd+=LT4Ne3t2yFFSQtjA@mail.gmail.com>

Hi Bruce,

> That is indeed not a simple workflow!
> 
> In the past, we've always had the existing packageconfig results picked up and
> used by later stages of the kernel build which prevented things like this from
> happening.
> 
> Have you figured out exactly which packageconfig is triggering the rebuild, and
> had a look to see if something change such that the existing results
> aren't used ?

The missing of libcrypto.pc and libelf.pc triggers the rebuild of
certs/extract-cert and objtool respectively. When PKG_CONFIG_DIR is set to
recipe-sysroot at module build time, it points to a non-existent directory
and therefore pkg-config can't find .pc for the requested library whereas
they are present in the recipe-sysroot-native, then it causes make to
rebuild the target.

Although I admit that I don't fully understand how make particularly
decides to trigger the rebuild in this case.

> All that being said, rather than repeating the exports, it would be
> better to have
> them in a common place, since eventually everything but the HOSTPKG_CONFIG
> definition will be dropped.
> 
> Have you tried a more class-global export of the values ? We have a
> few of those,
> but admittedly, we have way more exports that are duplicated between do_compile
> and do_compile_kernelmodules(), so the duplicated exports aren't a big issue.

Yes, I actually tried it first and it worked at lesat for simple kernel
building. But I wasn't entirely sure if it was safe enough for the
ecosystem and came up with the change that is hopefully less impact. That
said, if you think it's fine, I'm happy to submit v3 with the class-global
export. It would be better indeed.


Thanks,
Munehisa

> Bruce
> 
> >
> > Signed-off-by: Munehisa Kamata <kamatam@amazon.com>
> > ---
> >
> > v1 -> v2: Rewrote the commit message with the repro steps
> >
> >  meta/classes-recipe/kernel.bbclass | 12 +++++++++---
> >  1 file changed, 9 insertions(+), 3 deletions(-)
> >
> > diff --git a/meta/classes-recipe/kernel.bbclass b/meta/classes-recipe/kernel.bbclass
> > index a76aaee5ba..db4461e551 100644
> > --- a/meta/classes-recipe/kernel.bbclass
> > +++ b/meta/classes-recipe/kernel.bbclass
> > @@ -239,6 +239,8 @@ KERNEL_EXTRA_ARGS ?= ""
> >  EXTRA_OEMAKE += ' CC="${KERNEL_CC}" LD="${KERNEL_LD}" OBJCOPY="${KERNEL_OBJCOPY}" STRIP="${KERNEL_STRIP}"'
> >  EXTRA_OEMAKE += ' HOSTCC="${BUILD_CC}" HOSTCFLAGS="${BUILD_CFLAGS}" HOSTLDFLAGS="${BUILD_LDFLAGS}" HOSTCPP="${BUILD_CPP}"'
> >  EXTRA_OEMAKE += ' HOSTCXX="${BUILD_CXX}" HOSTCXXFLAGS="${BUILD_CXXFLAGS}"'
> > +# Only for newer kernels (5.19+), native pkg-config variables are set for older kernels when building kernel and modules
> > +EXTRA_OEMAKE += ' HOSTPKG_CONFIG="pkg-config-native"'
> >
> >  KERNEL_ALT_IMAGETYPE ??= ""
> >
> > @@ -356,9 +358,6 @@ kernel_do_compile() {
> >         export PKG_CONFIG_LIBDIR="$PKG_CONFIG_DIR"
> >         export PKG_CONFIG_SYSROOT_DIR=""
> >
> > -       # for newer kernels (5.19+) there's a dedicated variable
> > -       export HOSTPKG_CONFIG="pkg-config-native"
> > -
> >         if [ "${KERNEL_DEBUG_TIMESTAMPS}" != "1" ]; then
> >                 # kernel sources do not use do_unpack, so SOURCE_DATE_EPOCH may not
> >                 # be set....
> > @@ -408,6 +407,13 @@ addtask transform_kernel after do_compile before do_install
> >
> >  do_compile_kernelmodules() {
> >         unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS MACHINE
> > +
> > +       # setup native pkg-config variables (kconfig scripts call pkg-config directly, cannot generically be overriden to pkg-config-native)
> > +       export PKG_CONFIG_DIR="${STAGING_DIR_NATIVE}${libdir_native}/pkgconfig"
> > +       export PKG_CONFIG_PATH="$PKG_CONFIG_DIR:${STAGING_DATADIR_NATIVE}/pkgconfig"
> > +       export PKG_CONFIG_LIBDIR="$PKG_CONFIG_DIR"
> > +       export PKG_CONFIG_SYSROOT_DIR=""
> > +
> >         if [ "${KERNEL_DEBUG_TIMESTAMPS}" != "1" ]; then
> >                 # kernel sources do not use do_unpack, so SOURCE_DATE_EPOCH may not
> >                 # be set....
> > --
> > 2.34.1
> >
> 
> 
> -- 
> - Thou shalt not follow the NULL pointer, for chaos and madness await
> thee at its end
> - "Use the force Harry" - Gandalf, Star Trek II
> 
> 


  reply	other threads:[~2024-02-24  7:21 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-02-22 20:28 [PATCH] kernel.bbclass: Set pkg-config variables for building modules Munehisa Kamata
2024-02-22 21:38 ` [OE-core] " Bruce Ashfield
2024-02-23  8:05   ` [PATCH v2] " Munehisa Kamata
2024-02-23 14:09     ` Bruce Ashfield
2024-02-24  7:21       ` Munehisa Kamata [this message]
2024-02-25 14:54         ` Bruce Ashfield
2024-02-26 23:50           ` Munehisa Kamata

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240224072106.2702207-1-kamatam@amazon.com \
    --to=kamatam@amazon.com \
    --cc=bruce.ashfield@gmail.com \
    --cc=openembedded-core@lists.openembedded.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox