scripts/build/binutils/binutils.sh
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Wed Apr 06 22:30:57 2011 +0200 (2011-04-06)
changeset 2381 0ca0f85a4b2a
parent 2375 1752ade7dc52
child 2466 b7df125a1c78
permissions -rw-r--r--
complibs: disable building shared libs

Managing the shared version of the companion libraries
has become cumbersome.

Also, it will one day be possible to use the companion
libraries from the host distribution, and then we will
be able to easily use either shared or static libs.

As a side note, while working on the canadian-rework
series, it has become quite more complex to properly
handle shared companion libraries, as they need to be
built both for the build and gost systems. That's not
easy to handle. At all.

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         rm -f "${CT_PREFIX_DIR}/${CT_TARGET}/bin/ld"
    93         sed -r -e "s/@@DEFAULT_LD@@/${CT_BINUTILS_LINKER_DEFAULT}/" \
    94             "${CT_LIB_DIR}/scripts/build/binutils/binutils-ld.in"   \
    95             >"${CT_PREFIX_DIR}/bin/${CT_TARGET}-ld"
    96         chmod +x "${CT_PREFIX_DIR}/bin/${CT_TARGET}-ld"
    97         cp -a "${CT_PREFIX_DIR}/bin/${CT_TARGET}-ld"    \
    98               "${CT_PREFIX_DIR}/${CT_TARGET}/bin/ld"
    99 
   100         # If needed, force using ld.bfd during the toolchain build
   101         if [ "${CT_BINUTILS_FORCE_LD_BFD}" = "y" ]; then
   102             export CTNG_LD_IS=bfd
   103         fi
   104     fi
   105 
   106     # Make those new tools available to the core C compilers to come.
   107     # Note: some components want the ${TARGET}-{ar,as,ld,strip} commands as
   108     # well. Create that.
   109     mkdir -p "${CT_CC_CORE_STATIC_PREFIX_DIR}/${CT_TARGET}/bin"
   110     mkdir -p "${CT_CC_CORE_STATIC_PREFIX_DIR}/bin"
   111     mkdir -p "${CT_CC_CORE_SHARED_PREFIX_DIR}/${CT_TARGET}/bin"
   112     mkdir -p "${CT_CC_CORE_SHARED_PREFIX_DIR}/bin"
   113     for t in "${binutils_tools[@]}"; do
   114         ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_STATIC_PREFIX_DIR}/${CT_TARGET}/bin/${t}"
   115         ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_STATIC_PREFIX_DIR}/bin/${CT_TARGET}-${t}"
   116         ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_SHARED_PREFIX_DIR}/${CT_TARGET}/bin/${t}"
   117         ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_SHARED_PREFIX_DIR}/bin/${CT_TARGET}-${t}"
   118     done 2>&1 |CT_DoLog ALL
   119 
   120     CT_EndStep
   121 }
   122 
   123 # Now on for the target libraries
   124 do_binutils_target() {
   125     local -a extra_config
   126     local -a targets
   127     local -a build_targets
   128     local -a install_targets
   129     local t
   130 
   131     [ "${CT_BINUTILS_FOR_TARGET_IBERTY}" = "y" ] && targets+=("libiberty")
   132     [ "${CT_BINUTILS_FOR_TARGET_BFD}"    = "y" ] && targets+=("bfd")
   133     for t in "${targets[@]}"; do
   134         build_targets+=("all-${t}")
   135         install_targets+=("install-${t}")
   136     done
   137 
   138     if [ "${#targets[@]}" -ne 0 ]; then
   139         CT_DoStep INFO "Installing binutils for target"
   140         mkdir -p "${CT_BUILD_DIR}/build-binutils-for-target"
   141         CT_Pushd "${CT_BUILD_DIR}/build-binutils-for-target"
   142 
   143         CT_DoLog EXTRA "Configuring binutils for target"
   144         CT_DoExecLog CFG                                            \
   145         "${CT_SRC_DIR}/binutils-${CT_BINUTILS_VERSION}/configure"   \
   146             --build=${CT_BUILD}                                     \
   147             --host=${CT_TARGET}                                     \
   148             --target=${CT_TARGET}                                   \
   149             --prefix=/usr                                           \
   150             --disable-werror                                        \
   151             --enable-shared                                         \
   152             --enable-static                                         \
   153             --disable-nls                                           \
   154             --disable-multilib                                      \
   155             "${extra_config[@]}"                                    \
   156             ${CT_ARCH_WITH_FLOAT}                                   \
   157             ${CT_BINUTILS_EXTRA_CONFIG}
   158 
   159         CT_DoLog EXTRA "Building binutils' libraries (${targets[*]}) for target"
   160         CT_DoExecLog ALL make ${JOBSFLAGS} "${build_targets[@]}"
   161         CT_DoLog EXTRA "Installing binutils' libraries (${targets[*]}) for target"
   162         CT_DoExecLog ALL make DESTDIR="${CT_SYSROOT_DIR}" "${install_targets[@]}"
   163 
   164         CT_Popd
   165         CT_EndStep
   166     fi
   167 }