scripts/build/libc/glibc.sh
changeset 950 82209e5c862a
parent 922 3f0456891349
child 1016 a059741f7bd4
     1.1 --- a/scripts/build/libc/glibc.sh	Mon Oct 13 11:23:51 2008 +0000
     1.2 +++ b/scripts/build/libc/glibc.sh	Mon Oct 20 17:46:43 2008 +0000
     1.3 @@ -88,23 +88,14 @@
     1.4      # Override libc_cv_ppc_machine so glibc-cvs doesn't complain
     1.5      # 'a version of binutils that supports .machine "altivec" is needed'.
     1.6  
     1.7 -    addons_config="--enable-add-ons=$(do_libc_add_ons_list ,)"
     1.8 +    addons_list="$(do_libc_add_ons_list ,)"
     1.9      # We need to remove any threading addon when installing headers
    1.10 -    addons_config="${addons_config//nptl/}"
    1.11 -    addons_config="${addons_config//linuxthreads/}"
    1.12 -    addons_config=$(echo "${addons_config}" |sed -r -e 's/^,+//; s/,+$//; s/,+/,/g;')
    1.13 +    addons_list="${addons_list//nptl/}"
    1.14 +    addons_list="${addons_list//linuxthreads/}"
    1.15 +    # Remove duplicate, leading and trailing separators
    1.16 +    addons_config="--enable-add-ons=$(echo "${addons_list}" |sed -r -e 's/,+/,/; s/^,//; s/,$//g;')"
    1.17  
    1.18 -    extra_config="${addons_config}"
    1.19 -    min_kernel_config=
    1.20 -    case "${CT_LIBC_GLIBC_EXTRA_CONFIG}" in
    1.21 -        *enable-kernel*) ;;
    1.22 -        *)  if [    "${CT_LIBC_GLIBC_KERNEL_VERSION_AS_HEADERS}" = "y" \
    1.23 -                 -o "${CT_LIBC_GLIBC_USE_HEADERS_MIN_KERNEL}" = "y"    ]; then
    1.24 -                min_kernel_config="--enable-kernel=$(echo ${CT_LIBC_GLIBC_MIN_KERNEL} |sed -r -e 's/^([^.]+\.[^.]+\.[^.]+)(|\.[^.]+)$/\1/;')"
    1.25 -            fi
    1.26 -            ;;
    1.27 -    esac
    1.28 -    extra_config="${extra_config} ${min_kernel_config}"
    1.29 +    extra_config="${addons_config} $(do_libc_min_kernel_config)"
    1.30  
    1.31      cross_cc=$(CT_Which "${CT_TARGET}-gcc")
    1.32      CT_DoLog DEBUG "Using gcc for target: '${cross_cc}'"
    1.33 @@ -226,16 +217,6 @@
    1.34  
    1.35      # Add some default glibc config options if not given by user.
    1.36      extra_config=
    1.37 -    min_kernel_config=
    1.38 -    case "${CT_LIBC_GLIBC_EXTRA_CONFIG}" in
    1.39 -        *enable-kernel*) ;;
    1.40 -        *)  if [    "${CT_LIBC_GLIBC_KERNEL_VERSION_AS_HEADERS}" = "y" \
    1.41 -                 -o "${CT_LIBC_GLIBC_USE_HEADERS_MIN_KERNEL}" = "y"    ]; then
    1.42 -                min_kernel_config="--enable-kernel=$(echo ${CT_LIBC_GLIBC_MIN_KERNEL} |sed -r -e 's/^([^.]+\.[^.]+\.[^.]+)(|\.[^.]+)$/\1/;')"
    1.43 -            fi
    1.44 -            ;;
    1.45 -    esac
    1.46 -    extra_config="${extra_config} ${min_kernel_config}"
    1.47      case "${CT_LIBC_GLIBC_EXTRA_CONFIG}" in
    1.48          *-tls*) ;;
    1.49          *) extra_config="${extra_config} --with-tls"
    1.50 @@ -254,6 +235,8 @@
    1.51      addons_config="--enable-add-ons=$(do_libc_add_ons_list ,)"
    1.52      extra_config="${extra_config} ${addons_config}"
    1.53  
    1.54 +    extra_config="${extra_config} $(do_libc_min_kernel_config)"
    1.55 +
    1.56      # Add some default CC args
    1.57      glibc_version_major=$(echo ${CT_LIBC_VERSION} |sed -r -e 's/^([^\.]+)\..*/\1/')
    1.58      glibc_version_minor=$(echo ${CT_LIBC_VERSION} |sed -r -e 's/^[^\.]+\.([^.]+).*/\1/')
    1.59 @@ -338,17 +321,6 @@
    1.60      # values, as they CT_LIBC_GLIBC_EXTRA_CONFIG is passed after extra_config
    1.61  
    1.62      extra_config=
    1.63 -    min_kernel_config=""
    1.64 -    case "${CT_LIBC_GLIBC_EXTRA_CONFIG}" in
    1.65 -        *enable-kernel*) ;;
    1.66 -        *)  if [    "${CT_LIBC_GLIBC_KERNEL_VERSION_AS_HEADERS}" = "y" \
    1.67 -                 -o "${CT_LIBC_GLIBC_USE_HEADERS_MIN_KERNEL}" = "y"    ]; then
    1.68 -                min_kernel_config="--enable-kernel=$(echo ${CT_LIBC_GLIBC_MIN_KERNEL} |sed -r -e 's/^([^.]+\.[^.]+\.[^.]+)(|\.[^.]+)$/\1/;')"
    1.69 -            fi
    1.70 -            ;;
    1.71 -    esac
    1.72 -    extra_config="${extra_config} ${min_kernel_config}"
    1.73 -
    1.74      case "${CT_THREADS}" in
    1.75          nptl)           extra_config="${extra_config} --with-__thread --with-tls";;
    1.76          linuxthreads)   extra_config="${extra_config} --with-__thread --without-tls --without-nptl";;
    1.77 @@ -375,6 +347,8 @@
    1.78          *)  extra_config="${extra_config} --enable-add-ons=$(do_libc_add_ons_list ,)";;
    1.79      esac
    1.80  
    1.81 +    extra_config="${extra_config} $(do_libc_min_kernel_config)"
    1.82 +
    1.83      # Add some default CC args
    1.84      glibc_version_major=$(echo ${CT_LIBC_VERSION} |sed -r -e 's/^([^\.]+)\..*/\1/')
    1.85      glibc_version_minor=$(echo ${CT_LIBC_VERSION} |sed -r -e 's/^[^\.]+\.([^.]+).*/\1/')
    1.86 @@ -542,13 +516,39 @@
    1.87  # Build up the addons list, separated with $1
    1.88  do_libc_add_ons_list() {
    1.89      local sep="$1"
    1.90 -    local addons_list=$(echo "${CT_LIBC_ADDONS_LIST//,/${sep}}" |tr -s ,)
    1.91 +    local addons_list=$(echo "${CT_LIBC_ADDONS_LIST}" |sed -r -e "s/[ ,]/${sep}/g;")
    1.92      case "${CT_THREADS}" in
    1.93          none)   ;;
    1.94          *)      addons_list="${addons_list}${sep}${CT_THREADS}";;
    1.95      esac
    1.96      [ "${CT_LIBC_GLIBC_USE_PORTS}" = "y" ] && addons_list="${addons_list}${sep}ports"
    1.97 -    addons_list="${addons_list%%${sep}}"
    1.98 -    echo "${addons_list##${sep}}"
    1.99 +    # Remove duplicate, leading and trailing separators
   1.100 +    echo "${addons_list}" |sed -r -e "s/${sep}+/${sep}/g; s/^${sep}//; s/${sep}\$//;"
   1.101  }
   1.102  
   1.103 +# Builds up the minimum supported Linux kernel version
   1.104 +do_libc_min_kernel_config() {
   1.105 +    local min_kernel_config=
   1.106 +    case "${CT_LIBC_GLIBC_EXTRA_CONFIG}" in
   1.107 +        *enable-kernel*) ;;
   1.108 +        *)  if [ "${CT_LIBC_GLIBC_KERNEL_VERSION_AS_HEADERS}" = "y" ]; then
   1.109 +                # We can't rely on the kernel version from the configuration,
   1.110 +                # because it might not be available if the user uses pre-installed
   1.111 +                # headers. On the other hand, both method will have the kernel
   1.112 +                # version installed in "usr/include/linux/version.h" in the sys-root.
   1.113 +                # Parse that instead of having two code-paths.
   1.114 +                version_code_file="${CT_SYSROOT_DIR}/usr/include/linux/version.h"
   1.115 +                CT_TestOrAbort "Linux version is unavailable in installed headers files" -f "${version_code_file}" -a -r "${version_code_file}"
   1.116 +                version_code=$(grep -E LINUX_VERSION_CODE "${version_code_file}" |cut -d ' ' -f 3)
   1.117 +                version=$(((version_code>>16)&0xFF))
   1.118 +                patchlevel=$(((version_code>>8)&0xFF))
   1.119 +                sublevel=$((version_code&0xFF))
   1.120 +                min_kernel_config="--enable-kernel=${version}.${patchlevel}.${sublevel}"
   1.121 +            elif [ "${CT_LIBC_GLIBC_KERNEL_VERSION_CHOSEN}" = "y" ]; then
   1.122 +                # Trim the fourth part of the linux version, keeping only the first three numbers
   1.123 +                min_kernel_config="--enable-kernel=$(echo ${CT_LIBC_GLIBC_MIN_KERNEL_VERSION} |sed -r -e 's/^([^.]+\.[^.]+\.[^.]+)(|\.[^.]+)$/\1/;')"
   1.124 +            fi
   1.125 +            ;;
   1.126 +    esac
   1.127 +    echo "${min_kernel_config}"
   1.128 +}