scripts/build/binutils/binutils.sh
author Michael Hope <michael.hope@linaro.org>
Wed Nov 16 10:06:21 2011 +1300 (2011-11-16)
changeset 2765 6c5658b8b588
parent 2702 293d8334b913
child 2779 fc8b56c5c483
permissions -rw-r--r--
scripts: add support for building manuals

Add support for building the HTML and PDF manuals for the major
components. Implement for binutils, GCC, GDB, and GLIBC.

Always build all manuals and install a subset. Be explicit about the
subset to reduce the clutter and to avoid getting copies of common
manuals like bfd from all of the sourceware based components. Downside of
being explicit is that you need to update it when a new component
comes along.

Build the manuals as part of the last GCC build, namely 'cc' for glibc
based ones and cc_core_pass_2 for baremetal.

An example of the output is at:
http://people.linaro.org/~michaelh/incoming/crosstool-NG/

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