scripts/build/binutils/binutils.sh
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Mon Dec 12 00:01:54 2011 +0100 (2011-12-12)
changeset 2798 4d92888ec7cb
parent 2765 6c5658b8b588
child 2804 8946dd980d9e
permissions -rw-r--r--
kernel/linux: add alternate download locations

Some longterm versions are not in the usual directory.
Account for these new locations.

Get rid of the mirror location, now that the main kernel site is
(almost) back to normal operations.

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