[PATCH] linux-custom: support to add linux-libc-dev package with kernel name

98 views
Skip to first unread message

Arulpandiyan Vadivel

unread,
Jan 12, 2025, 1:58:49 PMJan 12
to isar-...@googlegroups.com, cedric.h...@siemens.com, srikanth....@siemens.com, Arulpandiyan Vadivel
Add support to build linux-libc-dev package with KERNEL_NAME_PROVIDED.
With this change the user is able to update the apt feeds with user desired
package for their architecture.
With current approach for a single architecture only one linux-libc-dev
package is possible for the components.
In few scenarios where multiple BSP's were supported for same architecture
adding them to the same component of apt feeds might not be possible with reprepro.

Signed-off-by: Arulpandiyan Vadivel <arulpandiy...@siemens.com>
---
doc/custom_kernel.md | 2 +-
meta/recipes-kernel/linux/files/debian/control.tmpl | 6 ++++--
meta/recipes-kernel/linux/files/debian/isar/common.tmpl | 2 +-
meta/recipes-kernel/linux/files/debian/isar/install.tmpl | 2 +-
meta/recipes-kernel/linux/linux-custom.inc | 2 +-
5 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/doc/custom_kernel.md b/doc/custom_kernel.md
index ce5f1bf7..89c7c088 100644
--- a/doc/custom_kernel.md
+++ b/doc/custom_kernel.md
@@ -51,7 +51,7 @@ The linux-custom recipe provides support for:

Only the `host` specific package is built automatically at cross builds.

- 10. Produce a `linux-libc-dev` package to support user-land builds
+ 10. Produce a `linux-libc-dev-${KERNEL_NAME_PROVIDED}` package to support user-land builds

11. Only build/ship the `linux-libc-dev` package if instructed to
(`KERNEL_LIBC_DEV_DEPLOY` equals to `"1"`)
diff --git a/meta/recipes-kernel/linux/files/debian/control.tmpl b/meta/recipes-kernel/linux/files/debian/control.tmpl
index 04ad0f4f..a4c0ed9e 100644
--- a/meta/recipes-kernel/linux/files/debian/control.tmpl
+++ b/meta/recipes-kernel/linux/files/debian/control.tmpl
@@ -22,10 +22,12 @@ Description: ${KERNEL_NAME_PROVIDED} Linux kernel headers for @KR@
.
This is useful for people who need to build external modules

-Package: linux-libc-dev
+Package: linux-libc-dev-${KERNEL_NAME_PROVIDED}
Build-Profiles: <!nolibcdev kernel>
Section: devel
-Provides: linux-kernel-headers
+Conflicts: linux-libc-dev
+Provides: linux-libc-dev
+Replaces: linux-libc-dev
Architecture: any
Description: Linux support headers for userspace development
This package provides userspaces headers from the Linux kernel. These headers
diff --git a/meta/recipes-kernel/linux/files/debian/isar/common.tmpl b/meta/recipes-kernel/linux/files/debian/isar/common.tmpl
index def8480e..bab41757 100644
--- a/meta/recipes-kernel/linux/files/debian/isar/common.tmpl
+++ b/meta/recipes-kernel/linux/files/debian/isar/common.tmpl
@@ -8,7 +8,7 @@ set -e
ARCH=${KERNEL_ARCH}
KERNEL_PKG_IMAGE=linux-image-${KERNEL_NAME_PROVIDED}
KERNEL_PKG_KERN_HEADERS=linux-headers-${KERNEL_NAME_PROVIDED}
-KERNEL_PKG_LIBC_HEADERS=linux-libc-dev
+KERNEL_PKG_LIBC_HEADERS=linux-libc-dev-${KERNEL_NAME_PROVIDED}
KERNEL_PKG_LIBC_HEADERS_CROSS=linux-libc-dev-${DISTRO_ARCH}-cross
KERNEL_PKG_KERN_KBUILD=linux-kbuild-${KERNEL_NAME_PROVIDED}
KERNEL_PKG_KERN_KBUILD_CROSS=${KERNEL_PKG_KERN_KBUILD}-${DISTRO_ARCH}-cross
diff --git a/meta/recipes-kernel/linux/files/debian/isar/install.tmpl b/meta/recipes-kernel/linux/files/debian/isar/install.tmpl
index 0a7bdd66..e1602b9d 100644
--- a/meta/recipes-kernel/linux/files/debian/isar/install.tmpl
+++ b/meta/recipes-kernel/linux/files/debian/isar/install.tmpl
@@ -225,7 +225,7 @@ install_headers() {
if dpkg --compare-versions "${krel}" "lt" "5.4.24"; then
headers_check
fi
- [ -z ${kern_pkgs["linux-libc-dev"]} ] || libc_headers
+ [ -z ${kern_pkgs["linux-libc-dev-${KERNEL_NAME_PROVIDED}"]} ] || libc_headers
kernel_headers
}

diff --git a/meta/recipes-kernel/linux/linux-custom.inc b/meta/recipes-kernel/linux/linux-custom.inc
index bf6c879b..26fd8719 100644
--- a/meta/recipes-kernel/linux/linux-custom.inc
+++ b/meta/recipes-kernel/linux/linux-custom.inc
@@ -145,7 +145,7 @@ ISAR_CROSS_COMPILE:class-kbuildtarget = "0"
RECIPE_PROVIDES = " \
linux-image-${KERNEL_NAME_PROVIDED} \
linux-headers-${KERNEL_NAME_PROVIDED} \
- linux-libc-dev \
+ linux-libc-dev-${KERNEL_NAME_PROVIDED} \
linux-libc-dev-${DISTRO_ARCH}-cross \
linux-image-${KERNEL_NAME_PROVIDED}-dbg \
linux-kbuild-${KERNEL_NAME_PROVIDED} \
--
2.39.5

cedric.h...@siemens.com

