Buildroot Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Khem Raj <raj.khem@gmail.com>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCH] external-toolchain: Detect linux/version.h via cross compiler
Date: Fri, 23 Oct 2020 02:36:41 -0700	[thread overview]
Message-ID: <20201023093641.619746-1-raj.khem@gmail.com> (raw)

Using linux/version.h is assumed to be hardcoded inside sysroot but this
does not consider the case where toolchains might be built with
--with-native-system-header-dir which means the header directories will
not be under <sysroot>/usr/include but customized, archlinux, debian
built cross toolchains use these install settings ( due to multiarch )
they have the headers installed like /usr/aarch64-linux-gnu/include and
not /usr/aarch64-linux-gnu/usr/include

This patch adds logic to use cross compiler to compute the path to
linux/version.h on the fly, it means we do not really need to assume the
install structure

Fixes built when using external toolchains provided by archlinux e.g.

Signed-off-by: Khem Raj <raj.khem@gmail.com>
Cc: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
---
 support/scripts/check-kernel-headers.sh           | 15 ++++++++++++++-
 toolchain/helpers.mk                              |  2 +-
 .../toolchain-external/pkg-toolchain-external.mk  |  3 ++-
 3 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/support/scripts/check-kernel-headers.sh b/support/scripts/check-kernel-headers.sh
index 4e6dce5487..5cedb9a082 100755
--- a/support/scripts/check-kernel-headers.sh
+++ b/support/scripts/check-kernel-headers.sh
@@ -21,6 +21,9 @@ SYSROOT="${2}"
 HDR_VER="${3}.0.0"
 CHECK="${4}"  # 'strict' or 'loose'
 
+# cross compiler passed in case of external toolchains
+CROSS_CC="${5}"
+
 HDR_M="${HDR_VER%%.*}"
 HDR_V="${HDR_VER#*.}"
 HDR_m="${HDR_V%%.*}"
@@ -36,11 +39,21 @@ trap 'rm -f "${EXEC}"' EXIT
 
 EXEC="$(mktemp -p "${BUILDDIR}" -t .check-headers.XXXXXX)"
 
+if [ -n "${CROSS_CC}" ]; then
+  MAKE_VER_H=$(${CROSS_CC} -M -xc - <<_EOF_
+#include <linux/version.h>
+_EOF_
+  )
+  VER_H=`echo $MAKE_VER_H | awk 'END {print $NF}'`
+else
+  VER_H="${SYSROOT}/usr/include/linux/version.h"
+fi
+
 # We do not want to account for the patch-level, since headers are
 # not supposed to change for different patchlevels, so we mask it out.
 # This only applies to kernels >= 3.0, but those are the only one
 # we actually care about; we treat all 2.6.x kernels equally.
-${HOSTCC} -imacros "${SYSROOT}/usr/include/linux/version.h" \
+${HOSTCC} -imacros "${VER_H}" \
           -x c -o "${EXEC}" - <<_EOF_
 #include <stdio.h>
 #include <stdlib.h>
diff --git a/toolchain/helpers.mk b/toolchain/helpers.mk
index 17bc159f3e..51d840b176 100644
--- a/toolchain/helpers.mk
+++ b/toolchain/helpers.mk
@@ -166,7 +166,7 @@ copy_toolchain_sysroot = \
 #
 check_kernel_headers_version = \
 	if ! support/scripts/check-kernel-headers.sh $(1) $(2) $(3) \
-		$(if $(BR2_TOOLCHAIN_HEADERS_LATEST),$(4),strict); \
+		$(if $(BR2_TOOLCHAIN_HEADERS_LATEST),$(4),strict) $(5); \
 	then \
 		exit 1; \
 	fi
diff --git a/toolchain/toolchain-external/pkg-toolchain-external.mk b/toolchain/toolchain-external/pkg-toolchain-external.mk
index 6d91cb5d1e..93f725dada 100644
--- a/toolchain/toolchain-external/pkg-toolchain-external.mk
+++ b/toolchain/toolchain-external/pkg-toolchain-external.mk
@@ -549,7 +549,8 @@ define $(2)_CONFIGURE_CMDS
 		$$(BUILD_DIR),\
 		$$(call toolchain_find_sysroot,$$(TOOLCHAIN_EXTERNAL_CC)),\
 		$$(call qstrip,$$(BR2_TOOLCHAIN_HEADERS_AT_LEAST)),\
-		$$(if $$(BR2_TOOLCHAIN_EXTERNAL_CUSTOM),loose,strict)); \
+		$$(if $$(BR2_TOOLCHAIN_EXTERNAL_CUSTOM),loose,strict),\
+		$$(TOOLCHAIN_EXTERNAL_CC)); \
 	$$(call check_gcc_version,$$(TOOLCHAIN_EXTERNAL_CC),\
 		$$(call qstrip,$$(BR2_TOOLCHAIN_GCC_AT_LEAST))); \
 	if test "$$(BR2_arm)" = "y" ; then \
-- 
2.29.0

             reply	other threads:[~2020-10-23  9:36 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-10-23  9:36 Khem Raj [this message]
2020-11-03 20:00 ` [Buildroot] [PATCH] external-toolchain: Detect linux/version.h via cross compiler Thomas Petazzoni
2020-11-03 20:19   ` Khem Raj
2020-11-03 20:16 ` Yann E. MORIN
2020-11-03 20:25   ` Khem Raj
2020-11-03 20:43     ` Thomas Petazzoni
2020-11-04  3:24       ` Khem Raj
2022-01-08 23:03 ` Thomas Petazzoni
2022-01-13 17:02   ` Khem Raj

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=20201023093641.619746-1-raj.khem@gmail.com \
    --to=raj.khem@gmail.com \
    --cc=buildroot@busybox.net \
    /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