scripts/build/cc/gcc.sh
author "Benoît Thébaudeau" <benoit.thebaudeau@advansee.com>
Mon Apr 16 15:25:36 2012 +0200 (2012-04-16)
changeset 2941 13e40098fffc
parent 2935 4a563f872440
child 2980 150402ee5468
child 3002 56e4a47dcf88
permissions -rw-r--r--
cc/gcc: update Linaro GCC revisions to 2012.04

Update Linaro GCC with the latest available revisions.

The 4.7 revision is also released, but the infrastructure is not yet ready for
it in CT-NG.

Signed-off-by: "Benoît Thébaudeau" <benoit.thebaudeau@advansee.com>
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@2932
    56
# This function builds up the set of languages to enable
yann@2932
    57
# No argument expected, returns the comma-separated language list on stdout
yann@2932
    58
cc_gcc_lang_list() {
yann@2932
    59
    local lang_list
yann@2932
    60
yann@2932
    61
    lang_list="c"
yann@2932
    62
    [ "${CT_CC_LANG_CXX}" = "y"      ] && lang_list+=",c++"
yann@2932
    63
    [ "${CT_CC_LANG_FORTRAN}" = "y"  ] && lang_list+=",fortran"
yann@2932
    64
    [ "${CT_CC_LANG_ADA}" = "y"      ] && lang_list+=",ada"
yann@2932
    65
    [ "${CT_CC_LANG_JAVA}" = "y"     ] && lang_list+=",java"
yann@2932
    66
    [ "${CT_CC_LANG_OBJC}" = "y"     ] && lang_list+=",objc"
yann@2932
    67
    [ "${CT_CC_LANG_OBJCXX}" = "y"   ] && lang_list+=",obj-c++"
yann@2932
    68
    lang_list+="${CT_CC_LANG_OTHERS:+,${CT_CC_LANG_OTHERS}}"
yann@2932
    69
yann@2932
    70
    printf "%s" "${lang_list}"
yann@2932
    71
}
yann@2932
    72
yann@2932
    73
#------------------------------------------------------------------------------
yann@850
    74
# Core gcc pass 1
yann@850
    75
do_cc_core_pass_1() {
yann@2886
    76
    local -a core_opts
yann@2886
    77
    local do_core
yann@2886
    78
yann@2930
    79
    # We only need a pass-1 core gcc if the threading model is NPTL.
yann@2930
    80
    # For all other cases, it is not used.
yann@2936
    81
    case "${CT_THREADS}" in
yann@2936
    82
        nptl)
yann@2886
    83
            do_core=y
yann@2886
    84
            core_opts+=( "mode=static" )
yann@2925
    85
            core_opts+=( "host=${CT_BUILD}" )
yann@2931
    86
            core_opts+=( "complibs=${CT_BUILDTOOLS_PREFIX_DIR}" )
yann@2924
    87
            core_opts+=( "prefix=${CT_BUILDTOOLS_PREFIX_DIR}" )
yann@2891
    88
            core_opts+=( "cflags=${CT_CFLAGS_FOR_HOST}" )
yann@2933
    89
            core_opts+=( "lang_list=c" )
yann@2886
    90
            ;;
yann@850
    91
    esac
yann@2886
    92
yann@2886
    93
    if [ "${do_core}" = "y" ]; then
yann@2900
    94
        CT_DoStep INFO "Installing pass-1 core C compiler"
yann@2900
    95
        CT_mkdir_pushd "${CT_BUILD_DIR}/build-cc-core-pass-1"
yann@2900
    96
yann@2887
    97
        do_cc_core_backend "${core_opts[@]}"
yann@2900
    98
yann@2900
    99
        CT_Popd
yann@2900
   100
        CT_EndStep
yann@2886
   101
    fi
yann@850
   102
}
yann@850
   103
yann@850
   104
# Core gcc pass 2
yann@850
   105
do_cc_core_pass_2() {
yann@2886
   106
    local -a core_opts
yann@2886
   107
    local do_core
yann@2886
   108
yann@2930
   109
    # Common options:
yann@2930
   110
    core_opts+=( "host=${CT_BUILD}" )
yann@2924
   111
    core_opts+=( "prefix=${CT_BUILDTOOLS_PREFIX_DIR}" )
yann@2931
   112
    core_opts+=( "complibs=${CT_BUILDTOOLS_PREFIX_DIR}" )
yann@2930
   113
    core_opts+=( "cflags=${CT_CFLAGS_FOR_HOST}" )
yann@2933
   114
    core_opts+=( "lang_list=c" )
yann@2930
   115
yann@2930
   116
    # Different conditions are at stake here:
yann@2930
   117
    #   - In case the threading model is NPTL, we need a shared-capable core
yann@2930
   118
    #     gcc; in all other cases, we need a static-only core gcc.
yann@2930
   119
    #   - In case the threading model is NPTL or win32, or gcc is 4.3 or
yann@2930
   120
    #     later, we need to build libgcc
yann@2936
   121
    case "${CT_THREADS}" in
yann@2936
   122
        nptl)
yann@2886
   123
            do_core=y
yann@2886
   124
            core_opts+=( "mode=shared" )
yann@2886
   125
            core_opts+=( "build_libgcc=yes" )
yann@892
   126
            ;;
yann@2936
   127
        win32)
yann@2886
   128
            do_core=y
yann@2886
   129
            core_opts+=( "mode=static" )
yann@2886
   130
            core_opts+=( "build_libgcc=yes" )
bartvdrmeulen@2017
   131
            ;;
yann@2886
   132
        *)
yann@2886
   133
            do_core=y
yann@2886
   134
            core_opts+=( "mode=static" )
yann@2886
   135
            if [ "${CT_CC_GCC_4_3_or_later}" = "y" ]; then
yann@2886
   136
                core_opts+=( "build_libgcc=yes" )
yann@892
   137
            fi
yann@892
   138
            ;;
yann@850
   139
    esac
yann@2886
   140
yann@2886
   141
    if [ "${do_core}" = "y" ]; then
yann@2900
   142
        CT_DoStep INFO "Installing pass-2 core C compiler"
yann@2900
   143
        CT_mkdir_pushd "${CT_BUILD_DIR}/build-cc-core-pass-2"
yann@2900
   144
yann@2887
   145
        do_cc_core_backend "${core_opts[@]}"
yann@2900
   146
yann@2900
   147
        CT_Popd
yann@2900
   148
        CT_EndStep
yann@2886
   149
    fi
yann@850
   150
}
yann@850
   151
yann@850
   152
#------------------------------------------------------------------------------
yann@850
   153
