scripts/build/libc_glibc.sh
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sat May 03 17:51:16 2008 +0000 (2008-05-03)
changeset 486 92f6149c4275
parent 482 88abdac040ef
child 496 f31cc6a00472
permissions -rw-r--r--
Some people are reposrting that ftp does not work on their network, probably due to proxies, while http does work.
Some (most) of the sites we use toretrieve tarballs have http equivallent for the ftp service. Use http as a failover.
There's no solution for those sites that do not have such an http equivalent.

/trunk/scripts/build/binutils.sh | 5 2 3 0 ++---
/trunk/scripts/build/libc_glibc.sh | 4 2 2 0 ++--
/trunk/scripts/build/libc_uClibc.sh | 2 1 1 0 +-
/trunk/scripts/build/debug/400-ltrace.sh | 2 1 1 0 +-
/trunk/scripts/build/debug/300-gdb.sh | 8 3 5 0 +++-----
/trunk/scripts/build/kernel_linux.sh | 7 2 5 0 ++-----
/trunk/scripts/build/cc_gcc.sh | 6 2 4 0 ++----
/trunk/scripts/build/gmp.sh | 4 1 3 0 +---
8 files changed, 14 insertions(+), 24 deletions(-)
yann@1
     1
# This file adds functions to build glibc
yann@1
     2
# Copyright 2007 Yann E. MORIN
yann@1
     3
# Licensed under the GPL v2. See COPYING in the root of this package
yann@1
     4
yann@161
     5
do_print_filename() {
yann@161
     6
    [ "${CT_LIBC}" = "glibc" ] || return 0
yann@164
     7
    echo "glibc-${CT_LIBC_VERSION}"
yann@161
     8
    for addon in `do_libc_add_ons_list " "`; do
yann@161
     9
        # NPTL addon is not to be downloaded, in any case
yann@161
    10
        [ "${addon}" = "nptl" ] && continue || true
yann@164
    11
        echo "glibc-${addon}-${CT_LIBC_VERSION}"
yann@161
    12
    done
yann@161
    13
}
yann@161
    14
yann@63
    15
# Download glibc
yann@64
    16
do_libc_get() {
yann@63
    17
    # Ah! Not all GNU folks seem stupid. All glibc releases are in the same
yann@63
    18
    # directory. Good. Alas, there is no snapshot there. I'll deal with them
yann@63
    19
    # later on... :-/
yann@486
    20
    CT_GetFile "${CT_LIBC_FILE}" {ftp,http}://ftp.gnu.org/gnu/glibc
yann@63
    21
yann@63
    22
    # C library addons
yann@151
    23
    for addon in `do_libc_add_ons_list " "`; do
yann@151
    24
        # NPTL addon is not to be downloaded, in any case
yann@151
    25
        [ "${addon}" = "nptl" ] && continue || true
yann@486
    26
        CT_GetFile "${CT_LIBC}-${addon}-${CT_LIBC_VERSION}" {ftp,http}://ftp.gnu.org/gnu/glibc
yann@63
    27
    done
yann@64
    28
yann@64
    29
    return 0
yann@63
    30
}
yann@63
    31
yann@63
    32
# Extract glibc
yann@63
    33
do_libc_extract() {
yann@63
    34
    CT_ExtractAndPatch "${CT_LIBC_FILE}"
yann@63
    35
yann@63
    36
    # C library addons
yann@151
    37
    for addon in `do_libc_add_ons_list " "`; do
yann@151
    38
        # NPTL addon is not to be extracted, in any case
yann@151
    39
        [ "${addon}" = "nptl" ] && continue || true
yann@63
    40
        CT_ExtractAndPatch "${CT_LIBC}-${addon}-${CT_LIBC_VERSION}"
yann@63
    41
    done
yann@64
    42
yann@64
    43
    return 0
yann@63
    44
}
yann@63
    45
yann@1
    46
# There is nothing to do for glibc check config
yann@1
    47
do_libc_check_config() {
yann@73
    48
    :
yann@1
    49
}
yann@1
    50
yann@1
    51
# This function installs the glibc headers needed to build the core compiler
yann@1
    52
