Enhance setting the minimum kernel version glibc will run against.

Ideally, eglibc should also benefit for that, but the current code does not set it.

 /trunk/scripts/build/libc/glibc.sh        |   38    33     5     0 +++++++++++++++---
 /trunk/config/libc/glibc.in               |    4     2     2     0 +-
 /trunk/config/libc/uClibc.in              |    2     2     0     0 +
 /trunk/config/libc/eglibc.in              |    4     2     2     0 +-
 /trunk/config/libc/glibc-eglibc-common.in |   80    68    12     0 +++++++++++++++++++++++++++++++------
 /trunk/config/libc.in                     |   69    38    31     0 ++++++++++++++++++--------------
 6 files changed, 145 insertions(+), 52 deletions(-)
This commit is contained in:
Yann E. MORIN" 2008-09-14 18:09:36 +00:00
parent 91a8de54e4
commit 02d2b29cda
7 changed files with 145 additions and 53 deletions

View File

@ -11,6 +11,20 @@ if ! BARE_METAL
menu "C-library"
config LIBC_VERSION
string
help
Enter the date of the snapshot you want to use in the form: YYYYMMDD
where YYYY is the 4-digit year, MM the 2-digit month and DD the 2-digit
day in the month.
Please note:
- glibc has snapshots done every monday, and only the last ten are kept.
- uClibc has daily snapshots, and only the last 30-or-so are kept.
So if you want to be able to re-build your toolchain later, you will
have to save your C library tarball by yourself.
choice
bool
prompt "C-library to use:"
@ -22,10 +36,6 @@ config LIBC_GLIBC
select LIBC_SUPPORT_NPTL
select LIBC_SUPPORT_LINUXTHREADS
if LIBC_GLIBC
source config/libc/glibc.in
endif
config LIBC_EGLIBC
bool
prompt "eglibc (EXPERIMENTAL)"
@ -40,23 +50,14 @@ config LIBC_EGLIBC
cross-compilation support. EGLIBC also includes some embedded ports
(such as e500/spe) that are normally separate add-ons of GLIBC.
if LIBC_EGLIBC
source config/libc/eglibc.in
endif
config LIBC_UCLIBC
bool
prompt "uClibc"
select LIBC_SUPPORT_LINUXTHREADS
if LIBC_UCLIBC
source config/libc/uClibc.in
endif
endchoice
config LIBC_VERSION
string
comment "Common C library options"
config LIBC_SUPPORT_NPTL
bool
@ -66,6 +67,12 @@ config LIBC_SUPPORT_LINUXTHREADS
bool
default n
config THREADS
string
default "nptl" if THREADS_NPTL
default "linuxthreads" if THREADS_LINUXTHREADS
default "none" if THREADS_NONE
choice
bool
prompt "Threading implementation to use:"
@ -89,24 +96,24 @@ config THREADS_NONE
endchoice
config THREADS
string
default "nptl" if THREADS_NPTL
default "linuxthreads" if THREADS_LINUXTHREADS
default "none" if THREADS_NONE
if LIBC_GLIBC
source config/libc/glibc.in
endif
config LIBC_VERSION
help
Enter the date of the snapshot you want to use in the form: YYYYMMDD
where YYYY is the 4-digit year, MM the 2-digit month and DD the 2-digit
day in the month.
if LIBC_EGLIBC
source config/libc/eglibc.in
endif
Please note:
- glibc has snapshots done every monday, and only the last ten are kept.
- uClibc has daily snapshots, and only the last 30-or-so are kept.
# Hack: mconf does not allow to include a file multiple times,
# so include glibc and eglibc common options from here, rather
# than from each config files.
if LIBC_GLIBC || LIBC_EGLIBC
source config/libc/glibc-eglibc-common.in
endif
So if you want to be able to re-build your toolchain later, you will
have to save your C library tarball by yourself.
if LIBC_UCLIBC
source config/libc/uClibc.in
endif
endmenu

View File

@ -1 +0,0 @@
glibc-eglibc-common.in

View File

@ -1,5 +1,7 @@
# eglibc options
comment "eglibc specific options"
choice
bool
prompt "eglibc version"
@ -68,5 +70,3 @@ config EGLIBC_CHECKOUT
Note that crosstool-NG will *not* update your working copy, you will
have to do that yourself.
source config/libc/eglibc-glibc-common.in

View File