# Build core gcc
yann@2897
   154
# This function is used to build the core C compiler.
yann@2897
   155
# Usage: do_cc_core_backend param=value [...]
yann@2897
   156
#   Parameter           : Definition                                : Type      : Default
yann@2897
   157
#   mode                : build a 'static', 'shared' or 'baremetal' : string    : (none)
yann@2897
   158
#   host                : the machine the core will run on          : tuple     : (none)
yann@2897
   159
#   prefix              : dir prefix to install into                : dir       : (none)
yann@2897
   160
#   complibs            : dir where complibs are isntalled          : dir       : (none)
yann@2933
   161
#   lang_list           : the list of languages to build            : string    : (empty)
yann@2897
   162
#   build_libgcc        : build libgcc or not                       : bool      : no
yann@2897
   163
#   build_libstdcxx     : build libstdc++ or not                    : bool      : no
yann@2897
   164
#   build_staticlinked  : build statically linked or not            : bool      : no
yann@2897
   165
#   build_manuals       : whether to build manuals or not           : bool      : no
yann@2897
   166
#   cflags              : host CFLAGS to use                        : string    : (empty)
yann@2887
   167
# Usage: do_cc_core_backend mode=[static|shared|baremetal] build_libgcc=[yes|no] build_staticlinked=[yes|no]
yann@2887
   168
do_cc_core_backend() {
yann@850
   169
    local mode
yann@1980
   170
    local build_libgcc=no
yann@1983
   171
    local build_libstdcxx=no
bryanhundven@2212
   172
    local build_staticlinked=no
michael@2765
   173
    local build_manuals=no
yann@2890
   174
    local host
yann@2889
   175
    local prefix
yann@2888
   176
    local complibs
yann@2933
   177
    local lang_list
yann@2891
   178
    local cflags
yann@1479
   179
    local tmp
yann@2368
   180
    local -a host_libstdcxx_flags
yann@1479
   181
    local -a extra_config
bryanhundven@2212
   182
    local -a core_LDFLAGS
yann@1981
   183
    local -a core_targets
yann@2884
   184
    local arg
yann@850
   185
yann@2884
   186
    for arg in "$@"; do
yann@2884
   187
        eval "${arg// /\\ }"
yann@1980
   188
    done
yann@850
   189
yann@2900
   190
    CT_DoLog EXTRA "Configuring core C compiler"
yann@2900
   191
yann@850
   192
    case "${mode}" in
yann@850
   193
        static)
yann@1479
   194
            extra_config+=("--with-newlib")
yann@1479
   195
            extra_config+=("--enable-threads=no")
yann@1479
   196
            extra_config+=("--disable-shared")
yann@1983
   197
            copy_headers=y  # For baremetal, as there's no headers to copy,
yann@1983
   198
                            # we copy an empty directory. So, who cares?
yann@850
   199
            ;;
yann@850
   200
        shared)
yann@1479
   201
            extra_config+=("--enable-shared")
yann@850
   202
            copy_headers=y
yann@850
   203
            ;;
yann@850
   204
        baremetal)
yann@1479
   205
            extra_config+=("--with-newlib")
yann@1479
   206
            extra_config+=("--enable-threads=no")
yann@1479
   207
            extra_config+=("--disable-shared")
yann@850
   208
            copy_headers=n
yann@850
   209
            ;;
yann@1980
   210
        *)
yann@1980
   211
            CT_Abort "Internal Error: 'mode' must be one of: 'static', 'shared' or 'baremetal', not '${mode:-(empty)}'"
yann@1980
   212
            ;;
yann@850
   213
    esac
yann@850
   214
benoit@2487
   215
    if [ "${CT_CC_GCC_HAS_PKGVERSION_BUGURL}" = "y" ]; then
benoit@2487
   216
        # Bare metal delivers the core compiler as final compiler, so add version info and bugurl
benoit@2503
   217
        extra_config+=("--with-pkgversion=${CT_PKGVERSION}")
benoit@2503
   218
        [ -n "${CT_TOOLCHAIN_BUGURL}" ] && extra_config+=("--with-bugurl=${CT_TOOLCHAIN_BUGURL}")
benoit@2487
   219
    fi
linux@1898
   220
yann@850
   221
    if [ "${copy_headers}" = "y" ]; then
yann@850
   222
        CT_DoLog DEBUG "Copying headers to install area of bootstrap gcc, so it can build libgcc2"
yann@2889
   223
        CT_DoExecLog ALL cp -a "${CT_HEADERS_DIR}" "${prefix}/${CT_TARGET}/include"
yann@850
   224
    fi
yann@850
   225
yann@1479
   226
    for tmp in ARCH ABI CPU TUNE FPU FLOAT; do
yann@1479
   227
        eval tmp="\${CT_ARCH_WITH_${tmp}}"
yann@1479
   228
        if [ -n "${tmp}" ]; then
yann@1479
   229
            extra_config+=("${tmp}")
yann@1479
   230
        fi
yann@1479
   231
    done
yann@850
   232
    if [ "${CT_CC_CXA_ATEXIT}" = "y" ]; then
yann@1479
   233
        extra_config+=("--enable-__cxa_atexit")
yann@850
   234
    else
yann@1479
   235
        extra_config+=("--disable-__cxa_atexit")
yann@850
   236
    fi
yann@850
   237
bryanhundven@2212
   238
    # *** WARNING ! ***
bryanhundven@2212
   239
    # Keep this full if-else-if-elif-fi-fi block in sync
bryanhundven@2212
   240
    # with the same block in do_cc, below.
bryanhundven@2212
   241
    if [ "${build_staticlinked}" = "yes" ]; then
bryanhundven@2212
   242
        core_LDFLAGS+=("-static")
yann@2368
   243
        host_libstdcxx_flags+=("-static-libgcc")
yann@2368
   244
        host_libstdcxx_flags+=("-Wl,-Bstatic,-lstdc++")
yann@2368
   245
        host_libstdcxx_flags+=("-lm")
bryanhundven@2212
   246
        # Companion libraries are build static (eg !shared), so
bryanhundven@2212
   247
        # the libstdc++ is not pulled automatically, although it
bryanhundven@2212
   248
        # is needed. Shoe-horn it in our LDFLAGS
bryanhundven@2212
   249
        # Ditto libm on some Fedora boxen
yann@2360
   250
        core_LDFLAGS+=("-lstdc++")
yann@2360
   251
        core_LDFLAGS+=("-lm")
bryanhundven@2212
   252
    else
bryanhundven@2212
   253
        if [ "${CT_CC_STATIC_LIBSTDCXX}" = "y" ]; then
