scripts/build/binutils/binutils.sh
author "Yann E. MORIN" <yann.morin.1998@free.fr>
Mon Feb 13 21:47:25 2012 +0100 (2012-02-13)
changeset 2883 cea814c9932a
parent 2804 8946dd980d9e
child 2906 af58fa8b5caa
permissions -rw-r--r--
libc/glibc: do not consume parameters when parsing them

Currently, there are two constructs used to parse arguments in
glibc backends, one that consumes args as they are parsed, and
one that does not.

Always use the construct that does not eat args as they are parsed.

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