do_libc_headers() {
yann@1
    53
    # Only need to install bootstrap glibc headers for gcc-3.0 and above?  Or maybe just gcc-3.3 and above?
yann@1
    54
    # See also http://gcc.gnu.org/PR8180, which complains about the need for this step.
yann@331
    55
    grep -q 'gcc-[34]' "${CT_SRC_DIR}/${CT_CC_FILE}/ChangeLog" 2>/dev/null || return 0
yann@1
    56
yann@1
    57
    CT_DoStep INFO "Installing C library headers"
yann@1
    58
yann@1
    59
    mkdir -p "${CT_BUILD_DIR}/build-libc-headers"
yann@1
    60
    cd "${CT_BUILD_DIR}/build-libc-headers"
yann@1
    61
yann@328
    62
    CT_DoLog EXTRA "Configuring C library"
yann@1
    63
yann@1
    64
    # The following three things have to be done to build glibc-2.3.x, but they don't hurt older versions.
yann@1
    65
    # 1. override CC to keep glibc's configure from using $TARGET-gcc. 
yann@1
    66
    # 2. disable linuxthreads, which needs a real cross-compiler to generate tcb-offsets.h properly
yann@1
    67
    # 3. build with gcc 3.2 or later
yann@1
    68
    # Compare these options with the ones used when building glibc for real below - they're different.
yann@1
    69
    # As of glibc-2.3.2, to get this step to work for hppa-linux, you need --enable-hacker-mode
yann@1
    70
    # so when configure checks to make sure gcc has access to the assembler you just built...
yann@1
    71
    # Alternately, we could put ${PREFIX}/${TARGET}/bin on the path.
yann@1
    72
    # Set --build so maybe we don't have to specify "cross-compiling=yes" below (haven't tried yet)
yann@1
    73
    # Note: the warning
yann@1
    74
    # "*** WARNING: Are you sure you do not want to use the `linuxthreads'"
yann@1
    75
    # *** add-on?"
yann@1
    76
    # is ok here, since all we want are the basic headers at this point.
yann@1
    77
    # Override libc_cv_ppc_machine so glibc-cvs doesn't complain
yann@1
    78
    # 'a version of binutils that supports .machine "altivec" is needed'.
yann@78
    79
yann@151
    80
    addons_config="--enable-add-ons=`do_libc_add_ons_list ,`"
yann@151
    81
    # We need to remove any threading addon when installing headers
yann@151
    82
    addons_config="${addons_config//nptl/}"
yann@151
    83
    addons_config="${addons_config//linuxthreads/}"
yann@410
    84
    addons_config=`echo "${addons_config}" |sed -r -e 's/^,+//; s/,+$//; s/,+/,/g;'`
yann@151
    85
yann@210
    86
    cross_cc=`CT_Which "${CT_TARGET}-gcc"`
yann@151
    87
    CT_DoLog DEBUG "Using gcc for target: \"${cross_cc}\""
yann@151
    88
    CT_DoLog DEBUG "Extra config passed : \"${addons_config}\""
yann@78
    89
yann@1
    90
    libc_cv_ppc_machine=yes                     \
yann@410
    91
    CC=${cross_cc}                              \
yann@1
    92
    "${CT_SRC_DIR}/${CT_LIBC_FILE}/configure"   \
yann@136
    93
        --build="${CT_UNIQ_BUILD}"              \
yann@1
    94
        --host="${CT_TARGET}"                   \
yann@1
    95
        --prefix=/usr                           \
yann@1
    96
        --with-headers="${CT_HEADERS_DIR}"      \
yann@63
    97
        --without-cvs                           \
yann@63
    98
        --disable-sanity-checks                 \
yann@1
    99
        --enable-hacker-mode                    \
yann@151
   100
        ${addons_config}                        \
yann@151
   101
        --without-nptl                          2>&1 |CT_DoLog ALL
yann@1
   102
yann@1
   103
    CT_DoLog EXTRA "Installing C library headers"
yann@1
   104
yann@1
   105
    if grep -q GLIBC_2.3 "${CT_SRC_DIR}/${CT_LIBC_FILE}/ChangeLog"; then
yann@1
   106
        # glibc-2.3.x passes cross options to $(CC) when generating errlist-compat.c,
yann@1
   107
        # which fails without a real cross-compiler.
yann@1
   108
        # Fortunately, we don't need errlist-compat.c, since we just need .h
yann@1
   109
        # files, so work around this by creating a fake errlist-compat.c and
yann@1
   110
        # satisfying its dependencies.
yann@1
   111
        # Another workaround might be to tell configure to not use any cross
yann@1
   112
        # options to $(CC).
yann@1
   113
        # The real fix would be to get install-headers to not generate
yann@1
   114
        # errlist-compat.c.
yann@1
   115
        # Note: BOOTSTRAP_GCC is used by:
yann@1
   116
        # patches/glibc-2.3.5/glibc-mips-bootstrap-gcc-header-install.patch
yann@78
   117
yann@78
   118
        libc_cv_ppc_machine=yes                                 \
yann@78
   119
        make CFLAGS="-O -DBOOTSTRAP_GCC" sysdeps/gnu/errlist.c  2>&1 |CT_DoLog ALL
yann@1
   120
        mkdir -p stdio-common
yann@78
   121
yann@1
   122
        # sleep for 2 seconds for benefit of filesystems with lousy time
yann@1
   123
        # resolution, like FAT, so make knows for sure errlist-compat.c doesn't
yann@1
   124
        # need generating
yann@1
   125
        sleep 2
yann@1
   126
        touch stdio-common/errlist-compat.c
yann@1
   127
    fi
yann@1
   128
    # Note: BOOTSTRAP_GCC (see above)
yann@1
   129
    libc_cv_ppc_machine=yes                                 \
yann@1
   130
    make cross-compiling=yes install_root=${CT_SYSROOT_DIR} \
yann@78
   131
         CFLAGS="-O -DBOOTSTRAP_GCC" ${LIBC_SYSROOT_ARG}    \
yann@78
   132
         install-headers                                    2>&1 |CT_DoLog ALL
yann@1
   133
yann@1
   134
    # Two headers -- stubs.h and features.h -- aren't installed by install-headers,
yann@1
   135
    # so do them by hand.  We can tolerate an empty stubs.h for the moment.
yann@1
   136
    # See e.g. http://gcc.gnu.org/ml/gcc/2002-01/msg00900.html
yann@1
   137
    mkdir -p "${CT_HEADERS_DIR}/gnu"
yann@1
   138
    touch "${CT_HEADERS_DIR}/gnu/stubs.h"
yann@1
   139
    cp "${CT_SRC_DIR}/${CT_LIBC_FILE}/include/features.h" "${CT_HEADERS_DIR}/features.h"
yann@1
   140
yann@1
   141
    # Building the bootstrap gcc requires either setting inhibit_libc, or
yann@1
   142
    # having a copy of stdio_lim.h... see
yann@1
   143
    # http://sources.redhat.com/ml/libc-alpha/2003-11/msg00045.html
yann@1
   144
    cp bits/stdio_lim.h "${CT_HEADERS_DIR}/bits/stdio_lim.h"
yann@1
   145
yann@1
   146
    # Following error building gcc-4.0.0's gcj:
yann@1
   147
    #  error: bits/syscall.h: No such file or directory
yann@1
   148
    # solved by following copy; see http://sourceware.org/ml/crossgcc/2005-05/msg00168.html
yann@1
   149
    # but it breaks arm, see http://sourceware.org/ml/crossgcc/2006-01/msg00091.html
yann@1
   150
    [ "${CT_ARCH}" != "arm" ] && cp misc/syscall-list.h "${CT_HEADERS_DIR}/bits/syscall.h" || true
yann@1
   151
yann@136
   152
    # Those headers are to be manually copied so gcc can build properly
yann@312
   153
    pthread_h="${CT_SRC_DIR}/${CT_LIBC_FILE}/${CT_THREADS}/sysdeps/pthread/pthread.h"
yann@136
   154
    pthreadtypes_h=
yann@136
   155
    case "${CT_THREADS}" in
yann@136
   156
        nptl)