bryanhundven@2212
   254
            # this is from CodeSourcery arm-2010q1-202-arm-none-linux-gnueabi.src.tar.bz2
bryanhundven@2212
   255
            # build script
yann@2491
   256
            # INFO: if the host gcc is gcc-4.5 then presumably we could use -static-libstdc++,
yann@2491
   257
            #       see http://gcc.gnu.org/ml/gcc-patches/2009-06/msg01635.html
yann@2368
   258
            host_libstdcxx_flags+=("-static-libgcc")
yann@2368
   259
            host_libstdcxx_flags+=("-Wl,-Bstatic,-lstdc++,-Bdynamic")
yann@2368
   260
            host_libstdcxx_flags+=("-lm")
bryanhundven@2212
   261
        elif [ "${CT_COMPLIBS_SHARED}" != "y" ]; then
bryanhundven@2212
   262
            # When companion libraries are build static (eg !shared),
bryanhundven@2212
   263
            # the libstdc++ is not pulled automatically, although it
bryanhundven@2212
   264
            # is needed. Shoe-horn it in our LDFLAGS
bryanhundven@2212
   265
            # Ditto libm on some Fedora boxen
bryanhundven@2212
   266
            core_LDFLAGS+=("-lstdc++")
bryanhundven@2212
   267
            core_LDFLAGS+=("-lm")
bryanhundven@2212
   268
        fi
yann@1892
   269
    fi
bryanhundven@2212
   270
yann@1893
   271
    if [ "${CT_CC_GCC_USE_GMP_MPFR}" = "y" ]; then
yann@2888
   272
        extra_config+=("--with-gmp=${complibs}")
yann@2888
   273
        extra_config+=("--with-mpfr=${complibs}")
yann@1893
   274
    fi
yann@2122
   275
    if [ "${CT_CC_GCC_USE_MPC}" = "y" ]; then
yann@2888
   276
        extra_config+=("--with-mpc=${complibs}")
yann@2122
   277
    fi
yann@2122
   278
    if [ "${CT_CC_GCC_USE_GRAPHITE}" = "y" ]; then
yann@2888
   279
        extra_config+=("--with-ppl=${complibs}")
yann@2368
   280
        # With PPL 0.11+, also pull libpwl if needed
yann@2368
   281
        if [ "${CT_PPL_NEEDS_LIBPWL}" = "y" ]; then
yann@2888
   282
            host_libstdcxx_flags+=("-L${complibs}/lib")
yann@2368
   283
            host_libstdcxx_flags+=("-lpwl")
yann@2368
   284
        fi
yann@2888
   285
        extra_config+=("--with-cloog=${complibs}")
yann@2123
   286
    elif [ "${CT_CC_GCC_HAS_GRAPHITE}" = "y" ]; then
yann@2123
   287
        extra_config+=("--with-ppl=no")
yann@2123
   288
        extra_config+=("--with-cloog=no")
yann@2014
   289
    fi
yann@2122
   290
    if [ "${CT_CC_GCC_USE_LTO}" = "y" ]; then
yann@2888
   291
        extra_config+=("--with-libelf=${complibs}")
yann@2142
   292
        extra_config+=("--enable-lto")
yann@2123
   293
    elif [ "${CT_CC_GCC_HAS_LTO}" = "y" ]; then
yann@2123
   294
        extra_config+=("--with-libelf=no")
yann@2142
   295
        extra_config+=("--disable-lto")
yann@1920
   296
    fi
yann@1893
   297
yann@2368
   298
    if [ ${#host_libstdcxx_flags[@]} -ne 0 ]; then
yann@2368
   299
        extra_config+=("--with-host-libstdcxx=${host_libstdcxx_flags[*]}")
yann@2368
   300
    fi
yann@2368
   301
titus@1972
   302
    if [ "${CT_CC_GCC_ENABLE_TARGET_OPTSPACE}" = "y" ]; then
titus@1972
   303
        extra_config+=("--enable-target-optspace")
titus@1972
   304
    fi
titus@1972
   305
yann@2143
   306
    case "${CT_CC_GCC_LDBL_128}" in
yann@2153
   307
        y)  extra_config+=("--with-long-double-128");;
yann@2153
   308
        m)  ;;
yann@2143
   309
        "") extra_config+=("--without-long-double-128");;
yann@2143
   310
    esac
yann@2143
   311
yann@2521
   312
    if [ "${CT_CC_GCC_BUILD_ID}" = "y" ]; then
yann@2521
   313
        extra_config+=( --enable-linker-build-id )
yann@2521
   314
    fi
yann@2521
   315
yann@2522
   316
    case "${CT_CC_GCC_LNK_HASH_STYLE}" in
yann@2522
   317
        "") ;;
yann@2522
   318
        *)  extra_config+=( "--with-linker-hash-style=${CT_CC_GCC_LNK_HASH_STYLE}" );;
yann@2522
   319
    esac
yann@2522
   320
yann@2532
   321
    case "${CT_ARCH}" in
yann@2532
   322
        mips)
yann@2532
   323
            case "${CT_CC_GCC_mips_llsc}" in
yann@2532
   324
                y)  extra_config+=( --with-llsc );;
yann@2532
   325
                m)  ;;
yann@2532
   326
                *)  extra_config+=( --without-llsc );;
yann@2532
   327
            esac
yann@2532
   328
            case "${CT_CC_GCC_mips_synci}" in
yann@2532
   329
                y)  extra_config+=( --with-synci );;
yann@2532
   330
                m)  ;;
yann@2532
   331
                *)  extra_config+=( --without-synci );;
yann@2532
   332
            esac
yann@2532
   333
            if [ "${CT_CC_GCC_mips_plt}" ]; then
yann@2532
   334
                extra_config+=( --with-mips-plt )
yann@2532
   335
            fi
yann@2532
   336
            ;; # ARCH is mips
yann@2523
   337
    esac
yann@2523
   338
yann@2545
   339
    extra_config+=(--disable-libgomp)
yann@2545
   340
    extra_config+=(--disable-libmudflap)
yann@2545
   341
zhenqiang@2780
   342
    [ "${CT_TOOLCHAIN_ENABLE_NLS}" != "y" ] && extra_config+=("--disable-nls")
zhenqiang@2780
   343
zhenqiang@2782
   344
    [ "${CT_CC_GCC_DISABLE_PCH}" = "y" ] && extra_config+=("--disable-libstdcxx-pch")
zhenqiang@2782
   345
yann@2814
   346
    if [ "${CT_CC_GCC_SYSTEM_ZLIB}" = "y" ]; then
