scripts/build/cc/gcc.sh
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sun Jul 17 17:54:21 2011 +0200 (2011-07-17)
changeset 2888 dd71df95903a
parent 2887 6ee3b25e1097
child 2889 f3b2199620f1
permissions -rw-r--r--
cc/gcc: pass the companion libs prefix to cc_core

In case of canadian-cross, the companion libraries are not the same for
the core cc (they run on 'build') as they are for the final cc (they run
on 'host').

Prepare for this differentiation (coming later), while retaining the
current behavior (to use the same compblibs).

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
yann@850
     1
# This file adds the function to build the gcc C compiler
yann@850
     2
# Copyright 2007 Yann E. MORIN
yann@850
     3
# Licensed under the GPL v2. See COPYING in the root of this package
yann@850
     4
yann@850
     5
# Download gcc
yann@850
     6
do_cc_get() {
yann@2302
     7
    local linaro_version
yann@2302
     8
    local linaro_series
yann@2302
     9
    local linaro_base_url="http://launchpad.net/gcc-linaro"
yann@2302
    10
yann@2302
    11
yann@2302
    12
    # Account for the Linaro versioning
yann@2302
    13
    linaro_version="$( echo "${CT_CC_VERSION}"      \
yann@2302
    14
                       |sed -r -e 's/^linaro-//;'   \
yann@2302
    15
                     )"
yann@2302
    16
    linaro_series="$( echo "${linaro_version}"      \
yann@2302
    17
                      |sed -r -e 's/-.*//;'         \
yann@2302
    18
                    )"
yann@2302
    19
yann@850
    20
    # Ah! gcc folks are kind of 'different': they store the tarballs in
yann@850
    21
    # subdirectories of the same name! That's because gcc is such /crap/ that
yann@850
    22
    # it is such /big/ that it needs being splitted for distribution! Sad. :-(
yann@850
    23
    # Arrgghh! Some of those versions does not follow this convention:
yann@850
    24
    # gcc-3.3.3 lives in releases/gcc-3.3.3, while gcc-2.95.* isn't in a
yann@850
    25
    # subdirectory! You bastard!
yann@1389
    26
    CT_GetFile "gcc-${CT_CC_VERSION}"                                                       \
yann@1389
    27
               {ftp,http}://ftp.gnu.org/gnu/gcc{,{,/releases}/gcc-${CT_CC_VERSION}}         \
yann@1389
    28
               ftp://ftp.irisa.fr/pub/mirrors/gcc.gnu.org/gcc/releases/gcc-${CT_CC_VERSION} \
yann@2302
    29
               ftp://ftp.uvsq.fr/pub/gcc/snapshots/${CT_CC_VERSION}                         \
yann@2302
    30
               "${linaro_base_url}/${linaro_series}/${linaro_version}/+download"
yann@1268
    31
yann@1129
    32
    # Starting with GCC 4.3, ecj is used for Java, and will only be
yann@1129
    33
    # built if the configure script finds ecj.jar at the top of the
yann@1129
    34
    # GCC source tree, which will not be there unless we get it and
yann@1129
    35
    # put it there ourselves
yann@1129
    36
    if [ "${CT_CC_LANG_JAVA_USE_ECJ}" = "y" ]; then
yann@1129
    37
        CT_GetFile ecj-latest .jar ftp://gcc.gnu.org/pub/java   \
yann@1129
    38
                                   ftp://sourceware.org/pub/java
yann@1129
    39
    fi
yann@850
    40
}
yann@850
    41
yann@850
    42
# Extract gcc
yann@850
    43
do_cc_extract() {
yann@1389
    44
    CT_Extract "gcc-${CT_CC_VERSION}"
yann@1901
    45
    CT_Patch "gcc" "${CT_CC_VERSION}"
yann@1268
    46
yann@1129
    47
    # Copy ecj-latest.jar to ecj.jar at the top of the GCC source tree
yann@1389
    48
    if [ "${CT_CC_LANG_JAVA_USE_ECJ}" = "y"                     \
yann@1389
    49
         -a ! -f "${CT_SRC_DIR}/gcc-${CT_CC_VERSION}/ecj.jar"   \
yann@1259
    50
       ]; then
yann@1389
    51
        CT_DoExecLog ALL cp -v "${CT_TARBALLS_DIR}/ecj-latest.jar" "${CT_SRC_DIR}/gcc-${CT_CC_VERSION}/ecj.jar"
yann@1129
    52
    fi
yann@850
    53
}
yann@850
    54
yann@850
    55
#------------------------------------------------------------------------------
yann@850
    56
# Core gcc pass 1
yann@850
    57
do_cc_core_pass_1() {
yann@2886
    58
    local -a core_opts
yann@2886
    59
    local do_core
yann@2886
    60
yann@850
    61
    # If we're building for bare metal, build the static core gcc,
yann@850
    62
    # with libgcc.
linux@1925
    63
    # In case we're not bare metal and building a canadian compiler, do nothing
yann@850
    64
    # In case we're not bare metal, and we're NPTL, build the static core gcc.
yann@850
    65
    # In any other case, do nothing.
linux@1925
    66
    case "${CT_BARE_METAL},${CT_CANADIAN},${CT_THREADS}" in
yann@2886
    67
        y,*,*)
yann@2886
    68
            do_core=y
yann@2886
    69
            core_opts+=( "mode=static" )
yann@2888
    70
            core_opts+=( "complibs=${CT_COMPLIBS_DIR}" )
yann@2886
    71
            ;;
yann@2886
    72
        ,y,*)
yann@2886
    73
            ;;
yann@2886
    74
        ,,nptl)
yann@2886
    75
            do_core=y
yann@2886
    76
            core_opts+=( "mode=static" )
yann@2888
    77
            core_opts+=( "complibs=${CT_COMPLIBS_DIR}" )
yann@2886
    78
            ;;
yann@2886
    79
        *)
yann@2886
    80
            ;;
yann@850
    81
    esac
yann@2886
    82
yann@2886
    83
    if [ "${do_core}" = "y" ]; then
yann@2887
    84
        do_cc_core_backend "${core_opts[@]}"
yann@2886
    85
    fi
yann@850
    86
}
yann@850
    87
yann@850
    88
# Core gcc pass 2
yann@850
    89
