scripts/build/cc/gcc.sh
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sun Jan 01 17:49:44 2012 +0100 (2012-01-01)
changeset 2924 0eab838768b1
parent 2901 4fcedd2c14b2
child 2925 d99b1adc4402
permissions -rw-r--r--
cc/gcc: install the core compilers in the build-tools dir

There really is no good reason to install the core compilers in their
own places, one for each pass. We can install them with the other
build tools.

Also, this implies that:
- there are fewer directories to save/restore
- there are fewer symlinks to create for binutils
- the PATH is shorter

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