scripts/build/binutils/binutils.sh
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Wed May 18 23:00:46 2011 +0200 (2011-05-18)
changeset 2467 200836977ce6
parent 2466 b7df125a1c78
child 2488 58a28561f1bc
permissions -rw-r--r--
config: rename variables that are arrays

Make it explicit that a variable is an array bu the name of the variable.
It will be used later when .config gets munged to allow both multiple
arguments and arguments with spaces at the same time to be passed from the
configuration down to the build scripts.

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@2341
    61
    CT_DoExecLog CFG                                            \
yann@1345
    62
    CFLAGS="${CT_CFLAGS_FOR_HOST}"                              \
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@2466
    73
        ${BINUTILS_SYSROOT_ARG}                                 \
yann@2467
    74
        "${CT_BINUTILS_EXTRA_CONFIG_ARRAY[@]}"
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@2375
    92
        rm -f "${CT_PREFIX_DIR}/${CT_TARGET}/bin/ld"
yann@2247
    93
        sed -r -e "s/@@DEFAULT_LD@@/${CT_BINUTILS_LINKER_DEFAULT}/" \
yann@2247
    94
            "${CT_LIB_DIR}/scripts/build/binutils/binutils-ld.in"   \
yann@2247
    95
            >"${CT_PREFIX_DIR}/bin/${CT_TARGET}-ld"
yann@2247
    96
        chmod +x "${CT_PREFIX_DIR}/bin/${CT_TARGET}-ld"
yann@2375
    97
        cp -a "${CT_PREFIX_DIR}/bin/${CT_TARGET}-ld"    \
yann@2375
    98
              "${CT_PREFIX_DIR}/${CT_TARGET}/bin/ld"
yann@2376
    99
yann@2376
   100
        # If needed, force using ld.bfd during the toolchain build
yann@2376
   101
        if [ "${CT_BINUTILS_FORCE_LD_BFD}" = "y" ]; then
yann@2376
   102
            export CTNG_LD_IS=bfd
yann@2376
   103
        fi
yann@2247
   104
    fi
yann@2247
   105
yann@1345
   106
    # Make those new tools available to the core C compilers to come.
yann@1345
   107
    # Note: some components want the ${TARGET}-{ar,as,ld,strip} commands as
yann@1345
   108
    # well. Create that.
yann@1345
   109
    mkdir -p "${CT_CC_CORE_STATIC_PREFIX_DIR}/${CT_TARGET}/bin"
yann@1345
   110
    mkdir -p "${CT_CC_CORE_STATIC_PREFIX_DIR}/bin"
yann@1345
   111
    mkdir -p "${CT_CC_CORE_SHARED_PREFIX_DIR}/${CT_TARGET}/bin"
yann@1345
   112
    mkdir -p "${CT_CC_CORE_SHARED_PREFIX_DIR}/bin"
yann@2247
   113
    for t in "${binutils_tools[@]}"; do
yann@1345
   114
        ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_STATIC_PREFIX_DIR}/${CT_TARGET}/bin/${t}"
yann@1345
   115
        ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_STATIC_PREFIX_DIR}/bin/${CT_TARGET}-${t}"
yann@1345
   116
        ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_SHARED_PREFIX_DIR}/${CT_TARGET}/bin/${t}"
yann@1345
   117
        ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_SHARED_PREFIX_DIR}/bin/${CT_TARGET}-${t}"
yann@1345
   118
    done 2>&1 |CT_DoLog ALL
yann@1345
   119
yann@1345
   120
    CT_EndStep
yann@1345
   121
}
yann@1345
   122
yann@1345
   123
# Now on for the target libraries
yann@1345
   124
do_binutils_target() {
yann@1483
   125
    local -a extra_config
yann@1483
   126
    local -a targets
yann@1483
   127
    local -a build_targets
yann@1483
   128
    local -a install_targets
yann@1483
   129
    local t
yann@1345
   130
yann@1483
   131
    [ "${CT_BINUTILS_FOR_TARGET_IBERTY}" = "y" ] && targets+=("libiberty")
yann@1483
   132
    [ "${CT_BINUTILS_FOR_TARGET_BFD}"    = "y" ] && targets+=("bfd")
yann@1483
   133
    for t in "${targets[@]}"; do
yann@1483
   134
        build_targets+=("all-${t}")
yann@1483
   135
        install_targets+=("install-${t}")
yann@1483
   136
    done
yann@1483
   137
yann@1483
   138
    if [ "${#targets[@]}" -ne 0 ]; then
yann@1345
   139
        CT_DoStep INFO "Installing binutils for target"
yann@1345
   140
        mkdir -p "${CT_BUILD_DIR}/build-binutils-for-target"
yann@1345
   141
        CT_Pushd "${CT_BUILD_DIR}/build-binutils-for-target"
yann@1345
   142
yann@1345
   143
        CT_DoLog EXTRA "Configuring binutils for target"
yann@2333
   144
        CT_DoExecLog CFG                                            \
yann@1345
   145
        "${CT_SRC_DIR}/binutils-${CT_BINUTILS_VERSION}/configure"   \
yann@1345
   146
            --build=${CT_BUILD}                                     \
yann@1345
   147
            --host=${CT_TARGET}                                     \
yann@1345
   148
            --target=${CT_TARGET}                                   \
yann@1345
   149
            --prefix=/usr                                           \
yann@1345
   150
            --disable-werror                                        \
yann@1345
   151
            --enable-shared                                         \
yann@1345
   152
            --enable-static                                         \
yann@1345
   153
            --disable-nls                                           \
yann@1345
   154
            --disable-multilib                                      \
yann@1483
   155
            "${extra_config[@]}"                                    \
yann@1345
   156
            ${CT_ARCH_WITH_FLOAT}                                   \
yann@2466
   157
            "${CT_BINUTILS_EXTRA_CONFIG[@]}"
yann@1345
   158
yann@1483
   159
        CT_DoLog EXTRA "Building binutils' libraries (${targets[*]}) for target"
yann@2275
   160
        CT_DoExecLog ALL make ${JOBSFLAGS} "${build_targets[@]}"
yann@1483
   161
        CT_DoLog EXTRA "Installing binutils' libraries (${targets[*]}) for target"
yann@1483
   162
        CT_DoExecLog ALL make DESTDIR="${CT_SYSROOT_DIR}" "${install_targets[@]}"
yann@1345
   163
yann@1345
   164
        CT_Popd
yann@1345
   165
        CT_EndStep
yann@1345
   166
    fi
yann@1345
   167
}