do_cc_core_pass_2() {
yann@2886
    90
    local -a core_opts
yann@2886
    91
    local do_core
yann@2886
    92
yann@850
    93
    # In case we're building for bare metal, do nothing, we already have
yann@850
    94
    # our compiler.
linux@1925
    95
    # In case we're not bare metal and building a canadian compiler, do nothing
yann@892
    96
    # In case we're NPTL, build the shared core gcc and the target libgcc.
yann@892
    97
    # In any other case, build the static core gcc and, if using gcc-4.3+,
yann@892
    98
    # also build the target libgcc.
linux@1925
    99
    case "${CT_BARE_METAL},${CT_CANADIAN},${CT_THREADS}" in
bryanhundven@2212
   100
        y,*,*)
yann@2886
   101
            do_core=y
yann@2886
   102
            core_opts+=( "mode=baremetal" )
yann@2886
   103
            core_opts+=( "build_libgcc=yes" )
yann@2886
   104
            core_opts+=( "build_libstdcxx=yes" )
yann@2888
   105
            core_opts+=( "complibs=${CT_COMPLIBS_DIR}" )
bryanhundven@2212
   106
            if [ "${CT_STATIC_TOOLCHAIN}" = "y" ]; then
yann@2886
   107
                core_opts+=( "build_staticlinked=yes" )
bryanhundven@2212
   108
            fi
yann@2886
   109
            core_opts+=( "build_manuals=yes" )
bryanhundven@2212
   110
            ;;
yann@1983
   111
        ,y,*)   ;;
linux@1925
   112
        ,,nptl)
yann@2886
   113
            do_core=y
yann@2886
   114
            core_opts+=( "mode=shared" )
yann@2886
   115
            core_opts+=( "build_libgcc=yes" )
yann@2888
   116
            core_opts+=( "complibs=${CT_COMPLIBS_DIR}" )
yann@892
   117
            ;;
bryanhundven@2212
   118
        ,,win32)
yann@2886
   119
            do_core=y
yann@2886
   120
            core_opts+=( "mode=static" )
yann@2886
   121
            core_opts+=( "build_libgcc=yes" )
yann@2888
   122
            core_opts+=( "complibs=${CT_COMPLIBS_DIR}" )
bartvdrmeulen@2017
   123
            ;;
yann@2886
   124
        *)
yann@2886
   125
            do_core=y
yann@2886
   126
            core_opts+=( "mode=static" )
yann@2888
   127
            core_opts+=( "complibs=${CT_COMPLIBS_DIR}" )
yann@2886
   128
            if [ "${CT_CC_GCC_4_3_or_later}" = "y" ]; then
yann@2886
   129
                core_opts+=( "build_libgcc=yes" )
yann@892
   130
            fi
yann@892
   131
            ;;
yann@850
   132
    esac
yann@2886
   133
yann@2886
   134
    if [ "${do_core}" = "y" ]; then
yann@2887
   135
        do_cc_core_backend "${core_opts[@]}"
yann@2886
   136
    fi
yann@850
   137
}
yann@850
   138
yann@850
   139
#------------------------------------------------------------------------------
yann@850
   140
# Build core gcc
yann@2886
   141
# This function is used to build both the static and the shared core C compiler,
yann@850
   142
# with or without the target libgcc. We need to know wether:
yann@850
   143
#  - we're building static, shared or bare metal: mode=[static|shared|baremetal]
bryanhundven@2212
   144
#  - we need to build libgcc or not             : build_libgcc=[yes|no]       (default: no)
bryanhundven@2212
   145
#  - we need to build libstdc++ or not          : build_libstdcxx=[yes|no]    (default: no)
bryanhundven@2212
   146
#  - we need to build statically linked or not  : build_staticlinked=[yes|no] (default: no)
yann@2888
   147
#  - where to find the companion libs (prefix)  : complibs=<prefix_dir>       (no default value)
yann@2887
   148
# Usage: do_cc_core_backend mode=[static|shared|baremetal] build_libgcc=[yes|no] build_staticlinked=[yes|no]
yann@2887
   149
do_cc_core_backend() {
yann@850
   150
    local mode
yann@1980
   151
    local build_libgcc=no
yann@1983
   152
    local build_libstdcxx=no
bryanhundven@2212
   153
    local build_staticlinked=no
michael@2765
   154
    local build_manuals=no
yann@850
   155
    local core_prefix_dir
yann@2888
   156
    local complibs
yann@1107
   157
    local lang_opt
yann@1479
   158
    local tmp
yann@2368
   159
    local -a host_libstdcxx_flags
yann@1479
   160
    local -a extra_config
bryanhundven@2212
   161
    local -a core_LDFLAGS
yann@1981
   162
    local -a core_targets
yann@2884
   163
    local arg
yann@850
   164
yann@2884
   165
    for arg in "$@"; do
yann@2884
   166
        eval "${arg// /\\ }"
yann@1980
   167
    done
yann@850
   168
yann@1107
   169
    lang_opt=c
yann@850
   170
    case "${mode}" in
yann@850
   171
        static)
yann@850
   172
            core_prefix_dir="${CT_CC_CORE_STATIC_PREFIX_DIR}"
yann@1479
   173
            extra_config+=("--with-newlib")
yann@1479
   174
            extra_config+=("--enable-threads=no")
yann@1479
   175
            extra_config+=("--disable-shared")
yann@1983
   176
            copy_headers=y  # For baremetal, as there's no headers to copy,
yann@1983
   177
                            # we copy an empty directory. So, who cares?
yann@850
   178
            ;;
yann@850
   179
        shared)
yann@850
   180
            core_prefix_dir="${CT_CC_CORE_SHARED_PREFIX_DIR}"
yann@1479
   181
            extra_config+=("--enable-shared")
yann@850
   182
            copy_headers=y
yann@850
   183
            ;;
yann@850
   184
        baremetal)
yann@850
   185
            core_prefix_dir="${CT_PREFIX_DIR}"
yann@1479
   186
            extra_config+=("--with-newlib")
yann@1479
   187
            extra_config+=("--enable-threads=no")
yann@1479
   188
            extra_config+=("--disable-shared")
yann@1107
   189
            [ "${CT_CC_LANG_CXX}" = "y" ] && lang_opt="${lang_opt},c++"
yann@850
   190
            copy_headers=n
yann@850
   191
            ;;
yann@1980
   192
        *)
yann@1980
   193
            CT_Abort "Internal Error: 'mode' must be one of: 'static', 'shared' or 'baremetal', not '${mode:-(empty)}'"
yann@1980
   194
            ;;
yann@850
   195
    esac
yann@850
   196
yann@1980
   197
    CT_DoStep INFO "Installing ${mode} core C compiler"
yann@1980
   198
    mkdir -p "${CT_BUILD_DIR}/build-cc-core-${mode}"
yann@1980
   199
    cd "${CT_BUILD_DIR}/build-cc-core-${mode}"
yann@1980
   200
