scripts/build/binutils/binutils.sh
author "Benoît Thébaudeau" <benoit.thebaudeau@advansee.com>
Mon Apr 16 15:25:36 2012 +0200 (2012-04-16)
changeset 2941 13e40098fffc
parent 2926 d304c8a7bfa8
child 3032 712a8ed22762
permissions -rw-r--r--
cc/gcc: update Linaro GCC revisions to 2012.04

Update Linaro GCC with the latest available revisions.

The 4.7 revision is also released, but the infrastructure is not yet ready for
it in CT-NG.

Signed-off-by: "Benoît Thébaudeau" <benoit.thebaudeau@advansee.com>
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@2928
    18
# Build binutils for build -> target
yann@2928
    19
do_binutils_for_build() {
yann@2928
    20
    local -a binutils_opts
yann@2928
    21
yann@2928
    22
    case "${CT_TOOLCHAIN_TYPE}" in
yann@2928
    23
        native|cross)   return 0;;
yann@2928
    24
    esac
yann@2928
    25
yann@2928
    26
    CT_DoStep INFO "Installing binutils for build"
yann@2928
    27
    CT_mkdir_pushd "${CT_BUILD_DIR}/build-binutils-build-${CT_BUILD}"
yann@2928
    28
yann@2928
    29
    binutils_opts+=( "host=${CT_BUILD}" )
yann@2928
    30
    binutils_opts+=( "prefix=${CT_BUILDTOOLS_PREFIX_DIR}" )
yann@2928
    31
yann@2928
    32
    do_binutils_backend "${binutils_opts[@]}"
yann@2928
    33
yann@2928
    34
    CT_Popd
yann@2928
    35
    CT_EndStep
yann@2928
    36
}
yann@2928
    37
yann@2926
    38
# Build binutils for host -> target
yann@2926
    39
do_binutils_for_host() {
yann@2926
    40
    local -a binutils_tools
yann@2926
    41
    local -a binutils_opts
yann@2926
    42
yann@2926
    43
    CT_DoStep INFO "Installing binutils for host"
yann@2926
    44
    CT_mkdir_pushd "${CT_BUILD_DIR}/build-binutils-host-${CT_HOST}"
yann@2926
    45
yann@2926
    46
    binutils_opts+=( "host=${CT_HOST}" )
yann@2926
    47
    binutils_opts+=( "prefix=${CT_PREFIX_DIR}" )
yann@2926
    48
    binutils_opts+=( "static_build=${CT_STATIC_TOOLCHAIN}" )
yann@2926
    49
    binutils_opts+=( "cflags=${CT_CFLAGS_FOR_HOST}" )
yann@2926
    50
    binutils_opts+=( "build_manuals=${CT_BUILD_MANUALS}" )
yann@2926
    51
yann@2926
    52
    do_binutils_backend "${binutils_opts[@]}"
yann@2926
    53
yann@2926
    54
    # Make those new tools available to the core C compilers to come.
yann@2926
    55
    # Note: some components want the ${TARGET}-{ar,as,ld,strip} commands as
yann@2926
    56
    # well. Create that.
yann@2926
    57
    # Don't do it for canadian or cross-native, because the binutils
yann@2926
    58
    # are not executable on the build machine.
yann@2926
    59
    case "${CT_TOOLCHAIN_TYPE}" in
yann@2926
    60
        cross|native)
yann@2926
    61
            binutils_tools=( ar as ld strip )
yann@2926
    62
            case "${CT_BINUTILS_LINKERS_LIST}" in
yann@2926
    63
                ld)         binutils_tools+=( ld.bfd ) ;;
yann@2926
    64
                gold)       binutils_tools+=( ld.gold ) ;;
yann@2926
    65
                ld,gold)    binutils_tools+=( ld.bfd ld.gold ) ;;
yann@2926
    66
                gold,ld)    binutils_tools+=( ld.bfd ld.gold ) ;;
yann@2926
    67
            esac
yann@2926
    68
            mkdir -p "${CT_BUILDTOOLS_PREFIX_DIR}/${CT_TARGET}/bin"
yann@2926
    69
            mkdir -p "${CT_BUILDTOOLS_PREFIX_DIR}/bin"
yann@2926
    70
            for t in "${binutils_tools[@]}"; do
