scripts/build/binutils/binutils.sh
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Wed May 04 00:04:23 2011 +0200 (2011-05-04)
changeset 2608 aa09a36c3d36
parent 2488 58a28561f1bc
child 2697 9cd87d279a99
permissions -rw-r--r--
scripts/functions: test for decompressors before use

./configure does check for the presence of gz and bzip2, so we can
safely use them in the build scripts.

On the other hand, more recent formats (eg. XZ) are not yet widely
available, and we do not want, and can't, force the user to install
them as a pre-requisite.

So, build up a list of allowed tarball formats based on the available
decompressors. For no, this is a static list, but the upcoming XZ
support will conditionnaly add to this list.

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
benoit@2488
    58
    if [ "${CT_BINUTILS_HAS_PKGVERSION_BUGURL}" = "y" ]; then
benoit@2503
    59
        extra_config+=("--with-pkgversion=${CT_PKGVERSION}")
benoit@2503
    60
        [ -n "${CT_TOOLCHAIN_BUGURL}" ] && extra_config+=("--with-bugurl=${CT_TOOLCHAIN_BUGURL}")
benoit@2488
    61
    fi
yann@2244
    62
yann@2244
    63
    CT_DoLog DEBUG "Extra config passed: '${extra_config[*]}'"
yann@2244
    64
yann@2341
    65
    CT_DoExecLog CFG                                            \
yann@1345
    66
    CFLAGS="${CT_CFLAGS_FOR_HOST}"                              \
yann@1345
    67
    "${CT_SRC_DIR}/binutils-${CT_BINUTILS_VERSION}/configure"   \
yann@1345
    68
        --build=${CT_BUILD}                                     \
yann@1345
    69
        --host=${CT_HOST}                                       \
yann@1345
    70
        --target=${CT_TARGET}                                   \
yann@1345
    71
        --prefix=${CT_PREFIX_DIR}                               \
yann@1345
    72
        --disable-nls                                           \
yann@1345
    73
        --disable-multilib                                      \
yann@1345
    74
        --disable-werror                                        \
yann@1483
    75
        "${extra_config[@]}"                                    \
yann@1345
    76
        ${CT_ARCH_WITH_FLOAT}                                   \
yann@2466
    77
        ${BINUTILS_SYSROOT_ARG}                                 \
yann@2467
    78
        "${CT_BINUTILS_EXTRA_CONFIG_ARRAY[@]}"
yann@1345
    79
bryanhundven@2210
    80
    if [ "${CT_STATIC_TOOLCHAIN}" = "y" ]; then
bryanhundven@2210
    81
        extra_make_flags+=("LDFLAGS=-all-static")
bryanhundven@2210
    82
        CT_DoLog EXTRA "Prepare binutils for static build"
bryanhundven@2210
    83
        CT_DoExecLog ALL make configure-host
bryanhundven@2210
    84
    fi
bryanhundven@2210
    85
yann@1345
    86
    CT_DoLog EXTRA "Building binutils"
yann@2275
    87
    CT_DoExecLog ALL make "${extra_make_flags[@]}" ${JOBSFLAGS}
yann@1345
    88
yann@1345
    89
    CT_DoLog EXTRA "Installing binutils"
yann@1345
    90
    CT_DoExecLog ALL make install
yann@1345
    91
yann@2247
    92
    # Install the wrapper if needed
yann@2247
    93
    if [ "${CT_BINUTILS_LD_WRAPPER}" = "y" ]; then
yann@2247
    94
        CT_DoLog EXTRA "Installing ld wrapper"
yann@2247
    95
        rm -f "${CT_PREFIX_DIR}/bin/${CT_TARGET}-ld"
yann@2375
    96
        rm -f "${CT_PREFIX_DIR}/${CT_TARGET}/bin/ld"
yann@2247
    97
        sed -r -e "s/@@DEFAULT_LD@@/${CT_BINUTILS_LINKER_DEFAULT}/" \
yann@2247
    98
            "${CT_LIB_DIR}/scripts/build/binutils/binutils-ld.in"   \
yann@2247
    99
            >"${CT_PREFIX_DIR}/bin/${CT_TARGET}-ld"
yann@2247
   100
        chmod +x "${CT_PREFIX_DIR}/bin/${CT_TARGET}-ld"
yann@2375
   101
        cp -a "${CT_PREFIX_DIR}/bin/${CT_TARGET}-ld"    \
yann@2375
   102
              "${CT_PREFIX_DIR}/${CT_TARGET}/bin/ld"
yann@2376
   103
yann@2376
   104
        # If needed, force using ld.bfd during the toolchain build
yann@2376
   105
        if [ "${CT_BINUTILS_FORCE_LD_BFD}" = "y" ]; then
yann@2376
   106
            export CTNG_LD_IS=bfd
yann@2376
   107
        fi
yann@2247
   108
    fi
yann@2247
   109
yann@1345
   110
    # Make those new tools available to the core C compilers to come.