benoit@2487
   201
    if [ "${CT_CC_GCC_HAS_PKGVERSION_BUGURL}" = "y" ]; then
benoit@2487
   202
        # Bare metal delivers the core compiler as final compiler, so add version info and bugurl
benoit@2503
   203
        extra_config+=("--with-pkgversion=${CT_PKGVERSION}")
benoit@2503
   204
        [ -n "${CT_TOOLCHAIN_BUGURL}" ] && extra_config+=("--with-bugurl=${CT_TOOLCHAIN_BUGURL}")
benoit@2487
   205
    fi
linux@1898
   206
yann@850
   207
    if [ "${copy_headers}" = "y" ]; then
yann@850
   208
        CT_DoLog DEBUG "Copying headers to install area of bootstrap gcc, so it can build libgcc2"
yann@1979
   209
        CT_DoExecLog ALL cp -a "${CT_HEADERS_DIR}" "${core_prefix_dir}/${CT_TARGET}/include"
yann@850
   210
    fi
yann@850
   211
yann@850
   212
    CT_DoLog EXTRA "Configuring ${mode} core C compiler"
yann@850
   213
yann@1479
   214
    for tmp in ARCH ABI CPU TUNE FPU FLOAT; do
yann@1479
   215
        eval tmp="\${CT_ARCH_WITH_${tmp}}"
yann@1479
   216
        if [ -n "${tmp}" ]; then
yann@1479
   217
            extra_config+=("${tmp}")
yann@1479
   218
        fi
yann@1479
   219
    done
yann@850
   220
    if [ "${CT_CC_CXA_ATEXIT}" = "y" ]; then
yann@1479
   221
        extra_config+=("--enable-__cxa_atexit")
yann@850
   222
    else
yann@1479
   223
        extra_config+=("--disable-__cxa_atexit")
yann@850
   224
    fi
yann@850
   225
bryanhundven@2212
   226
    # *** WARNING ! ***
bryanhundven@2212
   227
    # Keep this full if-else-if-elif-fi-fi block in sync
bryanhundven@2212
   228
    # with the same block in do_cc, below.
bryanhundven@2212
   229
    if [ "${build_staticlinked}" = "yes" ]; then
bryanhundven@2212
   230
        core_LDFLAGS+=("-static")
yann@2368
   231
        host_libstdcxx_flags+=("-static-libgcc")
yann@2368
   232
        host_libstdcxx_flags+=("-Wl,-Bstatic,-lstdc++")
yann@2368
   233
        host_libstdcxx_flags+=("-lm")
bryanhundven@2212
   234
        # Companion libraries are build static (eg !shared), so
bryanhundven@2212
   235
        # the libstdc++ is not pulled automatically, although it
bryanhundven@2212
   236
        # is needed. Shoe-horn it in our LDFLAGS
bryanhundven@2212
   237
        # Ditto libm on some Fedora boxen
yann@2360
   238
        core_LDFLAGS+=("-lstdc++")
yann@2360
   239
        core_LDFLAGS+=("-lm")
bryanhundven@2212
   240
    else
bryanhundven@2212
   241
        if [ "${CT_CC_STATIC_LIBSTDCXX}" = "y" ]; then
bryanhundven@2212
   242
            # this is from CodeSourcery arm-2010q1-202-arm-none-linux-gnueabi.src.tar.bz2
bryanhundven@2212
   243
            # build script
yann@2491
   244
            # INFO: if the host gcc is gcc-4.5 then presumably we could use -static-libstdc++,
yann@2491
   245
            #       see http://gcc.gnu.org/ml/gcc-patches/2009-06/msg01635.html
yann@2368
   246
            host_libstdcxx_flags+=("-static-libgcc")
yann@2368
   247
            host_libstdcxx_flags+=("-Wl,-Bstatic,-lstdc++,-Bdynamic")
yann@2368
   248
            host_libstdcxx_flags+=("-lm")
bryanhundven@2212
   249
        elif [ "${CT_COMPLIBS_SHARED}" != "y" ]; then
bryanhundven@2212
   250
            # When companion libraries are build static (eg !shared),
bryanhundven@2212
   251
            # the libstdc++ is not pulled automatically, although it
bryanhundven@2212
   252
            # is needed. Shoe-horn it in our LDFLAGS
bryanhundven@2212
   253
            # Ditto libm on some Fedora boxen
bryanhundven@2212
   254
            core_LDFLAGS+=("-lstdc++")
bryanhundven@2212
   255
            core_LDFLAGS+=("-lm")
bryanhundven@2212
   256
        fi
yann@1892
   257
    fi
bryanhundven@2212
   258
yann@1893
   259
    if [ "${CT_CC_GCC_USE_GMP_MPFR}" = "y" ]; then
yann@2888
   260
        extra_config+=("--with-gmp=${complibs}")
yann@2888
   261
        extra_config+=("--with-mpfr=${complibs}")
yann@1893
   262
    fi
yann@2122
   263
    if [ "${CT_CC_GCC_USE_MPC}" = "y" ]; then
yann@2888
   264
        extra_config+=("--with-mpc=${complibs}")
yann@2122
   265
    fi
yann@2122
   266
    if [ "${CT_CC_GCC_USE_GRAPHITE}" = "y" ]; then
yann@2888
   267
        extra_config+=("--with-ppl=${complibs}")
yann@2368
   268
        # With PPL 0.11+, also pull libpwl if needed
yann@2368
   269
        if [ "${CT_PPL_NEEDS_LIBPWL}" = "y" ]; then
yann@2888
   270
            host_libstdcxx_flags+=("-L${complibs}/lib")
yann@2368
   271
            host_libstdcxx_flags+=("-lpwl")
yann@2368
   272
        fi
yann@2888
   273
        extra_config+=("--with-cloog=${complibs}")
yann@2123
   274
    elif [ "${CT_CC_GCC_HAS_GRAPHITE}" = "y" ]; then
yann@2123
   275
        extra_config+=("--with-ppl=no")
yann@2123
   276
        extra_config+=("--with-cloog=no")
yann@2014
   277
    fi
yann@2122
   278
    if [ "${CT_CC_GCC_USE_LTO}" = "y" ]; then
yann@2888
   279
        extra_config+=("--with-libelf=${complibs}")
yann@2142
   280
        extra_config+=("--enable-lto")
yann@2123
   281
    elif [ "${CT_CC_GCC_HAS_LTO}" = "y" ]; then
yann@2123
   282
        extra_config+=("--with-libelf=no")
yann@2142
   283
        extra_config+=("--disable-lto")
yann@1920
   284
    fi
