scripts/build/cc/gcc.sh
author "Yann E. MORIN" <yann.morin.1998@free.fr>
Sun Nov 25 18:22:38 2012 +0100 (2012-11-25)
changeset 3133 36aa2ae92c29
parent 3131 bd172b161ff8
child 3209 33f265e3e79d
permissions -rw-r--r--
cc/gcc: do not print 'core' or 'final'

In gcc-'s core and final passes, do not print 'core' or 'final' in
log messages. We already print it in step messages.

Also, as we use the core backend to build the bare-metal final gcc,
it can be disturbing to read 'core' while we're in fact in 'final'.

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