unread,
Jan 12, 2025, 3:46:33 PMJan 12
to isar-...@googlegroups.com, Vadivel, Arulpandiyan, srikanth....@siemens.com
On Mon, 2025-01-13 at 00:30 +0530, Arulpandiyan Vadivel wrote:
> Add support to build linux-libc-dev package with
> KERNEL_NAME_PROVIDED.
> With this change the user is able to update the apt feeds with user
> desired
> package for their architecture.
> With current approach for a single architecture only one linux-libc-
> dev
> package is possible for the components.
> In few scenarios where multiple BSP's were supported for same
> architecture
> adding them to the same component of apt feeds might not be possible
> with reprepro.

The commit log should IMO be reworded as you are using terms and
concepts that are potentially specific to our downstream projects.
This change is however relevant to Isar. Below my attempt to describe
the change and our motivation (further details may be required by the
maintainers).

Debian and Ubuntu use unified kernel headers and a single linux-libc-
dev package is shipped. In contrast, Isar may build multiple kernel
variants with different versions and/or patches and their packages but
linux-libc-dev are suffixed with -${KERNEL_NAME_PROVIDED}: this allows
each variant to exist in isar-apt (reprepro may not have more than one
version of a given package for a given suite). Apply the same suffix to
linux-libc-dev and a Provides: clause.
We could keep linux-libc-dev and add linux-libc-dev-
${KERNEL_NAME_PROVIDED}

>      linux-libc-dev-${DISTRO_ARCH}-cross \

What about the -cross package? A similar issue may exist

>      linux-image-${KERNEL_NAME_PROVIDED}-dbg \
>      linux-kbuild-${KERNEL_NAME_PROVIDED} \

--
Cedric Hombourger
Siemens AG
www.siemens.com

Arulpandiyan Vadivel

unread,
Jan 13, 2025, 3:06:41 AMJan 13
to isar-...@googlegroups.com, cedric.h...@siemens.com, srikanth....@siemens.com, Arulpandiyan Vadivel
Debian and Ubuntu use unified kernel headers and a single linux-libc-dev
package is shipped. In contrast, Isar may build multiple kernel variants
with different versions and/or patches and their packages.
But linux-libc-dev are suffixed with -${KERNEL_NAME_PROVIDED}: this allows
each variant to exist in isar-apt (reprepro may not have more than one
version of a given package for a given suite).
Apply the same suffix to linux-libc-dev and a Provides: clause.

Signed-off-by: Arulpandiyan Vadivel <arulpandiy...@siemens.com>
---
doc/custom_kernel.md | 2 +-
meta/recipes-kernel/linux/files/debian/control.tmpl | 10 +++++++---
.../recipes-kernel/linux/files/debian/isar/common.tmpl | 4 ++--
.../linux/files/debian/isar/install.tmpl | 2 +-
meta/recipes-kernel/linux/linux-custom.inc | 2 ++
5 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/doc/custom_kernel.md b/doc/custom_kernel.md
index ce5f1bf7..89c7c088 100644
--- a/doc/custom_kernel.md
+++ b/doc/custom_kernel.md
@@ -51,7 +51,7 @@ The linux-custom recipe provides support for:

Only the `host` specific package is built automatically at cross builds.

- 10. Produce a `linux-libc-dev` package to support user-land builds
+ 10. Produce a `linux-libc-dev-${KERNEL_NAME_PROVIDED}` package to support user-land builds

11. Only build/ship the `linux-libc-dev` package if instructed to
(`KERNEL_LIBC_DEV_DEPLOY` equals to `"1"`)
diff --git a/meta/recipes-kernel/linux/files/debian/control.tmpl b/meta/recipes-kernel/linux/files/debian/control.tmpl
index 04ad0f4f..e440b492 100644
--- a/meta/recipes-kernel/linux/files/debian/control.tmpl
+++ b/meta/recipes-kernel/linux/files/debian/control.tmpl
@@ -22,19 +22,23 @@ Description: ${KERNEL_NAME_PROVIDED} Linux kernel headers for @KR@
.
This is useful for people who need to build external modules

-Package: linux-libc-dev
+Package: linux-libc-dev-${KERNEL_NAME_PROVIDED}
Build-Profiles: <!nolibcdev kernel>
Section: devel
-Provides: linux-kernel-headers
+Conflicts: linux-libc-dev
+Provides: linux-libc-dev
+Replaces: linux-libc-dev
Architecture: any
Description: Linux support headers for userspace development
This package provides userspaces headers from the Linux kernel. These headers
are used by the installed headers for GNU glibc and other system libraries.

-Package: linux-libc-dev-${DISTRO_ARCH}-cross
+Package: linux-libc-dev-${DISTRO_ARCH}-cross-${KERNEL_NAME_PROVIDED}
Build-Profiles: <!nolibcdev cross !kbuild>
Section: devel
+Conflicts: linux-kernel-headers-${DISTRO_ARCH}-cross
Provides: linux-kernel-headers-${DISTRO_ARCH}-cross
+Replaces: linux-kernel-headers-${DISTRO_ARCH}-cross
Architecture: all
Description: Linux Kernel Headers for development (for cross-compiling)
This package provides headers from the Linux kernel. These headers
diff --git a/meta/recipes-kernel/linux/files/debian/isar/common.tmpl b/meta/recipes-kernel/linux/files/debian/isar/common.tmpl
index def8480e..b200930c 100644
--- a/meta/recipes-kernel/linux/files/debian/isar/common.tmpl
+++ b/meta/recipes-kernel/linux/files/debian/isar/common.tmpl
@@ -8,8 +8,8 @@ set -e
ARCH=${KERNEL_ARCH}
KERNEL_PKG_IMAGE=linux-image-${KERNEL_NAME_PROVIDED}
KERNEL_PKG_KERN_HEADERS=linux-headers-${KERNEL_NAME_PROVIDED}
-KERNEL_PKG_LIBC_HEADERS=linux-libc-dev
-KERNEL_PKG_LIBC_HEADERS_CROSS=linux-libc-dev-${DISTRO_ARCH}-cross
+KERNEL_PKG_LIBC_HEADERS=linux-libc-dev-${KERNEL_NAME_PROVIDED}
+KERNEL_PKG_LIBC_HEADERS_CROSS=linux-libc-dev-${DISTRO_ARCH}-cross-${KERNEL_NAME_PROVIDED}
KERNEL_PKG_KERN_KBUILD=linux-kbuild-${KERNEL_NAME_PROVIDED}
KERNEL_PKG_KERN_KBUILD_CROSS=${KERNEL_PKG_KERN_KBUILD}-${DISTRO_ARCH}-cross