yann@1893
   285
yann@2368
   286
    if [ ${#host_libstdcxx_flags[@]} -ne 0 ]; then
yann@2368
   287
        extra_config+=("--with-host-libstdcxx=${host_libstdcxx_flags[*]}")
yann@2368
   288
    fi
yann@2368
   289
titus@1972
   290
    if [ "${CT_CC_GCC_ENABLE_TARGET_OPTSPACE}" = "y" ]; then
titus@1972
   291
        extra_config+=("--enable-target-optspace")
titus@1972
   292
    fi
titus@1972
   293
yann@2143
   294
    case "${CT_CC_GCC_LDBL_128}" in
yann@2153
   295
        y)  extra_config+=("--with-long-double-128");;
yann@2153
   296
        m)  ;;
yann@2143
   297
        "") extra_config+=("--without-long-double-128");;
yann@2143
   298
    esac
yann@2143
   299
yann@2521
   300
    if [ "${CT_CC_GCC_BUILD_ID}" = "y" ]; then
yann@2521
   301
        extra_config+=( --enable-linker-build-id )
yann@2521
   302
    fi
yann@2521
   303
yann@2522
   304
    case "${CT_CC_GCC_LNK_HASH_STYLE}" in
yann@2522
   305
        "") ;;
yann@2522
   306
        *)  extra_config+=( "--with-linker-hash-style=${CT_CC_GCC_LNK_HASH_STYLE}" );;
yann@2522
   307
    esac
yann@2522
   308
yann@2532
   309
    case "${CT_ARCH}" in
yann@2532
   310
        mips)
yann@2532
   311
            case "${CT_CC_GCC_mips_llsc}" in
yann@2532
   312
                y)  extra_config+=( --with-llsc );;
yann@2532
   313
                m)  ;;
yann@2532
   314
                *)  extra_config+=( --without-llsc );;
yann@2532
   315
            esac
yann@2532
   316
            case "${CT_CC_GCC_mips_synci}" in
yann@2532
   317
                y)  extra_config+=( --with-synci );;
yann@2532
   318
                m)  ;;
yann@2532
   319
                *)  extra_config+=( --without-synci );;
yann@2532
   320
            esac
yann@2532
   321
            if [ "${CT_CC_GCC_mips_plt}" ]; then
yann@2532
   322
                extra_config+=( --with-mips-plt )
yann@2532
   323
            fi
yann@2532
   324
            ;; # ARCH is mips
yann@2523
   325
    esac
yann@2523
   326
yann@2545
   327
    extra_config+=(--disable-libgomp)
yann@2545
   328
    extra_config+=(--disable-libmudflap)
yann@2545
   329
zhenqiang@2780
   330
    [ "${CT_TOOLCHAIN_ENABLE_NLS}" != "y" ] && extra_config+=("--disable-nls")
zhenqiang@2780
   331
zhenqiang@2782
   332
    [ "${CT_CC_GCC_DISABLE_PCH}" = "y" ] && extra_config+=("--disable-libstdcxx-pch")
zhenqiang@2782
   333
yann@2814
   334
    if [ "${CT_CC_GCC_SYSTEM_ZLIB}" = "y" ]; then
yann@2814
   335
        extra_config+=("--with-system-zlib")
yann@2814
   336
    fi
yann@2814
   337
yann@2817
   338
    if [ "${CT_MULTILIB}" = "y" ]; then
yann@2817
   339
        extra_config+=("--enable-multilib")
yann@2817
   340
    else
yann@2817
   341
        extra_config+=("--disable-multilib")
yann@2817
   342
    fi
yann@2817
   343
yann@1893
   344
    CT_DoLog DEBUG "Extra config passed: '${extra_config[*]}'"
yann@1892
   345
yann@850
   346
    # Use --with-local-prefix so older gccs don't look in /usr/local (http://gcc.gnu.org/PR10532)
yann@2355
   347
    CT_DoExecLog CFG                                \
yann@1041
   348
    CC_FOR_BUILD="${CT_BUILD}-gcc"                  \
yann@850
   349
    CFLAGS="${CT_CFLAGS_FOR_HOST}"                  \
bryanhundven@2212
   350
    LDFLAGS="${core_LDFLAGS[*]}"                    \
yann@1389
   351
    "${CT_SRC_DIR}/gcc-${CT_CC_VERSION}/configure"  \
yann@1041
   352
        --build=${CT_BUILD}                         \
yann@850
   353
        --host=${CT_HOST}                           \
yann@850
   354
        --target=${CT_TARGET}                       \
yann@850
   355
        --prefix="${core_prefix_dir}"               \
yann@850
   356
        --with-local-prefix="${CT_SYSROOT_DIR}"     \
yann@2043
   357
        --disable-libmudflap                        \
yann@850
   358
        ${CC_CORE_SYSROOT_ARG}                      \
yann@1479
   359
        "${extra_config[@]}"                        \
yann@1107
   360
        --enable-languages="${lang_opt}"            \
yann@2467
   361
        "${CT_CC_CORE_EXTRA_CONFIG_ARRAY[@]}"
yann@850
   362
yann@850
   363
    if [ "${build_libgcc}" = "yes" ]; then
yann@850
   364
        # HACK: we need to override SHLIB_LC from gcc/config/t-slibgcc-elf-ver or
yann@850
   365
        # gcc/config/t-libunwind so -lc is removed from the link for
yann@850
   366
        # libgcc_s.so, as we do not have a target -lc yet.
yann@850
   367
        # This is not as ugly as it appears to be ;-) All symbols get resolved
yann@850
   368
        # during the glibc build, and we provide a proper libgcc_s.so for the
yann@850
   369
        # cross toolchain during the final gcc build.
yann@850
   370
        #
yann@850
   371
        # As we cannot modify the source tree, nor override SHLIB_LC itself
yann@850
   372
        # during configure or make, we have to edit the resultant
yann@850
   373
        # gcc/libgcc.mk itself to remove -lc from the link.
yann@850
   374
        # This causes us to have to jump through some hoops...
yann@850
   375
        #
yann@850
   376
        # To produce libgcc.mk to edit we firstly require libiberty.a,
yann@850
   377
        # so we configure then build it.
yann@850
   378
        # Next we have to configure gcc, create libgcc.mk then edit it...
yann@850
   379
        # So much easier if we just edit the source tree, but hey...
yann@1389
   380
        if [ ! -f "${CT_SRC_DIR}/gcc-${CT_CC_VERSION}/gcc/BASE-VER" ]; then
yann@2676
   381
            CT_DoExecLog CFG make ${JOBSFLAGS} configure-libiberty
