scripts/build/binutils/binutils.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 2923 60f5ceb1b413
child 2926 d304c8a7bfa8
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@1345
     1
# This file adds functions to build binutils
yann@1345
     2
# Copyright 2007 Yann E. MORIN
yann@1345
     3
# Licensed under the GPL v2. See COPYING in the root of this package
yann@1345
     4
yann@1345
     5
# Download binutils
yann@1345
     6
do_binutils_get() {
yann@1345
     7
    CT_GetFile "binutils-${CT_BINUTILS_VERSION}"                                        \
yann@1345
     8
               {ftp,http}://{ftp.gnu.org/gnu,ftp.kernel.org/pub/linux/devel}/binutils   \
yann@1345
     9
               ftp://gcc.gnu.org/pub/binutils/{releases,snapshots}
yann@1345
    10
}
yann@1345
    11
yann@1345
    12
# Extract binutils
yann@1345
    13
do_binutils_extract() {
yann@1345
    14
    CT_Extract "binutils-${CT_BINUTILS_VERSION}"
yann@1901
    15
    CT_Patch "binutils" "${CT_BINUTILS_VERSION}"
yann@1345
    16
}
yann@1345
    17
yann@1345
    18
# Build binutils
yann@1345
    19
do_binutils() {
yann@1483
    20
    local -a extra_config
bryanhundven@2210
    21
    local -a extra_make_flags
yann@2247
    22
    local -a binutils_tools
michael@2765
    23
    local -a manuals_for
michael@2765
    24
    local -a manuals_install
yann@1483
    25
yann@1345
    26
    mkdir -p "${CT_BUILD_DIR}/build-binutils"
yann@1345
    27
    cd "${CT_BUILD_DIR}/build-binutils"
yann@1345
    28
yann@1345
    29
    CT_DoStep INFO "Installing binutils"
yann@1345
    30
yann@1345
    31
    CT_DoLog EXTRA "Configuring binutils"
yann@2244
    32
yann@2247
    33
    binutils_tools=( ar as ld strip )
yann@2244
    34
    if [ "${CT_BINUTILS_HAS_GOLD}" = "y" ]; then
yann@2244
    35
        case "${CT_BINUTILS_LINKERS_LIST}" in
yann@2244
    36
            ld)
yann@2244
    37
                extra_config+=( --enable-ld=yes --enable-gold=no )
yann@2247
    38
                binutils_tools+=( ld.bfd )
yann@2244
    39
                ;;
yann@2244
    40
            gold)
yann@2244
    41
                extra_config+=( --enable-ld=no --enable-gold=yes )
yann@2247
    42
                binutils_tools+=( ld.gold )
yann@2244
    43
                ;;
yann@2244
    44
            ld,gold)
yann@2244
    45
                extra_config+=( --enable-ld=default --enable-gold=yes )
yann@2247
    46
                binutils_tools+=( ld.bfd ld.gold )
yann@2244
    47
                ;;
yann@2244
    48
            gold,ld)
yann@2244
    49
                extra_config+=( --enable-ld=yes --enable-gold=default )
yann@2247
    50
                binutils_tools+=( ld.bfd ld.gold )
yann@2244
    51
                ;;
yann@2244
    52
        esac
yann@2246
    53
        if [ "${CT_BINUTILS_GOLD_THREADED}" = "y" ]; then
yann@2246
    54
            extra_config+=( --enable-threads )
yann@2246
    55
        fi
yann@2244
    56
    fi
yann@2245
    57
    if [ "${CT_BINUTILS_PLUGINS}" = "y" ]; then
yann@2245
    58
        extra_config+=( --enable-plugins )
yann@2245
    59
    fi
benoit@2488
    60
    if [ "${CT_BINUTILS_HAS_PKGVERSION_BUGURL}" = "y" ]; then
benoit@2503
    61
        extra_config+=("--with-pkgversion=${CT_PKGVERSION}")
benoit@2503
    62
        [ -n "${CT_TOOLCHAIN_BUGURL}" ] && extra_config+=("--with-bugurl=${CT_TOOLCHAIN_BUGURL}")
benoit@2488
    63
    fi
yann@2816
    64
    if [ "${CT_MULTILIB}" = "y" ]; then
yann@2816
    65
        extra_config+=("--enable-multilib")
yann@2816
    66
    else
yann@2816
    67
        extra_config+=("--disable-multilib")
yann@2816
    68
    fi
yann@2244
    69
zhenqiang@2779
    70
    [ "${CT_TOOLCHAIN_ENABLE_NLS}" != "y" ] && extra_config+=("--disable-nls")
zhenqiang@2779
    71
yann@2244
    72
    CT_DoLog DEBUG "Extra config passed: '${extra_config[*]}'"
yann@2244
    73
yann@2341
    74
    CT_DoExecLog CFG                                            \