@ -7,6 +7,8 @@
# If mconf is updated to accept multiple inclusion of the same
# file, then the symlink can go (and the includers be updated).
comment "glibc/eglibc common options"
config LIBC_GLIBC_EXTRA_CONFIG
string
prompt "extra config"
@ -68,11 +70,40 @@ config LIBC_ADDONS_LIST
Eg.: crypt (for very old libces)
config LIBC_GLIBC_USE_HEADERS_MIN_KERNEL
if KERNEL_LINUX
choice
bool
prompt "Use headers version for minimum kernel version supported"
default y
prompt "Minimum supported kernel version"
default LIBC_GLIBC_KERNEL_VERSION_AS_HEADERS
config LIBC_GLIBC_KERNEL_VERSION_NONE
bool
prompt "Let ./configure decide"
help
Let ./configure decide what minimum kernel version glibc/eglibc
will be able to run against.
This will inclde legacy compatibility code for older kernels in
the C library, thus ensuring that it will run on a large number
of old kernels.
The minimum kernel version supported will be dependent upon the
target you build for. For example:
alpha*-*-linux-gnu Requires Linux 2.6.9 for NPTL
sh[34]-*-linux-gnu Requires Linux 2.6.11
powerpc* Requires Linux 2.4.19
arm*-*-linux-*gnueabi Requires Linux 2.6.16
config LIBC_GLIBC_KERNEL_VERSION_AS_HEADERS
bool
prompt "Same as kernel headers (default)"
help
Normaly, you'll want glibc/eglibc to run against the same kernel
version as the one used for the headers.
This is the default.
If enabled, crosstool-ng will use the chosen version of kernel
headers for the glibc minimum kernel version supported, which is
what gets passed to "--enable-kernel=" when configuring glibc.
@ -87,11 +118,9 @@ config LIBC_GLIBC_USE_HEADERS_MIN_KERNEL
chosen kernel headers version (CT_KERNEL_VERSION), you can choose
"y" here.
config LIBC_GLIBC_MIN_KERNEL_CHOSEN
string
prompt "Minimum kernel version supported"
default "2.6.9"
depends on ! LIBC_GLIBC_USE_HEADERS_MIN_KERNEL
config LIBC_GLIBC_KERNEL_VERSION_CHOSEN
bool
prompt "Specific kernel version"
help
Specify the earliest Linux kernel version you want glibc to
include support for. This does not have to match the kernel
@ -107,7 +136,34 @@ config LIBC_GLIBC_MIN_KERNEL_CHOSEN
Most people can leave this at the default value of "2.6.9".
if LIBC_GLIBC_KERNEL_VERSION_CHOSEN
config LIBC_GLIBC_MIN_KERNEL_VERSION
string
prompt "Minimum kernel version to support"
default "2.6.9"
help
Enter here the lowest kernel version glibc/eglibc will be able to
run against.
The minimum kernel version supported will be dependent upon the
target you build for. For example:
alpha*-*-linux-gnu Requires Linux 2.6.9 for NPTL
sh[34]-*-linux-gnu Requires Linux 2.6.11
powerpc* Requires Linux 2.4.19
arm*-*-linux-*gnueabi Requires Linux 2.6.16
Note that no sanity check is performed by crosstool-NG to ensure
that the value you enter here is appropriate for your target.
endif # LIBC_GLIBC_KERNEL_VERSION_CHOSEN
endchoice
config LIBC_GLIBC_MIN_KERNEL
string
default KERNEL_VERSION if LIBC_GLIBC_USE_HEADERS_MIN_KERNEL
default LIBC_GLIBC_MIN_KERNEL_CHOSEN if ! LIBC_GLIBC_USE_HEADERS_MIN_KERNEL
default "" if LIBC_GLIBC_KERNEL_VERSION_NONE
default KERNEL_VERSION if LIBC_GLIBC_KERNEL_VERSION_AS_HEADERS
default LIBC_GLIBC_MIN_KERNEL_VERSION if LIBC_GLIBC_USE_HEADERS_MIN_KERNEL
endif # KERNEL_LINUX

View File

@ -1,5 +1,7 @@
# glibc options
comment "glibc specific options"
choice
bool
prompt "glibc version"
@ -72,5 +74,3 @@ config LIBC_GLIBC_CONFIGPARMS
Note: this is awkward, doesn't work well if you need more than one
line in configparms
source config/libc/glibc-eglibc-common.in