yann@2926
    71
                CT_DoExecLog ALL ln -sv                                         \
yann@2926
    72
                                    "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}"    \
yann@2926
    73
                                    "${CT_BUILDTOOLS_PREFIX_DIR}/${CT_TARGET}/bin/${t}"
yann@2926
    74
                CT_DoExecLog ALL ln -sv                                         \
yann@2926
    75
                                    "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}"    \
yann@2926
    76
                                    "${CT_BUILDTOOLS_PREFIX_DIR}/bin/${CT_TARGET}-${t}"
yann@2926
    77
            done
yann@2926
    78
            ;;
yann@2926
    79
        *)  ;;
yann@2926
    80
    esac
yann@2926
    81
yann@2926
    82
    CT_Popd
yann@2926
    83
    CT_EndStep
yann@2926
    84
}
yann@2926
    85
yann@2926
    86
# Build binutils for X -> target
yann@2926
    87
#     Parameter     : description               : type      : default
yann@2926
    88
#     host          : machine to run on         : tuple     : (none)
yann@2926
    89
#     prefix        : prefix to install into    : dir       : (none)
yann@2926
    90
#     static_build  : build statcially          : bool      : no
yann@2926
    91
#     cflags        : host cflags to use        : string    : (empty)
yann@2926
    92
#     build_manuals : whether to build manuals  : bool      : no
yann@2926
    93
do_binutils_backend() {
yann@2926
    94
    local host
yann@2926
    95
    local prefix
yann@2926
    96
    local static_build
yann@2926
    97
    local cflags
yann@2926
    98
    local build_manuals=no
yann@1483
    99
    local -a extra_config
bryanhundven@2210
   100
    local -a extra_make_flags
michael@2765
   101
    local -a manuals_for
michael@2765
   102
    local -a manuals_install
yann@2926
   103
    local arg
yann@1483
   104
yann@2926
   105
    for arg in "$@"; do
yann@2926
   106
        eval "${arg// /\\ }"
yann@2926
   107
    done
yann@1345
   108
yann@1345
   109
    CT_DoLog EXTRA "Configuring binutils"
yann@2244
   110
yann@2244
   111
    if [ "${CT_BINUTILS_HAS_GOLD}" = "y" ]; then
yann@2244
   112
        case "${CT_BINUTILS_LINKERS_LIST}" in
yann@2244
   113
            ld)
yann@2244
   114
                extra_config+=( --enable-ld=yes --enable-gold=no )
yann@2244
   115
                ;;
yann@2244
   116
            gold)
yann@2244
   117
                extra_config+=( --enable-ld=no --enable-gold=yes )
yann@2244
   118
                ;;
yann@2244
   119
            ld,gold)
yann@2244
   120
                extra_config+=( --enable-ld=default --enable-gold=yes )
yann@2244
   121
                ;;
yann@2244
   122
            gold,ld)
yann@2244
   123
                extra_config+=( --enable-ld=yes --enable-gold=default )
yann@2244
   124
                ;;
yann@2244
   125
        esac
yann@2246
   126
        if [ "${CT_BINUTILS_GOLD_THREADED}" = "y" ]; then
yann@2246
   127
            extra_config+=( --enable-threads )
yann@2246
   128
        fi
yann@2244
   129
    fi
yann@2245
   130
    if [ "${CT_BINUTILS_PLUGINS}" = "y" ]; then
yann@2245
   131
        extra_config+=( --enable-plugins )
yann@2245
   132
    fi
benoit@2488
   133
    if [ "${CT_BINUTILS_HAS_PKGVERSION_BUGURL}" = "y" ]; then
benoit@2503
   134
        extra_config+=("--with-pkgversion=${CT_PKGVERSION}")
benoit@2503
   135
        [ -n "${CT_TOOLCHAIN_BUGURL}" ] && extra_config+=("--with-bugurl=${CT_TOOLCHAIN_BUGURL}")
benoit@2488
   136
    fi
yann@2816
   137
    if [ "${CT_MULTILIB}" = "y" ]; then
yann@2816
   138
        extra_config+=("--enable-multilib")
yann@2816
   139
    else
yann@2816
   140
        extra_config+=("--disable-multilib")
yann@2816
   141
    fi
