From mboxrd@z Thu Jan 1 00:00:00 1970 From: Khem Raj Date: Tue, 3 Nov 2020 12:25:25 -0800 Subject: [Buildroot] [PATCH] external-toolchain: Detect linux/version.h via cross compiler In-Reply-To: <20201103201640.GI2887157@scaer> References: <20201023093641.619746-1-raj.khem@gmail.com> <20201103201640.GI2887157@scaer> Message-ID: List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: buildroot@busybox.net On Tue, Nov 3, 2020 at 12:16 PM Yann E. MORIN wrote: > > Khem, All, > > On 2020-10-23 02:36 -0700, Khem Raj spake thusly: > > 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 /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. > > So, to summarise our previous discussion on IRC the other day: > > - Buildroot does not officially support distributions' cross > toolchains, as they may contain extra libraries that are not > accoutned for by Buildroot, > yes that's fine, this patch does not claim to support all of them either, it just makes the situation a bit better without regressing the supported usecases I think it helps lowering the build times on such distros for developers and improve first time experience > - those toolchains are also not always relocatable, even if some > might be. right and in this case, they are working ok I tried with archlinux aarch64-linux-gnu-gcc package and it worked well, debian also worked ok > > Also, Thomas since replied with further questionning, so we really need > a bit more details in there, and how you manage to make it work. > right I have tried to clarify, feel free to ask more. > Regards, > Yann E. MORIN. > > > Signed-off-by: Khem Raj > > Cc: Thomas Petazzoni > > --- > > 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 > > +_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 > > #include > > 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 > > > > _______________________________________________ > > buildroot mailing list > > buildroot at busybox.net > > http://lists.busybox.net/mailman/listinfo/buildroot > > -- > .-----------------.--------------------.------------------.--------------------. > | Yann E. MORIN | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: | > | +33 662 376 056 | Software Designer | \ / CAMPAIGN | ___ | > | +33 561 099 427 `------------.-------: X AGAINST | \e/ There is no | > | http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL | v conspiracy. | > '------------------------------^-------^------------------^--------------------'