scripts/build/libc/glibc-eglibc.sh-common
author "Benoît THÉBAUDEAU" <benoit.thebaudeau@advansee.com>
Tue May 31 20:12:35 2011 +0200 (2011-05-31)
changeset 2487 481cd34691f0
parent 2467 200836977ce6
child 2489 b7c9f410704f
permissions -rw-r--r--
gcc: promote PKGVERSION and BUGURL options to toolchain level

This patch promotes the PKGVERSION and BUGURL options to toolchain level so that
all toolchain components supporting them can benefit from them.

These options are passed to configure through --with-pkgversion and
--with-bugurl.

They are supported by binutils 2.18+, gcc 4.3+, eglibc 2.9+ and gdb 7.0+.

Signed-off-by: "Benoît THÉBAUDEAU" <benoit.thebaudeau@advansee.com>
yann@2270
     1
# This file contains the functions common to glibc and eglibc
yann@850
     2
yann@2483
     3
# Extract the C library tarball(s)
yann@2483
     4
do_libc_extract() {
yann@2483
     5
    local addon
yann@2483
     6
yann@2483
     7
    # Extract the main tarball
yann@2483
     8
    CT_Extract "${CT_LIBC}-${CT_LIBC_VERSION}"
yann@2483
     9
    CT_Pushd "${CT_SRC_DIR}/${CT_LIBC}-${CT_LIBC_VERSION}"
yann@2483
    10
    CT_Patch nochdir "${CT_LIBC}" "${CT_LIBC_VERSION}"
yann@2483
    11
yann@2483
    12
    # Extract the add-opns
yann@2483
    13
    for addon in $(do_libc_add_ons_list " "); do
yann@2483
    14
        # NPTL addon is not to be extracted, in any case
yann@2483
    15
        [ "${addon}" = "nptl" ] && continue || true
yann@2483
    16
yann@2483
    17
        CT_Extract nochdir "${CT_LIBC}-${addon}-${CT_LIBC_VERSION}"
yann@2483
    18
yann@2483
    19
        CT_TestAndAbort "Error in add-on '${addon}': both short and long names in tarball" \
yann@2483
    20
            -d "${addon}" -a -d "${CT_LIBC}-${addon}-${CT_LIBC_VERSION}"
yann@2483
    21
yann@2483
    22
        # Some addons have the 'long' name, while others have the
yann@2483
    23
        # 'short' name, but patches are non-uniformly built with
yann@2483
    24
        # either the 'long' or 'short' name, whatever the addons name
yann@2483
    25
        # but we prefer the 'short' name and avoid duplicates.
yann@2483
    26
        if [ -d "${CT_LIBC}-${addon}-${CT_LIBC_VERSION}" ]; then
yann@2483
    27
            mv "${CT_LIBC}-${addon}-${CT_LIBC_VERSION}" "${addon}"
yann@2483
    28
        fi
yann@2483
    29
yann@2483
    30
        ln -s "${addon}" "${CT_LIBC}-${addon}-${CT_LIBC_VERSION}"
yann@2483
    31
yann@2483
    32
        CT_Patch nochdir "${CT_LIBC}" "${addon}-${CT_LIBC_VERSION}"
yann@2483
    33
yann@2483
    34
        # Remove the long name since it can confuse configure scripts to run
yann@2483
    35
        # the same source twice.
yann@2483
    36
        rm "${CT_LIBC}-${addon}-${CT_LIBC_VERSION}"
yann@2483
    37
    done
yann@2483
    38
yann@2483
    39
    # The configure files may be older than the configure.in files
yann@2483
    40
    # if using a snapshot (or even some tarballs). Fake them being
yann@2483
    41
    # up to date.
yann@2483
    42
    find . -type f -name configure -exec touch {} \; 2>&1 |CT_DoLog ALL
yann@2483
    43
yann@2483
    44
    CT_Popd
yann@2483
    45
}
yann@2483
    46
yann@2270
    47
# Build and install headers and start files
yann@850
    48
do_libc_start_files() {
yann@2271
    49
    local src_dir="${CT_SRC_DIR}/${CT_LIBC}-${CT_LIBC_VERSION}"
yann@2271
    50
yann@2277
    51
    CT_DoStep INFO "Installing C library headers & start files"
yann@850
    52
yann@850
    53
    mkdir -p "${CT_BUILD_DIR}/build-libc-startfiles"
yann@850
    54
    cd "${CT_BUILD_DIR}/build-libc-startfiles"
yann@850
    55
yann@850
    56
    CT_DoLog EXTRA "Configuring C library"
yann@850
    57
yann@2271
    58
    case "${CT_LIBC}" in
yann@2271
    59
        eglibc)
