mbox series

[v5,0/3] kbuild follow-up

Message ID 20240516061320.3015697-1-adriaan.schmidt@siemens.com
Headers show
Series kbuild follow-up | expand

Message

Schmidt, Adriaan May 16, 2024, 6:13 a.m. UTC
Ok, this is indeed a tricky one...

It's based on the code from Stefan's "[PATCH] linux-module: Support
emulated module build with cross-compiled kernel" (replacing that patch),
and on the result of staring at dependency graphs with Jan.
This mainly addresses corner cases of the refactored kbuild packaging
when cross-compiling.

I've tested

- cross-compiled custom kernel and cross module build
- cross-compiled custom kernel and emulated module build
- distro kernel and emulated module build
- distro kernel and native module build

Let me know if one of your use-cases is still missing.

Also including some fixups (p2-3) brought up in recent reviews on the ML.

Adriaan

changes since v4:
- Added "inherit multiarch" to linux-distro, so that dummy recipe PROVIDES
  "-native" packages in native build cases.

changes since v3:
- (almost) restored the old API, where a module recipe only depends on
  linux-headers-*. Now it's linux-headers-*-native.
- Removed the -native suffix from all PROVIDES and DEPENDS because
  I realized that those are added automatically by the multiarch logic.
  Only exception is the pseudo target used to pull in the base variant
  (which builds the headers) into the native one (which builds the kbuild
  tools). This still needs to be named "-native".

changes since v2:
- removed a forgotten line of testing code

changes since v1:
- always use linux-kbuild-native as build dependency, even for emulated
  builds, because the multiarch logic will select the correct package


Adriaan Schmidt (3):
  module.inc: fix kbuild dependency
  linux-custom: use to_boolean when checking ISAR_CROSS_COMPILE
  kbuildtarget.bbclass: add missing license header

 meta/recipes-kernel/linux-module/module.inc   |  2 +-
 .../linux/classes/kbuildtarget.bbclass        |  5 ++++
 meta/recipes-kernel/linux/linux-custom.inc    | 27 ++++++++++++-------
 meta/recipes-kernel/linux/linux-distro.bb     |  3 +++
 4 files changed, 27 insertions(+), 10 deletions(-)

Comments

Uladzimir Bely July 2, 2024, 6:41 a.m. UTC | #1
On Thu, 2024-05-16 at 08:13 +0200, 'Adriaan Schmidt' via isar-users
wrote:
> Ok, this is indeed a tricky one...
> 
> It's based on the code from Stefan's "[PATCH] linux-module: Support
> emulated module build with cross-compiled kernel" (replacing that
> patch),
> and on the result of staring at dependency graphs with Jan.
> This mainly addresses corner cases of the refactored kbuild packaging
> when cross-compiling.
> 
> I've tested
> 
> - cross-compiled custom kernel and cross module build
> - cross-compiled custom kernel and emulated module build
> - distro kernel and emulated module build
> - distro kernel and native module build
> 
> Let me know if one of your use-cases is still missing.
> 
> Also including some fixups (p2-3) brought up in recent reviews on the
> ML.
> 
> Adriaan
> 

This might need some additional cosmetic changes.

I was debugging other (not related) issues and just noted that the
patchset brought some messages bitbake prints during parsing stage,
when amd64/arm64 targets (having "compat" alternative) are selected:

```
beagleplay, hikey:
NOTE: Multiple providers are available for linux-mainline-pseudo-native
(linux-mainline, linux-mainline-compat)

qemuarm64:
NOTE: Multiple providers are available for linux-image-arm64 (linux-
distro, linux-distro-compat)
NOTE: Multiple providers are available for linux-headers-arm64 (linux-
distro, linux-distro-compat)

qemuamd64, virtualbox:
NOTE: Multiple providers are available for linux-image-amd64 (linux-
distro, linux-distro-compat)
```

This doesn't make builds fail, but a bit messy.

It's possible to suppress the messages by specifying PREFERRED_PROVIDER
in machine configs. E.g., for qemuarm64.conf:

```
PREFERRED_PROVIDER_linux-image-${KERNEL_NAME} = "linux-distro"
PREFERRED_PROVIDER_linux-headers-${KERNEL_NAME} = "linux-distro"
```

But is thare probably some better place for this that would not require
editing multiple machine configs?
Schmidt, Adriaan July 2, 2024, 8:10 a.m. UTC | #2
Uladzimir Bely <ubely@ilbers.de>, Dienstag, 2. Juli 2024 08:41:
> On Thu, 2024-05-16 at 08:13 +0200, 'Adriaan Schmidt' via isar-users
> wrote:
> > Ok, this is indeed a tricky one...
> >
> > It's based on the code from Stefan's "[PATCH] linux-module: Support
> > emulated module build with cross-compiled kernel" (replacing that
> > patch),
> > and on the result of staring at dependency graphs with Jan.
> > This mainly addresses corner cases of the refactored kbuild packaging
> > when cross-compiling.
> >
> > I've tested
> >
> > - cross-compiled custom kernel and cross module build
> > - cross-compiled custom kernel and emulated module build
> > - distro kernel and emulated module build
> > - distro kernel and native module build
> >
> > Let me know if one of your use-cases is still missing.
> >
> > Also including some fixups (p2-3) brought up in recent reviews on the
> > ML.
> >
> > Adriaan
> >
> 
> This might need some additional cosmetic changes.
> 
> I was debugging other (not related) issues and just noted that the
> patchset brought some messages bitbake prints during parsing stage,
> when amd64/arm64 targets (having "compat" alternative) are selected:
> 
> ```
> beagleplay, hikey:
> NOTE: Multiple providers are available for linux-mainline-pseudo-native
> (linux-mainline, linux-mainline-compat)
> 
> qemuarm64:
> NOTE: Multiple providers are available for linux-image-arm64 (linux-
> distro, linux-distro-compat)
> NOTE: Multiple providers are available for linux-headers-arm64 (linux-
> distro, linux-distro-compat)
> 
> qemuamd64, virtualbox:
> NOTE: Multiple providers are available for linux-image-amd64 (linux-
> distro, linux-distro-compat)
> ```
> 
> This doesn't make builds fail, but a bit messy.
> 
> It's possible to suppress the messages by specifying PREFERRED_PROVIDER
> in machine configs. E.g., for qemuarm64.conf:
> 
> ```
> PREFERRED_PROVIDER_linux-image-${KERNEL_NAME} = "linux-distro"
> PREFERRED_PROVIDER_linux-headers-${KERNEL_NAME} = "linux-distro"
> ```
> 
> But is thare probably some better place for this that would not require
> editing multiple machine configs?

Does it even make sense to have -compat variants of kernel packages?
If not, then I think it should be possible to disable them with a 

ISAR_ENABLE_COMPAT_ARCH = "0"

on a per-recipe base, in linux-custom.inc and linux-distro.bb.

Adriaan


> --
> Best regards,
> Uladzimir.