scripts/build/binutils/binutils.sh
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Tue Aug 02 18:26:53 2011 +0200 (2011-08-02)
changeset 2592 4908eb2b6f17
parent 2488 58a28561f1bc
child 2697 9cd87d279a99
permissions -rw-r--r--
scripts/functions: cvs retrieval first tries the mirror for tarballs

The cvs download helper looks for the local tarballs dir to see if it
can find a pre-downloaded tarball, and if it does not find it, does
the actual fetch to upstream via cvs.

In the process, it does not even try to get a tarball from the local
mirror, which can be useful if the mirror has been pre-populated
manually (or with a previously downloaded tree).

Fake a tarball get with the standard tarball-download helper, but
without specifying any upstream URL, which makes the helper directly
try the LAN mirror.

Of course, if no mirror is specified, no URL wil be available, and
the standard cvs retrieval will kick in.

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 
    24     mkdir -p "${CT_BUILD_DIR}/build-binutils"
    25     cd "${CT_BUILD_DIR}/build-binutils"
    26 
    27     CT_DoStep INFO "Installing binutils"
    28 
    29     CT_DoLog EXTRA "Configuring binutils"
    30 
    31     binutils_tools=( ar as ld strip )
    32     if [ "${CT_BINUTILS_HAS_GOLD}" = "y" ]; then
    33         case "${CT_BINUTILS_LINKERS_LIST}" in
    34             ld)
    35                 extra_config+=( --enable-ld=yes --enable-gold=no )
    36                 binutils_tools+=( ld.bfd )
    37                 ;;
    38             gold)
    39                 extra_config+=( --enable-ld=no --enable-gold=yes )
    40                 binutils_tools+=( ld.gold )
    41                 ;;
    42             ld,gold)
    43                 extra_config+=( --enable-ld=default --enable-gold=yes )
    44                 binutils_tools+=( ld.bfd ld.gold )
    45                 ;;
    46             gold,ld)
    47                 extra_config+=( --enable-ld=yes --enable-gold=default )
    48                 binutils_tools+=( ld.bfd ld.gold )
    49                 ;;
    50         esac
    51         if [ "${CT_BINUTILS_GOLD_THREADED}" = "y" ]; then
    52             extra_config+=( --enable-threads )
    53         fi
    54     fi
    55     if [ "${CT_BINUTILS_PLUGINS}" = "y" ]; then
    56         extra_config+=( --enable-plugins )
    57     fi
    58     if [ "${CT_BINUTILS_HAS_PKGVERSION_BUGURL}" = "y" ]; then
    59         extra_config+=("--with-pkgversion=${CT_PKGVERSION}")
    60         [ -n "${CT_TOOLCHAIN_BUGURL}" ] && extra_config+=("--with-bugurl=${CT_TOOLCHAIN_BUGURL}")
    61     fi
    62 
    63     CT_DoLog DEBUG "Extra config passed: '${extra_config[*]}'"
    64 
    65     CT_DoExecLog CFG                                            \
    66     CFLAGS="${CT_CFLAGS_FOR_HOST}"                              \
    67     "${CT_SRC_DIR}/binutils-${CT_BINUTILS_VERSION}/configure"   \
    68         --build=${CT_BUILD}                                     \
    69         --host=${CT_HOST}                                       \
    70         --target=${CT_TARGET}                                   \
    71         --prefix=${CT_PREFIX_DIR}                               \
    72         --disable-nls                                           \
    73         --disable-multilib                                      \
    74         --disable-werror                                        \
    75         "${extra_config[@]}"                                    \
    76         ${CT_ARCH_WITH_FLOAT}                                   \
    77         ${BINUTILS_SYSROOT_ARG}                                 \
    78         "${CT_BINUTILS_EXTRA_CONFIG_ARRAY[@]}"
    79 
    80     if [ "${CT_STATIC_TOOLCHAIN}" = "y" ]; then
    81         extra_make_flags+=("LDFLAGS=-all-static")
    82         CT_DoLog EXTRA "Prepare binutils for static build"
    83         CT_DoExecLog ALL make configure-host
    84     fi
    85 
    86     CT_DoLog EXTRA "Building binutils"
    87     CT_DoExecLog ALL make "${extra_make_flags[@]}" ${JOBSFLAGS}
    88 
    89     CT_DoLog EXTRA "Installing binutils"
    90     CT_DoExecLog ALL make install
    91 
    92     # Install the wrapper if needed
    93     if [ "${CT_BINUTILS_LD_WRAPPER}" = "y" ]; then
    94         CT_DoLog EXTRA "Installing ld wrapper"
    95         rm -f "${CT_PREFIX_DIR}/bin/${CT_TARGET}-ld"
    96         rm -f "${CT_PREFIX_DIR}/${CT_TARGET}/bin/ld"
    97         sed -r -e "s/@@DEFAULT_LD@@/${CT_BINUTILS_LINKER_DEFAULT}/" \
    98             "${CT_LIB_DIR}/scripts/build/binutils/binutils-ld.in"   \
    99             >"${CT_PREFIX_DIR}/bin/${CT_TARGET}-ld"
   100         chmod +x "${CT_PREFIX_DIR}/bin/${CT_TARGET}-ld"
   101         cp -a "${CT_PREFIX_DIR}/bin/${CT_TARGET}-ld"    \
   102               "${CT_PREFIX_DIR}/${CT_TARGET}/bin/ld"
   103 
   104         # If needed, force using ld.bfd during the toolchain build
   105         if [ "${CT_BINUTILS_FORCE_LD_BFD}" = "y" ]; then
   106             export CTNG_LD_IS=bfd
   107         fi
   108     fi
   109 
   110     # Make those new tools available to the core C compilers to come.
   111     # Note: some components want the ${TARGET}-{ar,as,ld,strip} commands as
   112     # well. Create that.
   113     mkdir -p "${CT_CC_CORE_STATIC_PREFIX_DIR}/${CT_TARGET}/bin"
   114     mkdir -p "${CT_CC_CORE_STATIC_PREFIX_DIR}/bin"
   115     mkdir -p "${CT_CC_CORE_SHARED_PREFIX_DIR}/${CT_TARGET}/bin"
   116     mkdir -p "${CT_CC_CORE_SHARED_PREFIX_DIR}/bin"
   117     for t in "${binutils_tools[@]}"; do
   118         ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_STATIC_PREFIX_DIR}/${CT_TARGET}/bin/${t}"
   119         ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_STATIC_PREFIX_DIR}/bin/${CT_TARGET}-${t}"
   120         ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_SHARED_PREFIX_DIR}/${CT_TARGET}/bin/${t}"
   121         ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_SHARED_PREFIX_DIR}/bin/${CT_TARGET}-${t}"
   122     done 2>&1 |CT_DoLog ALL
   123 
   124     CT_EndStep
   125 }
   126 
   127 # Now on for the target libraries
   128 do_binutils_target() {
   129     local -a extra_config
   130     local -a targets
   131     local -a build_targets
   132     local -a install_targets
   133     local t
   134 
   135     [ "${CT_BINUTILS_FOR_TARGET_IBERTY}" = "y" ] && targets+=("libiberty")
   136     [ "${CT_BINUTILS_FOR_TARGET_BFD}"    = "y" ] && targets+=("bfd")
   137     for t in "${targets[@]}"; do
   138         build_targets+=("all-${t}")
   139         install_targets+=("install-${t}")
   140     done
   141 
   142     if [ "${#targets[@]}" -ne 0 ]; then
   143         CT_DoStep INFO "Installing binutils for target"
   144         mkdir -p "${CT_BUILD_DIR}/build-binutils-for-target"
   145         CT_Pushd "${CT_BUILD_DIR}/build-binutils-for-target"
   146 
   147         CT_DoLog EXTRA "Configuring binutils for target"
   148 
   149         if [ "${CT_BINUTILS_HAS_PKGVERSION_BUGURL}" = "y" ]; then
   150             extra_config+=("--with-pkgversion=${CT_PKGVERSION}")
   151             [ -n "${CT_TOOLCHAIN_BUGURL}" ] && extra_config+=("--with-bugurl=${CT_TOOLCHAIN_BUGURL}")
   152         fi
   153 
   154         CT_DoExecLog CFG                                            \
   155         "${CT_SRC_DIR}/binutils-${CT_BINUTILS_VERSION}/configure"   \
   156             --build=${CT_BUILD}                                     \
   157             --host=${CT_TARGET}                                     \
   158             --target=${CT_TARGET}                                   \
   159             --prefix=/usr                                           \
   160             --disable-werror                                        \
   161             --enable-shared                                         \
   162             --enable-static                                         \
   163             --disable-nls                                           \
   164             --disable-multilib                                      \
   165             "${extra_config[@]}"                                    \
   166             ${CT_ARCH_WITH_FLOAT}                                   \
   167             "${CT_BINUTILS_EXTRA_CONFIG[@]}"
   168 
   169         CT_DoLog EXTRA "Building binutils' libraries (${targets[*]}) for target"
   170         CT_DoExecLog ALL make ${JOBSFLAGS} "${build_targets[@]}"
   171         CT_DoLog EXTRA "Installing binutils' libraries (${targets[*]}) for target"
   172         CT_DoExecLog ALL make DESTDIR="${CT_SYSROOT_DIR}" "${install_targets[@]}"
   173 
   174         CT_Popd
   175         CT_EndStep
   176     fi
   177 }