yann@2814
   347
        extra_config+=("--with-system-zlib")
yann@2814
   348
    fi
yann@2814
   349
yann@2817
   350
    if [ "${CT_MULTILIB}" = "y" ]; then
yann@2817
   351
        extra_config+=("--enable-multilib")
yann@2817
   352
    else
yann@2817
   353
        extra_config+=("--disable-multilib")
yann@2817
   354
    fi
yann@2817
   355
yann@1893
   356
    CT_DoLog DEBUG "Extra config passed: '${extra_config[*]}'"
yann@1892
   357
yann@850
   358
    # Use --with-local-prefix so older gccs don't look in /usr/local (http://gcc.gnu.org/PR10532)
yann@2355
   359
    CT_DoExecLog CFG                                \
yann@1041
   360
    CC_FOR_BUILD="${CT_BUILD}-gcc"                  \
yann@2891
   361
    CFLAGS="${cflags}"                              \
bryanhundven@2212
   362
    LDFLAGS="${core_LDFLAGS[*]}"                    \
yann@1389
   363
    "${CT_SRC_DIR}/gcc-${CT_CC_VERSION}/configure"  \
yann@1041
   364
        --build=${CT_BUILD}                         \
yann@2890
   365
        --host=${host}                              \
yann@850
   366
        --target=${CT_TARGET}                       \
yann@2889
   367
        --prefix="${prefix}"                        \
yann@850
   368
        --with-local-prefix="${CT_SYSROOT_DIR}"     \
yann@2043
   369
        --disable-libmudflap                        \
yann@850
   370
        ${CC_CORE_SYSROOT_ARG}                      \
yann@1479
   371
        "${extra_config[@]}"                        \
yann@2933
   372
        --enable-languages="${lang_list}"           \
yann@2467
   373
        "${CT_CC_CORE_EXTRA_CONFIG_ARRAY[@]}"
yann@850
   374
yann@850
   375
    if [ "${build_libgcc}" = "yes" ]; then
yann@850
   376
        # HACK: we need to override SHLIB_LC from gcc/config/t-slibgcc-elf-ver or
yann@850
   377
        # gcc/config/t-libunwind so -lc is removed from the link for
yann@850
   378
        # libgcc_s.so, as we do not have a target -lc yet.
yann@850
   379
        # This is not as ugly as it appears to be ;-) All symbols get resolved
yann@850
   380
        # during the glibc build, and we provide a proper libgcc_s.so for the
yann@850
   381
        # cross toolchain during the final gcc build.
yann@850
   382
        #
yann@850
   383
        # As we cannot modify the source tree, nor override SHLIB_LC itself
yann@850
   384
        # during configure or make, we have to edit the resultant
yann@850
   385
        # gcc/libgcc.mk itself to remove -lc from the link.
yann@850
   386
        # This causes us to have to jump through some hoops...
yann@850
   387
        #
yann@850
   388
        # To produce libgcc.mk to edit we firstly require libiberty.a,
yann@850
   389
        # so we configure then build it.
yann@850
   390
        # Next we have to configure gcc, create libgcc.mk then edit it...
yann@850
   391
        # So much easier if we just edit the source tree, but hey...
yann@1389
   392
        if [ ! -f "${CT_SRC_DIR}/gcc-${CT_CC_VERSION}/gcc/BASE-VER" ]; then
yann@2676
   393
            CT_DoExecLog CFG make ${JOBSFLAGS} configure-libiberty
yann@2275
   394
            CT_DoExecLog ALL make ${JOBSFLAGS} -C libiberty libiberty.a
yann@2676
   395
            CT_DoExecLog CFG make ${JOBSFLAGS} configure-gcc configure-libcpp
yann@2275
   396
            CT_DoExecLog ALL make ${JOBSFLAGS} all-libcpp
yann@850
   397
        else
yann@2676
   398
            CT_DoExecLog CFG make ${JOBSFLAGS} configure-gcc configure-libcpp configure-build-libiberty
yann@2275
   399
            CT_DoExecLog ALL make ${JOBSFLAGS} all-libcpp all-build-libiberty
yann@850
   400
        fi
yann@850
   401
        # HACK: gcc-4.2 uses libdecnumber to build libgcc.mk, so build it here.
yann@1389
   402
        if [ -d "${CT_SRC_DIR}/gcc-${CT_CC_VERSION}/libdecnumber" ]; then
yann@2676
   403
            CT_DoExecLog CFG make ${JOBSFLAGS} configure-libdecnumber
yann@2275
   404
            CT_DoExecLog ALL make ${JOBSFLAGS} -C libdecnumber libdecnumber.a
yann@850
   405
        fi
yann@850
   406
yann@850
   407
        # Starting with GCC 4.3, libgcc.mk is no longer built,
yann@850
   408
        # and libgcc.mvars is used instead.
yann@850
   409
yann@892
   410
        if [ "${CT_CC_GCC_4_3_or_later}" = "y" ]; then
yann@850
   411
            libgcc_rule="libgcc.mvars"
yann@1981
   412
            core_targets=( gcc target-libgcc )
yann@850
   413
        else
yann@850
   414
            libgcc_rule="libgcc.mk"
yann@1981
   415
            core_targets=( gcc )
yann@850
   416
        fi
yann@850
   417
linux@1926
   418
        # On bare metal and canadian build the host-compiler is used when
linux@1926
   419
        # actually the build-system compiler is required. Choose the correct
linux@1926
   420
        # compilers for canadian build and use the defaults on other
linux@1926
   421
        # configurations.
linux@1926
   422
        if [ "${CT_BARE_METAL},${CT_CANADIAN}" = "y,y" ]; then
linux@1926
   423
            repair_cc="CC_FOR_BUILD=${CT_BUILD}-gcc \
linux@1926
   424
                       GCC_FOR_TARGET=${CT_TARGET}-gcc"
linux@1926
   425
        else
linux@1926
   426
            repair_cc=""
linux@1926
   427
        fi
linux@1926
   428
yann@2275
   429
        CT_DoExecLog ALL make ${JOBSFLAGS} -C gcc ${libgcc_rule} \
linux@1926
   430
                              ${repair_cc}
yann@850
   431
        sed -r -i -e 's@-lc@@g' gcc/${libgcc_rule}
yann@850
   432
    else # build_libgcc
yann@1981
   433
        core_targets=( gcc )
yann@850
   434
    fi   # ! build libgcc
yann@1983
   435
    if [    "${build_libstdcxx}" = "yes"    \
yann@1983
   436
         -a "${CT_CC_LANG_CXX}"  = "y"      \
yann@1983
   437
       ]; then