yann@136
   157
            # NOTE: for some archs, the pathes are different, but they are not
yann@391
   158
            # supported by crosstool-NG right now. See original crosstool when they are.
yann@136
   159
            pthread_h="${CT_SRC_DIR}/${CT_LIBC_FILE}/${CT_THREADS}/sysdeps/pthread/pthread.h"
yann@136
   160
            pthreadtypes_h="${CT_SRC_DIR}/${CT_LIBC_FILE}/nptl/sysdeps/unix/sysv/linux/${CT_KERNEL_ARCH}/bits/pthreadtypes.h"
yann@282
   161
            if [ ! -f "${pthreadtypes_h}" ]; then
yann@282
   162
                pthreadtypes_h="${CT_SRC_DIR}/${CT_LIBC_FILE}/${CT_LIBC}-ports-${CT_LIBC_VERSION}/sysdeps/unix/sysv/linux/${CT_KERNEL_ARCH}/nptl/bits/pthreadtypes.h"
yann@282
   163
            fi
yann@136
   164
            ;;
yann@136
   165
        linuxthreads)
yann@136
   166
            pthreadtypes_h="${CT_SRC_DIR}/${CT_LIBC_FILE}/linuxthreads/sysdeps/pthread/bits/pthreadtypes.h"
yann@136
   167
            ;;
yann@312
   168
        *)
yann@312
   169
            pthread_h=
yann@312
   170
            pthreadtypes_h=
yann@312
   171
            ;;
yann@136
   172
    esac
yann@136
   173
    if [ -n "${pthread_h}" ]; then
yann@136
   174
        cp -v "${pthread_h}" "${CT_HEADERS_DIR}/pthread.h" 2>&1 |CT_DoLog ALL
yann@136
   175
    fi
yann@136
   176
    if [ -n "${pthreadtypes_h}" ]; then