diff --git a/meta/recipes-kernel/linux/files/debian/isar/install.tmpl b/meta/recipes-kernel/linux/files/debian/isar/install.tmpl
index 0a7bdd66..e1602b9d 100644
--- a/meta/recipes-kernel/linux/files/debian/isar/install.tmpl
+++ b/meta/recipes-kernel/linux/files/debian/isar/install.tmpl
@@ -225,7 +225,7 @@ install_headers() {
if dpkg --compare-versions "${krel}" "lt" "5.4.24"; then
headers_check
fi
- [ -z ${kern_pkgs["linux-libc-dev"]} ] || libc_headers
+ [ -z ${kern_pkgs["linux-libc-dev-${KERNEL_NAME_PROVIDED}"]} ] || libc_headers
kernel_headers
}

diff --git a/meta/recipes-kernel/linux/linux-custom.inc b/meta/recipes-kernel/linux/linux-custom.inc
index bf6c879b..f67bba2b 100644
--- a/meta/recipes-kernel/linux/linux-custom.inc
+++ b/meta/recipes-kernel/linux/linux-custom.inc
@@ -146,7 +146,9 @@ RECIPE_PROVIDES = " \
linux-image-${KERNEL_NAME_PROVIDED} \
linux-headers-${KERNEL_NAME_PROVIDED} \
linux-libc-dev \
+ linux-libc-dev-${KERNEL_NAME_PROVIDED} \
linux-libc-dev-${DISTRO_ARCH}-cross \
+ linux-libc-dev-${DISTRO_ARCH}-cross-${KERNEL_NAME_PROVIDED} \
linux-image-${KERNEL_NAME_PROVIDED}-dbg \
linux-kbuild-${KERNEL_NAME_PROVIDED} \
${BPN}-pseudo-native \
--
2.39.5

cedric.h...@siemens.com

unread,
Jan 13, 2025, 9:04:42 AMJan 13
to isar-...@googlegroups.com, Vadivel, Arulpandiyan, srikanth....@siemens.com
On Mon, 2025-01-13 at 13:37 +0530, Arulpandiyan Vadivel wrote:
> Debian and Ubuntu use unified kernel headers and a single linux-libc-
> dev
> package is shipped. In contrast, Isar may build multiple kernel
> variants
> with different versions and/or patches and their packages.
> But linux-libc-dev are suffixed with -${KERNEL_NAME_PROVIDED}: this

There was not "." between "their packages" and "but" in my proposal
because "but" in that context really meant "except". This changes the
meaning.

Carefully review the git commit log and make sure it makes sense. You
do not have to go with the version I proposed (was just a proposal); we
need to make sure that the problem statement and solution are clear and
relevant to isar-users

Arulpandiyan Vadivel

unread,
Jan 14, 2025, 11:32:07 AMJan 14
to isar-...@googlegroups.com, cedric.h...@siemens.com, srikanth....@siemens.com, Arulpandiyan Vadivel
Debian and Ubuntu use unified kernel headers and a single linux-libc-dev
package is shipped. In contrast, Isar may build multiple kernel variants
with different versions and/or patches and their packages but linux-libc-dev
are suffixed with -${KERNEL_NAME_PROVIDED}: this allows
each variant to exist in isar-apt (reprepro may not have more than one
version of a given package for a given suite).
Apply the same suffix to linux-libc-dev and a Provides: clause.

Signed-off-by: Arulpandiyan Vadivel <arulpandiy...@siemens.com>
---
Changes since v2
- Updated commit message as suggested
- Added KERNEL_NAME_PROVIDED for cross packages of linux-libc-dev as well
+KERNEL_PKG_LIBC_HEADERS_CROSS=linux-libc-dev-${DISTRO_ARCH}-cross-${KERNEL_NAME_PROVIDED}
KERNEL_PKG_KERN_KBUILD=linux-kbuild-${KERNEL_NAME_PROVIDED}
KERNEL_PKG_KERN_KBUILD_CROSS=${KERNEL_PKG_KERN_KBUILD}-${DISTRO_ARCH}-cross
2.39.5

Jan Kiszka

unread,
Jan 17, 2025, 8:25:48 AMJan 17
to Arulpandiyan Vadivel, isar-...@googlegroups.com, cedric.h...@siemens.com, srikanth....@siemens.com
Why changing the name here

> 11. Only build/ship the `linux-libc-dev` package if instructed to

but not here? Also, KERNEL_NAME_PROVIDED is not introduced in this
document, or in any other manual.
The logic of the changes makes sense to me - given that very special
(and surely not recommendable) situation you have. But a
RECIPE-API-CHANGELOG.md entry is missing.

Jan

--
Siemens AG, Foundational Technologies
Linux Expert Center

Arulpandiyan Vadivel

unread,
Jan 17, 2025, 12:35:41 PMJan 17
to isar-...@googlegroups.com, cedric.h...@siemens.com, srikanth....@siemens.com, Arulpandiyan Vadivel
Debian and Ubuntu use unified kernel headers and a single linux-libc-dev
package is shipped. In contrast, Isar may build multiple kernel variants
with different versions and/or patches and their packages but linux-libc-dev
are suffixed with -${KERNEL_NAME_PROVIDED}: this allows
each variant to exist in isar-apt (reprepro may not have more than one
version of a given package for a given suite).
Apply the same suffix to linux-libc-dev / linux-libc-dev-${DISTRO_ARCH}-cross
and a Provides: clause.