yann@1983
   438
        core_targets+=( target-libstdc++-v3 )
yann@1983
   439
    fi
yann@850
   440
yann@2900
   441
    CT_DoLog EXTRA "Building core C compiler"
yann@2275
   442
    CT_DoExecLog ALL make ${JOBSFLAGS} "${core_targets[@]/#/all-}"
yann@850
   443
yann@2900
   444
    CT_DoLog EXTRA "Installing core C compiler"
yann@2676
   445
    CT_DoExecLog ALL make ${JOBSFLAGS} "${core_targets[@]/#/install-}"
yann@850
   446
yann@2894
   447
    if [ "${build_manuals}" = "yes" ]; then
michael@2765
   448
        CT_DoLog EXTRA "Building the GCC manuals"
michael@2765
   449
        CT_DoExecLog ALL make pdf html
michael@2765
   450
        CT_DoLog EXTRA "Installing the GCC manuals"
michael@2765
   451
        CT_DoExecLog ALL make install-{pdf,html}-gcc
michael@2765
   452
    fi
michael@2765
   453
yann@1269
   454
    # Create a symlink ${CT_TARGET}-cc to ${CT_TARGET}-gcc to always be able
yann@1269
   455
    # to call the C compiler with the same, somewhat canonical name.
linux@1924
   456
    # check whether compiler has an extension
yann@2889
   457
    file="$( ls -1 "${prefix}/bin/${CT_TARGET}-gcc."* 2>/dev/null || true )"
linux@1924
   458
    [ -z "${file}" ] || ext=".${file##*.}"
yann@2889
   459
    CT_DoExecLog ALL ln -sfv "${CT_TARGET}-gcc${ext}" "${prefix}/bin/${CT_TARGET}-cc${ext}"
yann@1269
   460
yann@2818
   461
    if [ "${CT_MULTILIB}" = "y" ]; then
zhenqiang@2901
   462
        multilibs=( $( "${prefix}/bin/${CT_TARGET}-gcc" -print-multi-lib   \
yann@2818
   463
                       |tail -n +2 ) )
yann@2818
   464
        if [ ${#multilibs[@]} -ne 0 ]; then
yann@2818
   465
            CT_DoLog EXTRA "gcc configured with these multilibs (besides the default):"
yann@2818
   466
            for i in "${multilibs[@]}"; do
yann@2818
   467
                dir="${i%%;*}"
yann@2818
   468
                flags="${i#*;}"
yann@2818
   469
                CT_DoLog EXTRA "   ${flags//@/ -}  -->  ${dir}/"
yann@2818
   470
            done
yann@2818
   471
        else
yann@2818
   472
            CT_DoLog WARN "gcc configured for multilib, but none available"
yann@2818
   473
        fi
yann@2818
   474
    fi
yann@850
   475
}
yann@850
   476
yann@850
   477
#------------------------------------------------------------------------------
yann@2935
   478
# Build complete gcc to run on build
yann@2935
   479
do_cc_for_build() {
yann@2935
   480
    local -a build_final_opts
yann@2935
   481
    local build_final_backend
yann@2935
   482
yann@2935
   483
    # In case we're canadian or cross-native, it seems that a
yann@2935
   484
    # real, complete compiler is needed?!? WTF? Sigh...
yann@2935
   485
    # Otherwise, there is nothing to do.
yann@2935
   486
    case "${CT_TOOLCHAIN_TYPE}" in
yann@2935
   487
        native|cross)   return 0;;
yann@2935
   488
    esac
yann@2935
   489
yann@2935
   490
    build_final_opts+=( "host=${CT_BUILD}" )
yann@2935
   491
    build_final_opts+=( "prefix=${CT_BUILDTOOLS_PREFIX_DIR}" )
yann@2935
   492
    build_final_opts+=( "complibs=${CT_BUILDTOOLS_PREFIX_DIR}" )
yann@2935
   493
    build_final_opts+=( "lang_list=$( cc_gcc_lang_list )" )
yann@2935
   494
    if [ "${CT_BARE_METAL}" = "y" ]; then
yann@2935
   495
        # In the tests I've done, bare-metal was not impacted by the
yann@2935
   496
        # lack of such a compiler, but better safe than sorry...
yann@2935
   497
        build_final_opts+=( "mode=baremetal" )
yann@2935
   498
        build_final_opts+=( "build_libgcc=yes" )
yann@2935
   499
        build_final_opts+=( "build_libstdcxx=yes" )
yann@2935
   500
        if [ "${CT_STATIC_TOOLCHAIN}" = "y" ]; then
yann@2935
   501
            build_final_opts+=( "build_staticlinked=yes" )
yann@2935
   502
        fi
yann@2935
   503
        build_final_backend=do_cc_core_backend
yann@2935
   504
    else
yann@2935
   505
        build_final_backend=do_cc_backend
yann@2935
   506
    fi
yann@2935
   507
yann@2935
   508
    CT_DoStep INFO "Installing final compiler for build"
yann@2935
   509
    CT_mkdir_pushd "${CT_BUILD_DIR}/build-cc-final-build-${CT_BUILD}"
yann@2935
   510
yann@2935
   511
    "${build_final_backend}" "${build_final_opts[@]}"
yann@2935
   512
yann@2935
   513
    CT_Popd
yann@2935
   514
    CT_EndStep
yann@2935
   515
}
yann@2935
   516
yann@2935
   517
#------------------------------------------------------------------------------
yann@2935
   518
# Build final gcc to run on host
yann@2935
   519
do_cc_for_host() {
yann@2892
   520
    local -a final_opts
yann@2893
   521
    local final_backend
yann@2892
   522
yann@2892
   523
    final_opts+=( "host=${CT_HOST}" )
yann@2892
   524
    final_opts+=( "prefix=${CT_PREFIX_DIR}" )
yann@2931
   525
    final_opts+=( "complibs=${CT_HOST_COMPLIBS_DIR}" )
yann@2892
   526
    final_opts+=( "cflags=${CT_CFLAGS_FOR_HOST}" )
yann@2934
   527
    final_opts+=( "lang_list=$( cc_gcc_lang_list )" )
yann@2894
   528
    if [ "${CT_BUILD_MANUALS}" = "y" ]; then
yann@2894
   529
        final_opts+=( "build_manuals=yes" )
yann@2894
   530
    fi
yann@2893
   531
    if [ "${CT_BARE_METAL}" = "y" ]; then
yann@2893
   532
        final_opts+=( "mode=baremetal" )
yann@2893
   533
        final_opts+=( "build_libgcc=yes" )
yann@2893
   534
        final_opts+=( "build_libstdcxx=yes" )
yann@2893
   535
        if [ "${CT_STATIC_TOOLCHAIN}" = "y" ]; then
yann@2893
   536
            final_opts+=( "build_staticlinked=yes" )
yann@2893
   537
        fi
yann@2893
   538
        final_backend=do_cc_core_backend
yann@2893
   539
    else
yann@2893
   540
        final_backend=do_cc_backend
yann@2893
   541
    fi
yann@2892
   542
yann@2900
   543
    CT_DoStep INFO "Installing final compiler"
yann@2900
   544
    CT_mkdir_pushd "${CT_BUILD_DIR}/build-cc-final"
yann@2900
   545
yann@2893
   546
    "${final_backend}" "${final_opts[@]}"
yann@2900
   547
yann@2900
   548
    CT_Popd
yann@2900
   549
    CT_EndStep
yann@2892
   550
}
yann@2892
   551