yann@2271
    60
            if [ "${CT_EGLIBC_CUSTOM_CONFIG}" = "y" ]; then
yann@2271
    61
                CT_DoExecLog ALL cp "${CT_CONFIG_DIR}/eglibc.config" option-groups.config
yann@2271
    62
            fi
yann@2271
    63
            ;;
yann@2271
    64
    esac
avrac@1569
    65
yann@850
    66
    cross_cc=$(CT_Which "${CT_TARGET}-gcc")
yann@850
    67
    cross_cxx=$(CT_Which "${CT_TARGET}-g++")
yann@850
    68
    cross_ar=$(CT_Which "${CT_TARGET}-ar")
yann@850
    69
    cross_ranlib=$(CT_Which "${CT_TARGET}-ranlib")
yann@2271
    70
yann@850
    71
    CT_DoLog DEBUG "Using gcc for target: '${cross_cc}'"
yann@850
    72
    CT_DoLog DEBUG "Using g++ for target: '${cross_cxx}'"
yann@850
    73
    CT_DoLog DEBUG "Using ar for target: '${cross_ar}'"
yann@850
    74
    CT_DoLog DEBUG "Using ranlib for target: '${cross_ranlib}'"
yann@850
    75
yann@2289
    76
    touch config.cache
yann@2289
    77
    if [ "${CT_LIBC_GLIBC_FORCE_UNWIND}" = "y" ]; then
yann@2289
    78
        echo "libc_cv_forced_unwind=yes" >>config.cache
yann@2289
    79
        echo "libc_cv_c_cleanup=yes" >>config.cache
yann@2289
    80
    fi
yann@2289
    81
yann@2289
    82
    # Pre-seed the configparms file with values from the config option
yann@2289
    83
    printf "${CT_LIBC_GLIBC_CONFIGPARMS}\n" > configparms
yann@2289
    84
yann@2353
    85
    CT_DoExecLog CFG                                    \
yann@1123
    86
    BUILD_CC="${CT_BUILD}-gcc"                          \
yann@1123
    87
    CC=${cross_cc}                                      \
yann@1123
    88
    CXX=${cross_cxx}                                    \
yann@1123
    89
    AR=${cross_ar}                                      \
yann@1123
    90
    RANLIB=${cross_ranlib}                              \
yann@2271
    91
    "${src_dir}/configure"                              \
yann@1123
    92
        --prefix=/usr                                   \
yann@1123
    93
        --with-headers="${CT_HEADERS_DIR}"              \
yann@1123
    94
        --build="${CT_BUILD}"                           \
yann@1123
    95
        --host="${CT_TARGET}"                           \
yann@2289
    96
        --cache-file="$(pwd)/config.cache"              \
yann@1123
    97
        --disable-profile                               \
yann@1123
    98
        --without-gd                                    \
yann@1123
    99
        --without-cvs                                   \
yann@850
   100
        --enable-add-ons
yann@850
   101
yann@850
   102
    CT_DoLog EXTRA "Installing C library headers"
yann@850
   103
yann@850
   104
    # use the 'install-headers' makefile target to install the
yann@850
   105
    # headers
yann@2277
   106
    CT_DoExecLog ALL make ${JOBSFLAGS}              \
yann@2277
   107
                     install_root=${CT_SYSROOT_DIR} \
yann@2277
   108
                     install-bootstrap-headers=yes  \
yann@2277
   109
                     install-headers
yann@850
   110
yann@2272
   111
    # For glibc, a few headers need to be manually installed
yann@2272
   112
    if [ "${CT_LIBC}" = "glibc" ]; then
yann@2272
   113
        # Two headers -- stubs.h and features.h -- aren't installed by install-headers,
yann@2272
   114
        # so do them by hand.  We can tolerate an empty stubs.h for the moment.
yann@2272
   115
        # See e.g. http://gcc.gnu.org/ml/gcc/2002-01/msg00900.html
yann@2272
   116
        mkdir -p "${CT_HEADERS_DIR}/gnu"
yann@2272
   117
        CT_DoExecLog ALL touch "${CT_HEADERS_DIR}/gnu/stubs.h"
yann@2272
   118
        CT_DoExecLog ALL cp -v "${CT_SRC_DIR}/glibc-${CT_LIBC_VERSION}/include/features.h"  \
