While glibc states that 2.6.32 kernels still supported for x86 / x86_64 builds are failing due to out of date LIBC_LINUX_VERSION macro checks for such architectures.
This macro statically defined to 3.2.0 with commit 5b4ecd3 (Require Linux 3.2 except on x86 / x86_64, 3.2 headers everywhere.) and additionally checked before --enable-kernel. Since both --enable-kernel and LIBC_LINUX_VERSION checks are the same and there is no users of last one we can safely get rid of it enabling glibc builds with 2.6.32 kernel headers. Also add --enable-kernel to glibc-initial build so that we build it correctly with old headers. Cc: XE-Linux <xe-linux-exter...@cisco.com> Signed-off-by: Serhii Popovych <spopo...@cisco.com> --- meta/recipes-core/glibc/glibc-initial.inc | 1 + .../glibc/0028-Kill-LIBC_LINUX_VERSION-macro.patch | 113 +++++++++++++++++++++ meta/recipes-core/glibc/glibc_2.25.bb | 1 + 3 files changed, 115 insertions(+) create mode 100644 meta/recipes-core/glibc/glibc/0028-Kill-LIBC_LINUX_VERSION-macro.patch diff --git a/meta/recipes-core/glibc/glibc-initial.inc b/meta/recipes-core/glibc/glibc-initial.inc index f94603c..60b25dd 100644 --- a/meta/recipes-core/glibc/glibc-initial.inc +++ b/meta/recipes-core/glibc/glibc-initial.inc @@ -12,6 +12,7 @@ do_configure () { find ${S} -name "configure" | xargs touch cfgscript=`python3 -c "import os; print(os.path.relpath('${S}', '.'))"`/configure $cfgscript --host=${TARGET_SYS} --build=${BUILD_SYS} \ + --enable-kernel=${OLDEST_KERNEL} \ --prefix=/usr \ --without-cvs --disable-sanity-checks \ --with-headers=${STAGING_DIR_TARGET}${includedir} \ diff --git a/meta/recipes-core/glibc/glibc/0028-Kill-LIBC_LINUX_VERSION-macro.patch b/meta/recipes-core/glibc/glibc/0028-Kill-LIBC_LINUX_VERSION-macro.patch new file mode 100644 index 0000000..f5eaf1c --- /dev/null +++ b/meta/recipes-core/glibc/glibc/0028-Kill-LIBC_LINUX_VERSION-macro.patch @@ -0,0 +1,113 @@ +From 88f83e4b5a8929dac9095ed264700fcb62d5e4dd Mon Sep 17 00:00:00 2001 +From: Serhii Popovych <spopo...@cisco.com> +Date: Fri, 17 Mar 2017 15:48:34 +0000 +Subject: Kill LIBC_LINUX_VERSION macro + +After commit 5b4ecd3 (Require Linux 3.2 except on x86 / x86_64, +3.2 headers everywhere.) minimal kernel version raised from +2.6.32 to 3.2.0 for all architectures except x86 and x86_64 +unless newer already used for architecture. + +However LIBC_LINUX_VERSION macro still is in effect and fails +configure even with --enable-kernel=2.6.32. + +While it is present in configure.ac it does not affect anything +except LINUX_VERSION_CODE check which already performed by +--enable-kernel. + +Upstream-Status: Pending +Signed-off-by: Serhii Popovych <spopo...@cisco.com> +--- + sysdeps/unix/sysv/linux/configure | 39 ------------------------------------ + sysdeps/unix/sysv/linux/configure.ac | 21 ------------------- + 2 files changed, 60 deletions(-) + +diff --git a/sysdeps/unix/sysv/linux/configure b/sysdeps/unix/sysv/linux/configure +index cace758..ab5fabe 100644 +--- a/sysdeps/unix/sysv/linux/configure ++++ b/sysdeps/unix/sysv/linux/configure +@@ -6,45 +6,6 @@ if test -n "$sysheaders"; then + CPPFLAGS="$CPPFLAGS $SYSINCLUDES" + fi + +-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking installed Linux kernel header files" >&5 +-$as_echo_n "checking installed Linux kernel header files... " >&6; } +-if ${libc_cv_linux320+:} false; then : +- $as_echo_n "(cached) " >&6 +-else +- cat confdefs.h - <<_ACEOF >conftest.$ac_ext +-/* end confdefs.h. */ +-#include <linux/version.h> +-#if !defined LINUX_VERSION_CODE || LINUX_VERSION_CODE < (3 *65536+ 2 *256+ 0) /* 3.2.0 */ +-# error kernel headers missing or too old +-#endif +-int +-main () +-{ +- +- ; +- return 0; +-} +-_ACEOF +-if ac_fn_c_try_compile "$LINENO"; then : +- libc_cv_linux320='3.2.0 or later' +-else +- libc_cv_linux320='missing or too old!' +-fi +-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +-fi +-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_linux320" >&5 +-$as_echo "$libc_cv_linux320" >&6; } +-if test "$libc_cv_linux320" != '3.2.0 or later'; then +- as_fn_error $? "GNU libc requires kernel header files from +-Linux 3.2.0 or later to be installed before configuring. +-The kernel header files are found usually in /usr/include/asm and +-/usr/include/linux; make sure these directories use files from +-Linux 3.2.0 or later. This check uses <linux/version.h>, so +-make sure that file was built correctly when installing the kernel header +-files. To use kernel headers not from /usr/include/linux, use the +-configure option --with-headers." "$LINENO" 5 +-fi +- + # If the user gave a minimal version number test whether the available + # kernel headers are young enough. Additionally we have minimal + # kernel versions for some architectures. If a previous configure fragment +diff --git a/sysdeps/unix/sysv/linux/configure.ac b/sysdeps/unix/sysv/linux/configure.ac +index 13abda0..5b47db5 100644 +--- a/sysdeps/unix/sysv/linux/configure.ac ++++ b/sysdeps/unix/sysv/linux/configure.ac +@@ -1,31 +1,10 @@ + GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. + # Local configure fragment for sysdeps/unix/sysv/linux. + +-define([LIBC_LINUX_VERSION],[3.2.0])dnl + if test -n "$sysheaders"; then + OLD_CPPFLAGS=$CPPFLAGS + CPPFLAGS="$CPPFLAGS $SYSINCLUDES" + fi +-define([libc_cv_linuxVER], [libc_cv_linux]patsubst(LIBC_LINUX_VERSION,[\.]))dnl +-AC_CACHE_CHECK(installed Linux kernel header files, libc_cv_linuxVER, [dnl +-AC_TRY_COMPILE([#include <linux/version.h> +-#if !defined LINUX_VERSION_CODE || LINUX_VERSION_CODE < ]dnl +-patsubst(LIBC_LINUX_VERSION,[^\([^.]*\)\.\([^.]*\)\.\([^.]*\)$],dnl +-[ (\1 *65536+ \2 *256+ \3) /* \1.\2.\3 */])[ +-# error kernel headers missing or too old +-#endif], [], +- [libc_cv_linuxVER='LIBC_LINUX_VERSION or later'], +- [libc_cv_linuxVER='missing or too old!'])]) +-if test "$libc_cv_linuxVER" != 'LIBC_LINUX_VERSION or later'; then +- AC_MSG_ERROR([GNU libc requires kernel header files from +-Linux LIBC_LINUX_VERSION or later to be installed before configuring. +-The kernel header files are found usually in /usr/include/asm and +-/usr/include/linux; make sure these directories use files from +-Linux LIBC_LINUX_VERSION or later. This check uses <linux/version.h>, so +-make sure that file was built correctly when installing the kernel header +-files. To use kernel headers not from /usr/include/linux, use the +-configure option --with-headers.]) +-fi + + # If the user gave a minimal version number test whether the available + # kernel headers are young enough. Additionally we have minimal +-- +2.7.4 + diff --git a/meta/recipes-core/glibc/glibc_2.25.bb b/meta/recipes-core/glibc/glibc_2.25.bb index cf9c4f7..869d023 100644 --- a/meta/recipes-core/glibc/glibc_2.25.bb +++ b/meta/recipes-core/glibc/glibc_2.25.bb @@ -42,6 +42,7 @@ SRC_URI = "${GLIBC_GIT_URI};branch=${SRCBRANCH};name=glibc \ file://0025-Define-DUMMY_LOCALE_T-if-not-defined.patch \ file://0026-elf-dl-deps.c-Make-_dl_build_local_scope-breadth-fir.patch \ file://0027-locale-fix-hard-coded-reference-to-gcc-E.patch \ + file://0028-Kill-LIBC_LINUX_VERSION-macro.patch \ " NATIVESDKFIXES ?= "" -- 2.7.4 -- _______________________________________________ Openembedded-core mailing list Openembedded-core@lists.openembedded.org http://lists.openembedded.org/mailman/listinfo/openembedded-core