yann@2244
   142
zhenqiang@2779
   143
    [ "${CT_TOOLCHAIN_ENABLE_NLS}" != "y" ] && extra_config+=("--disable-nls")
zhenqiang@2779
   144
yann@2244
   145
    CT_DoLog DEBUG "Extra config passed: '${extra_config[*]}'"
yann@2244
   146
yann@2341
   147
    CT_DoExecLog CFG                                            \
yann@2926
   148
    CFLAGS="${cflags}"                                          \
yann@2926
   149
    CXXFLAGS="${cflags}"                                        \
yann@1345
   150
    "${CT_SRC_DIR}/binutils-${CT_BINUTILS_VERSION}/configure"   \
yann@1345
   151
        --build=${CT_BUILD}                                     \
yann@2926
   152
        --host=${host}                                          \
yann@1345
   153
        --target=${CT_TARGET}                                   \
yann@2926
   154
        --prefix=${prefix}                                      \
yann@1345
   155
        --disable-werror                                        \
yann@1483
   156
        "${extra_config[@]}"                                    \
yann@1345
   157
        ${CT_ARCH_WITH_FLOAT}                                   \
yann@2466
   158
        ${BINUTILS_SYSROOT_ARG}                                 \
yann@2467
   159
        "${CT_BINUTILS_EXTRA_CONFIG_ARRAY[@]}"
yann@1345
   160
yann@2926
   161
    if [ "${static_build}" = "y" ]; then
yann@2702
   162
        extra_make_flags+=("LDFLAGS=-static -all-static")
bryanhundven@2210
   163
        CT_DoLog EXTRA "Prepare binutils for static build"
yann@2702
   164
        CT_DoExecLog ALL make ${JOBSFLAGS} configure-host
bryanhundven@2210
   165
    fi
bryanhundven@2210
   166
yann@1345
   167
    CT_DoLog EXTRA "Building binutils"
yann@2275
   168
    CT_DoExecLog ALL make "${extra_make_flags[@]}" ${JOBSFLAGS}
yann@1345
   169
yann@1345
   170
    CT_DoLog EXTRA "Installing binutils"
yann@1345
   171
    CT_DoExecLog ALL make install
yann@1345
   172
yann@2926
   173
    if [ "${build_manuals}" = "y" ]; then
michael@2765
   174
        CT_DoLog EXTRA "Building and installing the binutils manuals"
michael@2765
   175
        manuals_for=( gas binutils ld gprof )
michael@2765
   176
        if [ "${CT_BINUTILS_LINKER_GOLD}" = "y" ]; then
michael@2765
   177
            manuals_for+=( gold )
michael@2765
   178
        fi
michael@2765
   179
        manuals_install=( "${manuals_for[@]/#/install-pdf-}" )
michael@2765
   180
        manuals_install+=( "${manuals_for[@]/#/install-html-}" )
michael@2765
   181
        CT_DoExecLog ALL make ${JOBSFLAGS} pdf html
michael@2765
   182
        CT_DoExecLog ALL make "${manuals_install[@]}"
michael@2765
   183
    fi
michael@2765
   184
yann@2247
   185
    # Install the wrapper if needed
yann@2247
   186
    if [ "${CT_BINUTILS_LD_WRAPPER}" = "y" ]; then
yann@2247
   187
        CT_DoLog EXTRA "Installing ld wrapper"
yann@2926
   188
        rm -f "${prefix}/bin/${CT_TARGET}-ld"
yann@2926
   189
        rm -f "${prefix}/${CT_TARGET}/bin/ld"
yann@2247
   190
        sed -r -e "s/@@DEFAULT_LD@@/${CT_BINUTILS_LINKER_DEFAULT}/" \
yann@2247
   191
            "${CT_LIB_DIR}/scripts/build/binutils/binutils-ld.in"   \
yann@2926
   192
            >"${prefix}/bin/${CT_TARGET}-ld"
yann@2926
   193
        chmod +x "${prefix}/bin/${CT_TARGET}-ld"
yann@2926
   194
        cp -a "${prefix}/bin/${CT_TARGET}-ld"   \
yann@2926
   195
              "${prefix}/${CT_TARGET}/bin/ld"
yann@2376
   196
yann@2376
   197
        # If needed, force using ld.bfd during the toolchain build