yann@2275
   382
            CT_DoExecLog ALL make ${JOBSFLAGS} -C libiberty libiberty.a
yann@2676
   383
            CT_DoExecLog CFG make ${JOBSFLAGS} configure-gcc configure-libcpp
yann@2275
   384
            CT_DoExecLog ALL make ${JOBSFLAGS} all-libcpp
yann@850
   385
        else
yann@2676
   386
            CT_DoExecLog CFG make ${JOBSFLAGS} configure-gcc configure-libcpp configure-build-libiberty
yann@2275
   387
            CT_DoExecLog ALL make ${JOBSFLAGS} all-libcpp all-build-libiberty
yann@850
   388
        fi
yann@850
   389
        # HACK: gcc-4.2 uses libdecnumber to build libgcc.mk, so build it here.
yann@1389
   390
        if [ -d "${CT_SRC_DIR}/gcc-${CT_CC_VERSION}/libdecnumber" ]; then
yann@2676
   391
            CT_DoExecLog CFG make ${JOBSFLAGS} configure-libdecnumber
yann@2275
   392
            CT_DoExecLog ALL make ${JOBSFLAGS} -C libdecnumber libdecnumber.a
yann@850
   393
        fi
yann@850
   394
yann@850
   395
        # Starting with GCC 4.3, libgcc.mk is no longer built,
yann@850
   396
        # and libgcc.mvars is used instead.
yann@850
   397
yann@892
   398
        if [ "${CT_CC_GCC_4_3_or_later}" = "y" ]; then
yann@850
   399
            libgcc_rule="libgcc.mvars"
yann@1981
   400
            core_targets=( gcc target-libgcc )
yann@850
   401
        else
yann@850
   402
            libgcc_rule="libgcc.mk"
yann@1981
   403
            core_targets=( gcc )
yann@850
   404
        fi
yann@850
   405
linux@1926
   406
        # On bare metal and canadian build the host-compiler is used when
linux@1926
   407
        # actually the build-system compiler is required. Choose the correct
linux@1926
   408
        # compilers for canadian build and use the defaults on other
linux@1926
   409
        # configurations.
linux@1926
   410
        if [ "${CT_BARE_METAL},${CT_CANADIAN}" = "y,y" ]; then
linux@1926
   411
            repair_cc="CC_FOR_BUILD=${CT_BUILD}-gcc \
linux@1926
   412
                       GCC_FOR_TARGET=${CT_TARGET}-gcc"
linux@1926
   413
        else
linux@1926
   414
            repair_cc=""
linux@1926
   415
        fi
linux@1926
   416
yann@2275
   417
        CT_DoExecLog ALL make ${JOBSFLAGS} -C gcc ${libgcc_rule} \
linux@1926
   418
                              ${repair_cc}
yann@850
   419
        sed -r -i -e 's@-lc@@g' gcc/${libgcc_rule}
yann@850
   420
    else # build_libgcc
yann@1981
   421
        core_targets=( gcc )
yann@850
   422
    fi   # ! build libgcc
yann@1983
   423
    if [    "${build_libstdcxx}" = "yes"    \
yann@1983
   424
         -a "${CT_CC_LANG_CXX}"  = "y"      \
yann@1983
   425
       ]; then
yann@1983
   426
        core_targets+=( target-libstdc++-v3 )
yann@1983
   427
    fi
yann@850
   428
yann@850
   429
    CT_DoLog EXTRA "Building ${mode} core C compiler"
yann@2275
   430
    CT_DoExecLog ALL make ${JOBSFLAGS} "${core_targets[@]/#/all-}"
yann@850
   431
yann@850
   432
    CT_DoLog EXTRA "Installing ${mode} core C compiler"
yann@2676
   433
    CT_DoExecLog ALL make ${JOBSFLAGS} "${core_targets[@]/#/install-}"
yann@850
   434
michael@2765
   435
    if [ "${CT_BUILD_MANUALS}" = "y" -a "${build_manuals}" = "yes" ]; then
michael@2765
   436
        CT_DoLog EXTRA "Building the GCC manuals"
michael@2765
   437
        CT_DoExecLog ALL make pdf html
michael@2765
   438
        CT_DoLog EXTRA "Installing the GCC manuals"
michael@2765
   439
        CT_DoExecLog ALL make install-{pdf,html}-gcc
michael@2765
   440
    fi
michael@2765
   441
yann@1269
   442
    # Create a symlink ${CT_TARGET}-cc to ${CT_TARGET}-gcc to always be able
yann@1269
   443
    # to call the C compiler with the same, somewhat canonical name.
linux@1924
   444
    # check whether compiler has an extension
linux@1924
   445
    file="$( ls -1 "${core_prefix_dir}/bin/${CT_TARGET}-gcc."* 2>/dev/null || true )"
linux@1924
   446
    [ -z "${file}" ] || ext=".${file##*.}"
yann@2550
   447
    CT_DoExecLog ALL ln -sfv "${CT_TARGET}-gcc${ext}" "${core_prefix_dir}/bin/${CT_TARGET}-cc${ext}"
yann@1269
   448
yann@2818
   449
    if [ "${CT_MULTILIB}" = "y" ]; then
yann@2818
   450
        multilibs=( $( "${core_prefix_dir}/bin/${CT_TARGET}-gcc" -print-multi-lib   \
yann@2818
   451
                       |tail -n +2 ) )
