[RFC,v1] linux-custom: Add a provision to support CONFIG_LOCALVERSION_AUTO

Message ID 20241022115836.1395681-1-srinuvasan.a@siemens.com
State Superseded, archived
Headers show
Series [RFC,v1] linux-custom: Add a provision to support CONFIG_LOCALVERSION_AUTO | expand

Commit Message

srinuvasan.a Oct. 22, 2024, 11:58 a.m. UTC
From: srinuvasan <srinuvasan.a@siemens.com>

This change might be useful for downstream layers to set the CONFIG_LOCALVERSION_AUTO
in their base defconfig to append the version automatically to kernel release.

Presently ISAR doesn't have this support, hence add this provision.

Here we try to find the CONFIG_LOCALVERSION_AUTO availability and .git present during
build the kernel package, unfortunately we are not getting the .git directory in the dpkg_build stage
even if we are fetching the git repo, this is due to sbuild always uses the sources (dsc) file
to build the package, when we generate the dsc file it create the tar ball without .git, hence
during dpkg_build stage it is not possible to get the latest commit HEAD value using "git rev-parse --verify HEAD"

To solve this issue we have base .config and .git available in the do_dpkg_source stage, here we try to find the
latest commit and write them into .scmversion file, later during the kernel build package stage
we are calling the kernelrelease target to set the localversion, this setlocalversion script
handle the availability of .scmversion file and append the string accordingly to the kernelrelease.

Signed-off-by: srinuvasan <srinuvasan.a@siemens.com>
---
 .../linux/files/debian/isar/version.cfg.tmpl          |  1 -
 meta/recipes-kernel/linux/linux-custom.inc            | 11 +++++++++++
 2 files changed, 11 insertions(+), 1 deletion(-)

Comments

Jan Kiszka Oct. 22, 2024, 1:17 p.m. UTC | #1
On 22.10.24 13:58, srinuvasan.a@siemens.com wrote:
> From: srinuvasan <srinuvasan.a@siemens.com>
> 
> This change might be useful for downstream layers to set the CONFIG_LOCALVERSION_AUTO
> in their base defconfig to append the version automatically to kernel release.
> 
> Presently ISAR doesn't have this support, hence add this provision.
> 
> Here we try to find the CONFIG_LOCALVERSION_AUTO availability and .git present during
> build the kernel package, unfortunately we are not getting the .git directory in the dpkg_build stage
> even if we are fetching the git repo, this is due to sbuild always uses the sources (dsc) file
> to build the package, when we generate the dsc file it create the tar ball without .git, hence
> during dpkg_build stage it is not possible to get the latest commit HEAD value using "git rev-parse --verify HEAD"
> 
> To solve this issue we have base .config and .git available in the do_dpkg_source stage, here we try to find the
> latest commit and write them into .scmversion file, later during the kernel build package stage
> we are calling the kernelrelease target to set the localversion, this setlocalversion script
> handle the availability of .scmversion file and append the string accordingly to the kernelrelease.
> 
> Signed-off-by: srinuvasan <srinuvasan.a@siemens.com>
> ---
>  .../linux/files/debian/isar/version.cfg.tmpl          |  1 -
>  meta/recipes-kernel/linux/linux-custom.inc            | 11 +++++++++++
>  2 files changed, 11 insertions(+), 1 deletion(-)
> 
> diff --git a/meta/recipes-kernel/linux/files/debian/isar/version.cfg.tmpl b/meta/recipes-kernel/linux/files/debian/isar/version.cfg.tmpl
> index 17effe52..1ab699f5 100644
> --- a/meta/recipes-kernel/linux/files/debian/isar/version.cfg.tmpl
> +++ b/meta/recipes-kernel/linux/files/debian/isar/version.cfg.tmpl
> @@ -1,2 +1 @@
>  CONFIG_LOCALVERSION="${LINUX_VERSION_EXTENSION}"
> -# CONFIG_LOCALVERSION_AUTO is not set
> diff --git a/meta/recipes-kernel/linux/linux-custom.inc b/meta/recipes-kernel/linux/linux-custom.inc
> index 0f23d6f0..d0787aad 100644
> --- a/meta/recipes-kernel/linux/linux-custom.inc
> +++ b/meta/recipes-kernel/linux/linux-custom.inc
> @@ -296,6 +296,17 @@ EOF
>  	done
>  }
>  
> +get_localversion_auto() {
> +	if grep -q "^CONFIG_LOCALVERSION_AUTO=y" ${S}/${KERNEL_BUILD_DIR}/.config; then
> +		cd ${S}
> +		if test -z "$(git rev-parse --show-cdup 2>/dev/null)" &&

This acts as a test whether is a git repo, or what is the role of this
line? Why is testing for success of the next line not enough?

> +		  head=$(git rev-parse --verify --short HEAD 2>/dev/null); then

I would indent by one space more.

> +			echo "-g${head}" >${S}/.scmversion
> +		fi
> +	fi
> +}
> +
>  do_dpkg_source:prepend() {
>  	dpkg_configure_kernel
> +	get_localversion_auto
>  }

Is this already stressed by any of the existing kernel builds in isar?
If not, can you make that happen?

Jan

Patch

diff --git a/meta/recipes-kernel/linux/files/debian/isar/version.cfg.tmpl b/meta/recipes-kernel/linux/files/debian/isar/version.cfg.tmpl
index 17effe52..1ab699f5 100644
--- a/meta/recipes-kernel/linux/files/debian/isar/version.cfg.tmpl
+++ b/meta/recipes-kernel/linux/files/debian/isar/version.cfg.tmpl
@@ -1,2 +1 @@ 
 CONFIG_LOCALVERSION="${LINUX_VERSION_EXTENSION}"
-# CONFIG_LOCALVERSION_AUTO is not set
diff --git a/meta/recipes-kernel/linux/linux-custom.inc b/meta/recipes-kernel/linux/linux-custom.inc
index 0f23d6f0..d0787aad 100644
--- a/meta/recipes-kernel/linux/linux-custom.inc
+++ b/meta/recipes-kernel/linux/linux-custom.inc
@@ -296,6 +296,17 @@  EOF
 	done
 }
 
+get_localversion_auto() {
+	if grep -q "^CONFIG_LOCALVERSION_AUTO=y" ${S}/${KERNEL_BUILD_DIR}/.config; then
+		cd ${S}
+		if test -z "$(git rev-parse --show-cdup 2>/dev/null)" &&
+		  head=$(git rev-parse --verify --short HEAD 2>/dev/null); then
+			echo "-g${head}" >${S}/.scmversion
+		fi
+	fi
+}
+
 do_dpkg_source:prepend() {
 	dpkg_configure_kernel
+	get_localversion_auto
 }