scripts/build/binutils/binutils.sh
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sat Jan 22 23:20:18 2011 +0100 (2011-01-22)
changeset 2305 2ed26c646568
parent 2247 49fa28e62b07
child 2333 cd7bcbbd5cc9
permissions -rw-r--r--
scripts: create the makeinfo wrapper before we set PATH

If we set PATH to the tools wrappers before we create the
makeinfo wrapper, then we may well wrap an existing wrapper
from a previous run.

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
yann@1483
    23
yann@1345
    24
    mkdir -p "${CT_BUILD_DIR}/build-binutils"
yann@1345
    25
    cd "${CT_BUILD_DIR}/build-binutils"
yann@1345
    26
yann@1345
    27
    CT_DoStep INFO "Installing binutils"
yann@1345
    28
yann@1345
    29
    CT_DoLog EXTRA "Configuring binutils"
yann@2244
    30
yann@2247
    31
    binutils_tools=( ar as ld strip )
yann@2244
    32
    if [ "${CT_BINUTILS_HAS_GOLD}" = "y" ]; then
yann@2244
    33
        case "${CT_BINUTILS_LINKERS_LIST}" in
yann@2244
    34
            ld)
yann@2244
    35
                extra_config+=( --enable-ld=yes --enable-gold=no )
yann@2247
    36
                binutils_tools+=( ld.bfd )
yann@2244
    37
                ;;
yann@2244
    38
            gold)
yann@2244
    39
                extra_config+=( --enable-ld=no --enable-gold=yes )
yann@2247
    40
                binutils_tools+=( ld.gold )
yann@2244
    41
                ;;
yann@2244
    42
            ld,gold)
yann@2244
    43
                extra_config+=( --enable-ld=default --enable-gold=yes )
yann@2247
    44
                binutils_tools+=( ld.bfd ld.gold )
yann@2244
    45
                ;;
yann@2244
    46
            gold,ld)
yann@2244
    47
                extra_config+=( --enable-ld=yes --enable-gold=default )
yann@2247
    48
                binutils_tools+=( ld.bfd ld.gold )
yann@2244
    49
                ;;
yann@2244
    50
        esac
yann@2246
    51
        if [ "${CT_BINUTILS_GOLD_THREADED}" = "y" ]; then
yann@2246
    52
            extra_config+=( --enable-threads )
yann@2246
    53
        fi
yann@2244
    54
    fi
yann@2245
    55
    if [ "${CT_BINUTILS_PLUGINS}" = "y" ]; then
yann@2245
    56
        extra_config+=( --enable-plugins )
yann@2245
    57
    fi
yann@2244
    58
yann@2244
    59
    CT_DoLog DEBUG "Extra config passed: '${extra_config[*]}'"
yann@2244
    60
yann@1345
    61
    CFLAGS="${CT_CFLAGS_FOR_HOST}"                              \
anthony@2154
    62
    CT_DoExecLog CFG                                            \
yann@1345
    63
    "${CT_SRC_DIR}/binutils-${CT_BINUTILS_VERSION}/configure"   \
yann@1345
    64
        --build=${CT_BUILD}                                     \
yann@1345
    65
        --host=${CT_HOST}                                       \
yann@1345
    66
        --target=${CT_TARGET}                                   \
yann@1345
    67
        --prefix=${CT_PREFIX_DIR}                               \
yann@1345
    68
        --disable-nls                                           \
yann@1345
    69
        --disable-multilib                                      \
yann@1345
    70
        --disable-werror                                        \
yann@1483
    71
        "${extra_config[@]}"                                    \
yann@1345
    72
        ${CT_ARCH_WITH_FLOAT}                                   \
yann@1345
    73
        ${CT_BINUTILS_EXTRA_CONFIG}                             \
yann@1345
    74
        ${BINUTILS_SYSROOT_ARG}
yann@1345
    75
bryanhundven@2210
    76
    if [ "${CT_STATIC_TOOLCHAIN}" = "y" ]; then
bryanhundven@2210
    77
        extra_make_flags+=("LDFLAGS=-all-static")
bryanhundven@2210
    78
        CT_DoLog EXTRA "Prepare binutils for static build"
bryanhundven@2210
    79
        CT_DoExecLog ALL make configure-host
bryanhundven@2210
    80
    fi
bryanhundven@2210
    81
yann@1345
    82
    CT_DoLog EXTRA "Building binutils"
yann@2275
    83
    CT_DoExecLog ALL make "${extra_make_flags[@]}" ${JOBSFLAGS}
yann@1345
    84
yann@1345
    85
    CT_DoLog EXTRA "Installing binutils"
yann@1345
    86
    CT_DoExecLog ALL make install
yann@1345
    87
yann@2247
    88
    # Install the wrapper if needed
yann@2247
    89
    if [ "${CT_BINUTILS_LD_WRAPPER}" = "y" ]; then
yann@2247
    90
        CT_DoLog EXTRA "Installing ld wrapper"
yann@2247
    91
        rm -f "${CT_PREFIX_DIR}/bin/${CT_TARGET}-ld"