yann@2272
   119
                               "${CT_HEADERS_DIR}/features.h"
yann@2272
   120
yann@2272
   121
        # Building the bootstrap gcc requires either setting inhibit_libc, or
yann@2272
   122
        # having a copy of stdio_lim.h... see
yann@2272
   123
        # http://sources.redhat.com/ml/libc-alpha/2003-11/msg00045.html
yann@2272
   124
        CT_DoExecLog ALL cp -v bits/stdio_lim.h "${CT_HEADERS_DIR}/bits/stdio_lim.h"
yann@2272
   125
yann@2272
   126
        # Following error building gcc-4.0.0's gcj:
yann@2272
   127
        #  error: bits/syscall.h: No such file or directory
yann@2272
   128
        # solved by following copy; see http://sourceware.org/ml/crossgcc/2005-05/msg00168.html
yann@2272
   129
        # but it breaks arm, see http://sourceware.org/ml/crossgcc/2006-01/msg00091.html
yann@2314
   130
        case "${CT_ARCH}" in
yann@2314
   131
            arm)    ;;
yann@2314
   132
            *)  CT_DoExecLog ALL cp -v "misc/syscall-list.h"            \
yann@2314
   133
                                       "${CT_HEADERS_DIR}/bits/syscall.h"
yann@2314
   134
                ;;
yann@2314
   135
        esac
yann@2272
   136
    fi
yann@2272
   137
yann@2313
   138
    if [ "${CT_THREADS}" = "nptl" ]; then
yann@2313
   139
        CT_DoLog EXTRA "Installing C library start files"
yann@850
   140
yann@2313
   141
        # there are a few object files needed to link shared libraries,
yann@2313
   142
        # which we build and install by hand
yann@2313
   143
        CT_DoExecLog ALL mkdir -p "${CT_SYSROOT_DIR}/usr/lib"
yann@2313
   144
        CT_DoExecLog ALL make ${JOBSFLAGS} csu/subdir_lib
yann@2313
   145
        CT_DoExecLog ALL cp csu/crt1.o csu/crti.o csu/crtn.o \
yann@2313
   146
                            "${CT_SYSROOT_DIR}/usr/lib"
yann@850
   147
yann@2313
   148
        # Finally, 'libgcc_s.so' requires a 'libc.so' to link against.
yann@2313
   149
        # However, since we will never actually execute its code,
yann@2313
   150
        # it doesn't matter what it contains.  So, treating '/dev/null'
yann@2313
   151
        # as a C source file, we produce a dummy 'libc.so' in one step
yann@2313
   152
        CT_DoExecLog ALL "${cross_cc}" -nostdlib        \
yann@2313
   153
                                       -nostartfiles    \
yann@2313
   154
                                       -shared          \
yann@2313
   155
                                       -x c /dev/null   \
yann@2313
   156
                                       -o "${CT_SYSROOT_DIR}/usr/lib/libc.so"
yann@2313
   157
    fi # threads == nptl
yann@850
   158
yann@850
   159
    CT_EndStep
yann@850
   160
}
yann@850
   161
yann@2270
   162
# This function builds and install the full C library
yann@850
   163
do_libc() {
yann@2271
   164
    local src_dir="${CT_SRC_DIR}/${CT_LIBC}-${CT_LIBC_VERSION}"
yann@2276
   165
    local extra_cc_args
yann@1478
   166
    local -a extra_config
yann@2271
   167
    local -a extra_make_args
yann@2312
   168
    local glibc_cflags
yann@1478
   169
yann@850
   170
    CT_DoStep INFO "Installing C library"
yann@850
   171
yann@850
   172
    mkdir -p "${CT_BUILD_DIR}/build-libc"
yann@850
   173
    cd "${CT_BUILD_DIR}/build-libc"
yann@850
   174
yann@850
   175
    CT_DoLog EXTRA "Configuring C library"
yann@850
   176
yann@2271
   177
    case "${CT_LIBC}" in
yann@2271
   178
        eglibc)
yann@2271
   179
            if [ "${CT_EGLIBC_CUSTOM_CONFIG}" = "y" ]; then
yann@2271
   180
                CT_DoExecLog ALL cp "${CT_CONFIG_DIR}/eglibc.config" option-groups.config
yann@2271
   181
            fi
yann@2271
   182
            if [ "${CT_EGLIBC_OPT_SIZE}" = "y" ]; then
yann@2271
   183
                OPTIMIZE=-Os
yann@2271
   184
            else