yann@136
   177
        cp -v "${pthreadtypes_h}" "${CT_HEADERS_DIR}/bits/pthreadtypes.h" 2>&1 |CT_DoLog ALL
yann@136
   178
    fi
yann@136
   179
yann@136
   180
    CT_EndStep
yann@136
   181
}
yann@136
   182
yann@136
   183
# Build and install start files
yann@136
   184
do_libc_start_files() {
yann@136
   185
    # Needed only in the NPTL case. Otherwise, return.
yann@136
   186
    [ "${CT_THREADS}" = "nptl" ] || return 0
yann@136
   187
yann@136
   188
    CT_DoStep INFO "Installing C library start files"
yann@136
   189
yann@136
   190
    mkdir -p "${CT_BUILD_DIR}/build-libc-startfiles"
yann@136
   191
    cd "${CT_BUILD_DIR}/build-libc-startfiles"
yann@136
   192
yann@136
   193
    CT_DoLog EXTRA "Configuring C library"
yann@136
   194
yann@136
   195
    # Add some default glibc config options if not given by user.
yann@136
   196
    extra_config=""
yann@136
   197
    case "${CT_LIBC_GLIBC_EXTRA_CONFIG}" in
yann@136
   198
        *enable-kernel*) ;;
yann@136
   199
        *) extra_config="${extra_config} --enable-kernel=`echo ${CT_KERNEL_VERSION} |sed -r -e 's/^([^.]+\.[^.]+\.[^.]+)(|\.[^.]+)$/\1/;'`"
yann@136
   200
    esac
yann@136
   201
    case "${CT_LIBC_GLIBC_EXTRA_CONFIG}" in
yann@136
   202
        *-tls*) ;;
yann@136
   203
        *) extra_config="${extra_config} --with-tls"
yann@136
   204
    esac
yann@136
   205
    case "${CT_SHARED_LIBS}" in
yann@136
   206
        y) extra_config="${extra_config} --enable-shared";;
yann@136
   207
        *) extra_config="${extra_config} --disable-shared";;
yann@136
   208
    esac
yann@391
   209
    case "${CT_ARCH_FLOAT_HW},${CT_ARCH_FLOAT_SW}" in
yann@391
   210
        y,) extra_config="${extra_config} --with-fp";;
yann@391
   211
        ,y) extra_config="${extra_config} --without-fp";;
yann@136
   212
    esac
yann@136
   213
    # Obviously, we want threads, as we come here only for NPTL
yann@136
   214
    extra_config="${extra_config} --with-__thread"
yann@136
   215
yann@151
   216
    addons_config="--enable-add-ons=`do_libc_add_ons_list ,`"
yann@136
   217
    extra_config="${extra_config} ${addons_config}"
yann@136
   218
yann@136
   219
    # Add some default CC args
yann@328
   220
    glibc_version_major=$(echo ${CT_LIBC_VERSION} |sed -r -e 's/^([^\.]+)\..*/\1/')
yann@328
   221
    glibc_version_minor=$(echo ${CT_LIBC_VERSION} |sed -r -e 's/^[^\.]+\.([^.]+).*/\1/')
yann@482
   222
    if [    ${glibc_version_major} -eq 2 -a ${glibc_version_minor} -ge 6    \
yann@482
   223
         -o ${glibc_version_major} -gt 2                                    ]; then
yann@328
   224
        # Don't use -pipe: configure chokes on it for glibc >= 2.6.
yann@332
   225
        CT_Test 'Removing "-pipe" for use with glibc>=2.6' "${CT_USE_PIPES}" = "y"
yann@328
   226
        extra_cc_args="${CT_CFLAGS_FOR_HOST/-pipe}"
yann@328
   227
    else
yann@328
   228
        extra_cc_args="${CT_CFLAGS_FOR_HOST}"
yann@328
   229
    fi
yann@383
   230
    extra_cc_args="${extra_cc_args} ${CT_ARCH_ENDIAN_OPT}"
yann@136
   231
yann@210
   232
    cross_cc=`CT_Which "${CT_TARGET}-gcc"`
yann@151
   233
    CT_DoLog DEBUG "Using gcc for target    : \"${cross_cc}\""
yann@151
   234
    CT_DoLog DEBUG "Configuring with addons : \"`do_libc_add_ons_list ,`\""
yann@136
   235
    CT_DoLog DEBUG "Extra config args passed: \"${extra_config}\""
yann@151
   236
    CT_DoLog DEBUG "Extra CC args passed    : \"${extra_cc_args}\""
yann@136
   237
yann@391
   238
    # Super-H really needs to set configparms as of gcc-3.4/glibc-2.3.2
yann@391
   239
    # note: this is awkward, doesn't work well if you need more than one
yann@391
   240
    # line in configparms