Signed-off-by: Arulpandiyan Vadivel <arulpandiy...@siemens.com>
---
RECIPE-API-CHANGELOG.md | 12 ++++++++++++
doc/custom_kernel.md | 4 ++--
meta/recipes-kernel/linux/files/debian/control.tmpl | 10 +++++++---
.../linux/files/debian/isar/install.tmpl | 2 +-
meta/recipes-kernel/linux/linux-custom.inc | 2 ++
5 files changed, 24 insertions(+), 6 deletions(-)

diff --git a/RECIPE-API-CHANGELOG.md b/RECIPE-API-CHANGELOG.md
index f310553a..5d470c94 100644
--- a/RECIPE-API-CHANGELOG.md
+++ b/RECIPE-API-CHANGELOG.md
@@ -702,3 +702,15 @@ enable cross-compilation. Otherwize ISAR_CROSS_COMPILE = "0" now should be set
in local.conf to disable cross-compilation for all the recipes.
Sample local.conf from meta-isar used by isar-init-build-env is also changed
to enable cross-compilation by default.
+
+### Enable linux-libc-dev package with KERNEL_NAME_PROVIDED
+
+By default linux-libc-dev and linux-libc-dev-${DISTRO_ARCH}-cross package
+was generated for architecture it builds for.
+
+This change helps to generate the `linux-libc-dev-${KERNEL_NAME_PROVIDED}` and
+`linux-libc-dev-cross-${KERNEL_NAME_PROVIDED}`.
+For example, If `KERNEL_NAME_PROVIDED` is configured as `foo` for arm64, now
+`linux-libc-dev-foo` and `linux-libc-dev-arm64-cross-foo` package will be
+generated. This will help to have multiple versions of linux-libc-dev packages
+available for respective bsps in apt feeds.
diff --git a/doc/custom_kernel.md b/doc/custom_kernel.md
index ce5f1bf7..ade4ad7a 100644
--- a/doc/custom_kernel.md
+++ b/doc/custom_kernel.md
@@ -51,9 +51,9 @@ The linux-custom recipe provides support for:

Only the `host` specific package is built automatically at cross builds.

- 10. Produce a `linux-libc-dev` package to support user-land builds
+ 10. Produce a `linux-libc-dev-${KERNEL_NAME_PROVIDED}` package to support user-land builds

- 11. Only build/ship the `linux-libc-dev` package if instructed to
+ 11. Only build/ship the `linux-libc-dev-${KERNEL_NAME_PROVIDED}` package if instructed to
(`KERNEL_LIBC_DEV_DEPLOY` equals to `"1"`)

12. Support both native and cross compiles (`ISAR_CROSS_COMPILE`)
diff --git a/meta/recipes-kernel/linux/files/debian/control.tmpl b/meta/recipes-kernel/linux/files/debian/control.tmpl
index ec0da1ab..a79b86c4 100644
--- a/meta/recipes-kernel/linux/files/debian/control.tmpl
+++ b/meta/recipes-kernel/linux/files/debian/control.tmpl
@@ -22,19 +22,23 @@ Description: ${KERNEL_NAME_PROVIDED} Linux kernel headers for @KR@
.
This is useful for people who need to build external modules

-Package: linux-libc-dev
+Package: linux-libc-dev-${KERNEL_NAME_PROVIDED}
Build-Profiles: <!nolibcdev kernel>
Section: devel
-Provides: linux-kernel-headers
+Conflicts: linux-libc-dev
+Provides: linux-libc-dev
+Replaces: linux-libc-dev
Architecture: ${KERNEL_LIBC_DEV_ARCH}
Description: Linux support headers for userspace development
This package provides userspaces headers from the Linux kernel. These headers
are used by the installed headers for GNU glibc and other system libraries.

-Package: linux-libc-dev-${DISTRO_ARCH}-cross
+Package: linux-libc-dev-${DISTRO_ARCH}-cross-${KERNEL_NAME_PROVIDED}
Build-Profiles: <!nolibcdev cross !kbuild>
Section: devel
+Conflicts: linux-kernel-headers-${DISTRO_ARCH}-cross
Provides: linux-kernel-headers-${DISTRO_ARCH}-cross
+Replaces: linux-kernel-headers-${DISTRO_ARCH}-cross
Architecture: all
Description: Linux Kernel Headers for development (for cross-compiling)
This package provides headers from the Linux kernel. These headers
diff --git a/meta/recipes-kernel/linux/files/debian/isar/install.tmpl b/meta/recipes-kernel/linux/files/debian/isar/install.tmpl
index 6d742f02..290a7d56 100644
--- a/meta/recipes-kernel/linux/files/debian/isar/install.tmpl
+++ b/meta/recipes-kernel/linux/files/debian/isar/install.tmpl
@@ -248,7 +248,7 @@ install_headers() {
if dpkg --compare-versions "${krel}" "lt" "5.4.24"; then
headers_check
fi
- [ -z ${kern_pkgs["linux-libc-dev"]} ] || libc_headers
+ [ -z ${kern_pkgs["linux-libc-dev-${KERNEL_NAME_PROVIDED}"]} ] || libc_headers
kernel_headers
}

diff --git a/meta/recipes-kernel/linux/linux-custom.inc b/meta/recipes-kernel/linux/linux-custom.inc
index 77700a5d..4f68f4cd 100644
--- a/meta/recipes-kernel/linux/linux-custom.inc
+++ b/meta/recipes-kernel/linux/linux-custom.inc
@@ -152,7 +152,9 @@ RECIPE_PROVIDES = " \
linux-image-${KERNEL_NAME_PROVIDED} \
linux-headers-${KERNEL_NAME_PROVIDED} \
linux-libc-dev \
+ linux-libc-dev-${KERNEL_NAME_PROVIDED} \
linux-libc-dev-${DISTRO_ARCH}-cross \
+ linux-libc-dev-${DISTRO_ARCH}-cross-${KERNEL_NAME_PROVIDED} \
linux-image-${KERNEL_NAME_PROVIDED}-dbg \
linux-kbuild-${KERNEL_NAME_PROVIDED} \
${BPN}-pseudo-native \
--
2.39.5

