* [PATCH v5 1/3] module.inc: fix kbuild dependency
2024-05-16 6:13 [PATCH v5 0/3] kbuild follow-up Adriaan Schmidt
@ 2024-05-16 6:13 ` Adriaan Schmidt
2024-05-16 6:13 ` [PATCH v5 2/3] linux-custom: use to_boolean when checking ISAR_CROSS_COMPILE Adriaan Schmidt
` (4 subsequent siblings)
5 siblings, 0 replies; 9+ messages in thread
From: Adriaan Schmidt @ 2024-05-16 6:13 UTC (permalink / raw)
To: isar-users; +Cc: jan.kiszka, stefan-koch, Adriaan Schmidt
This achieves two things:
* Module builds now depend on linux-headers-*-native as build dependency.
This is a minimal API change compared to the previous linux-headers-*.
The dependency on the new linux-kbuild is kept hidden in linux-custom.inc
* Remove the unconditional building of native kbuild when it is
not needed, i.e. when we're not actually cross-building a module
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Adriaan Schmidt <adriaan.schmidt@siemens.com>
---
meta/recipes-kernel/linux-module/module.inc | 2 +-
meta/recipes-kernel/linux/linux-custom.inc | 25 ++++++++++++++-------
meta/recipes-kernel/linux/linux-distro.bb | 3 +++
3 files changed, 21 insertions(+), 9 deletions(-)
diff --git a/meta/recipes-kernel/linux-module/module.inc b/meta/recipes-kernel/linux-module/module.inc
index eddbf177..229e6a5c 100644
--- a/meta/recipes-kernel/linux-module/module.inc
+++ b/meta/recipes-kernel/linux-module/module.inc
@@ -17,7 +17,7 @@ PN .= "-${KERNEL_NAME}"
KERNEL_IMAGE_PKG ??= "linux-image-${KERNEL_NAME}"
KERNEL_HEADERS_PKG ??= "linux-headers-${KERNEL_NAME}"
-DEPENDS += "${KERNEL_HEADERS_PKG}"
+DEPENDS += "${KERNEL_HEADERS_PKG}-native"
DEBIAN_BUILD_DEPENDS = "${KERNEL_HEADERS_PKG}"
SIGNATURE_KEYFILE ??= ""
diff --git a/meta/recipes-kernel/linux/linux-custom.inc b/meta/recipes-kernel/linux/linux-custom.inc
index 0d222332..7b752f2b 100644
--- a/meta/recipes-kernel/linux/linux-custom.inc
+++ b/meta/recipes-kernel/linux/linux-custom.inc
@@ -116,11 +116,19 @@ HEADERS_DEPENDS:cross-profile = ", linux-kbuild-${KERNEL_NAME_PROVIDED}:${HOST_A
# -native: kbuild package for host
BUILD_PROFILES:class-native = "kbuild"
-RECIPE_PROVIDES:class-native = "linux-kbuild-${KERNEL_NAME_PROVIDED}-native"
+RECIPE_PROVIDES:class-native = " \
+ linux-headers-${KERNEL_NAME_PROVIDED} \
+ linux-kbuild-${KERNEL_NAME_PROVIDED}"
+# Use pseudo target to pull in the base variant of the recipe.
+# Will be auto-extended with -native by multiarch.bbclass.
+RDEPENDS:class-native += "${BPN}-pseudo"
# -kbuildtarget: kbuild package for target, enforcing non-cross-build
BUILD_PROFILES:class-kbuildtarget = "kbuild"
-RECIPE_PROVIDES:class-kbuildtarget = "linux-kbuild-${KERNEL_NAME_PROVIDED}"
+RECIPE_PROVIDES:class-kbuildtarget = " \
+ linux-headers-${KERNEL_NAME_PROVIDED} \
+ linux-kbuild-${KERNEL_NAME_PROVIDED}"
+RDEPENDS:class-kbuildtarget = "${BPN}"
ISAR_CROSS_COMPILE:class-kbuildtarget = "0"
# Make bitbake know we will be producing linux-image and linux-headers packages
@@ -132,11 +140,15 @@ RECIPE_PROVIDES = " \
linux-libc-dev-${DISTRO_ARCH}-cross \
linux-image-${KERNEL_NAME_PROVIDED}-dbg \
linux-kbuild-${KERNEL_NAME_PROVIDED} \
+ ${BPN}-pseudo-native \
"
# When cross-profile is active:
-# kbuild package is provided by -native or -kbuildtarget variant
-# Otherwise it's provided by the default variant
-RECIPE_PROVIDES:remove:cross-profile = "linux-kbuild-${KERNEL_NAME_PROVIDED}"
+# kbuild package is provided by -native or -kbuildtarget variant. Also headers
+# provisioning moves over to ensure those variants are pulled, although the
+# package itself is still built by the base recipe.
+RECIPE_PROVIDES:remove:cross-profile = " \
+ linux-headers-${KERNEL_NAME_PROVIDED} \
+ linux-kbuild-${KERNEL_NAME_PROVIDED}"
# Append headers depends
HEADERS_DEPENDS = ", linux-kbuild-${KERNEL_NAME_PROVIDED}"
@@ -148,9 +160,6 @@ PROVIDES += "${RECIPE_PROVIDES}"
# Append build profiles
DEB_BUILD_PROFILES += "${BUILD_PROFILES}"
-# Add dependency to build -kbuildtarget and -native automatically
-RDEPENDS:append:cross-profile = " ${BPN}-native"
-
def get_kernel_arch(d):
distro_arch = d.getVar("DISTRO_ARCH")
if distro_arch in ["amd64", "i386"]:
diff --git a/meta/recipes-kernel/linux/linux-distro.bb b/meta/recipes-kernel/linux/linux-distro.bb
index bc43528c..16673b67 100644
--- a/meta/recipes-kernel/linux/linux-distro.bb
+++ b/meta/recipes-kernel/linux/linux-distro.bb
@@ -10,8 +10,11 @@ python() {
for kernel in distro_kernels.split():
d.appendVar('PROVIDES', ' linux-image-' + kernel)
d.appendVar('PROVIDES', ' linux-headers-' + kernel)
+ d.appendVar('PROVIDES', ' linux-kbuild-' + kernel)
if d.getVar('KERNEL_IMAGE_PKG'):
d.appendVar('PROVIDES', ' ' + d.getVar('KERNEL_IMAGE_PKG'))
if d.getVar('KERNEL_HEADERS_PKG'):
d.appendVar('PROVIDES', ' ' + d.getVar('KERNEL_HEADERS_PKG'))
}
+
+inherit multiarch
--
2.39.2
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v5 2/3] linux-custom: use to_boolean when checking ISAR_CROSS_COMPILE
2024-05-16 6:13 [PATCH v5 0/3] kbuild follow-up Adriaan Schmidt
2024-05-16 6:13 ` [PATCH v5 1/3] module.inc: fix kbuild dependency Adriaan Schmidt
@ 2024-05-16 6:13 ` Adriaan Schmidt
2024-05-16 6:13 ` [PATCH v5 3/3] kbuildtarget.bbclass: add missing license header Adriaan Schmidt
` (3 subsequent siblings)
5 siblings, 0 replies; 9+ messages in thread
From: Adriaan Schmidt @ 2024-05-16 6:13 UTC (permalink / raw)
To: isar-users; +Cc: jan.kiszka, stefan-koch, Adriaan Schmidt
we've changed style/convention in Isar sometime during the review of the
kbuild series, and this was missed.
Signed-off-by: Adriaan Schmidt <adriaan.schmidt@siemens.com>
---
meta/recipes-kernel/linux/linux-custom.inc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/meta/recipes-kernel/linux/linux-custom.inc b/meta/recipes-kernel/linux/linux-custom.inc
index 7b752f2b..3fd0c6c2 100644
--- a/meta/recipes-kernel/linux/linux-custom.inc
+++ b/meta/recipes-kernel/linux/linux-custom.inc
@@ -97,7 +97,7 @@ KERNEL_NAME_PROVIDED ?= "${@ d.getVar('BPN').partition('linux-')[2]}"
# Determine cross-profile override
python() {
- if d.getVar("DISTRO_ARCH") != d.getVar("HOST_ARCH") and d.getVar("ISAR_CROSS_COMPILE", True) == "1" and "class-native" not in d.getVar("OVERRIDES", True).split(":"):
+ if d.getVar("DISTRO_ARCH") != d.getVar("HOST_ARCH") and bb.utils.to_boolean(d.getVar("ISAR_CROSS_COMPILE")) and "class-native" not in d.getVar("OVERRIDES", True).split(":"):
d.appendVar("OVERRIDES", ":cross-profile")
}
--
2.39.2
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v5 3/3] kbuildtarget.bbclass: add missing license header
2024-05-16 6:13 [PATCH v5 0/3] kbuild follow-up Adriaan Schmidt
2024-05-16 6:13 ` [PATCH v5 1/3] module.inc: fix kbuild dependency Adriaan Schmidt
2024-05-16 6:13 ` [PATCH v5 2/3] linux-custom: use to_boolean when checking ISAR_CROSS_COMPILE Adriaan Schmidt
@ 2024-05-16 6:13 ` Adriaan Schmidt
2024-05-22 6:42 ` [PATCH v5 0/3] kbuild follow-up Anton Mikanovich
` (2 subsequent siblings)
5 siblings, 0 replies; 9+ messages in thread
From: Adriaan Schmidt @ 2024-05-16 6:13 UTC (permalink / raw)
To: isar-users; +Cc: jan.kiszka, stefan-koch, Adriaan Schmidt
Signed-off-by: Adriaan Schmidt <adriaan.schmidt@siemens.com>
---
meta/recipes-kernel/linux/classes/kbuildtarget.bbclass | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/meta/recipes-kernel/linux/classes/kbuildtarget.bbclass b/meta/recipes-kernel/linux/classes/kbuildtarget.bbclass
index 26369861..648825e4 100644
--- a/meta/recipes-kernel/linux/classes/kbuildtarget.bbclass
+++ b/meta/recipes-kernel/linux/classes/kbuildtarget.bbclass
@@ -1,3 +1,8 @@
+# This software is a part of ISAR.
+# Copyright (C) 2024 Siemens AG
+#
+# SPDX-License-Identifier: MIT
+
python kbuildtarget_virtclass_handler() {
pn = e.data.getVar('PN')
if pn.endswith('-kbuildtarget'):
--
2.39.2
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v5 0/3] kbuild follow-up
2024-05-16 6:13 [PATCH v5 0/3] kbuild follow-up Adriaan Schmidt
` (2 preceding siblings ...)
2024-05-16 6:13 ` [PATCH v5 3/3] kbuildtarget.bbclass: add missing license header Adriaan Schmidt
@ 2024-05-22 6:42 ` Anton Mikanovich
2024-05-22 6:52 ` Schmidt, Adriaan
2024-05-23 6:08 ` Anton Mikanovich
2024-07-02 6:41 ` Uladzimir Bely
5 siblings, 1 reply; 9+ messages in thread
From: Anton Mikanovich @ 2024-05-22 6:42 UTC (permalink / raw)
To: Adriaan Schmidt, isar-users; +Cc: jan.kiszka, stefan-koch
16/05/2024 09:13, '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
Hello Adriaan,
Are you going to make any changes on this patchset?
If not, we are planning to merge it to next.
At least it looks good enough and pass all the test cases.
^ permalink raw reply [flat|nested] 9+ messages in thread
* RE: [PATCH v5 0/3] kbuild follow-up
2024-05-22 6:42 ` [PATCH v5 0/3] kbuild follow-up Anton Mikanovich
@ 2024-05-22 6:52 ` Schmidt, Adriaan
0 siblings, 0 replies; 9+ messages in thread
From: Schmidt, Adriaan @ 2024-05-22 6:52 UTC (permalink / raw)
To: Anton Mikanovich, isar-users; +Cc: Kiszka, Jan, Koch, Stefan
Anton Mikanovich <amikan@ilbers.de>, Mittwoch, 22. Mai 2024 08:43:
> 16/05/2024 09:13, '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
>
> Hello Adriaan,
>
> Are you going to make any changes on this patchset?
> If not, we are planning to merge it to next.
>
> At least it looks good enough and pass all the test cases.
Hi Anton,
No more changes planned. As far as I'm concerned this is good to be merged.
Thanks,
Adriaan
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v5 0/3] kbuild follow-up
2024-05-16 6:13 [PATCH v5 0/3] kbuild follow-up Adriaan Schmidt
` (3 preceding siblings ...)
2024-05-22 6:42 ` [PATCH v5 0/3] kbuild follow-up Anton Mikanovich
@ 2024-05-23 6:08 ` Anton Mikanovich
2024-07-02 6:41 ` Uladzimir Bely
5 siblings, 0 replies; 9+ messages in thread
From: Anton Mikanovich @ 2024-05-23 6:08 UTC (permalink / raw)
To: Adriaan Schmidt, isar-users; +Cc: jan.kiszka, stefan-koch
16/05/2024 09:13, '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
>
> 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(-)
>
Applied to next, thanks.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v5 0/3] kbuild follow-up
2024-05-16 6:13 [PATCH v5 0/3] kbuild follow-up Adriaan Schmidt
` (4 preceding siblings ...)
2024-05-23 6:08 ` Anton Mikanovich
@ 2024-07-02 6:41 ` Uladzimir Bely
2024-07-02 8:10 ` Schmidt, Adriaan
5 siblings, 1 reply; 9+ messages in thread
From: Uladzimir Bely @ 2024-07-02 6:41 UTC (permalink / raw)
To: Adriaan Schmidt, isar-users; +Cc: jan.kiszka, stefan-koch
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?
--
Best regards,
Uladzimir.
^ permalink raw reply [flat|nested] 9+ messages in thread
* RE: [PATCH v5 0/3] kbuild follow-up
2024-07-02 6:41 ` Uladzimir Bely
@ 2024-07-02 8:10 ` Schmidt, Adriaan
0 siblings, 0 replies; 9+ messages in thread
From: Schmidt, Adriaan @ 2024-07-02 8:10 UTC (permalink / raw)
To: Uladzimir Bely, isar-users; +Cc: Kiszka, Jan, Koch, Stefan
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.
^ permalink raw reply [flat|nested] 9+ messages in thread