scripts/build/binutils/binutils.sh
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Mon Mar 28 01:05:18 2011 +0200 (2011-03-28)
changeset 2362 0888065f8c4d
parent 2333 cd7bcbbd5cc9
child 2375 1752ade7dc52
permissions -rw-r--r--
cc/gcc: cleanup the _or_later logic

So far, we've had a version always select appropriate _or_later option,
which in turn would select all previous _or_later options.

Because the dependencies on companion libs were cumulative, that was
working OK. But the upcoming 4.6 will no longer depend on libelf, so
we can't keep the cumulative scheme we've been using so far.

Have each release family select the corresponding dependencies, instead
of relying on selecting previous _or_later.

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 
    59     CT_DoLog DEBUG "Extra config passed: '${extra_config[*]}'"
    60 
    61     CT_DoExecLog CFG                                            \
    62     CFLAGS="${CT_CFLAGS_FOR_HOST}"                              \
    63     "${CT_SRC_DIR}/binutils-${CT_BINUTILS_VERSION}/configure"   \
    64         --build=${CT_BUILD}                                     \
    65         --host=${CT_HOST}                                       \
    66         --target=${CT_TARGET}                                   \
    67         --prefix=${CT_PREFIX_DIR}                               \
    68         --disable-nls                                           \
    69         --disable-multilib                                      \
    70         --disable-werror                                        \
    71         "${extra_config[@]}"                                    \
    72         ${CT_ARCH_WITH_FLOAT}                                   \
    73         ${CT_BINUTILS_EXTRA_CONFIG}                             \
    74         ${BINUTILS_SYSROOT_ARG}
    75 
    76     if [ "${CT_STATIC_TOOLCHAIN}" = "y" ]; then
    77         extra_make_flags+=("LDFLAGS=-all-static")
    78         CT_DoLog EXTRA "Prepare binutils for static build"
    79         CT_DoExecLog ALL make configure-host
    80     fi
    81 
    82     CT_DoLog EXTRA "Building binutils"
    83     CT_DoExecLog ALL make "${extra_make_flags[@]}" ${JOBSFLAGS}
    84 
    85     CT_DoLog EXTRA "Installing binutils"
    86     CT_DoExecLog ALL make install
    87 
    88     # Install the wrapper if needed
    89     if [ "${CT_BINUTILS_LD_WRAPPER}" = "y" ]; then
    90         CT_DoLog EXTRA "Installing ld wrapper"
    91         rm -f "${CT_PREFIX_DIR}/bin/${CT_TARGET}-ld"
    92         sed -r -e "s/@@DEFAULT_LD@@/${CT_BINUTILS_LINKER_DEFAULT}/" \
    93             "${CT_LIB_DIR}/scripts/build/binutils/binutils-ld.in"   \
    94             >"${CT_PREFIX_DIR}/bin/${CT_TARGET}-ld"
    95         chmod +x "${CT_PREFIX_DIR}/bin/${CT_TARGET}-ld"
    96     fi
    97 
    98     # Make those new tools available to the core C compilers to come.
    99     # Note: some components want the ${TARGET}-{ar,as,ld,strip} commands as
   100     # well. Create that.
   101     mkdir -p "${CT_CC_CORE_STATIC_PREFIX_DIR}/${CT_TARGET}/bin"
   102     mkdir -p "${CT_CC_CORE_STATIC_PREFIX_DIR}/bin"
   103     mkdir -p "${CT_CC_CORE_SHARED_PREFIX_DIR}/${CT_TARGET}/bin"
   104     mkdir -p "${CT_CC_CORE_SHARED_PREFIX_DIR}/bin"
   105     for t in "${binutils_tools[@]}"; do
   106         ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_STATIC_PREFIX_DIR}/${CT_TARGET}/bin/${t}"
   107         ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_STATIC_PREFIX_DIR}/bin/${CT_TARGET}-${t}"
   108         ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_SHARED_PREFIX_DIR}/${CT_TARGET}/bin/${t}"
   109         ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_SHARED_PREFIX_DIR}/bin/${CT_TARGET}-${t}"
   110     done 2>&1 |CT_DoLog ALL
   111 
   112     CT_EndStep
   113 }
   114 
   115 # Now on for the target libraries
   116 do_binutils_target() {
   117     local -a extra_config
   118     local -a targets
   119     local -a build_targets
   120     local -a install_targets
   121     local t
   122 
   123     [ "${CT_BINUTILS_FOR_TARGET_IBERTY}" = "y" ] && targets+=("libiberty")
   124     [ "${CT_BINUTILS_FOR_TARGET_BFD}"    = "y" ] && targets+=("bfd")
   125     for t in "${targets[@]}"; do
   126         build_targets+=("all-${t}")
   127         install_targets+=("install-${t}")
   128     done
   129 
   130     if [ "${#targets[@]}" -ne 0 ]; then
   131         CT_DoStep INFO "Installing binutils for target"
   132         mkdir -p "${CT_BUILD_DIR}/build-binutils-for-target"
   133         CT_Pushd "${CT_BUILD_DIR}/build-binutils-for-target"
   134 
   135         CT_DoLog EXTRA "Configuring binutils for target"
   136         CT_DoExecLog CFG                                            \
   137         "${CT_SRC_DIR}/binutils-${CT_BINUTILS_VERSION}/configure"   \
   138             --build=${CT_BUILD}                                     \
   139             --host=${CT_TARGET}                                     \
   140             --target=${CT_TARGET}                                   \
   141             --prefix=/usr                                           \
   142             --disable-werror                                        \
   143             --enable-shared                                         \
   144             --enable-static                                         \
   145             --disable-nls                                           \
   146             --disable-multilib                                      \
   147             "${extra_config[@]}"                                    \
   148             ${CT_ARCH_WITH_FLOAT}                                   \
   149             ${CT_BINUTILS_EXTRA_CONFIG}
   150 
   151         CT_DoLog EXTRA "Building binutils' libraries (${targets[*]}) for target"
   152         CT_DoExecLog ALL make ${JOBSFLAGS} "${build_targets[@]}"
   153         CT_DoLog EXTRA "Installing binutils' libraries (${targets[*]}) for target"
   154         CT_DoExecLog ALL make DESTDIR="${CT_SYSROOT_DIR}" "${install_targets[@]}"
   155 
   156         CT_Popd
   157         CT_EndStep
   158     fi
   159 }