Jan Kiszka

unread,
Jan 17, 2025, 12:40:16 PMJan 17
to Arulpandiyan Vadivel, isar-...@googlegroups.com, cedric.h...@siemens.com, srikanth....@siemens.com
KERNEL_NAME - this is what the user will deal with. KERNEL_NAME_PROVIDED
is internal to the kernel recipes.

>
> - 11. Only build/ship the `linux-libc-dev` package if instructed to
> + 11. Only build/ship the `linux-libc-dev-${KERNEL_NAME_PROVIDED}` package if instructed to
> (`KERNEL_LIBC_DEV_DEPLOY` equals to `"1"`)

Same here.

Jan Kiszka

unread,
Jan 17, 2025, 12:44:29 PMJan 17
to Arulpandiyan Vadivel, isar-...@googlegroups.com, cedric.h...@siemens.com, srikanth....@siemens.com

Arulpandiyan Vadivel

unread,
Jan 17, 2025, 12:58:01 PMJan 17
to isar-...@googlegroups.com, cedric.h...@siemens.com, srikanth....@siemens.com, Arulpandiyan Vadivel
Debian and Ubuntu use unified kernel headers and a single linux-libc-dev
package is shipped. In contrast, Isar may build multiple kernel variants
with different versions and/or patches and their packages but linux-libc-dev
are suffixed with -${KERNEL_NAME_PROVIDED}: this allows
each variant to exist in isar-apt (reprepro may not have more than one
version of a given package for a given suite).
Apply the same suffix to linux-libc-dev / linux-libc-dev-${DISTRO_ARCH}-cross
and a Provides: clause.

Signed-off-by: Arulpandiyan Vadivel <arulpandiy...@siemens.com>
---
Changes since v3
- Updated commit message to include cross packages
- Added an entry in RECIPE_API_CHANGELOG.md
- updated doc/custom_kernel.md documentation

Changes since v2
- Updated commit message as suggested
- Added KERNEL_NAME_PROVIDED for cross packages of linux-libc-dev as well

diff --git a/doc/custom_kernel.md b/doc/custom_kernel.md
index ce5f1bf7..ade4ad7a 100644
--- a/doc/custom_kernel.md
+++ b/doc/custom_kernel.md
@@ -51,9 +51,9 @@ The linux-custom recipe provides support for:

Only the `host` specific package is built automatically at cross builds.

- 10. Produce a `linux-libc-dev` package to support user-land builds
+ 10. Produce a `linux-libc-dev-${KERNEL_NAME_PROVIDED}` package to support user-land builds

- 11. Only build/ship the `linux-libc-dev` package if instructed to
+ 11. Only build/ship the `linux-libc-dev-${KERNEL_NAME_PROVIDED}` package if instructed to
(`KERNEL_LIBC_DEV_DEPLOY` equals to `"1"`)

--
2.39.5

Arulpandiyan Vadivel

unread,
Jan 17, 2025, 1:00:35 PMJan 17
to isar-...@googlegroups.com, cedric.h...@siemens.com, srikanth....@siemens.com, Arulpandiyan Vadivel
Debian and Ubuntu use unified kernel headers and a single linux-libc-dev
package is shipped. In contrast, Isar may build multiple kernel variants
with different versions and/or patches and their packages but linux-libc-dev
are suffixed with -${KERNEL_NAME_PROVIDED}: this allows
each variant to exist in isar-apt (reprepro may not have more than one
version of a given package for a given suite).
Apply the same suffix to linux-libc-dev / linux-libc-dev-${DISTRO_ARCH}-cross
and a Provides: clause.

Signed-off-by: Arulpandiyan Vadivel <arulpandiy...@siemens.com>
---
Changes since v3
- Updated commit message to include cross packages
- Added an entry in RECIPE_API_CHANGELOG.md
- updated doc/custom_kernel.md documentation

Changes since v2
- Updated commit message as suggested
- Added KERNEL_NAME_PROVIDED for cross packages of linux-libc-dev as well

---
RECIPE-API-CHANGELOG.md | 12 ++++++++++++
doc/custom_kernel.md | 4 ++--
meta/recipes-kernel/linux/files/debian/control.tmpl | 10 +++++++---
.../linux/files/debian/isar/install.tmpl | 2 +-
meta/recipes-kernel/linux/linux-custom.inc | 2 ++
5 files changed, 24 insertions(+), 6 deletions(-)

diff --git a/RECIPE-API-CHANGELOG.md b/RECIPE-API-CHANGELOG.md
index f310553a..64c0f34a 100644
--- a/RECIPE-API-CHANGELOG.md
+++ b/RECIPE-API-CHANGELOG.md
@@ -702,3 +702,15 @@ enable cross-compilation. Otherwize ISAR_CROSS_COMPILE = "0" now should be set
in local.conf to disable cross-compilation for all the recipes.
Sample local.conf from meta-isar used by isar-init-build-env is also changed
to enable cross-compilation by default.
+
+### Enable linux-libc-dev package with KERNEL_NAME
+
+By default linux-libc-dev and linux-libc-dev-${DISTRO_ARCH}-cross package
+was generated for architecture it builds for.
+
+This change helps to generate the `linux-libc-dev-${KERNEL_NAME}` and
+`linux-libc-dev-${DISTRO_ARCH}-cross-${KERNEL_NAME}`.
+For example, If `KERNEL_NAME` is configured as `foo` for arm64, now
+`linux-libc-dev-foo` and `linux-libc-dev-arm64-cross-foo` package will be
+generated. This will help to have multiple versions of linux-libc-dev packages
+available for respective bsps in apt feeds.
diff --git a/doc/custom_kernel.md b/doc/custom_kernel.md
index ce5f1bf7..2dca577c 100644
--- a/doc/custom_kernel.md
+++ b/doc/custom_kernel.md
@@ -51,9 +51,9 @@ The linux-custom recipe provides support for:

