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>
     1 # This file adds functions to build binutils
     2 # Copyright 2007 Yann E. MORIN
     3 # Licensed under the GPL v2. See COPYING in the root of this package
     4 
     5 # Download binutils
     6 do_binutils_get() {
     7     CT_GetFile "binutils-${CT_BINUTILS_VERSION}"                                        \
     8                {ftp,http}://{ftp.gnu.org/gnu,ftp.kernel.org/pub/linux/devel}/binutils   \
     9                ftp://gcc.gnu.org/pub/binutils/{releases,snapshots}
    10 }
    11 
    12 # Extract binutils
    13 do_binutils_extract() {
    14     CT_Extract "binutils-${CT_BINUTILS_VERSION}"
    15     CT_Patch "binutils" "${CT_BINUTILS_VERSION}"
    16 }
    17 
    18 # Build binutils
    19 do_binutils() {
    20     local -a extra_config
    21     local -a extra_make_flags
    22     local -a binutils_tools
    23     local -a manuals_for
    24     local -a manuals_install
    25 
    26     mkdir -p "${CT_BUILD_DIR}/build-binutils"
    27     cd "${CT_BUILD_DIR}/build-binutils"
    28 
    29     CT_DoStep INFO "Installing binutils"
    30 
    31     CT_DoLog EXTRA "Configuring binutils"
    32 
    33     binutils_tools=( ar as ld strip )
    34     if [ "${CT_BINUTILS_HAS_GOLD}" = "y" ]; then
    35         case "${CT_BINUTILS_LINKERS_LIST}" in
    36             ld)
    37                 extra_config+=( --enable-ld=yes --enable-gold=no )
    38                 binutils_tools+=( ld.bfd )
    39                 ;;
    40             gold)
    41                 extra_config+=( --enable-ld=no --enable-gold=yes )
    42                 binutils_tools+=( ld.gold )
    43                 ;;
    44             ld,gold)
    45                 extra_config+=( --enable-ld=default --enable-gold=yes )
    46                 binutils_tools+=( ld.bfd ld.gold )
    47                 ;;
    48             gold,ld)
    49                 extra_config+=( --enable-ld=yes --enable-gold=default )
    50                 binutils_tools+=( ld.bfd ld.gold )
    51                 ;;
    52         esac
    53         if [ "${CT_BINUTILS_GOLD_THREADED}" = "y" ]; then
    54             extra_config+=( --enable-threads )
    55         fi
    56     fi
    57     if [ "${CT_BINUTILS_PLUGINS}" = "y" ]; then
    58         extra_config+=( --enable-plugins )
    59     fi
    60     if [ "${CT_BINUTILS_HAS_PKGVERSION_BUGURL}" = "y" ]; then
    61         extra_config+=("--with-pkgversion=${CT_PKGVERSION}")
    62         [ -n "${CT_TOOLCHAIN_BUGURL}" ] && extra_config+=("--with-bugurl=${CT_TOOLCHAIN_BUGURL}")
    63     fi
    64 
    65     [ "${CT_TOOLCHAIN_ENABLE_NLS}" != "y" ] && extra_config+=("--disable-nls")
    66 
    67     CT_DoLog DEBUG "Extra config passed: '${extra_config[*]}'"
    68 
    69     CT_DoExecLog CFG                                            \
    70     CFLAGS="${CT_CFLAGS_FOR_HOST}"                              \
    71     CXXFLAGS="${CT_CFLAGS_FOR_HOST}"                            \
    72     "${CT_SRC_DIR}/binutils-${CT_BINUTILS_VERSION}/configure"   \
    73         --build=${CT_BUILD}                                     \
    74         --host=${CT_HOST}                                       \
    75         --target=${CT_TARGET}                                   \
    76         --prefix=${CT_PREFIX_DIR}                               \
    77         --disable-multilib                                      \
    78         --disable-werror                                        \
    79         "${extra_config[@]}"                                    \
    80         ${CT_ARCH_WITH_FLOAT}                                   \
    81         ${BINUTILS_SYSROOT_ARG}                                 \
    82         "${CT_BINUTILS_EXTRA_CONFIG_ARRAY[@]}"
    83 
    84     if [ "${CT_STATIC_TOOLCHAIN}" = "y" ]; then
    85         extra_make_flags+=("LDFLAGS=-static -all-static")
    86         CT_DoLog EXTRA "Prepare binutils for static build"
    87         CT_DoExecLog ALL make ${JOBSFLAGS} configure-host
    88     fi
    89 
    90     CT_DoLog EXTRA "Building binutils"
    91     CT_DoExecLog ALL make "${extra_make_flags[@]}" ${JOBSFLAGS}
    92 
    93     CT_DoLog EXTRA "Installing binutils"
    94     CT_DoExecLog ALL make install
    95 
    96     if [ "${CT_BUILD_MANUALS}" = "y" ]; then
    97         CT_DoLog EXTRA "Building and installing the binutils manuals"
    98         manuals_for=( gas binutils ld gprof )
    99         if [ "${CT_BINUTILS_LINKER_GOLD}" = "y" ]; then
   100             manuals_for+=( gold )
   101         fi
   102         manuals_install=( "${manuals_for[@]/#/install-pdf-}" )
   103         manuals_install+=( "${manuals_for[@]/#/install-html-}" )
   104         CT_DoExecLog ALL make ${JOBSFLAGS} pdf html
   105         CT_DoExecLog ALL make "${manuals_install[@]}"
   106     fi
   107 
   108     # Install the wrapper if needed
   109     if [ "${CT_BINUTILS_LD_WRAPPER}" = "y" ]; then
   110         CT_DoLog EXTRA "Installing ld wrapper"
   111         rm -f "${CT_PREFIX_DIR}/bin/${CT_TARGET}-ld"
   112         rm -f "${CT_PREFIX_DIR}/${CT_TARGET}/bin/ld"
   113         sed -r -e "s/@@DEFAULT_LD@@/${CT_BINUTILS_LINKER_DEFAULT}/" \
   114             "${CT_LIB_DIR}/scripts/build/binutils/binutils-ld.in"   \
   115             >"${CT_PREFIX_DIR}/bin/${CT_TARGET}-ld"
   116         chmod +x "${CT_PREFIX_DIR}/bin/${CT_TARGET}-ld"
   117         cp -a "${CT_PREFIX_DIR}/bin/${CT_TARGET}-ld"    \
   118               "${CT_PREFIX_DIR}/${CT_TARGET}/bin/ld"
   119 
   120         # If needed, force using ld.bfd during the toolchain build
   121         if [ "${CT_BINUTILS_FORCE_LD_BFD}" = "y" ]; then
   122             export CTNG_LD_IS=bfd
   123         fi
   124     fi
   125 
   126     # Make those new tools available to the core C compilers to come.
   127     # Note: some components want the ${TARGET}-{ar,as,ld,strip} commands as
   128     # well. Create that.
   129     mkdir -p "${CT_CC_CORE_STATIC_PREFIX_DIR}/${CT_TARGET}/bin"
   130     mkdir -p "${CT_CC_CORE_STATIC_PREFIX_DIR}/bin"
   131     mkdir -p "${CT_CC_CORE_SHARED_PREFIX_DIR}/${CT_TARGET}/bin"
   132     mkdir -p "${CT_CC_CORE_SHARED_PREFIX_DIR}/bin"
   133     for t in "${binutils_tools[@]}"; do
   134         ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_STATIC_PREFIX_DIR}/${CT_TARGET}/bin/${t}"
   135         ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_STATIC_PREFIX_DIR}/bin/${CT_TARGET}-${t}"
   136         ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_SHARED_PREFIX_DIR}/${CT_TARGET}/bin/${t}"
   137         ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_SHARED_PREFIX_DIR}/bin/${CT_TARGET}-${t}"
   138     done 2>&1 |CT_DoLog ALL
   139 
   140     CT_EndStep
   141 }
   142 
   143 # Now on for the target libraries
   144 do_binutils_target() {
   145     local -a extra_config
   146     local -a targets
   147     local -a build_targets
   148     local -a install_targets
   149     local t
   150 
   151     [ "${CT_BINUTILS_FOR_TARGET_IBERTY}" = "y" ] && targets+=("libiberty")
   152     [ "${CT_BINUTILS_FOR_TARGET_BFD}"    = "y" ] && targets+=("bfd")
   153     for t in "${targets[@]}"; do
   154         build_targets+=("all-${t}")
   155         install_targets+=("install-${t}")
   156     done
   157 
   158     if [ "${#targets[@]}" -ne 0 ]; then
   159         CT_DoStep INFO "Installing binutils for target"
   160         mkdir -p "${CT_BUILD_DIR}/build-binutils-for-target"
   161         CT_Pushd "${CT_BUILD_DIR}/build-binutils-for-target"
   162 
   163         CT_DoLog EXTRA "Configuring binutils for target"
   164 
   165         if [ "${CT_BINUTILS_HAS_PKGVERSION_BUGURL}" = "y" ]; then
   166             extra_config+=("--with-pkgversion=${CT_PKGVERSION}")
   167             [ -n "${CT_TOOLCHAIN_BUGURL}" ] && extra_config+=("--with-bugurl=${CT_TOOLCHAIN_BUGURL}")
   168         fi
   169 
   170         [ "${CT_TOOLCHAIN_ENABLE_NLS}" != "y" ] && extra_config+=("--disable-nls")
   171 
   172         CT_DoExecLog CFG                                            \
   173         "${CT_SRC_DIR}/binutils-${CT_BINUTILS_VERSION}/configure"   \
   174             --build=${CT_BUILD}                                     \
   175             --host=${CT_TARGET}                                     \
   176             --target=${CT_TARGET}                                   \
   177             --prefix=/usr                                           \
   178             --disable-werror                                        \
   179             --enable-shared                                         \
   180             --enable-static                                         \
   181             --disable-multilib                                      \
   182             "${extra_config[@]}"                                    \
   183             ${CT_ARCH_WITH_FLOAT}                                   \
   184             "${CT_BINUTILS_EXTRA_CONFIG[@]}"
   185 
   186         CT_DoLog EXTRA "Building binutils' libraries (${targets[*]}) for target"
   187         CT_DoExecLog ALL make ${JOBSFLAGS} "${build_targets[@]}"
   188         CT_DoLog EXTRA "Installing binutils' libraries (${targets[*]}) for target"
   189         CT_DoExecLog ALL make DESTDIR="${CT_SYSROOT_DIR}" "${install_targets[@]}"
   190 
   191         CT_Popd
   192         CT_EndStep
   193     fi
   194 }