yann@2818
   452
        if [ ${#multilibs[@]} -ne 0 ]; then
yann@2818
   453
            CT_DoLog EXTRA "gcc configured with these multilibs (besides the default):"
yann@2818
   454
            for i in "${multilibs[@]}"; do
yann@2818
   455
                dir="${i%%;*}"
yann@2818
   456
                flags="${i#*;}"
yann@2818
   457
                CT_DoLog EXTRA "   ${flags//@/ -}  -->  ${dir}/"
yann@2818
   458
            done
yann@2818
   459
        else
yann@2818
   460
            CT_DoLog WARN "gcc configured for multilib, but none available"
yann@2818
   461
        fi
yann@2818
   462
    fi
yann@2818
   463
yann@850
   464
    CT_EndStep
yann@850
   465
}
yann@850
   466
yann@850
   467
#------------------------------------------------------------------------------
yann@850
   468
# Build final gcc
yann@850
   469
do_cc() {
yann@2368
   470
    local -a host_libstdcxx_flags
yann@1479
   471
    local -a extra_config
bryanhundven@2211
   472
    local -a final_LDFLAGS
yann@1479
   473
    local tmp
yann@1479
   474
yann@850
   475
    # If building for bare metal, nothing to be done here, the static core conpiler is enough!
yann@850
   476
    [ "${CT_BARE_METAL}" = "y" ] && return 0
yann@850
   477
yann@850
   478
    CT_DoStep INFO "Installing final compiler"
yann@850
   479
yann@850
   480
    mkdir -p "${CT_BUILD_DIR}/build-cc"
yann@850
   481
    cd "${CT_BUILD_DIR}/build-cc"
yann@850
   482
yann@850
   483
    CT_DoLog EXTRA "Configuring final compiler"
yann@850
   484
yann@850
   485
    # Enable selected languages
yann@850
   486
    lang_opt="c"
yann@850
   487
    [ "${CT_CC_LANG_CXX}" = "y"      ] && lang_opt="${lang_opt},c++"
yann@850
   488
    [ "${CT_CC_LANG_FORTRAN}" = "y"  ] && lang_opt="${lang_opt},fortran"
yann@850
   489
    [ "${CT_CC_LANG_ADA}" = "y"      ] && lang_opt="${lang_opt},ada"
yann@850
   490
    [ "${CT_CC_LANG_JAVA}" = "y"     ] && lang_opt="${lang_opt},java"
yann@850
   491
    [ "${CT_CC_LANG_OBJC}" = "y"     ] && lang_opt="${lang_opt},objc"
yann@850
   492
    [ "${CT_CC_LANG_OBJCXX}" = "y"   ] && lang_opt="${lang_opt},obj-c++"
yann@850
   493
    CT_Test "Building ADA language is not yet supported. Will try..." "${CT_CC_LANG_ADA}" = "y"
yann@850
   494
    CT_Test "Building Objective-C language is not yet supported. Will try..." "${CT_CC_LANG_OBJC}" = "y"
yann@850
   495
    CT_Test "Building Objective-C++ language is not yet supported. Will try..." "${CT_CC_LANG_OBJCXX}" = "y"
yann@850
   496
    CT_Test "Building ${CT_CC_LANG_OTHERS//,/ } language(s) is not yet supported. Will try..." -n "${CT_CC_LANG_OTHERS}"
yann@850
   497
    lang_opt=$(echo "${lang_opt},${CT_CC_LANG_OTHERS}" |sed -r -e 's/,+/,/g; s/,*$//;')
yann@850
   498
yann@1479
   499
    extra_config+=("--enable-languages=${lang_opt}")
yann@1479
   500
    for tmp in ARCH ABI CPU TUNE FPU FLOAT; do
yann@1479
   501
        eval tmp="\${CT_ARCH_WITH_${tmp}}"
yann@1479
   502
        if [ -n "${tmp}" ]; then
yann@1479
   503
            extra_config+=("${tmp}")
yann@1479
   504
        fi
yann@1479
   505
    done
yann@1479
   506
benoit@2487
   507
    [ "${CT_SHARED_LIBS}" = "y" ] || extra_config+=("--disable-shared")
benoit@2487
   508
    if [ "${CT_CC_GCC_HAS_PKGVERSION_BUGURL}" = "y" ]; then
benoit@2503
   509
        extra_config+=("--with-pkgversion=${CT_PKGVERSION}")
benoit@2503
   510
        [ -n "${CT_TOOLCHAIN_BUGURL}" ] && extra_config+=("--with-bugurl=${CT_TOOLCHAIN_BUGURL}")
benoit@2487
   511
    fi
yann@2042
   512
    case "${CT_CC_GCC_SJLJ_EXCEPTIONS}" in
yann@2042
   513
        y)  extra_config+=("--enable-sjlj-exceptions");;
yann@2042
   514
        m)  ;;
yann@2042
   515
        "") extra_config+=("--disable-sjlj-exceptions");;
yann@2042
   516
    esac
yann@850
   517
    if [ "${CT_CC_CXA_ATEXIT}" = "y" ]; then
yann@1479
   518
        extra_config+=("--enable-__cxa_atexit")
yann@850
   519
    else
yann@1479
   520
        extra_config+=("--disable-__cxa_atexit")
yann@850
   521
    fi
benoit@2475
   522
    if [ -n "${CT_CC_ENABLE_CXX_FLAGS}" ]; then
benoit@2475
   523
        extra_config+=("--enable-cxx-flags=${CT_CC_ENABLE_CXX_FLAGS}")
yann@1484
   524
    fi
yann@2043
   525
    if [ "${CT_CC_GCC_LIBMUDFLAP}" = "y" ]; then
yann@2043
   526
        extra_config+=(--enable-libmudflap)
yann@2043
   527
    else
yann@2043
   528
        extra_config+=(--disable-libmudflap)
yann@2043
   529
    fi
yann@2145
   530
    if [ "${CT_CC_GCC_LIBGOMP}" = "y" ]; then
yann@2145
   531
        extra_config+=(--enable-libgomp)
yann@2145
   532
    else
yann@2145
   533
        extra_config+=(--disable-libgomp)
yann@2145
   534
    fi
yann@2146
   535
    if [ "${CT_CC_GCC_LIBSSP}" = "y" ]; then
yann@2146
   536
        extra_config+=(--enable-libssp)
yann@2146
   537
    else
yann@2146
   538
        extra_config+=(--disable-libssp)
yann@2146
   539
    fi
yann@1893
   540
bryanhundven@2212
   541
    # *** WARNING ! ***
bryanhundven@2212
   542
    # Keep this full if-else-if-elif-fi-fi block in sync
bryanhundven@2212
   543
    # with the same block in do_cc_core, above.
bryanhundven@2211
   544
    if [ "${CT_STATIC_TOOLCHAIN}" = "y" ]; then
bryanhundven@2211
   545
        final_LDFLAGS+=("-static")
yann@2368
   546
        host_libstdcxx_flags+=("-static-libgcc")
yann@2368
   547
        host_libstdcxx_flags+=("-Wl,-Bstatic,-lstdc++")
yann@2368
   548
        host_libstdcxx_flags+=("-lm")
bryanhundven@2211
   549
        # Companion libraries are build static (eg !shared), so
js@2045
   550
        # the libstdc++ is not pulled automatically, although it
js@2045
   551
        # is needed. Shoe-horn it in our LDFLAGS
dwatkins@2070
   552
        # Ditto libm on some Fedora boxen
bryanhundven@2211
   553
        final_LDFLAGS+=("-lstdc++")
bryanhundven@2211
   554
        final_LDFLAGS+=("-lm")
bryanhundven@2211
   555
    else
bryanhundven@2211
   556
        if [ "${CT_CC_STATIC_LIBSTDCXX}" = "y" ]; then