yann@2271
   185
                OPTIMIZE=-O2
yann@2271
   186
            fi
yann@2271
   187
            ;;
yann@2276
   188
        glibc)
yann@2276
   189
            # glibc can't be built without -O2 (reference needed!)
yann@2276
   190
            OPTIMIZE=-O2
yann@2276
   191
            # Also, if those two are missing, iconv build breaks
yann@2276
   192
            extra_config+=( --disable-debug --disable-sanity-checks )
yann@2276
   193
            ;;
yann@2271
   194
    esac
richard@1796
   195
yann@850
   196
    # Add some default glibc config options if not given by user.
yann@850
   197
    # We don't need to be conditional on wether the user did set different
yann@2467
   198
    # values, as they CT_LIBC_GLIBC_EXTRA_CONFIG_ARRAY is passed after
yann@2467
   199
    # extra_config
yann@850
   200
yann@2273
   201
    extra_config+=("$(do_libc_min_kernel_config)")
yann@850
   202
yann@850
   203
    case "${CT_THREADS}" in
yann@1478
   204
        nptl)           extra_config+=("--with-__thread" "--with-tls");;
yann@1478
   205
        linuxthreads)   extra_config+=("--with-__thread" "--without-tls" "--without-nptl");;
yann@1478
   206
        none)           extra_config+=("--without-__thread" "--without-nptl")
yann@2467
   207
                        case "${CT_LIBC_GLIBC_EXTRA_CONFIG_ARRAY[*]}" in
yann@850
   208
                            *-tls*) ;;
yann@1478
   209
                            *) extra_config+=("--without-tls");;
yann@850
   210
                        esac
yann@850
   211
                        ;;
yann@850
   212
    esac
yann@850
   213
yann@850
   214
    case "${CT_SHARED_LIBS}" in
yann@1478
   215
        y) extra_config+=("--enable-shared");;
yann@1478
   216
        *) extra_config+=("--disable-shared");;
yann@850
   217
    esac
yann@850
   218
yann@850
   219
    case "${CT_ARCH_FLOAT_HW},${CT_ARCH_FLOAT_SW}" in
yann@1478
   220
        y,) extra_config+=("--with-fp");;
yann@1478
   221
        ,y) extra_config+=("--without-fp");;
yann@850
   222
    esac
yann@850
   223
bryanhundven@2180
   224
    if [ "${CT_LIBC_DISABLE_VERSIONING}" = "y" ]; then
bryanhundven@2180
   225
        extra_config+=("--disable-versioning")
bryanhundven@2180
   226
    fi
bryanhundven@2180
   227
bryanhundven@2181
   228
    if [ "${CT_LIBC_OLDEST_ABI}" != "" ]; then
bryanhundven@2181
   229
        extra_config+=("--enable-oldest-abi=${CT_LIBC_OLDEST_ABI}")
bryanhundven@2181
   230
    fi
bryanhundven@2181
   231
yann@850
   232
    case "$(do_libc_add_ons_list ,)" in
yann@850
   233
        "") ;;
yann@1478
   234
        *)  extra_config+=("--enable-add-ons=$(do_libc_add_ons_list ,)");;
yann@850
   235
    esac
yann@850
   236
yann@850
   237
    extra_cc_args="${extra_cc_args} ${CT_ARCH_ENDIAN_OPT}"
yann@850
   238
yann@2289
   239
    touch config.cache
yann@2289
   240
    if [ "${CT_LIBC_GLIBC_FORCE_UNWIND}" = "y" ]; then
yann@2289
   241
        echo "libc_cv_forced_unwind=yes" >>config.cache
yann@2289
   242
        echo "libc_cv_c_cleanup=yes" >>config.cache
yann@2289
   243
    fi
yann@2289
   244
yann@2276
   245
    # Pre-seed the configparms file with values from the config option
yann@2276
   246
    printf "${CT_LIBC_GLIBC_CONFIGPARMS}\n" > configparms
yann@2276
   247
yann@850
   248
    cross_cc=$(CT_Which "${CT_TARGET}-gcc")    
yann@850
   249
yann@850
   250
    CT_DoLog DEBUG "Using gcc for target:     '${cross_cc}'"
yann@850
   251
    CT_DoLog DEBUG "Configuring with addons : '$(do_libc_add_ons_list ,)'"
yann@1478
   252
    CT_DoLog DEBUG "Extra config args passed: '${extra_config[*]}'"
yann@850
   253
    CT_DoLog DEBUG "Extra CC args passed    : '${extra_cc_args}'"