Only the `host` specific package is built automatically at cross builds.

- 10. Produce a `linux-libc-dev` package to support user-land builds
+ 10. Produce a `linux-libc-dev-${KERNEL_NAME}` package to support user-land builds

- 11. Only build/ship the `linux-libc-dev` package if instructed to
+ 11. Only build/ship the `linux-libc-dev-${KERNEL_NAME}` package if instructed to
(`KERNEL_LIBC_DEV_DEPLOY` equals to `"1"`)

--
2.39.5

Arulpandiyan Vadivel

unread,
Jan 21, 2025, 4:46:00 AMJan 21
to isar-...@googlegroups.com, cedric.h...@siemens.com, srikanth....@siemens.com, Arulpandiyan Vadivel
Debian and Ubuntu use unified kernel headers and a single linux-libc-dev
package is shipped. In contrast, Isar may build multiple kernel variants
with different versions and/or patches and their packages but linux-libc-dev
are suffixed with -${KERNEL_NAME_PROVIDED}: this allows
each variant to exist in isar-apt (reprepro may not have more than one
version of a given package for a given suite).
Apply the same suffix to linux-libc-dev / linux-libc-dev-${DISTRO_ARCH}-cross
and a Provides: clause.

Signed-off-by: Arulpandiyan Vadivel <arulpandiy...@siemens.com>

---
Changes since v4
- Updated KERNEL_PKG_LIBC_HEADERS path with KERNEL_NAME_PROVIDED

Changes since v3
- Updated commit message to include cross packages
- updated doc/custom_kernel.md documentation

Changes since v2
- Updated commit message as suggested
- Added KERNEL_NAME_PROVIDED for cross packages of linux-libc-dev as well

---
---
RECIPE-API-CHANGELOG.md | 12 ++++++++++++
doc/custom_kernel.md | 4 ++--
meta/recipes-kernel/linux/files/debian/control.tmpl | 10 +++++++---
.../linux/files/debian/isar/common.tmpl | 2 +-
.../linux/files/debian/isar/install.tmpl | 2 +-
meta/recipes-kernel/linux/linux-custom.inc | 2 ++
6 files changed, 25 insertions(+), 7 deletions(-)
diff --git a/meta/recipes-kernel/linux/files/debian/isar/common.tmpl b/meta/recipes-kernel/linux/files/debian/isar/common.tmpl
index f9cc2f02..b004214f 100644
--- a/meta/recipes-kernel/linux/files/debian/isar/common.tmpl
+++ b/meta/recipes-kernel/linux/files/debian/isar/common.tmpl
@@ -8,7 +8,7 @@ set -e
ARCH=${KERNEL_ARCH}
KERNEL_PKG_IMAGE=linux-image-${KERNEL_NAME_PROVIDED}
KERNEL_PKG_KERN_HEADERS=linux-headers-${KERNEL_NAME_PROVIDED}
-KERNEL_PKG_LIBC_HEADERS=linux-libc-dev
+KERNEL_PKG_LIBC_HEADERS=linux-libc-dev-${KERNEL_NAME_PROVIDED}
KERNEL_PKG_LIBC_HEADERS_CROSS=linux-libc-dev-${DISTRO_ARCH}-cross
KERNEL_PKG_KERN_KBUILD=linux-kbuild-${KERNEL_NAME_PROVIDED}
KERNEL_PKG_KERN_KBUILD_CROSS=${KERNEL_PKG_KERN_KBUILD}-${DISTRO_ARCH}-cross

Vadivel, Arulpandiyan

unread,
Feb 6, 2025, 6:51:01 AMFeb 6
to isar-...@googlegroups.com, cedric.h...@siemens.com, srikanth....@siemens.com, ub...@ilbers.de
Hello Everyone,
Can you please help to merge this change request, If there are no review comments or suggestions ?
Regards,
Arulpandiyan V.
+package was generated for architecture it builds for.
+
+This change helps to generate the `linux-libc-dev-${KERNEL_NAME}` and
+`linux-libc-dev-${DISTRO_ARCH}-cross-${KERNEL_NAME}`.
+For example, If `KERNEL_NAME` is configured as `foo` for arm64, now
+`linux-libc-dev-foo` and `linux-libc-dev-arm64-cross-foo` package will
+be generated. This will help to have multiple versions of
+linux-libc-dev packages available for respective bsps in apt feeds.
diff --git a/doc/custom_kernel.md b/doc/custom_kernel.md index ce5f1bf7..2dca577c 100644
--- a/doc/custom_kernel.md
+++ b/doc/custom_kernel.md
@@ -51,9 +51,9 @@ The linux-custom recipe provides support for:

Only the `host` specific package is built automatically at cross builds.

- 10. Produce a `linux-libc-dev` package to support user-land builds
+ 10. Produce a `linux-libc-dev-${KERNEL_NAME}` package to support
+ user-land builds

- 11. Only build/ship the `linux-libc-dev` package if instructed to
+ 11. Only build/ship the `linux-libc-dev-${KERNEL_NAME}` package if
+ instructed to
+ libc_headers

Uladzimir Bely

unread,
Feb 7, 2025, 2:48:45 AMFeb 7
to Arulpandiyan Vadivel, isar-...@googlegroups.com
On Tue, 2025-01-21 at 15:17 +0530, 'Arulpandiyan Vadivel' via isar-
Applied to next, thanks.

--
Best regards,
Uladzimir.



Jan Kiszka

unread,
Sep 10, 2025, 9:56:09 AM (3 days ago) Sep 10
to Arulpandiyan Vadivel, isar-...@googlegroups.com, cedric.h...@siemens.com, srikanth....@siemens.com
This broke the cross libc-dev package. Fix is being tested.