View File

@ -1,5 +1,7 @@
# uClibc options
comment "uClibc specific options"
choice
bool
prompt "uClibc version"

View File

@ -89,9 +89,21 @@ do_libc_headers() {
addons_config="${addons_config//linuxthreads/}"
addons_config=$(echo "${addons_config}" |sed -r -e 's/^,+//; s/,+$//; s/,+/,/g;')
extra_config="${addons_config}"
min_kernel_config=
case "${CT_LIBC_GLIBC_EXTRA_CONFIG}" in
*enable-kernel*) ;;
*) if [ "${CT_LIBC_GLIBC_KERNEL_VERSION_AS_HEADERS}" = "y" \
-o "${CT_LIBC_GLIBC_USE_HEADERS_MIN_KERNEL}" = "y" ]; then
min_kernel_config="--enable-kernel=$(echo ${CT_LIBC_GLIBC_MIN_KERNEL} |sed -r -e 's/^([^.]+\.[^.]+\.[^.]+)(|\.[^.]+)$/\1/;')"
fi
;;
esac
extra_config="${extra_config} ${min_kernel_config}"
cross_cc=$(CT_Which "${CT_TARGET}-gcc")
CT_DoLog DEBUG "Using gcc for target: '${cross_cc}'"
CT_DoLog DEBUG "Extra config passed : '${addons_config}'"
CT_DoLog DEBUG "Extra config passed : '${extra_config}'"
libc_cv_ppc_machine=yes \
CC=${cross_cc} \
@ -104,7 +116,7 @@ do_libc_headers() {
--without-cvs \
--disable-sanity-checks \
--enable-hacker-mode \
${addons_config} \
${extra_config} \
--without-nptl
CT_DoLog EXTRA "Installing C library headers"
@ -208,11 +220,17 @@ do_libc_start_files() {
CT_DoLog EXTRA "Configuring C library"
# Add some default glibc config options if not given by user.
extra_config=""
extra_config=
min_kernel_config=
case "${CT_LIBC_GLIBC_EXTRA_CONFIG}" in
*enable-kernel*) ;;
*) extra_config="${extra_config} --enable-kernel=$(echo ${CT_LIBC_GLIBC_MIN_KERNEL} |sed -r -e 's/^([^.]+\.[^.]+\.[^.]+)(|\.[^.]+)$/\1/;')"
*) if [ "${CT_LIBC_GLIBC_KERNEL_VERSION_AS_HEADERS}" = "y" \
-o "${CT_LIBC_GLIBC_USE_HEADERS_MIN_KERNEL}" = "y" ]; then
min_kernel_config="--enable-kernel=$(echo ${CT_LIBC_GLIBC_MIN_KERNEL} |sed -r -e 's/^([^.]+\.[^.]+\.[^.]+)(|\.[^.]+)$/\1/;')"
fi
;;
esac
extra_config="${extra_config} ${min_kernel_config}"
case "${CT_LIBC_GLIBC_EXTRA_CONFIG}" in
*-tls*) ;;
*) extra_config="${extra_config} --with-tls"
@ -314,7 +332,17 @@ do_libc() {
# We don't need to be conditional on wether the user did set different
# values, as they CT_LIBC_GLIBC_EXTRA_CONFIG is passed after extra_config
extra_config="--enable-kernel=$(echo ${CT_LIBC_GLIBC_MIN_KERNEL} |sed -r -e 's/^([^.]+\.[^.]+\.[^.]+)(|\.[^.]+)$/\1/;')"
extra_config=
min_kernel_config=""
case "${CT_LIBC_GLIBC_EXTRA_CONFIG}" in
*enable-kernel*) ;;
*) if [ "${CT_LIBC_GLIBC_KERNEL_VERSION_AS_HEADERS}" = "y" \
-o "${CT_LIBC_GLIBC_USE_HEADERS_MIN_KERNEL}" = "y" ]; then
min_kernel_config="--enable-kernel=$(echo ${CT_LIBC_GLIBC_MIN_KERNEL} |sed -r -e 's/^([^.]+\.[^.]+\.[^.]+)(|\.[^.]+)$/\1/;')"
fi
;;
esac
extra_config="${extra_config} ${min_kernel_config}"
case "${CT_THREADS}" in
nptl) extra_config="${extra_config} --with-__thread --with-tls";;