scripts/build/cc/gcc.sh
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sun Jul 17 17:56:22 2011 +0200 (2011-07-17)
changeset 2889 f3b2199620f1
parent 2888 dd71df95903a
child 2890 a59712c236df
permissions -rw-r--r--
cc/gcc: pass the install prefix to the core passes

Currently, the discrimination on the core compilers prefixes depends on
the type of core compiler to build.

This is not correct, and the caller of the core backend should specify
the prefix.

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