yann@1345
   111
    # Note: some components want the ${TARGET}-{ar,as,ld,strip} commands as
yann@1345
   112
    # well. Create that.
yann@1345
   113
    mkdir -p "${CT_CC_CORE_STATIC_PREFIX_DIR}/${CT_TARGET}/bin"
yann@1345
   114
    mkdir -p "${CT_CC_CORE_STATIC_PREFIX_DIR}/bin"
yann@1345
   115
    mkdir -p "${CT_CC_CORE_SHARED_PREFIX_DIR}/${CT_TARGET}/bin"
yann@1345
   116
    mkdir -p "${CT_CC_CORE_SHARED_PREFIX_DIR}/bin"
yann@2247
   117
    for t in "${binutils_tools[@]}"; do
yann@1345
   118
        ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_STATIC_PREFIX_DIR}/${CT_TARGET}/bin/${t}"
yann@1345
   119
        ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_STATIC_PREFIX_DIR}/bin/${CT_TARGET}-${t}"
yann@1345
   120
        ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_SHARED_PREFIX_DIR}/${CT_TARGET}/bin/${t}"
yann@1345
   121
        ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_SHARED_PREFIX_DIR}/bin/${CT_TARGET}-${t}"
yann@1345
   122
    done 2>&1 |CT_DoLog ALL
yann@1345
   123
yann@1345
   124
    CT_EndStep
yann@1345
   125
}
yann@1345
   126
yann@1345
   127
# Now on for the target libraries
yann@1345
   128
do_binutils_target() {
yann@1483
   129
    local -a extra_config
yann@1483
   130
    local -a targets
yann@1483
   131
    local -a build_targets
yann@1483
   132
    local -a install_targets
yann@1483
   133
    local t
yann@1345
   134
yann@1483
   135
    [ "${CT_BINUTILS_FOR_TARGET_IBERTY}" = "y" ] && targets+=("libiberty")
yann@1483
   136
    [ "${CT_BINUTILS_FOR_TARGET_BFD}"    = "y" ] && targets+=("bfd")
yann@1483
   137
    for t in "${targets[@]}"; do
yann@1483
   138
        build_targets+=("all-${t}")
yann@1483
   139
        install_targets+=("install-${t}")
yann@1483
   140
    done
yann@1483
   141
yann@1483
   142
    if [ "${#targets[@]}" -ne 0 ]; then
yann@1345
   143
        CT_DoStep INFO "Installing binutils for target"
yann@1345
   144
        mkdir -p "${CT_BUILD_DIR}/build-binutils-for-target"
yann@1345
   145
        CT_Pushd "${CT_BUILD_DIR}/build-binutils-for-target"
yann@1345
   146
yann@1345
   147
        CT_DoLog EXTRA "Configuring binutils for target"
benoit@2488
   148
benoit@2488
   149
        if [ "${CT_BINUTILS_HAS_PKGVERSION_BUGURL}" = "y" ]; then
benoit@2503
   150
            extra_config+=("--with-pkgversion=${CT_PKGVERSION}")
benoit@2503
   151
            [ -n "${CT_TOOLCHAIN_BUGURL}" ] && extra_config+=("--with-bugurl=${CT_TOOLCHAIN_BUGURL}")
benoit@2488
   152
        fi
benoit@2488
   153
yann@2333
   154
        CT_DoExecLog CFG                                            \
yann@1345
   155
        "${CT_SRC_DIR}/binutils-${CT_BINUTILS_VERSION}/configure"   \
yann@1345
   156
            --build=${CT_BUILD}                                     \
yann@1345
   157
            --host=${CT_TARGET}                                     \
yann@1345
   158
            --target=${CT_TARGET}                                   \
yann@1345
   159
            --prefix=/usr                                           \
yann@1345
   160
            --disable-werror                                        \
yann@1345
   161
            --enable-shared                                         \
yann@1345
   162
            --enable-static                                         \
yann@1345
   163
            --disable-nls                                           \
yann@1345
   164
            --disable-multilib                                      \
yann@1483
   165
            "${extra_config[@]}"                                    \
yann@1345
   166
            ${CT_ARCH_WITH_FLOAT}                                   \
yann@2466
   167
            "${CT_BINUTILS_EXTRA_CONFIG[@]}"
yann@1345
   168
yann@1483
   169
        CT_DoLog EXTRA "Building binutils' libraries (${targets[*]}) for target"
yann@2275
   170
        CT_DoExecLog ALL make ${JOBSFLAGS} "${build_targets[@]}"
yann@1483
   171
        CT_DoLog EXTRA "Installing binutils' libraries (${targets[*]}) for target"
yann@1483
   172
        CT_DoExecLog ALL make DESTDIR="${CT_SYSROOT_DIR}" "${install_targets[@]}"
yann@1345
   173
yann@1345
   174
        CT_Popd
yann@1345
   175
        CT_EndStep
yann@1345
   176
    fi
yann@1345
   177
}