yann@2247
    92
        sed -r -e "s/@@DEFAULT_LD@@/${CT_BINUTILS_LINKER_DEFAULT}/" \
yann@2247
    93
            "${CT_LIB_DIR}/scripts/build/binutils/binutils-ld.in"   \
yann@2247
    94
            >"${CT_PREFIX_DIR}/bin/${CT_TARGET}-ld"
yann@2247
    95
        chmod +x "${CT_PREFIX_DIR}/bin/${CT_TARGET}-ld"
yann@2247
    96
    fi
yann@2247
    97
yann@1345
    98
    # Make those new tools available to the core C compilers to come.
yann@1345
    99
    # Note: some components want the ${TARGET}-{ar,as,ld,strip} commands as
yann@1345
   100
    # well. Create that.
yann@1345
   101
    mkdir -p "${CT_CC_CORE_STATIC_PREFIX_DIR}/${CT_TARGET}/bin"
yann@1345
   102
    mkdir -p "${CT_CC_CORE_STATIC_PREFIX_DIR}/bin"
yann@1345
   103
    mkdir -p "${CT_CC_CORE_SHARED_PREFIX_DIR}/${CT_TARGET}/bin"
yann@1345
   104
    mkdir -p "${CT_CC_CORE_SHARED_PREFIX_DIR}/bin"
yann@2247
   105
    for t in "${binutils_tools[@]}"; do
yann@1345
   106
        ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_STATIC_PREFIX_DIR}/${CT_TARGET}/bin/${t}"
yann@1345
   107
        ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_STATIC_PREFIX_DIR}/bin/${CT_TARGET}-${t}"
yann@1345
   108
        ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_SHARED_PREFIX_DIR}/${CT_TARGET}/bin/${t}"
yann@1345
   109
        ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_SHARED_PREFIX_DIR}/bin/${CT_TARGET}-${t}"
yann@1345
   110
    done 2>&1 |CT_DoLog ALL
yann@1345
   111
yann@1345
   112
    CT_EndStep
yann@1345
   113
}
yann@1345
   114
yann@1345
   115
# Now on for the target libraries
yann@1345
   116
do_binutils_target() {
yann@1483
   117
    local -a extra_config
yann@1483
   118
    local -a targets
yann@1483
   119
    local -a build_targets
yann@1483
   120
    local -a install_targets
yann@1483
   121
    local t
yann@1345
   122
yann@1483
   123
    [ "${CT_BINUTILS_FOR_TARGET_IBERTY}" = "y" ] && targets+=("libiberty")
yann@1483
   124
    [ "${CT_BINUTILS_FOR_TARGET_BFD}"    = "y" ] && targets+=("bfd")
yann@1483
   125
    for t in "${targets[@]}"; do
yann@1483
   126
        build_targets+=("all-${t}")
yann@1483
   127
        install_targets+=("install-${t}")
yann@1483
   128
    done
yann@1483
   129
yann@1483
   130
    if [ "${#targets[@]}" -ne 0 ]; then
yann@1345
   131
        CT_DoStep INFO "Installing binutils for target"
yann@1345
   132
        mkdir -p "${CT_BUILD_DIR}/build-binutils-for-target"
yann@1345
   133
        CT_Pushd "${CT_BUILD_DIR}/build-binutils-for-target"
yann@1345
   134
yann@1345
   135
        CT_DoLog EXTRA "Configuring binutils for target"
yann@1345
   136
        CT_DoExecLog ALL                                            \
yann@1345
   137
        "${CT_SRC_DIR}/binutils-${CT_BINUTILS_VERSION}/configure"   \
yann@1345
   138
            --build=${CT_BUILD}                                     \
yann@1345
   139
            --host=${CT_TARGET}                                     \
yann@1345
   140
            --target=${CT_TARGET}                                   \
yann@1345
   141
            --prefix=/usr                                           \
yann@1345
   142
            --disable-werror                                        \
yann@1345
   143
            --enable-shared                                         \
yann@1345
   144
            --enable-static                                         \
yann@1345
   145
            --disable-nls                                           \
yann@1345
   146
            --disable-multilib                                      \
yann@1483
   147
            "${extra_config[@]}"                                    \
yann@1345
   148
            ${CT_ARCH_WITH_FLOAT}                                   \
yann@1345
   149
            ${CT_BINUTILS_EXTRA_CONFIG}
yann@1345
   150
yann@1483
   151
        CT_DoLog EXTRA "Building binutils' libraries (${targets[*]}) for target"
yann@2275
   152
        CT_DoExecLog ALL make ${JOBSFLAGS} "${build_targets[@]}"
yann@1483
   153
        CT_DoLog EXTRA "Installing binutils' libraries (${targets[*]}) for target"
yann@1483
   154
        CT_DoExecLog ALL make DESTDIR="${CT_SYSROOT_DIR}" "${install_targets[@]}"
yann@1345
   155
yann@1345
   156
        CT_Popd
yann@1345
   157
        CT_EndStep
yann@1345
   158
    fi
yann@1345
   159
}