scripts/build/cc_core_gcc.sh
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sat Jun 16 21:44:45 2007 +0000 (2007-06-16)
changeset 164 e78c0b2bc057
parent 161 be4484f10ac7
permissions -rw-r--r--
Fix printing components' file names.
yann@1
     1
# This file adds the function to build the core gcc C compiler
yann@1
     2
# Copyright 2007 Yann E. MORIN
yann@1
     3
# Licensed under the GPL v2. See COPYING in the root of this package
yann@1
     4
yann@161
     5
do_print_filename() {
yann@161
     6
    [ "${CT_CC_CORE}" = "gcc" ] || return 0
yann@164
     7
    echo "gcc-${CT_CC_CORE_VERSION}"
yann@161
     8
}
yann@161
     9
yann@63
    10
# Download core gcc
yann@63
    11
do_cc_core_get() {
yann@63
    12
    # Ah! gcc folks are kind of 'different': they store the tarballs in
yann@63
    13
    # subdirectories of the same name! That's because gcc is such /crap/ that
yann@63
    14
    # it is such /big/ that it needs being splitted for distribution! Sad. :-(
yann@63
    15
    # Arrgghh! Some of those versions does not follow this convention:
yann@63
    16
    # gcc-3.3.3 lives in releases/gcc-3.3.3, while gcc-2.95.* isn't in a
yann@63
    17
    # subdirectory! You bastard!
yann@63
    18
    CT_GetFile "${CT_CC_CORE_FILE}"                                    \
yann@63
    19
               ftp://ftp.gnu.org/gnu/gcc/${CT_CC_CORE_FILE}            \
yann@63
    20
               ftp://ftp.gnu.org/gnu/gcc/releases/${CT_CC_CORE_FILE}   \
yann@63
    21
               ftp://ftp.gnu.org/gnu/gcc
yann@63
    22
}
yann@63
    23
yann@63
    24
# Extract core gcc
yann@63
    25
do_cc_core_extract() {
yann@63
    26
    CT_ExtractAndPatch "${CT_CC_CORE_FILE}"
yann@63
    27
}
yann@63
    28
yann@136
    29
# Core gcc pass 1
yann@136
    30
do_cc_core_pass_1() {
yann@136
    31
    # In case we're NPTL, build the static core gcc;
yann@136
    32
    # in any other case, do nothing.
yann@136
    33
    case "${CT_THREADS}" in
yann@136
    34
        nptl)   do_cc_core_static;;
yann@136
    35
        *)      ;;
yann@136
    36
    esac
yann@136
    37
}
yann@1
    38
yann@136
    39
# Core gcc pass 2
yann@136
    40
do_cc_core_pass_2() {
yann@136
    41
    # In case we're NPTL, build the shared core gcc,
yann@136
    42
    # in any other case, build the static core gcc.
yann@136
    43
    case "${CT_THREADS}" in
yann@136
    44
        nptl)   do_cc_core_shared;;
yann@136
    45
        *)      do_cc_core_static;;
yann@136
    46
    esac
yann@136
    47
}
yann@136
    48
yann@136
    49
# Build static core gcc
yann@136
    50