yann@1345
    75
    CFLAGS="${CT_CFLAGS_FOR_HOST}"                              \
michael@2697
    76
    CXXFLAGS="${CT_CFLAGS_FOR_HOST}"                            \
yann@1345
    77
    "${CT_SRC_DIR}/binutils-${CT_BINUTILS_VERSION}/configure"   \
yann@1345
    78
        --build=${CT_BUILD}                                     \
yann@1345
    79
        --host=${CT_HOST}                                       \
yann@1345
    80
        --target=${CT_TARGET}                                   \
yann@1345
    81
        --prefix=${CT_PREFIX_DIR}                               \
yann@1345
    82
        --disable-werror                                        \
yann@1483
    83
        "${extra_config[@]}"                                    \
yann@1345
    84
        ${CT_ARCH_WITH_FLOAT}                                   \
yann@2466
    85
        ${BINUTILS_SYSROOT_ARG}                                 \
yann@2467
    86
        "${CT_BINUTILS_EXTRA_CONFIG_ARRAY[@]}"
yann@1345
    87
bryanhundven@2210
    88
    if [ "${CT_STATIC_TOOLCHAIN}" = "y" ]; then
yann@2702
    89
        extra_make_flags+=("LDFLAGS=-static -all-static")
bryanhundven@2210
    90
        CT_DoLog EXTRA "Prepare binutils for static build"
yann@2702
    91
        CT_DoExecLog ALL make ${JOBSFLAGS} configure-host
bryanhundven@2210
    92
    fi
bryanhundven@2210
    93
yann@1345
    94
    CT_DoLog EXTRA "Building binutils"
yann@2275
    95
    CT_DoExecLog ALL make "${extra_make_flags[@]}" ${JOBSFLAGS}
yann@1345
    96
yann@1345
    97
    CT_DoLog EXTRA "Installing binutils"
yann@1345
    98
    CT_DoExecLog ALL make install
yann@1345
    99
michael@2765
   100
    if [ "${CT_BUILD_MANUALS}" = "y" ]; then
michael@2765
   101
        CT_DoLog EXTRA "Building and installing the binutils manuals"
michael@2765
   102
        manuals_for=( gas binutils ld gprof )
michael@2765
   103
        if [ "${CT_BINUTILS_LINKER_GOLD}" = "y" ]; then
michael@2765
   104
            manuals_for+=( gold )
michael@2765
   105
        fi
michael@2765
   106
        manuals_install=( "${manuals_for[@]/#/install-pdf-}" )
michael@2765
   107
        manuals_install+=( "${manuals_for[@]/#/install-html-}" )
michael@2765
   108
        CT_DoExecLog ALL make ${JOBSFLAGS} pdf html
michael@2765
   109
        CT_DoExecLog ALL make "${manuals_install[@]}"
michael@2765
   110
    fi
michael@2765
   111
yann@2247
   112
    # Install the wrapper if needed
yann@2247
   113
    if [ "${CT_BINUTILS_LD_WRAPPER}" = "y" ]; then
yann@2247
   114
        CT_DoLog EXTRA "Installing ld wrapper"
yann@2247
   115
        rm -f "${CT_PREFIX_DIR}/bin/${CT_TARGET}-ld"
yann@2375
   116
        rm -f "${CT_PREFIX_DIR}/${CT_TARGET}/bin/ld"
yann@2247
   117
        sed -r -e "s/@@DEFAULT_LD@@/${CT_BINUTILS_LINKER_DEFAULT}/" \
yann@2247
   118
            "${CT_LIB_DIR}/scripts/build/binutils/binutils-ld.in"   \
yann@2247
   119
            >"${CT_PREFIX_DIR}/bin/${CT_TARGET}-ld"
yann@2247
   120
        chmod +x "${CT_PREFIX_DIR}/bin/${CT_TARGET}-ld"
yann@2375
   121
        cp -a "${CT_PREFIX_DIR}/bin/${CT_TARGET}-ld"    \
yann@2375
   122
              "${CT_PREFIX_DIR}/${CT_TARGET}/bin/ld"
yann@2376
   123
yann@2376
   124
        # If needed, force using ld.bfd during the toolchain build
yann@2376
   125
        if [ "${CT_BINUTILS_FORCE_LD_BFD}" = "y" ]; then
yann@2376
   126
            export CTNG_LD_IS=bfd
yann@2376
   127
        fi
yann@2247
   128
    fi
yann@2247
   129
yann@1345
   130
    # Make those new tools available to the core C compilers to come.
yann@1345
   131
    # Note: some components want the ${TARGET}-{ar,as,ld,strip} commands as
yann@1345
   132
    # well. Create that.
yann@2923
   133
    # Don't do it for canadian or cross-native, because the binutils
yann@2923
   134
    # are not executable on the build machine.
yann@2923
   135
    case "${CT_TOOLCHAIN_TYPE}" in