yann@2892
   552
#------------------------------------------------------------------------------
yann@2897
   553
# Build the final gcc
yann@2897
   554
# Usage: do_cc_backend param=value [...]
yann@2892
   555
#   Parameter     : Definition                          : Type      : Default
yann@2892
   556
#   host          : the host we run onto                : tuple     : (none)
yann@2892
   557
#   prefix        : the runtime prefix                  : dir       : (none)
yann@2892
   558
#   complibs      : the companion libraries prefix      : dir       : (none)
yann@2892
   559
#   cflags        : the host CFLAGS                     : string    : (empty)
yann@2934
   560
#   lang_list     : the list of languages to build      : string    : (empty)
yann@2894
   561
#   build_manuals : whether to build manuals or not     : bool      : no
yann@2892
   562
do_cc_backend() {
yann@2892
   563
    local host
yann@2892
   564
    local prefix
yann@2892
   565
    local complibs
yann@2892
   566
    local cflags
yann@2934
   567
    local lang_list
yann@2894
   568
    local build_manuals
yann@2368
   569
    local -a host_libstdcxx_flags
yann@1479
   570
    local -a extra_config
bryanhundven@2211
   571
    local -a final_LDFLAGS
yann@1479
   572
    local tmp
yann@2892
   573
    local arg
yann@1479
   574
yann@2892
   575
    for arg in "$@"; do
yann@2892
   576
        eval "${arg// /\\ }"
yann@2892
   577
    done
yann@2892
   578
yann@850
   579
    CT_DoLog EXTRA "Configuring final compiler"
yann@850
   580
yann@850
   581
    # Enable selected languages
yann@2934
   582
    extra_config+=("--enable-languages=${lang_list}")
yann@850
   583
yann@1479
   584
    for tmp in ARCH ABI CPU TUNE FPU FLOAT; do
yann@1479
   585
        eval tmp="\${CT_ARCH_WITH_${tmp}}"
yann@1479
   586
        if [ -n "${tmp}" ]; then
yann@1479
   587
            extra_config+=("${tmp}")
yann@1479
   588
        fi
yann@1479
   589
    done
yann@1479
   590
benoit@2487
   591
    [ "${CT_SHARED_LIBS}" = "y" ] || extra_config+=("--disable-shared")
benoit@2487
   592
    if [ "${CT_CC_GCC_HAS_PKGVERSION_BUGURL}" = "y" ]; then
benoit@2503
   593
        extra_config+=("--with-pkgversion=${CT_PKGVERSION}")
benoit@2503
   594
        [ -n "${CT_TOOLCHAIN_BUGURL}" ] && extra_config+=("--with-bugurl=${CT_TOOLCHAIN_BUGURL}")
benoit@2487
   595
    fi
yann@2042
   596
    case "${CT_CC_GCC_SJLJ_EXCEPTIONS}" in
yann@2042
   597
        y)  extra_config+=("--enable-sjlj-exceptions");;
yann@2042
   598
        m)  ;;
yann@2042
   599
        "") extra_config+=("--disable-sjlj-exceptions");;
yann@2042
   600
    esac
yann@850
   601
    if [ "${CT_CC_CXA_ATEXIT}" = "y" ]; then
yann@1479
   602
        extra_config+=("--enable-__cxa_atexit")
yann@850
   603
    else
yann@1479
   604
        extra_config+=("--disable-__cxa_atexit")
yann@850
   605
    fi
benoit@2475
   606
    if [ -n "${CT_CC_ENABLE_CXX_FLAGS}" ]; then
benoit@2475
   607
        extra_config+=("--enable-cxx-flags=${CT_CC_ENABLE_CXX_FLAGS}")
yann@1484
   608
    fi
yann@2043
   609
    if [ "${CT_CC_GCC_LIBMUDFLAP}" = "y" ]; then
yann@2043
   610
        extra_config+=(--enable-libmudflap)
yann@2043
   611
    else
yann@2043
   612
        extra_config+=(--disable-libmudflap)
yann@2043
   613
    fi
yann@2145
   614
    if [ "${CT_CC_GCC_LIBGOMP}" = "y" ]; then
yann@2145
   615
        extra_config+=(--enable-libgomp)
yann@2145
   616
    else
yann@2145
   617
        extra_config+=(--disable-libgomp)
yann@2145
   618
    fi
yann@2146
   619
    if [ "${CT_CC_GCC_LIBSSP}" = "y" ]; then
yann@2146
   620
        extra_config+=(--enable-libssp)
yann@2146
   621
    else
yann@2146
   622
        extra_config+=(--disable-libssp)
yann@2146
   623
    fi
yann@1893
   624
bryanhundven@2212
   625
    # *** WARNING ! ***
bryanhundven@2212
   626
    # Keep this full if-else-if-elif-fi-fi block in sync
bryanhundven@2212
   627
    # with the same block in do_cc_core, above.
bryanhundven@2211
   628
    if [ "${CT_STATIC_TOOLCHAIN}" = "y" ]; then
bryanhundven@2211
   629
        final_LDFLAGS+=("-static")
yann@2368
   630
        host_libstdcxx_flags+=("-static-libgcc")
yann@2368
   631
        host_libstdcxx_flags+=("-Wl,-Bstatic,-lstdc++")
yann@2368
   632
        host_libstdcxx_flags+=("-lm")
bryanhundven@2211
   633
        # Companion libraries are build static (eg !shared), so
js@2045
   634
        # the libstdc++ is not pulled automatically, although it
js@2045
   635
        # is needed. Shoe-horn it in our LDFLAGS
dwatkins@2070
   636
        # Ditto libm on some Fedora boxen