yann@850
   254
yann@2312
   255
    glibc_cflags="${CT_TARGET_CFLAGS} ${CT_LIBC_GLIBC_EXTRA_CFLAGS} ${OPTIMIZE}"
yann@2312
   256
    case "${CT_LIBC_ENABLE_FORTIFIED_BUILD}" in
yann@2312
   257
        y)  ;;
yann@2312
   258
        *)  glibc_cflags+=" -U_FORTIFY_SOURCE";;
yann@2312
   259
    esac
yann@2312
   260
bryanhundven@2229
   261
    # ./configure is mislead by our tools override wrapper for bash
bryanhundven@2229
   262
    # so just tell it where the real bash is _on_the_target_!
bryanhundven@2229
   263
    # Notes:
bryanhundven@2229
   264
    # - ${ac_cv_path_BASH_SHELL} is only used to set BASH_SHELL
bryanhundven@2229
   265
    # - ${BASH_SHELL}            is only used to set BASH
bryanhundven@2229
   266
    # - ${BASH}                  is only used to set the shebang
bryanhundven@2229
   267
    #                            in two scripts to run on the target
bryanhundven@2229
   268
    # So we can safely bypass bash detection at compile time.
bryanhundven@2229
   269
    # Should this change in a future eglibc release, we'd better
bryanhundven@2229
   270
    # directly mangle the generated scripts _after_ they get built,
bryanhundven@2229
   271
    # or even after they get installed... eglibc is such a sucker...
yann@2289
   272
    echo "ac_cv_path_BASH_SHELL=/bin/bash" >>config.cache
bryanhundven@2229
   273
yann@2276
   274
    # Configure with --prefix the way we want it on the target...
yann@2276
   275
    # There are a whole lot of settings here.  You'll probably want
yann@2467
   276
    # to read up on what they all mean, and customize a bit, possibly by setting GLIBC_EXTRA_CONFIG_ARRAY
yann@2276
   277
    # Compare these options with the ones used when installing the glibc headers above - they're different.
yann@2276
   278
    # Adding "--without-gd" option to avoid error "memusagestat.c:36:16: gd.h: No such file or directory"
yann@2276
   279
    # See also http://sources.redhat.com/ml/libc-alpha/2000-07/msg00024.html.
yann@2276
   280
    # Set BUILD_CC, or we won't be able to build datafiles
yann@2276
   281
yann@2353
   282
    CT_DoExecLog CFG                                                \
yann@1041
   283
    BUILD_CC="${CT_BUILD}-gcc"                                      \
yann@2312
   284
    CFLAGS="${glibc_cflags}"                                        \
yann@850
   285
    CC="${CT_TARGET}-gcc ${CT_LIBC_EXTRA_CC_ARGS} ${extra_cc_args}" \
yann@850
   286
    AR=${CT_TARGET}-ar                                              \
yann@850
   287
    RANLIB=${CT_TARGET}-ranlib                                      \
yann@2271
   288
    "${src_dir}/configure"                                          \
yann@850
   289
        --prefix=/usr                                               \
yann@1041
   290
        --build=${CT_BUILD}                                         \
yann@850
   291
        --host=${CT_TARGET}                                         \
yann@2289
   292
        --cache-file="$(pwd)/config.cache"                          \
yann@2276
   293
        --without-cvs                                               \
yann@850
   294
        --disable-profile                                           \
yann@850
   295
        --without-gd                                                \
yann@2276
   296
        --with-headers="${CT_HEADERS_DIR}"                          \
yann@1478
   297
        "${extra_config[@]}"                                        \
yann@2467
   298
        "${CT_LIBC_GLIBC_EXTRA_CONFIG_ARRAY[@]}"
yann@850
   299
    
yann@2276
   300
    # build hacks
yann@2276
   301
    case "${CT_ARCH},${CT_ARCH_CPU}" in
yann@2276
   302
        powerpc,8??)
yann@2276
   303
            # http://sourceware.org/ml/crossgcc/2008-10/msg00068.html
yann@2276
   304
            CT_DoLog DEBUG "Activating support for memset on broken ppc-8xx (CPU15 erratum)"
yann@2276
   305
            extra_make_args+=( ASFLAGS="-DBROKEN_PPC_8xx_CPU15" )
yann@2271
   306
            ;;
yann@1328
   307
    esac
yann@1328
   308
yann@2276
   309
    CT_DoLog EXTRA "Building C library"
yann@2277
   310
    CT_DoExecLog ALL make ${JOBSFLAGS}                      \