do_cc_core_static() {
yann@136
    51
    mkdir -p "${CT_BUILD_DIR}/build-cc-core-static"
yann@136
    52
    cd "${CT_BUILD_DIR}/build-cc-core-static"
yann@136
    53
yann@136
    54
    CT_DoStep INFO "Installing static core C compiler"
yann@1
    55
yann@95
    56
    CT_DoLog EXTRA "Copying headers to install area of bootstrap gcc, so it can build libgcc2"
yann@136
    57
    mkdir -p "${CT_CC_CORE_STATIC_PREFIX_DIR}/${CT_TARGET}/include"
yann@136
    58
    cp -r "${CT_HEADERS_DIR}"/* "${CT_CC_CORE_STATIC_PREFIX_DIR}/${CT_TARGET}/include" 2>&1 |CT_DoLog DEBUG
yann@1
    59
yann@136
    60
    CT_DoLog EXTRA "Configuring static core C compiler"
yann@1
    61
yann@1
    62
    extra_config=""
yann@1
    63
    [ "${CT_ARCH_FLOAT_SW}" = "y" ] && extra_config="${extra_config} --with-float=soft"
yann@45
    64
    [ -n "${CT_ARCH_ABI}" ]  && extra_config="${extra_config} --with-abi=${CT_ARCH_ABI}"
yann@136
    65
    [ -n "${CT_ARCH_ARCH}" ] && extra_config="${extra_config} --with-arch=${CT_ARCH_ARCH}"
yann@1
    66
    [ -n "${CT_ARCH_CPU}" ]  && extra_config="${extra_config} --with-cpu=${CT_ARCH_CPU}"
yann@1
    67
    [ -n "${CT_ARCH_TUNE}" ] && extra_config="${extra_config} --with-tune=${CT_ARCH_TUNE}"
yann@1
    68
    [ -n "${CT_ARCH_FPU}" ] && extra_config="${extra_config} --with-fpu=${CT_ARCH_FPU}"
yann@136
    69
    [ "${CT_CC_CXA_ATEXIT}" = "y" ] && extra_config="${extra_config} --enable-__cxa_atexit"
yann@1
    70
yann@1
    71
    CT_DoLog DEBUG "Extra config passed: \"${extra_config}\""
yann@1
    72
yann@1
    73
    # Use --with-local-prefix so older gccs don't look in /usr/local (http://gcc.gnu.org/PR10532)
yann@1
    74
    CFLAGS="${CT_CFLAGS_FOR_HOST}"                  \
yann@1
    75
    "${CT_SRC_DIR}/${CT_CC_CORE_FILE}/configure"    \
yann@1
    76
        ${CT_CANADIAN_OPT}                          \
yann@136
    77
        --host=${CT_HOST}                           \
yann@1
    78
        --target=${CT_TARGET}                       \
yann@136
    79
        --prefix="${CT_CC_CORE_STATIC_PREFIX_DIR}"  \
yann@1
    80
        --with-local-prefix="${CT_SYSROOT_DIR}"     \
yann@1
    81
        --disable-multilib                          \
yann@1
    82
        --with-newlib                               \
yann@1
    83
        ${CC_CORE_SYSROOT_ARG}                      \
yann@1
    84
        ${extra_config}                             \
yann@1
    85
        --disable-nls                               \
yann@1
    86
        --enable-threads=no                         \
yann@1
    87
        --enable-symvers=gnu                        \
yann@1
    88
        --enable-languages=c                        \
yann@1
    89
        --disable-shared                            \
yann@78
    90
        ${CT_CC_CORE_EXTRA_CONFIG}                  2>&1 |CT_DoLog ALL
yann@1
    91
yann@131
    92
    if [ "${CT_CANADIAN}" = "y" ]; then
yann@1
    93
        CT_DoLog EXTRA "Building libiberty"
yann@78
    94
        make ${PARALLELMFLAGS} all-build-libiberty 2>&1 |CT_DoLog ALL
yann@1
    95
    fi
yann@1
    96
yann@136
    97
    CT_DoLog EXTRA "Building static core C compiler"
yann@78
    98
    make ${PARALLELMFLAGS} all-gcc 2>&1 |CT_DoLog ALL
yann@1
    99
yann@136
   100
    CT_DoLog EXTRA "Installing static core C compiler"
yann@78
   101
    make install-gcc 2>&1 |CT_DoLog ALL
yann@1
   102
yann@1
   103
    CT_EndStep
yann@1
   104
}
yann@75
   105
yann@136
   106
# Build shared core gcc
yann@136
   107
do_cc_core_shared() {
yann@136
   108
    mkdir -p "${CT_BUILD_DIR}/build-cc-core-shared"
yann@136
   109
    cd "${CT_BUILD_DIR}/build-cc-core-shared"
yann@136
   110
yann@136
   111
    CT_DoStep INFO "Installing shared core C compiler"
yann@136
   112
yann@136
   113
    CT_DoLog EXTRA "Copying headers to install area of bootstrap gcc, so it can build libgcc2"
yann@136
   114
    mkdir -p "${CT_CC_CORE_SHARED_PREFIX_DIR}/${CT_TARGET}/include"
yann@136
   115
    cp -r "${CT_HEADERS_DIR}"/* "${CT_CC_CORE_SHARED_PREFIX_DIR}/${CT_TARGET}/include" 2>&1 |CT_DoLog DEBUG
yann@136
   116
yann@136
   117
    CT_DoLog EXTRA "Configuring shared core C compiler"
yann@136
   118
yann@136
   119
    extra_config=""
yann@136
   120
    [ "${CT_ARCH_FLOAT_SW}" = "y" ] && extra_config="${extra_config} --with-float=soft"
yann@136
   121
    [ -n "${CT_ARCH_ABI}" ]  && extra_config="${extra_config} --with-abi=${CT_ARCH_ABI}"
yann@136
   122
    [ -n "${CT_ARCH_ARCH}" ] && extra_config="${extra_config} --with-arch=${CT_ARCH_ARCH}"
yann@136
   123
    [ -n "${CT_ARCH_CPU}" ]  && extra_config="${extra_config} --with-cpu=${CT_ARCH_CPU}"
yann@136
   124
    [ -n "${CT_ARCH_TUNE}" ] && extra_config="${extra_config} --with-tune=${CT_ARCH_TUNE}"
yann@136
   125
    [ -n "${CT_ARCH_FPU}" ] && extra_config="${extra_config} --with-fpu=${CT_ARCH_FPU}"
yann@136
   126
    [ "${CT_CC_CXA_ATEXIT}" = "y" ] && extra_config="${extra_config} --enable-__cxa_atexit"
yann@136
   127
yann@136
   128
    CT_DoLog DEBUG "Extra config passed: \"${extra_config}\""
yann@136
   129
yann@136
   130
    CFLAGS="${CT_CFLAGS_FOR_HOST}"                  \
yann@136
   131
    "${CT_SRC_DIR}/${CT_CC_CORE_FILE}/configure"    \
yann@136
   132
        ${CT_CANADIAN_OPT}                          \
yann@136
   133
        --target=${CT_TARGET}                       \
yann@136
   134
        --host=${CT_HOST}                           \
yann@136
   135
        --prefix="${CT_CC_CORE_SHARED_PREFIX_DIR}"  \
yann@136
   136
        --with-local-prefix="${CT_SYSROOT_DIR}"     \
yann@136
   137
        --disable-multilib                          \
yann@136
   138
        ${CC_CORE_SYSROOT_ARG}                      \
yann@136
   139
        ${extra_config}                             \
yann@136
   140
        --disable-nls                               \
yann@136
   141
        --enable-symvers=gnu                        \
yann@136
   142
        --enable-languages=c                        \
yann@136
   143
        --enable-shared                             \
yann@136
   144
        ${CT_CC_CORE_EXTRA_CONFIG}                  2>&1 |CT_DoLog ALL
yann@136
   145
yann@136
   146
    # HACK: we need to override SHLIB_LC from gcc/config/t-slibgcc-elf-ver or
yann@136
   147
    # gcc/config/t-libunwind so -lc is removed from the link for
yann@136
   148
    # libgcc_s.so, as we do not have a target -lc yet.
yann@136
   149
    # This is not as ugly as it appears to be ;-) All symbols get resolved
yann@136
   150
    # during the glibc build, and we provide a proper libgcc_s.so for the
yann@136
   151
    # cross toolchain during the final gcc build.
yann@136
   152
    #
yann@136
   153
    # As we cannot modify the source tree, nor override SHLIB_LC itself
yann@136
   154
    # during configure or make, we have to edit the resultant
yann@136
   155
    # gcc/libgcc.mk itself to remove -lc from the link.
yann@136
   156
    # This causes us to have to jump through some hoops...
yann@136
   157
    #
yann@136
   158
    # To produce libgcc.mk to edit we firstly require libiberty.a,
yann@136
   159
    # so we configure then build it.
yann@136
   160
    # Next we have to configure gcc, create libgcc.mk then edit it...
yann@136
   161
    # So much easier if we just edit the source tree, but hey...
yann@136
   162
    if [ ! -f "${CT_SRC_DIR}/${CT_CC_CORE_FILE}/gcc/BASE-VER" ]; then
yann@136
   163
        make configure-libiberty
yann@136
   164
        make -C libiberty libiberty.a
yann@136
   165
        make configure-gcc
yann@136
   166
        make configure-libcpp
yann@136
   167
        make all-libcpp
yann@136
   168
    else
yann@136
   169
        make configure-gcc
yann@136
   170
        make configure-libcpp
yann@136
   171
        make configure-build-libiberty
yann@136
   172
        make all-libcpp
yann@136
   173
        make all-build-libiberty
yann@136
   174
    fi 2>&1 |CT_DoLog ALL
yann@136
   175
    # HACK: gcc-4.2 uses libdecnumber to build libgcc.mk, so build it here.
yann@136
   176
    if [ -d "${CT_SRC_DIR}/${CT_CC_CORE_FILE}/libdecnumber" ]; then
yann@136
   177
        make configure-libdecnumber
yann@136
   178
        make -C libdecnumber libdecnumber.a
yann@136
   179
    fi 2>&1 |CT_DoLog ALL
yann@136
   180
    make -C gcc libgcc.mk 2>&1 |CT_DoLog ALL
yann@136
   181
    sed -r -i -e 's@-lc@@g' gcc/libgcc.mk
yann@136
   182
yann@136
   183
    if [ "${CT_CANADIAN}" = "y" ]; then
yann@136
   184
        CT_DoLog EXTRA "Building libiberty"
yann@136
   185
        make ${PARALLELMFLAGS} all-build-libiberty 2>&1 |CT_DoLog ALL
yann@136
   186
    fi
yann@136
   187
yann@136
   188
    CT_DoLog EXTRA "Building shared core C compiler"
yann@136
   189
    make ${PARALLELMFLAGS} all-gcc 2>&1 |CT_DoLog ALL
yann@136
   190
yann@136
   191
    CT_DoLog EXTRA "Installing shared core C compiler"
yann@136
   192
    make install-gcc 2>&1 |CT_DoLog ALL
yann@136
   193
yann@136
   194
    CT_EndStep
yann@136
   195
}