bryanhundven@2211
   637
        final_LDFLAGS+=("-lstdc++")
bryanhundven@2211
   638
        final_LDFLAGS+=("-lm")
bryanhundven@2211
   639
    else
bryanhundven@2211
   640
        if [ "${CT_CC_STATIC_LIBSTDCXX}" = "y" ]; then
bryanhundven@2211
   641
            # this is from CodeSourcery arm-2010q1-202-arm-none-linux-gnueabi.src.tar.bz2
bryanhundven@2211
   642
            # build script
yann@2491
   643
            # INFO: if the host gcc is gcc-4.5 then presumably we could use -static-libstdc++,
yann@2491
   644
            #       see http://gcc.gnu.org/ml/gcc-patches/2009-06/msg01635.html
yann@2368
   645
            host_libstdcxx_flags+=("-static-libgcc")
yann@2368
   646
            host_libstdcxx_flags+=("-Wl,-Bstatic,-lstdc++,-Bdynamic")
yann@2368
   647
            host_libstdcxx_flags+=("-lm")
bryanhundven@2211
   648
        elif [ "${CT_COMPLIBS_SHARED}" != "y" ]; then
bryanhundven@2211
   649
            # When companion libraries are build static (eg !shared),
bryanhundven@2211
   650
            # the libstdc++ is not pulled automatically, although it
bryanhundven@2211
   651
            # is needed. Shoe-horn it in our LDFLAGS
bryanhundven@2211
   652
            # Ditto libm on some Fedora boxen
bryanhundven@2211
   653
            final_LDFLAGS+=("-lstdc++")
bryanhundven@2211
   654
            final_LDFLAGS+=("-lm")
bryanhundven@2211
   655
        fi
yann@1893
   656
    fi
bryanhundven@2211
   657
lacombar@1880
   658
    if [ "${CT_CC_GCC_USE_GMP_MPFR}" = "y" ]; then
yann@2892
   659
        extra_config+=("--with-gmp=${complibs}")
yann@2892
   660
        extra_config+=("--with-mpfr=${complibs}")
yann@1848
   661
    fi
yann@2122
   662
    if [ "${CT_CC_GCC_USE_MPC}" = "y" ]; then
yann@2892
   663
        extra_config+=("--with-mpc=${complibs}")
yann@2122
   664
    fi
yann@2122
   665
    if [ "${CT_CC_GCC_USE_GRAPHITE}" = "y" ]; then
yann@2892
   666
        extra_config+=("--with-ppl=${complibs}")
yann@2368
   667
        # With PPL 0.11+, also pull libpwl if needed
yann@2368
   668
        if [ "${CT_PPL_NEEDS_LIBPWL}" = "y" ]; then
yann@2892
   669
            host_libstdcxx_flags+=("-L${complibs}/lib")
yann@2368
   670
            host_libstdcxx_flags+=("-lpwl")
yann@2368
   671
        fi
yann@2892
   672
        extra_config+=("--with-cloog=${complibs}")
yann@2123
   673
    elif [ "${CT_CC_GCC_HAS_GRAPHITE}" = "y" ]; then
yann@2123
   674
        extra_config+=("--with-ppl=no")
yann@2123
   675
        extra_config+=("--with-cloog=no")
yann@2014
   676
    fi
yann@2122
   677
    if [ "${CT_CC_GCC_USE_LTO}" = "y" ]; then
yann@2892
   678
        extra_config+=("--with-libelf=${complibs}")
yann@2123
   679
    elif [ "${CT_CC_GCC_HAS_LTO}" = "y" ]; then
yann@2123
   680
        extra_config+=("--with-libelf=no")
yann@1920
   681
    fi
yann@850
   682
yann@2368
   683
    if [ ${#host_libstdcxx_flags[@]} -ne 0 ]; then
yann@2368
   684
        extra_config+=("--with-host-libstdcxx=${host_libstdcxx_flags[*]}")
yann@2368
   685
    fi
yann@2368
   686
lacombar@1881
   687
    if [ "${CT_THREADS}" = "none" ]; then
lacombar@1881
   688
        extra_config+=("--disable-threads")
lacombar@1881
   689
        if [ "${CT_CC_GCC_4_2_or_later}" = y ]; then
yann@2145
   690
            CT_Test "Disabling libgomp for no-thread gcc>=4.2" "${CT_CC_GCC_LIBGOMP}" = "Y"
lacombar@1881
   691
            extra_config+=("--disable-libgomp")
lacombar@1881
   692
        fi
lacombar@1881
   693
    else
bartvdrmeulen@2017
   694
        if [ "${CT_THREADS}" = "win32" ]; then
bartvdrmeulen@2017
   695
            extra_config+=("--enable-threads=win32")
bartvdrmeulen@2017
   696
            extra_config+=("--disable-win32-registry")
bartvdrmeulen@2017
   697
        else
bartvdrmeulen@2017
   698
            extra_config+=("--enable-threads=posix")
bartvdrmeulen@2017
   699
        fi
lacombar@1881
   700
    fi
lacombar@1881
   701
titus@1972
   702
    if [ "${CT_CC_GCC_ENABLE_TARGET_OPTSPACE}" = "y" ]; then
titus@1972
   703
        extra_config+=("--enable-target-optspace")
titus@1972
   704
    fi
yann@1991
   705
    if [ "${CT_CC_GCC_DISABLE_PCH}" = "y" ]; then
yann@1991
   706
        extra_config+=("--disable-libstdcxx-pch")
yann@1991
   707
    fi
titus@1972
   708
yann@2143
   709
    case "${CT_CC_GCC_LDBL_128}" in
yann@2153
   710
        y)  extra_config+=("--with-long-double-128");;
yann@2153
   711
        m)  ;;
yann@2143
   712
        "") extra_config+=("--without-long-double-128");;
yann@2143
   713
    esac
yann@2143
   714
yann@2521
   715
    if [ "${CT_CC_GCC_BUILD_ID}" = "y" ]; then
yann@2521
   716
        extra_config+=( --enable-linker-build-id )
yann@2521
   717
    fi
yann@2521
   718
yann@2522
   719
    case "${CT_CC_GCC_LNK_HASH_STYLE}" in
yann@2522
   720
        "") ;;
yann@2522
   721
        *)  extra_config+=( "--with-linker-hash-style=${CT_CC_GCC_LNK_HASH_STYLE}" );;
yann@2522
   722
    esac
yann@2522
   723
yann@2287
   724
    if [ "${CT_CC_GCC_ENABLE_PLUGINS}" = "y" ]; then
yann@2287
   725
        extra_config+=( --enable-plugin )