yann@2376
   198
        if [ "${CT_BINUTILS_FORCE_LD_BFD}" = "y" ]; then
yann@2376
   199
            export CTNG_LD_IS=bfd
yann@2376
   200
        fi
yann@2247
   201
    fi
yann@1345
   202
}
yann@1345
   203
yann@1345
   204
# Now on for the target libraries
yann@2906
   205
do_binutils_for_target() {
yann@1483
   206
    local -a extra_config
yann@1483
   207
    local -a targets
yann@1483
   208
    local -a build_targets
yann@1483
   209
    local -a install_targets
yann@1483
   210
    local t
yann@1345
   211
yann@1483
   212
    [ "${CT_BINUTILS_FOR_TARGET_IBERTY}" = "y" ] && targets+=("libiberty")
yann@1483
   213
    [ "${CT_BINUTILS_FOR_TARGET_BFD}"    = "y" ] && targets+=("bfd")
yann@1483
   214
    for t in "${targets[@]}"; do
yann@1483
   215
        build_targets+=("all-${t}")
yann@1483
   216
        install_targets+=("install-${t}")
yann@1483
   217
    done
yann@1483
   218
yann@1483
   219
    if [ "${#targets[@]}" -ne 0 ]; then
yann@1345
   220
        CT_DoStep INFO "Installing binutils for target"
yann@1345
   221
        mkdir -p "${CT_BUILD_DIR}/build-binutils-for-target"
yann@1345
   222
        CT_Pushd "${CT_BUILD_DIR}/build-binutils-for-target"
yann@1345
   223
yann@1345
   224
        CT_DoLog EXTRA "Configuring binutils for target"
benoit@2488
   225
benoit@2488
   226
        if [ "${CT_BINUTILS_HAS_PKGVERSION_BUGURL}" = "y" ]; then
benoit@2503
   227
            extra_config+=("--with-pkgversion=${CT_PKGVERSION}")
benoit@2503
   228
            [ -n "${CT_TOOLCHAIN_BUGURL}" ] && extra_config+=("--with-bugurl=${CT_TOOLCHAIN_BUGURL}")
benoit@2488
   229
        fi
yann@2816
   230
        if [ "${CT_MULTILIB}" = "y" ]; then
yann@2816
   231
            extra_config+=("--enable-multilib")
yann@2816
   232
        else
yann@2816
   233
            extra_config+=("--disable-multilib")
yann@2816
   234
        fi
benoit@2488
   235
zhenqiang@2779
   236
        [ "${CT_TOOLCHAIN_ENABLE_NLS}" != "y" ] && extra_config+=("--disable-nls")
zhenqiang@2779
   237
yann@2333
   238
        CT_DoExecLog CFG                                            \
yann@1345
   239
        "${CT_SRC_DIR}/binutils-${CT_BINUTILS_VERSION}/configure"   \
yann@1345
   240
            --build=${CT_BUILD}                                     \
yann@1345
   241
            --host=${CT_TARGET}                                     \
yann@1345
   242
            --target=${CT_TARGET}                                   \
yann@1345
   243
            --prefix=/usr                                           \
yann@1345
   244
            --disable-werror                                        \
yann@1345
   245
            --enable-shared                                         \
yann@1345
   246
            --enable-static                                         \
yann@1483
   247
            "${extra_config[@]}"                                    \
yann@1345
   248
            ${CT_ARCH_WITH_FLOAT}                                   \
benoit@2804
   249
            "${CT_BINUTILS_EXTRA_CONFIG_ARRAY[@]}"
yann@1345
   250
yann@1483
   251
        CT_DoLog EXTRA "Building binutils' libraries (${targets[*]}) for target"
yann@2275
   252
        CT_DoExecLog ALL make ${JOBSFLAGS} "${build_targets[@]}"
yann@1483
   253
        CT_DoLog EXTRA "Installing binutils' libraries (${targets[*]}) for target"
yann@1483
   254
        CT_DoExecLog ALL make DESTDIR="${CT_SYSROOT_DIR}" "${install_targets[@]}"
yann@1345
   255
yann@1345
   256
        CT_Popd
yann@1345
   257
        CT_EndStep
yann@1345
   258
    fi
yann@1345
   259
}