Seems we are lacking tests for this scenario: found via xenomai-images
only, and there we were lacking CI for the affected path as well :(.

Jan Kiszka

unread,
Sep 10, 2025, 1:22:26 PM (3 days ago) Sep 10
to Arulpandiyan Vadivel, isar-...@googlegroups.com, cedric.h...@siemens.com, srikanth....@siemens.com
This was also wrong.

>> Architecture: all
>> Description: Linux Kernel Headers for development (for cross-compiling)
>> This package provides headers from the Linux kernel. These headers
>> diff --git a/meta/recipes-kernel/linux/files/debian/isar/common.tmpl b/meta/recipes-kernel/linux/files/debian/isar/common.tmpl
>> index f9cc2f02..b004214f 100644
>> --- a/meta/recipes-kernel/linux/files/debian/isar/common.tmpl
>> +++ b/meta/recipes-kernel/linux/files/debian/isar/common.tmpl
>> @@ -8,7 +8,7 @@ set -e
>> ARCH=${KERNEL_ARCH}
>> KERNEL_PKG_IMAGE=linux-image-${KERNEL_NAME_PROVIDED}
>> KERNEL_PKG_KERN_HEADERS=linux-headers-${KERNEL_NAME_PROVIDED}
>> -KERNEL_PKG_LIBC_HEADERS=linux-libc-dev
>> +KERNEL_PKG_LIBC_HEADERS=linux-libc-dev-${KERNEL_NAME_PROVIDED}
>> KERNEL_PKG_LIBC_HEADERS_CROSS=linux-libc-dev-${DISTRO_ARCH}-cross
>
> This broke the cross libc-dev package. Fix is being tested.
>
> Seems we are lacking tests for this scenario: found via xenomai-images
> only, and there we were lacking CI for the affected path as well :(.
>

There is another issue with this patch which was likely hard to predict:
It broke automatic downgrades, possibly also updates, of libc-dev in the
sbuild-chroots. As xenomai-images is currently broken in other regards
as well, I cannot easily point to a demo case, but I reproduced that
locally: After reverting this change, I can build libevl, which really
needs the custom kernel's libc-dev because of extra headers, without any
extra dependency.

[...]
Reading package lists...
Building dependency tree...
Reading state information...
Calculating upgrade...
The following packages will be upgraded:
linux-libc-dev
1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
[...]

With this change, I would now have to add the explicit Build-Depends on
linux-libc-dev-${KERNEL_NAME} or the corresponding cross package. That
is a very ugly recipe API change that was also not documented.

So, I'm not very happy with having this pattern here by default and
would prefer only using it if there are actually multiple kernels that
also deploy their libc-dev packages.

Unless someone has a good idea quickly, we should revert this first and
retry later.

Jan Kiszka

unread,
Sep 11, 2025, 1:11:19 AM (3 days ago) Sep 11
to Arulpandiyan Vadivel, isar-...@googlegroups.com, cedric.h...@siemens.com, srikanth....@siemens.com
This is a design challenge: Do we really need per-KERNEL_NAME
linux-libc-dev packages, or is it enough to tell the users to enable
KERNEL_LIBC_DEV_DEPLOY only for one of them?

I think that in way of 90% of the use cases the latter will be enough
because the kernels only differ in configuration or in patches that do
not create conflicting changes to the UAPI headers. But can someone
think of a case where this is not enough?

Arulpandiyan Vadivel

unread,
Sep 11, 2025, 1:21:55 AM (3 days ago) Sep 11
to isar-users
When a single apt feeds to support multiple BSP's with same or different architecture for a linux-libc-dev package, without this change we may not be able to support them.

I think that in way of 90% of the use cases the latter will be enough
because the kernels only differ in configuration or in patches that do
not create conflicting changes to the UAPI headers. But can someone
think of a case where this is not enough?


Yes. I agree UAPI headers might be common in 99% cases unless we have specific BSP changes pushed and maintained

Jan Kiszka

unread,
Sep 11, 2025, 1:28:45 AM (3 days ago) Sep 11
to Arulpandiyan Vadivel, isar-users
If BSPs are breaking the UAPIs of each other, then we may not even
consider them valid BSPs (they should not change the UAPI at all, in
theory) - but I agree that this case is imaginable.

>
> I think that in way of 90% of the use cases the latter will be enough
> because the kernels only differ in configuration or in patches that do
> not create conflicting changes to the UAPI headers. But can someone
> think of a case where this is not enough?
>
>
> Yes. I agree UAPI headers might be common in 99% cases unless we have
> specific BSP changes pushed and maintained

So, any ideas how to model a recipe API where you can opt-in to build
multiple linux-libc-dev (which will no longer be simple replacements of
the upstream packages)?

Or do you have any idea how to fix the issue that the sbuild envs are
not up/downgrading the linux-libc-dev packages anymore when they have
different names?

Reverting all this is not nice as well because we already broke the
recipe API, but it's currently the only good option I see.

Arulpandiyan Vadivel

unread,
Sep 11, 2025, 1:38:24 AM (3 days ago) Sep 11
to isar-users
I understand the issue reported , Can you please help to share/provide the steps to reproduce the issue where I can check for the solutions

Regards
Arulpandiyan V.

cedric.h...@siemens.com

unread,
Sep 11, 2025, 3:02:11 AM (3 days ago) Sep 11
to isar-...@googlegroups.com, Kiszka, Jan, Vadivel, Arulpandiyan, srikanth....@siemens.com
Yes I am in favor.

> >
>
> This is a design challenge: Do we really need per-KERNEL_NAME
> linux-libc-dev packages, or is it enough to tell the users to enable
> KERNEL_LIBC_DEV_DEPLOY only for one of them?

This would break one of our multiconfig projects (and I am not
referring to our -distro project that you have seen) but a project
where we have several machines and two with vendor-specific headers
that are needed by downstream projects to build their userland
middleware/applications

Since Isar supports and advertises multiconfig (e.g. user manual
suggests using bitbake mc:*:isar-image-base), I believe we should make
sure recipe-level settings such as KERNEL_LIBC_DEV_DEPLOY will not
break.

It is surely not an easy task and clearly reinforces the need for more
tests with every submission we make.

Jan Kiszka

unread,
Sep 11, 2025, 4:33:50 AM (3 days ago) Sep 11
to Arulpandiyan Vadivel, isar-users
On 11.09.25 07:38, Arulpandiyan Vadivel wrote:
> I understand the issue reported , Can you please help to share/provide
> the steps to reproduce the issue where I can check for the solutions
>

1. Fix all the urgent mistakes of the patch:

diff --git a/meta/recipes-kernel/linux/files/debian/control.tmpl b/meta/recipes-kernel/linux/files/debian/control.tmpl
index a79b86c4..6a4866da 100644
--- a/meta/recipes-kernel/linux/files/debian/control.tmpl
+++ b/meta/recipes-kernel/linux/files/debian/control.tmpl
@@ -36,9 +36,9 @@ Description: Linux support headers for userspace development
Package: linux-libc-dev-${DISTRO_ARCH}-cross-${KERNEL_NAME_PROVIDED}
Build-Profiles: <!nolibcdev cross !kbuild>
Section: devel
-Conflicts: linux-kernel-headers-${DISTRO_ARCH}-cross
-Provides: linux-kernel-headers-${DISTRO_ARCH}-cross
-Replaces: linux-kernel-headers-${DISTRO_ARCH}-cross
+Conflicts: linux-libc-dev-${DISTRO_ARCH}-cross
+Provides: linux-kernel-headers-${DISTRO_ARCH}-cross, linux-libc-dev-${DISTRO_ARCH}-cross
+Replaces: linux-libc-dev-${DISTRO_ARCH}-cross
Architecture: all
Description: Linux Kernel Headers for development (for cross-compiling)
This package provides headers from the Linux kernel. These headers
diff --git a/meta/recipes-kernel/linux/files/debian/isar/common.tmpl b/meta/recipes-kernel/linux/files/debian/isar/common.tmpl
index b004214f..83505fda 100644
--- a/meta/recipes-kernel/linux/files/debian/isar/common.tmpl
+++ b/meta/recipes-kernel/linux/files/debian/isar/common.tmpl
@@ -9,7 +9,7 @@ ARCH=${KERNEL_ARCH}
KERNEL_PKG_IMAGE=linux-image-${KERNEL_NAME_PROVIDED}
KERNEL_PKG_KERN_HEADERS=linux-headers-${KERNEL_NAME_PROVIDED}
KERNEL_PKG_LIBC_HEADERS=linux-libc-dev-${KERNEL_NAME_PROVIDED}
-KERNEL_PKG_LIBC_HEADERS_CROSS=linux-libc-dev-${DISTRO_ARCH}-cross
+KERNEL_PKG_LIBC_HEADERS_CROSS=linux-libc-dev-${DISTRO_ARCH}-cross-${KERNEL_NAME_PROVIDED}
KERNEL_PKG_KERN_KBUILD=linux-kbuild-${KERNEL_NAME_PROVIDED}
KERNEL_PKG_KERN_KBUILD_CROSS=${KERNEL_PKG_KERN_KBUILD}-${DISTRO_ARCH}-cross


2. Build a kernel that has KERNEL_LIBC_DEV_DEPLOY = "1"

3. Build another packages and check if the self-built linux-libc-dev (-cross) is pulled into the sbuild-chroot

I got some idea how the latter could possible be restored, even when using libc-dev packages with different names. Will try that out later.

Jan Kiszka

unread,
Sep 11, 2025, 7:05:43 AM (3 days ago) Sep 11
to Arulpandiyan Vadivel, isar-users
...but it did not work so far: I tried to inject an explicit build
dependency on linux-libc-dev into every package build, but I had to
weaken it because KERNEL_LIBC_DEV_DEPLOY is generally off - or there is
even no custom kernel.

diff --git a/meta/classes/dpkg.bbclass b/meta/classes/dpkg.bbclass
index 0e5a495d..149e8577 100644
--- a/meta/classes/dpkg.bbclass
+++ b/meta/classes/dpkg.bbclass
@@ -115,6 +115,7 @@ dpkg_runbuild() {
--no-run-lintian --no-run-piuparts --no-run-autopkgtest --resolve-alternatives \
--bd-uninstallable-explainer=apt \
--no-apt-update --apt-distupgrade \
+ --add-depends="linux-libc-dev|linux-libc-dev-${PACKAGE_ARCH}-cross|linux-libc-dev-${KERNEL_NAME}|linux-libc-dev-${PACKAGE_ARCH}-cross-${KERNEL_NAME}" \
--chroot-setup-commands="echo \"Package: *\nPin: release n=${DEBDISTRONAME}\nPin-Priority: 1000\" > /etc/apt/preferences.d/isar-apt" \
--chroot-setup-commands="echo \"APT::Get::allow-downgrades 1;\" > /etc/apt/apt.conf.d/50isar-apt" \
--chroot-setup-commands="rm -f /var/log/dpkg.log" \

But this still does not trigger any automatic updates/downgrades to the
self-built libc-dev.

Jan Kiszka

unread,
Sep 11, 2025, 10:00:03 AM (2 days ago) Sep 11
to Arulpandiyan Vadivel, isar-users, Cedric Hombourger
We further discussed this internally, and I played around with an
artificial test setup as well: It seems more and more unlikely that one
can replace an upstream Debian package with one that is differently
called and only provides the upstream name. Even with the preferences we
configure, dpkg will still prefer the upstream packages over such a
replacement when resolving dependencies.

Only if anyone can solve that problem above, we would be able to support
multiple libc-dev packages in the same build run. For now, I will create
a revert patch and propose to roll everything back to single, unified
linux-libc-dev per build in isar.
Reply all
Reply to author
Forward
0 new messages