yann@2287
   726
    fi
yann@2287
   727
    if [ "${CT_CC_GCC_GOLD}" = "y" ]; then
yann@2248
   728
        extra_config+=( --enable-gold )
yann@2248
   729
    fi
yann@2248
   730
yann@2532
   731
    case "${CT_ARCH}" in
yann@2532
   732
        mips)
yann@2532
   733
            case "${CT_CC_GCC_mips_llsc}" in
yann@2532
   734
                y)  extra_config+=( --with-llsc );;
yann@2532
   735
                m)  ;;
yann@2532
   736
                *)  extra_config+=( --without-llsc );;
yann@2532
   737
            esac
yann@2532
   738
            case "${CT_CC_GCC_mips_synci}" in
yann@2532
   739
                y)  extra_config+=( --with-synci );;
yann@2532
   740
                m)  ;;
yann@2532
   741
                *)  extra_config+=( --without-synci );;
yann@2532
   742
            esac
yann@2532
   743
            if [ "${CT_CC_GCC_mips_plt}" ]; then
yann@2532
   744
                extra_config+=( --with-mips-plt )
yann@2532
   745
            fi
yann@2532
   746
            ;; # ARCH is mips
yann@2532
   747
    esac
yann@2532
   748
zhenqiang@2780
   749
    [ "${CT_TOOLCHAIN_ENABLE_NLS}" != "y" ] && extra_config+=("--disable-nls")
zhenqiang@2780
   750
yann@2814
   751
    if [ "${CT_CC_GCC_SYSTEM_ZLIB}" = "y" ]; then
yann@2814
   752
        extra_config+=("--with-system-zlib")
yann@2814
   753
    fi
yann@2814
   754
yann@2817
   755
    if [ "${CT_MULTILIB}" = "y" ]; then
yann@2817
   756
        extra_config+=("--enable-multilib")
yann@2817
   757
    else
yann@2817
   758
        extra_config+=("--disable-multilib")
yann@2817
   759
    fi
yann@2817
   760
yann@1479
   761
    CT_DoLog DEBUG "Extra config passed: '${extra_config[*]}'"
yann@850
   762
yann@2355
   763
    CT_DoExecLog CFG                                \
yann@1122
   764
    CC_FOR_BUILD="${CT_BUILD}-gcc"                  \
yann@2892
   765
    CFLAGS="${cflags}"                              \
bryanhundven@2211
   766
    LDFLAGS="${final_LDFLAGS[*]}"                   \
yann@1122
   767
    CFLAGS_FOR_TARGET="${CT_TARGET_CFLAGS}"         \
yann@1122
   768
    CXXFLAGS_FOR_TARGET="${CT_TARGET_CFLAGS}"       \
yann@1122
   769
    LDFLAGS_FOR_TARGET="${CT_TARGET_LDFLAGS}"       \
yann@1389
   770
    "${CT_SRC_DIR}/gcc-${CT_CC_VERSION}/configure"  \
yann@1122
   771
        --build=${CT_BUILD}                         \
yann@2892
   772
        --host=${host}                              \
yann@1122
   773
        --target=${CT_TARGET}                       \
yann@2892
   774
        --prefix="${prefix}"                        \
yann@1122
   775
        ${CC_SYSROOT_ARG}                           \
yann@1479
   776
        "${extra_config[@]}"                        \
yann@1122
   777
        --with-local-prefix="${CT_SYSROOT_DIR}"     \
yann@1122
   778
        --enable-c99                                \
yann@1122
   779
        --enable-long-long                          \
yann@2467
   780
        "${CT_CC_EXTRA_CONFIG_ARRAY[@]}"
yann@850
   781
yann@850
   782
    if [ "${CT_CANADIAN}" = "y" ]; then
yann@850
   783
        CT_DoLog EXTRA "Building libiberty"
yann@2275
   784
        CT_DoExecLog ALL make ${JOBSFLAGS} all-build-libiberty
yann@850
   785
    fi
yann@850
   786
yann@850
   787
    CT_DoLog EXTRA "Building final compiler"
yann@2275
   788
    CT_DoExecLog ALL make ${JOBSFLAGS} all
yann@850
   789
yann@850
   790
    CT_DoLog EXTRA "Installing final compiler"
yann@2676
   791
    CT_DoExecLog ALL make ${JOBSFLAGS} install
yann@850
   792
yann@2894
   793
    if [ "${build_manuals}" = "yes" ]; then
michael@2765
   794
        CT_DoLog EXTRA "Building the GCC manuals"
michael@2765
   795
        CT_DoExecLog ALL make ${JOBSFLAGS} pdf html
michael@2765
   796
        CT_DoLog EXTRA "Installing the GCC manuals"
michael@2765
   797
        CT_DoExecLog ALL make install-{pdf,html}-gcc
michael@2765
   798
    fi
michael@2765
   799
yann@850
   800
    # Create a symlink ${CT_TARGET}-cc to ${CT_TARGET}-gcc to always be able
yann@850
   801
    # to call the C compiler with the same, somewhat canonical name.
linux@1924
   802
    # check whether compiler has an extension
bartvdrmeulen@2031
   803
    file="$( ls -1 "${CT_PREFIX_DIR}/bin/${CT_TARGET}-gcc."* 2>/dev/null || true )"
linux@1924
   804
    [ -z "${file}" ] || ext=".${file##*.}"
yann@2550
   805
    CT_DoExecLog ALL ln -sfv "${CT_TARGET}-gcc${ext}" "${CT_PREFIX_DIR}/bin/${CT_TARGET}-cc${ext}"
yann@850
   806
yann@2818
   807
    if [ "${CT_MULTILIB}" = "y" ]; then
yann@2818
   808
        multilibs=( $( "${CT_PREFIX_DIR}/bin/${CT_TARGET}-gcc" -print-multi-lib \
yann@2818
   809
                       |tail -n +2 ) )
yann@2818
   810
        if [ ${#multilibs[@]} -ne 0 ]; then
yann@2818
   811
            CT_DoLog EXTRA "gcc configured with these multilibs (besides the default):"
yann@2818
   812
            for i in "${multilibs[@]}"; do
yann@2818
   813
                dir="${i%%;*}"
yann@2818
   814
                flags="${i#*;}"
yann@2818
   815
                CT_DoLog EXTRA "   ${flags//@/ -}  -->  ${dir}/"
yann@2818
   816
            done
yann@2818
   817
        else
yann@2818
   818
            CT_DoLog WARN "gcc configured for multilib, but none available"
yann@2818
   819
        fi
yann@2818
   820
    fi
yann@850
   821
}