yann@2923
   136
        cross|native)
yann@2924
   137
            mkdir -p "${CT_BUILDTOOLS_PREFIX_DIR}/${CT_TARGET}/bin"
yann@2924
   138
            mkdir -p "${CT_BUILDTOOLS_PREFIX_DIR}/bin"
yann@2923
   139
            for t in "${binutils_tools[@]}"; do
yann@2924
   140
                ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_BUILDTOOLS_PREFIX_DIR}/${CT_TARGET}/bin/${t}"
yann@2924
   141
                ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_BUILDTOOLS_PREFIX_DIR}/bin/${CT_TARGET}-${t}"
yann@2923
   142
            done 2>&1 |CT_DoLog ALL
yann@2923
   143
            ;;
yann@2923
   144
        *)  ;;
yann@2923
   145
    esac
yann@1345
   146
yann@1345
   147
    CT_EndStep
yann@1345
   148
}
yann@1345
   149
yann@1345
   150
# Now on for the target libraries
yann@2906
   151
do_binutils_for_target() {
yann@1483
   152
    local -a extra_config
yann@1483
   153
    local -a targets
yann@1483
   154
    local -a build_targets
yann@1483
   155
    local -a install_targets
yann@1483
   156
    local t
yann@1345
   157
yann@1483
   158
    [ "${CT_BINUTILS_FOR_TARGET_IBERTY}" = "y" ] && targets+=("libiberty")
yann@1483
   159
    [ "${CT_BINUTILS_FOR_TARGET_BFD}"    = "y" ] && targets+=("bfd")
yann@1483
   160
    for t in "${targets[@]}"; do
yann@1483
   161
        build_targets+=("all-${t}")
yann@1483
   162
        install_targets+=("install-${t}")
yann@1483
   163
    done
yann@1483
   164
yann@1483
   165
    if [ "${#targets[@]}" -ne 0 ]; then
yann@1345
   166
        CT_DoStep INFO "Installing binutils for target"
yann@1345
   167
        mkdir -p "${CT_BUILD_DIR}/build-binutils-for-target"
yann@1345
   168
        CT_Pushd "${CT_BUILD_DIR}/build-binutils-for-target"
yann@1345
   169
yann@1345
   170
        CT_DoLog EXTRA "Configuring binutils for target"
benoit@2488
   171
benoit@2488
   172
        if [ "${CT_BINUTILS_HAS_PKGVERSION_BUGURL}" = "y" ]; then
benoit@2503
   173
            extra_config+=("--with-pkgversion=${CT_PKGVERSION}")
benoit@2503
   174
            [ -n "${CT_TOOLCHAIN_BUGURL}" ] && extra_config+=("--with-bugurl=${CT_TOOLCHAIN_BUGURL}")
benoit@2488
   175
        fi
yann@2816
   176
        if [ "${CT_MULTILIB}" = "y" ]; then
yann@2816
   177
            extra_config+=("--enable-multilib")
yann@2816
   178
        else
yann@2816
   179
            extra_config+=("--disable-multilib")
yann@2816
   180
        fi
benoit@2488
   181
zhenqiang@2779
   182
        [ "${CT_TOOLCHAIN_ENABLE_NLS}" != "y" ] && extra_config+=("--disable-nls")
zhenqiang@2779
   183
yann@2333
   184
        CT_DoExecLog CFG                                            \
yann@1345
   185
        "${CT_SRC_DIR}/binutils-${CT_BINUTILS_VERSION}/configure"   \
yann@1345
   186
            --build=${CT_BUILD}                                     \
yann@1345
   187
            --host=${CT_TARGET}                                     \
yann@1345
   188
            --target=${CT_TARGET}                                   \
yann@1345
   189
            --prefix=/usr                                           \
yann@1345
   190
            --disable-werror                                        \
yann@1345
   191
            --enable-shared                                         \
yann@1345
   192
            --enable-static                                         \
yann@1483
   193
            "${extra_config[@]}"                                    \
yann@1345
   194
            ${CT_ARCH_WITH_FLOAT}                                   \
benoit@2804
   195
            "${CT_BINUTILS_EXTRA_CONFIG_ARRAY[@]}"
yann@1345
   196
yann@1483
   197
        CT_DoLog EXTRA "Building binutils' libraries (${targets[*]}) for target"
yann@2275
   198
        CT_DoExecLog ALL make ${JOBSFLAGS} "${build_targets[@]}"
yann@1483
   199
        CT_DoLog EXTRA "Installing binutils' libraries (${targets[*]}) for target"
yann@1483
   200
        CT_DoExecLog ALL make DESTDIR="${CT_SYSROOT_DIR}" "${install_targets[@]}"
yann@1345
   201
yann@1345
   202
        CT_Popd
yann@1345
   203
        CT_EndStep
yann@1345
   204
    fi
yann@1345
   205
}