yann@136
   241
    echo ${CT_LIBC_GLIBC_CONFIGPARMS} > configparms
yann@136
   242
yann@136
   243
    echo "libc_cv_forced_unwind=yes" > config.cache
yann@136
   244
    echo "libc_cv_c_cleanup=yes" >> config.cache
yann@136
   245
yann@136
   246
    # Please see the comment for the configure step in do_libc().
yann@136
   247
yann@136
   248
    BUILD_CC=${CT_CC_NATIVE}                                        \
yann@328
   249
    CFLAGS="${CT_TARGET_CFLAGS} ${CT_LIBC_GLIBC_EXTRA_CFLAGS} -O "  \
yann@410
   250
    CC="${cross_cc} ${CT_LIBC_EXTRA_CC_ARGS} ${extra_cc_args}"      \
yann@136
   251
    AR=${CT_TARGET}-ar                                              \
yann@136
   252
    RANLIB=${CT_TARGET}-ranlib                                      \
yann@136
   253
    "${CT_SRC_DIR}/${CT_LIBC_FILE}/configure"                       \
yann@136
   254
        --prefix=/usr                                               \
yann@136
   255
        --build="${CT_UNIQ_BUILD}"                                  \
yann@136
   256
        --host=${CT_TARGET}                                         \
yann@136
   257
        --without-cvs                                               \
yann@136
   258
        --disable-profile                                           \
yann@136
   259
        --disable-debug                                             \
yann@136
   260
        --without-gd                                                \
yann@136
   261
        --with-headers="${CT_HEADERS_DIR}"                          \
yann@136
   262
        --cache-file=config.cache                                   \
yann@136
   263
        ${extra_config}                                             \
yann@136
   264
        ${CT_LIBC_GLIBC_EXTRA_CONFIG}                               2>&1 |CT_DoLog ALL
yann@136
   265
yann@136
   266
yann@136
   267
    #TODO: should check whether slibdir has been set in configparms to */lib64
yann@136
   268
    #      and copy the startfiles into the appropriate libdir.
yann@328
   269
    CT_DoLog EXTRA "Building C library start files"
yann@136
   270
    make csu/subdir_lib 2>&1 |CT_DoLog ALL
yann@136
   271
yann@328
   272
    CT_DoLog EXTRA "Installing C library start files"
yann@136
   273
    if [ "${CT_USE_SYSROOT}" = "y" ]; then
yann@136
   274
        cp -fp csu/crt[1in].o "${CT_SYSROOT_DIR}/usr/lib/"
yann@136
   275
    else
yann@136
   276
        cp -fp csu/crt[1in].o "${CT_SYSROOT_DIR}/lib/"
yann@136
   277
    fi
yann@136
   278
yann@1
   279
    CT_EndStep
yann@1
   280
}
yann@1
   281
yann@1
   282
# This function builds and install the full glibc
yann@1
   283
do_libc() {
yann@1
   284
    CT_DoStep INFO "Installing C library"
yann@1
   285
yann@1
   286
    mkdir -p "${CT_BUILD_DIR}/build-libc"
yann@1
   287
    cd "${CT_BUILD_DIR}/build-libc"
yann@1
   288
yann@1
   289
    CT_DoLog EXTRA "Configuring C library"
yann@1
   290
yann@1
   291
    # Add some default glibc config options if not given by user.
yann@136
   292
    # We don't need to be conditional on wether the user did set different
yann@136
   293
    # values, as they CT_LIBC_GLIBC_EXTRA_CONFIG is passed after extra_config
yann@136
   294
yann@136
   295
    extra_config="--enable-kernel=`echo ${CT_KERNEL_VERSION} |sed -r -e 's/^([^.]+\.[^.]+\.[^.]+)(|\.[^.]+)$/\1/;'`"
yann@136
   296
yann@136
   297
    case "${CT_THREADS}" in
yann@136
   298
        nptl)           extra_config="${extra_config} --with-__thread --with-tls";;
yann@136
   299
        linuxthreads)   extra_config="${extra_config} --with-__thread --without-tls --without-nptl";;
yann@136
   300
        none)           extra_config="${extra_config} --without-__thread --without-nptl"
yann@136
   301
                        case "${CT_LIBC_GLIBC_EXTRA_CONFIG}" in
yann@136
   302
                            *-tls*) ;;
yann@136
   303
                            *) extra_config="${extra_config} --without-tls";;
yann@136
   304
                        esac
yann@136
   305
                        ;;
yann@1
   306
    esac
yann@136
   307
yann@1
   308
    case "${CT_SHARED_LIBS}" in
yann@1
   309
        y) extra_config="${extra_config} --enable-shared";;
yann@1
   310
        *) extra_config="${extra_config} --disable-shared";;
yann@1
   311
    esac