bryanhundven@2211
   557
            # this is from CodeSourcery arm-2010q1-202-arm-none-linux-gnueabi.src.tar.bz2
bryanhundven@2211
   558
            # build script
yann@2491
   559
            # INFO: if the host gcc is gcc-4.5 then presumably we could use -static-libstdc++,
yann@2491
   560
            #       see http://gcc.gnu.org/ml/gcc-patches/2009-06/msg01635.html
yann@2368
   561
            host_libstdcxx_flags+=("-static-libgcc")
yann@2368
   562
            host_libstdcxx_flags+=("-Wl,-Bstatic,-lstdc++,-Bdynamic")
yann@2368
   563
            host_libstdcxx_flags+=("-lm")
bryanhundven@2211
   564
        elif [ "${CT_COMPLIBS_SHARED}" != "y" ]; then
bryanhundven@2211
   565
            # When companion libraries are build static (eg !shared),
bryanhundven@2211
   566
            # the libstdc++ is not pulled automatically, although it
bryanhundven@2211
   567
            # is needed. Shoe-horn it in our LDFLAGS
bryanhundven@2211
   568
            # Ditto libm on some Fedora boxen
bryanhundven@2211
   569
            final_LDFLAGS+=("-lstdc++")
bryanhundven@2211
   570
            final_LDFLAGS+=("-lm")
bryanhundven@2211
   571
        fi
yann@1893
   572
    fi
bryanhundven@2211
   573
lacombar@1880
   574
    if [ "${CT_CC_GCC_USE_GMP_MPFR}" = "y" ]; then
yann@1893
   575
        extra_config+=("--with-gmp=${CT_COMPLIBS_DIR}")
yann@1893
   576
        extra_config+=("--with-mpfr=${CT_COMPLIBS_DIR}")
yann@1848
   577
    fi
yann@2122
   578
    if [ "${CT_CC_GCC_USE_MPC}" = "y" ]; then
yann@2122
   579
        extra_config+=("--with-mpc=${CT_COMPLIBS_DIR}")
yann@2122
   580
    fi
yann@2122
   581
    if [ "${CT_CC_GCC_USE_GRAPHITE}" = "y" ]; then
yann@1893
   582
        extra_config+=("--with-ppl=${CT_COMPLIBS_DIR}")
yann@2368
   583
        # With PPL 0.11+, also pull libpwl if needed
yann@2368
   584
        if [ "${CT_PPL_NEEDS_LIBPWL}" = "y" ]; then
yann@2368
   585
            host_libstdcxx_flags+=("-L${CT_COMPLIBS_DIR}/lib")
yann@2368
   586
            host_libstdcxx_flags+=("-lpwl")
yann@2368
   587
        fi
yann@1893
   588
        extra_config+=("--with-cloog=${CT_COMPLIBS_DIR}")
yann@2123
   589
    elif [ "${CT_CC_GCC_HAS_GRAPHITE}" = "y" ]; then
yann@2123
   590
        extra_config+=("--with-ppl=no")
yann@2123
   591
        extra_config+=("--with-cloog=no")
yann@2014
   592
    fi
yann@2122
   593
    if [ "${CT_CC_GCC_USE_LTO}" = "y" ]; then
yann@1920
   594
        extra_config+=("--with-libelf=${CT_COMPLIBS_DIR}")
yann@2123
   595
    elif [ "${CT_CC_GCC_HAS_LTO}" = "y" ]; then
yann@2123
   596
        extra_config+=("--with-libelf=no")
yann@1920
   597
    fi
yann@850
   598
yann@2368
   599
    if [ ${#host_libstdcxx_flags[@]} -ne 0 ]; then
yann@2368
   600
        extra_config+=("--with-host-libstdcxx=${host_libstdcxx_flags[*]}")
yann@2368
   601
    fi
yann@2368
   602
lacombar@1881
   603
    if [ "${CT_THREADS}" = "none" ]; then
lacombar@1881
   604
        extra_config+=("--disable-threads")
lacombar@1881
   605
        if [ "${CT_CC_GCC_4_2_or_later}" = y ]; then
yann@2145
   606
            CT_Test "Disabling libgomp for no-thread gcc>=4.2" "${CT_CC_GCC_LIBGOMP}" = "Y"
lacombar@1881
   607
            extra_config+=("--disable-libgomp")
lacombar@1881
   608
        fi
lacombar@1881
   609
    else
bartvdrmeulen@2017
   610
        if [ "${CT_THREADS}" = "win32" ]; then
bartvdrmeulen@2017
   611
            extra_config+=("--enable-threads=win32")
bartvdrmeulen@2017
   612
            extra_config+=("--disable-win32-registry")
bartvdrmeulen@2017
   613
        else
bartvdrmeulen@2017
   614
            extra_config+=("--enable-threads=posix")
bartvdrmeulen@2017
   615
        fi
lacombar@1881
   616
    fi
lacombar@1881
   617
titus@1972
   618
    if [ "${CT_CC_GCC_ENABLE_TARGET_OPTSPACE}" = "y" ]; then
titus@1972
   619
        extra_config+=("--enable-target-optspace")
titus@1972
   620
    fi
yann@1991
   621
    if [ "${CT_CC_GCC_DISABLE_PCH}" = "y" ]; then
yann@1991
   622
        extra_config+=("--disable-libstdcxx-pch")
yann@1991
   623
    fi
titus@1972
   624
yann@2143
   625
    case "${CT_CC_GCC_LDBL_128}" in
yann@2153
   626
        y)  extra_config+=("--with-long-double-128");;
yann@2153
   627
        m)  ;;
yann@2143
   628
        "") extra_config+=("--without-long-double-128");;
yann@2143
   629
    esac
yann@2143
   630
yann@2521
   631
    if [ "${CT_CC_GCC_BUILD_ID}" = "y" ]; then
yann@2521
   632
        extra_config+=( --enable-linker-build-id )
yann@2521
   633
    fi
yann@2521
   634
yann@2522
   635
    case "${CT_CC_GCC_LNK_HASH_STYLE}" in
yann@2522
   636
        "") ;;
yann@2522
   637
        *)  extra_config+=( "--with-linker-hash-style=${CT_CC_GCC_LNK_HASH_STYLE}" );;
yann@2522
   638
    esac
yann@2522
   639
yann@2287
   640
    if [ "${CT_CC_GCC_ENABLE_PLUGINS}" = "y" ]; then
yann@2287
   641
        extra_config+=( --enable-plugin )
yann@2287
   642
    fi
yann@2287
   643
    if [ "${CT_CC_GCC_GOLD}" = "y" ]; then
