[OE-core] [PATCH] glibc: Support building with 2.6.32 kernels on x86 / x86_64

Serhii Popovych spopovyc at cisco.com
Wed Mar 29 11:27:27 UTC 2017


> On Tue, 2017-03-28 at 18:57 +0000, Serhii Popovych wrote:
>> 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-external at cisco.com>
>> Signed-off-by: Serhii Popovych <spopovyc at 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 <spopovyc at 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 <spopovyc at 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
> 
> This is presumably a generated file. We should only patch configure.ac
> as otherwise the potential timestamp differences between these can
> cause problems (we've been burnt before). The configure version will
> get updated when we reautoconf.

Yes thats true, but I get following

| running configure fragment for sysdeps/unix/sysv/linux
| checking installed Linux kernel header files... missing or too old!
| configure: 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.
| WARNING:
/home/spopovyc/oe/build-oe/tmp-glibc/work/x86_64-nativesdk-oesdk-linux/nativesdk-glibc-initial/2.25-r0/temp/run.do_configure.58685:1
exit 1 from '$cfgscript --host=x86_64-oesdk-linux --build=x86_64-linux
--enable-kernel=2.6.32 --prefix=/usr --without-cvs
--disable-sanity-checks
--with-headers=/home/spopovyc/oe/build-oe/tmp-glibc/work/x86_64-nativesdk-oesdk-linux/nativesdk-glibc-initial/2.25-r0/recipe-sysroot/usr/local/oecore-x86_64/sysroots/x86_64-oesdk-linux/usr/include
--enable-hacker-mode --enable-addons'
| ERROR: Function failed: do_configure (log file is located at
/home/spopovyc/oe/build-oe/tmp-glibc/work/x86_64-nativesdk-oesdk-linux/nativesdk-glibc-initial/2.25-r0/temp/log.do_configure.58685)

When patching only configure.ac and by looking at configure
I see it wasn't recreated from changes in confiugre.ac

and by looking at glibc-initial/glibc recipes i see that
do_configure() task is overwritten to not to call autoreconf,
so I think patching configure is correct here.

Also I found few more patches in glibc directory that patch
both configure and configure.ac.

Thanks,
Serhii

> 
> Cheers,
> 
> Richard
> 



More information about the Openembedded-core mailing list