yann@136
   312
yann@136
   313
    case "${CT_ARCH_FLOAT_HW},${CT_ARCH_FLOAT_SW}" in
yann@136
   314
        y,) extra_config="${extra_config} --with-fp";;
yann@136
   315
        ,y) extra_config="${extra_config} --without-fp";;
yann@1
   316
    esac
yann@78
   317
yann@151
   318
    case "`do_libc_add_ons_list ,`" in
yann@151
   319
        "") ;;
yann@151
   320
        *)  extra_config="${extra_config} --enable-add-ons=`do_libc_add_ons_list ,`";;
yann@136
   321
    esac
yann@151
   322
yann@136
   323
yann@136
   324
    # Add some default CC args
yann@328
   325
    glibc_version_major=$(echo ${CT_LIBC_VERSION} |sed -r -e 's/^([^\.]+)\..*/\1/')
yann@328
   326
    glibc_version_minor=$(echo ${CT_LIBC_VERSION} |sed -r -e 's/^[^\.]+\.([^.]+).*/\1/')
yann@482
   327
    if [    ${glibc_version_major} -eq 2 -a ${glibc_version_minor} -ge 6    \
yann@482
   328
         -o ${glibc_version_major} -gt 2                                    ]; then
yann@328
   329
        # Don't use -pipe: configure chokes on it for glibc >= 2.6.
yann@332
   330
        CT_Test 'Removing "-pipe" for use with glibc>=2.6' "${CT_USE_PIPES}" = "y"
yann@328
   331
        extra_cc_args="${CT_CFLAGS_FOR_HOST/-pipe}"
yann@328
   332
    else
yann@328
   333
        extra_cc_args="${CT_CFLAGS_FOR_HOST}"
yann@136
   334
    fi
yann@383
   335
    extra_cc_args="${extra_cc_args} ${CT_ARCH_ENDIAN_OPT}"
yann@1
   336
yann@210
   337
    cross_cc=`CT_Which "${CT_TARGET}-gcc"`
yann@151
   338
    CT_DoLog DEBUG "Using gcc for target    : \"${cross_cc}\""
yann@151
   339
    CT_DoLog DEBUG "Configuring with addons : \"`do_libc_add_ons_list ,`\""
yann@78
   340
    CT_DoLog DEBUG "Extra config args passed: \"${extra_config}\""
yann@151
   341
    CT_DoLog DEBUG "Extra CC args passed    : \"${extra_cc_args}\""
yann@1
   342
yann@1
   343
    # sh3 and sh4 really need to set configparms as of gcc-3.4/glibc-2.3.2
yann@1
   344
    # note: this is awkward, doesn't work well if you need more than one line in configparms
yann@1
   345
    echo ${CT_LIBC_GLIBC_CONFIGPARMS} > configparms
yann@1
   346
yann@1
   347
    # For glibc 2.3.4 and later we need to set some autoconf cache
yann@1
   348
    # variables, because nptl/sysdeps/pthread/configure.in does not
yann@1
   349
    # work when cross-compiling.
yann@136
   350
    if [ "${CT_THREADS}" = "nptl" ]; then
yann@136
   351
        echo libc_cv_forced_unwind=yes
yann@136
   352
        echo libc_cv_c_cleanup=yes
yann@136
   353
    fi >config.cache
yann@1
   354
yann@1
   355
    # Configure with --prefix the way we want it on the target...
yann@1
   356
    # There are a whole lot of settings here.  You'll probably want
yann@1
   357
    # to read up on what they all mean, and customize a bit, possibly by setting GLIBC_EXTRA_CONFIG
yann@1
   358
    # Compare these options with the ones used when installing the glibc headers above - they're different.
yann@1
   359
    # Adding "--without-gd" option to avoid error "memusagestat.c:36:16: gd.h: No such file or directory" 
yann@1
   360
    # See also http://sources.redhat.com/ml/libc-alpha/2000-07/msg00024.html. 
yann@1
   361
    # Set BUILD_CC, or you won't be able to build datafiles
yann@1
   362
    # Set --build, else glibc-2.3.2 will think you're not cross-compiling, and try to run the test programs
yann@1
   363
yann@136
   364
    # OK. I'm fed up with those folks telling me what I should do.
yann@136
   365
    # I don't configure nptl? Well, maybe that's purposedly because
yann@136
   366
    # I don't want nptl! --disable-sanity-checks will shut up those
yann@136
   367
    # silly messages. GNU folks again, he?
yann@136
   368
yann@1
   369
    BUILD_CC=${CT_CC_NATIVE}                                        \
yann@1
   370
    CFLAGS="${CT_TARGET_CFLAGS} ${CT_LIBC_GLIBC_EXTRA_CFLAGS} -O"   \