yann@2248
   644
        extra_config+=( --enable-gold )
yann@2248
   645
    fi
yann@2248
   646
yann@2532
   647
    case "${CT_ARCH}" in
yann@2532
   648
        mips)
yann@2532
   649
            case "${CT_CC_GCC_mips_llsc}" in
yann@2532
   650
                y)  extra_config+=( --with-llsc );;
yann@2532
   651
                m)  ;;
yann@2532
   652
                *)  extra_config+=( --without-llsc );;
yann@2532
   653
            esac
yann@2532
   654
            case "${CT_CC_GCC_mips_synci}" in
yann@2532
   655
                y)  extra_config+=( --with-synci );;
yann@2532
   656
                m)  ;;
yann@2532
   657
                *)  extra_config+=( --without-synci );;
yann@2532
   658
            esac
yann@2532
   659
            if [ "${CT_CC_GCC_mips_plt}" ]; then
yann@2532
   660
                extra_config+=( --with-mips-plt )
yann@2532
   661
            fi
yann@2532
   662
            ;; # ARCH is mips
yann@2532
   663
    esac
yann@2532
   664
zhenqiang@2780
   665
    [ "${CT_TOOLCHAIN_ENABLE_NLS}" != "y" ] && extra_config+=("--disable-nls")
zhenqiang@2780
   666
yann@2814
   667
    if [ "${CT_CC_GCC_SYSTEM_ZLIB}" = "y" ]; then
yann@2814
   668
        extra_config+=("--with-system-zlib")
yann@2814
   669
    fi
yann@2814
   670
yann@2817
   671
    if [ "${CT_MULTILIB}" = "y" ]; then
yann@2817
   672
        extra_config+=("--enable-multilib")
yann@2817
   673
    else
yann@2817
   674
        extra_config+=("--disable-multilib")
yann@2817
   675
    fi
yann@2817
   676
yann@1479
   677
    CT_DoLog DEBUG "Extra config passed: '${extra_config[*]}'"
yann@850
   678
yann@2355
   679
    CT_DoExecLog CFG                                \
yann@1122
   680
    CC_FOR_BUILD="${CT_BUILD}-gcc"                  \
yann@1122
   681
    CFLAGS="${CT_CFLAGS_FOR_HOST}"                  \
bryanhundven@2211
   682
    LDFLAGS="${final_LDFLAGS[*]}"                   \
yann@1122
   683
    CFLAGS_FOR_TARGET="${CT_TARGET_CFLAGS}"         \
yann@1122
   684
    CXXFLAGS_FOR_TARGET="${CT_TARGET_CFLAGS}"       \
yann@1122
   685
    LDFLAGS_FOR_TARGET="${CT_TARGET_LDFLAGS}"       \
yann@1389
   686
    "${CT_SRC_DIR}/gcc-${CT_CC_VERSION}/configure"  \
yann@1122
   687
        --build=${CT_BUILD}                         \
yann@1122
   688
        --host=${CT_HOST}                           \
yann@1122
   689
        --target=${CT_TARGET}                       \
yann@1122
   690
        --prefix="${CT_PREFIX_DIR}"                 \
yann@1122
   691
        ${CC_SYSROOT_ARG}                           \
yann@1479
   692
        "${extra_config[@]}"                        \
yann@1122
   693
        --with-local-prefix="${CT_SYSROOT_DIR}"     \
yann@1122
   694
        --enable-c99                                \
yann@1122
   695
        --enable-long-long                          \
yann@2467
   696
        "${CT_CC_EXTRA_CONFIG_ARRAY[@]}"
yann@850
   697
yann@850
   698
    if [ "${CT_CANADIAN}" = "y" ]; then
yann@850
   699
        CT_DoLog EXTRA "Building libiberty"
yann@2275
   700
        CT_DoExecLog ALL make ${JOBSFLAGS} all-build-libiberty
yann@850
   701
    fi
yann@850
   702
yann@850
   703
    CT_DoLog EXTRA "Building final compiler"
yann@2275
   704
    CT_DoExecLog ALL make ${JOBSFLAGS} all
yann@850
   705
yann@850
   706
    CT_DoLog EXTRA "Installing final compiler"
yann@2676
   707
    CT_DoExecLog ALL make ${JOBSFLAGS} install
yann@850
   708
michael@2765
   709
    if [ "${CT_BUILD_MANUALS}" = "y" ]; then
michael@2765
   710
        CT_DoLog EXTRA "Building the GCC manuals"
michael@2765
   711
        CT_DoExecLog ALL make ${JOBSFLAGS} pdf html
michael@2765
   712
        CT_DoLog EXTRA "Installing the GCC manuals"
michael@2765
   713
        CT_DoExecLog ALL make install-{pdf,html}-gcc
michael@2765
   714
    fi
michael@2765
   715
yann@850
   716
    # Create a symlink ${CT_TARGET}-cc to ${CT_TARGET}-gcc to always be able
yann@850
   717
    # to call the C compiler with the same, somewhat canonical name.
linux@1924
   718
    # check whether compiler has an extension
bartvdrmeulen@2031
   719
    file="$( ls -1 "${CT_PREFIX_DIR}/bin/${CT_TARGET}-gcc."* 2>/dev/null || true )"
linux@1924
   720
    [ -z "${file}" ] || ext=".${file##*.}"
yann@2550
   721
    CT_DoExecLog ALL ln -sfv "${CT_TARGET}-gcc${ext}" "${CT_PREFIX_DIR}/bin/${CT_TARGET}-cc${ext}"
yann@850
   722
yann@2818
   723
    if [ "${CT_MULTILIB}" = "y" ]; then
yann@2818
   724
        multilibs=( $( "${CT_PREFIX_DIR}/bin/${CT_TARGET}-gcc" -print-multi-lib \
yann@2818
   725
                       |tail -n +2 ) )
yann@2818
   726
        if [ ${#multilibs[@]} -ne 0 ]; then
yann@2818
   727
            CT_DoLog EXTRA "gcc configured with these multilibs (besides the default):"
yann@2818
   728
            for i in "${multilibs[@]}"; do
yann@2818
   729
                dir="${i%%;*}"
yann@2818
   730
                flags="${i#*;}"
yann@2818
   731
                CT_DoLog EXTRA "   ${flags//@/ -}  -->  ${dir}/"
yann@2818
   732
            done
yann@2818
   733
        else
yann@2818
   734
            CT_DoLog WARN "gcc configured for multilib, but none available"
yann@2818
   735
        fi
yann@2818
   736
    fi
yann@2818
   737
yann@850
   738
    CT_EndStep
yann@850
   739
}