yann@2276
   311
                          "${extra_make_args[@]}"           \
yann@2276
   312
                          all
yann@850
   313
yann@850
   314
    CT_DoLog EXTRA "Installing C library"
yann@2277
   315
    CT_DoExecLog ALL make ${JOBSFLAGS}                      \
yann@2276
   316
                          "${extra_make_args[@]}"           \
yann@2276
   317
                          install_root="${CT_SYSROOT_DIR}"  \
yann@2276
   318
                          install
yann@850
   319
yann@850
   320
    CT_EndStep
yann@850
   321
}
yann@850
   322
yann@2270
   323
# This function finishes the C library install
yann@2270
   324
# This is a no-op
yann@850
   325
do_libc_finish() {
yann@850
   326
    :
yann@850
   327
}
yann@850
   328
yann@850
   329
# Build up the addons list, separated with $1
yann@850
   330
do_libc_add_ons_list() {
yann@850
   331
    local sep="$1"
yann@2274
   332
    local addons_list="$( echo "${CT_LIBC_ADDONS_LIST}"         \
yann@2274
   333
                          |sed -r -e "s/[[:space:],]/${sep}/g;" \
yann@2274
   334
                        )"
yann@850
   335
    case "${CT_THREADS}" in
yann@850
   336
        none)   ;;
yann@850
   337
        *)      addons_list="${addons_list}${sep}${CT_THREADS}";;
yann@850
   338
    esac
yann@850
   339
    [ "${CT_LIBC_GLIBC_USE_PORTS}" = "y" ] && addons_list="${addons_list}${sep}ports"
yann@2274
   340
    # Remove duplicate, leading and trailing separators
yann@2274
   341
    echo "${addons_list}" |sed -r -e "s/${sep}+/${sep}/g; s/^${sep}//; s/${sep}\$//;"
yann@850
   342
}
yann@2273
   343
yann@2273
   344
# Compute up the minimum supported Linux kernel version
yann@2273
   345
do_libc_min_kernel_config() {
yann@2273
   346
    local min_kernel_config
yann@2273
   347
yann@2467
   348
    case "${CT_LIBC_GLIBC_EXTRA_CONFIG_ARRAY[*]}" in
yann@2273
   349
        *--enable-kernel*) ;;
yann@2273
   350
        *)  if [ "${CT_LIBC_GLIBC_KERNEL_VERSION_AS_HEADERS}" = "y" ]; then
yann@2273
   351
                # We can't rely on the kernel version from the configuration,
yann@2273
   352
                # because it might not be available if the user uses pre-installed
yann@2273
   353
                # headers. On the other hand, both method will have the kernel
yann@2279
   354
                # version installed in "usr/include/linux/version.h" in the sysroot.
yann@2273
   355
                # Parse that instead of having two code-paths.
yann@2273
   356
                version_code_file="${CT_SYSROOT_DIR}/usr/include/linux/version.h"
yann@2273
   357
                if [ ! -f "${version_code_file}" -o ! -r "${version_code_file}" ]; then
yann@2273
   358
                    CT_Abort "Linux version is unavailable in installed headers files"
yann@2273
   359
                fi
yann@2273
   360
                version_code="$( grep -E LINUX_VERSION_CODE "${version_code_file}"  \
yann@2273
   361
                                 |cut -d ' ' -f 3                                   \
yann@2273
   362
                               )"
yann@2273
   363
                version=$(((version_code>>16)&0xFF))
yann@2273
   364
                patchlevel=$(((version_code>>8)&0xFF))
yann@2273
   365
                sublevel=$((version_code&0xFF))
yann@2273
   366
                min_kernel_config="${version}.${patchlevel}.${sublevel}"
yann@2273
   367
            elif [ "${CT_LIBC_GLIBC_KERNEL_VERSION_CHOSEN}" = "y" ]; then
yann@2273
   368
                # Trim the fourth part of the linux version, keeping only the first three numbers
yann@2276
   369
                min_kernel_config="$( echo "${CT_LIBC_GLIBC_MIN_KERNEL_VERSION}"            \
yann@2276
   370
                                      |sed -r -e 's/^([^.]+\.[^.]+\.[^.]+)(|\.[^.]+)$/\1/;' \
yann@2273
   371
                                    )"
yann@2273
   372
            fi
yann@2273
   373
            echo "--enable-kernel=${min_kernel_config}"
yann@2273
   374
            ;;
yann@2273
   375
    esac
yann@2273
   376
}