yann@328
   371
    CC="${CT_TARGET}-gcc ${CT_LIBC_EXTRA_CC_ARGS} ${extra_cc_args}" \
yann@1
   372
    AR=${CT_TARGET}-ar                                              \
yann@1
   373
    RANLIB=${CT_TARGET}-ranlib                                      \
yann@1
   374
    "${CT_SRC_DIR}/${CT_LIBC_FILE}/configure"                       \
yann@1
   375
        --prefix=/usr                                               \
yann@136
   376
        --build=${CT_UNIQ_BUILD}                                    \
yann@136
   377
        --host=${CT_TARGET}                                         \
yann@1
   378
        --without-cvs                                               \
yann@1
   379
        --disable-profile                                           \
yann@1
   380
        --disable-debug                                             \
yann@1
   381
        --without-gd                                                \
yann@136
   382
        --disable-sanity-checks                                     \
yann@136
   383
        --cache-file=config.cache                                   \
yann@78
   384
        --with-headers="${CT_HEADERS_DIR}"                          \
yann@78
   385
        ${extra_config}                                             \
yann@78
   386
        ${CT_LIBC_GLIBC_EXTRA_CONFIG}                               2>&1 |CT_DoLog ALL
yann@1
   387
yann@1
   388
    if grep -l '^install-lib-all:' "${CT_SRC_DIR}/${CT_LIBC_FILE}/Makerules" > /dev/null; then
yann@1
   389
        # nptl-era glibc.
yann@1
   390
        # If the install-lib-all target (which is added by our make-install-lib-all.patch)
yann@1
   391
        # is present, it means we're building glibc-2.3.3 or later, and we can't
yann@1
   392
        # build programs yet, as they require libeh, which won't be installed
yann@1
   393
        # until full build of gcc
yann@481
   394
        # YEM-FIXME: This comment is misleading: latest glibc-s do not have the
yann@481
   395
        #            make-install-lib-all.patch applied, so do not pass through this
yann@481
   396
        #            part of the if statement; nonetheless, they do build, and
yann@481
   397
        #            the result is useable (maybe the dual-pass core gcc is
yann@481
   398
        #            responsible for this).
yann@1
   399
        GLIBC_INITIAL_BUILD_RULE=lib
yann@1
   400
        GLIBC_INITIAL_INSTALL_RULE="install-lib-all install-headers"
yann@1
   401
        GLIBC_INSTALL_APPS_LATER=yes
yann@1
   402
    else
yann@1
   403
        # classic glibc.  
yann@1
   404
        # We can build and install everything with the bootstrap compiler.
yann@1
   405
        GLIBC_INITIAL_BUILD_RULE=all
yann@1
   406
        GLIBC_INITIAL_INSTALL_RULE=install
yann@1
   407
        GLIBC_INSTALL_APPS_LATER=no
yann@1
   408
    fi
yann@1
   409
yann@1
   410
    # If this fails with an error like this:
yann@1
   411
    # ...  linux/autoconf.h: No such file or directory 
yann@1
   412
    # then you need to set the KERNELCONFIG variable to point to a .config file for this arch.
yann@1
   413
    # The following architectures are known to need kernel .config: alpha, arm, ia64, s390, sh, sparc
yann@1
   414
    # Note: LD and RANLIB needed by glibc-2.1.3's c_stub directory, at least on macosx
yann@1
   415
    # No need for PARALLELMFLAGS here, Makefile already reads this environment variable
yann@1
   416
    CT_DoLog EXTRA "Building C library"
yann@1
   417
    make LD=${CT_TARGET}-ld             \
yann@1
   418
         RANLIB=${CT_TARGET}-ranlib     \
yann@78
   419
         ${GLIBC_INITIAL_BUILD_RULE}    2>&1 |CT_DoLog ALL
yann@1
   420
yann@1
   421
    CT_DoLog EXTRA "Installing C library"
yann@1
   422
    make install_root="${CT_SYSROOT_DIR}"   \
yann@1
   423
         ${LIBC_SYSROOT_ARG}                \
yann@78
   424
         ${GLIBC_INITIAL_INSTALL_RULE}      2>&1 |CT_DoLog ALL
yann@1
   425
yann@1
   426
    # This doesn't seem to work when building a crosscompiler,
yann@1
   427
    # as it tries to execute localedef using the just-built ld.so!?
yann@1
   428
    #CT_DoLog EXTRA "Installing locales"
yann@78
   429
    #make localedata/install-locales install_root=${SYSROOT} 2>&1 |CT_DoLog ALL
yann@1
   430
yann@1
   431
    # Fix problems in linker scripts.
yann@1
   432
    #
yann@1
   433
    # 1. Remove absolute paths
