scripts/build/binutils/binutils.sh
author Esben Haabendal <esben.haabendal@prevas.dk>
Fri Oct 07 15:06:44 2011 +0200 (2011-10-07)
changeset 2721 7b64746b0ab3
parent 2697 9cd87d279a99
child 2765 6c5658b8b588
child 2846 f634ec0447cd
permissions -rw-r--r--
scripts/functions: Fix CT_ExtractGit function.

Change CT_ExtractGit so that it clones the repository, instead of just
symlinking it. After cloning, any given ref is checked out, or if no
ref is given, the HEAD of the repository is checked out.

This makes CT_Extract behave similar for git repositories as it does
for tarballs, so that it for example can be used for passing glibc-ports
as a git repository.

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