yann@1
   434
    # Any file in a list of known suspects that isn't a symlink is assumed to be a linker script.
yann@1
   435
    # FIXME: test -h is not portable
yann@1
   436
    # FIXME: probably need to check more files than just these three...
yann@1
   437
    # Need to use sed instead of just assuming we know what's in libc.so because otherwise alpha breaks
yann@1
   438
    #
yann@1
   439
    # 2. Remove lines containing BUG per http://sources.redhat.com/ml/bug-glibc/2003-05/msg00055.html,
yann@1
   440
    # needed to fix gcc-3.2.3/glibc-2.3.2 targeting arm
yann@1
   441
    #
yann@1
   442
    # To make "strip *.so.*" not fail (ptxdist does this), rename to .so_orig rather than .so.orig
yann@1
   443
    CT_DoLog EXTRA "Fixing C library linker scripts"
yann@1
   444
    for file in libc.so libpthread.so libgcc_s.so; do
yann@1
   445
        for dir in lib lib64 usr/lib usr/lib64; do
yann@1
   446
            if [ -f "${CT_SYSROOT_DIR}/${dir}/${file}" -a ! -L ${CT_SYSROOT_DIR}/$lib/$file ]; then
yann@78
   447
                cp "${CT_SYSROOT_DIR}/${dir}/${file}" "${CT_SYSROOT_DIR}/${dir}/${file}_orig"
yann@1
   448
                CT_DoLog DEBUG "Fixing \"${CT_SYS_ROOT_DIR}/${dir}/${file}\""
yann@1
   449
                sed -i -r -e 's,/usr/lib/,,g;
yann@1
   450
                              s,/usr/lib64/,,g;
yann@1
   451
                              s,/lib/,,g;
yann@1
   452
                              s,/lib64/,,g;
yann@78
   453
                              /BUG in libc.scripts.output-format.sed/d' "${CT_SYSROOT_DIR}/${dir}/${file}"
yann@1
   454
            fi
yann@1
   455
        done
yann@1
   456
    done
yann@1
   457
yann@1
   458
    CT_EndStep
yann@1
   459
}
yann@1
   460
yann@1
   461
# This function finishes the glibc install
yann@1
   462
do_libc_finish() {
yann@1
   463
    # Finally, build and install glibc programs, now that libeh (if any) is installed
yann@1
   464
    # Don't do this unless needed, 'cause it causes glibc-2.{1.3,2.2} to fail here with
yann@1
   465
    # .../gcc-3.4.1-glibc-2.1.3/build-glibc/libc.so.6: undefined reference to `__deregister_frame_info'
yann@1
   466
    # .../gcc-3.4.1-glibc-2.1.3/build-glibc/libc.so.6: undefined reference to `__register_frame_info'
yann@1
   467
    [ "${GLIBC_INSTALL_APPS_LATER}" = "yes" ] || return 0
yann@1
   468
yann@1
   469
    CT_DoStep INFO "Finishing C library"
yann@1
   470
yann@1
   471
    cd "${CT_BUILD_DIR}/build-libc"
yann@1
   472
yann@1
   473
    CT_DoLog EXTRA "Re-building C library"
yann@78
   474
    make LD=${CT_TARGET}-ld RANLIB=${CT_TARGET}-ranlib 2>&1 |CT_DoLog ALL
yann@1
   475
yann@1
   476
    CT_DoLog EXTRA "Installing missing C library components"
yann@1
   477
    # note: should do full install and then fix linker scripts, but this is faster
yann@1
   478
    for t in bin rootsbin sbin data others; do
yann@1
   479
        make install_root="${CT_SYSROOT_DIR}"   \
yann@1
   480
             ${LIBC_SYSROOT_ARG}                \
yann@78
   481
             install-${t}                       2>&1 |CT_DoLog ALL
yann@1
   482
    done
yann@78
   483
yann@78
   484
    CT_EndStep
yann@1
   485
}
yann@151
   486
yann@151
   487
# Build up the addons list, separated with $1
yann@151
   488
do_libc_add_ons_list() {
yann@151
   489
    local sep="$1"
yann@151
   490
    local addons_list=`echo "${CT_LIBC_ADDONS_LIST//,/${sep}}" |tr -s ,`
yann@151
   491
    case "${CT_THREADS}" in
yann@151
   492
        none)   ;;
yann@151
   493
        *)      addons_list="${addons_list}${sep}${CT_THREADS}";;
yann@151
   494
    esac
yann@151
   495
    [ "${CT_LIBC_GLIBC_USE_PORTS}" = "y" ] && addons_list="${addons_list}${sep}ports"
yann@151
   496
    addons_list="${addons_list%%${sep}}"
yann@151
   497
    echo "${addons_list##${sep}}"
yann@151
   498
}
yann@151
   499