scripts/build/binutils.sh
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Wed May 21 22:00:52 2008 +0000 (2008-05-21)
changeset 527 4ac12179ef23
parent 486 92f6149c4275
child 645 8e58024f8e37
permissions -rw-r--r--
Introduce target-specific LDFLAGS, the same way we have CFLAGS for the target.
It seems to be helping gcc somewhat into telling the correct endianness to ld that sticks with little endian even when the target is big (eg armeb-unknown-linux-uclibcgnueabi).
There's still work to do, especially finish the gcc part that is not in this commit.

/trunk/scripts/functions | 9 7 2 0 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
     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 do_print_filename() {
     6     echo "binutils-${CT_BINUTILS_VERSION}"
     7 }
     8 
     9 # Download binutils
    10 do_binutils_get() {
    11     CT_GetFile "${CT_BINUTILS_FILE}"    \
    12                {ftp,http}://{ftp.gnu.org/gnu,ftp.kernel.org/pub/linux/devel}/binutils
    13 }
    14 
    15 # Extract binutils
    16 do_binutils_extract() {
    17     CT_ExtractAndPatch "${CT_BINUTILS_FILE}"
    18 }
    19 
    20 # Build binutils
    21 do_binutils() {
    22     mkdir -p "${CT_BUILD_DIR}/build-binutils"
    23     cd "${CT_BUILD_DIR}/build-binutils"
    24 
    25     CT_DoStep INFO "Installing binutils"
    26 
    27     binutils_opts=
    28     # If GMP and MPFR were configured, then use that,
    29     # otherwise let binutils find the system-wide libraries, if they exist.
    30     if [ "${CT_CC_GCC_GMP_MPFR}" = "y" ]; then
    31         binutils_opts="--with-gmp=${CT_PREFIX_DIR} --with-mpfr=${CT_PREFIX_DIR}"
    32     fi
    33 
    34     CT_DoLog EXTRA "Configuring binutils"
    35     CFLAGS="${CT_CFLAGS_FOR_HOST}"                  \
    36     "${CT_SRC_DIR}/${CT_BINUTILS_FILE}/configure"   \
    37         ${CT_CANADIAN_OPT}                          \
    38         --build=${CT_BUILD}                         \
    39         --host=${CT_HOST}                           \
    40         --target=${CT_TARGET}                       \
    41         --prefix=${CT_PREFIX_DIR}                   \
    42         --disable-nls                               \
    43         --disable-multilib                          \
    44         --disable-werror                            \
    45         ${binutils_opts}                            \
    46         ${CT_ARCH_WITH_FLOAT}                       \
    47         ${CT_BINUTILS_EXTRA_CONFIG}                 \
    48         ${BINUTILS_SYSROOT_ARG}                     2>&1 |CT_DoLog ALL
    49 
    50     CT_DoLog EXTRA "Building binutils"
    51     make ${PARALLELMFLAGS}  2>&1 |CT_DoLog ALL
    52 
    53     CT_DoLog EXTRA "Installing binutils"
    54     make install            2>&1 |CT_DoLog ALL
    55 
    56     # Make those new tools available to the core C compilers to come.
    57     # Note: some components want the ${TARGET}-{ar,as,ld,strip} commands as
    58     # well. Create that.
    59     mkdir -p "${CT_CC_CORE_STATIC_PREFIX_DIR}/${CT_TARGET}/bin"
    60     mkdir -p "${CT_CC_CORE_STATIC_PREFIX_DIR}/bin"
    61     mkdir -p "${CT_CC_CORE_SHARED_PREFIX_DIR}/${CT_TARGET}/bin"
    62     mkdir -p "${CT_CC_CORE_SHARED_PREFIX_DIR}/bin"
    63     for t in ar as ld strip; do
    64         ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_STATIC_PREFIX_DIR}/${CT_TARGET}/bin/${t}"
    65         ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_STATIC_PREFIX_DIR}/bin/${CT_TARGET}-${t}"
    66         ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_SHARED_PREFIX_DIR}/${CT_TARGET}/bin/${t}"
    67         ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_SHARED_PREFIX_DIR}/bin/${CT_TARGET}-${t}"
    68     done |CT_DoLog ALL
    69 
    70     CT_EndStep
    71 }
    72 
    73 # Now on for the target libraries
    74 do_binutils_target() {
    75     targets=
    76     [ "${CT_BINUTILS_FOR_TARGET_IBERTY}" = "y" ] && targets="${targets} libiberty"
    77     [ "${CT_BINUTILS_FOR_TARGET_BFD}"    = "y" ] && targets="${targets} bfd"
    78     targets="${targets# }"
    79 
    80     if [ -n "${targets}" ]; then
    81         CT_DoStep INFO "Installing binutils for target"
    82         mkdir -p "${CT_BUILD_DIR}/build-binutils-for-target"
    83         CT_Pushd "${CT_BUILD_DIR}/build-binutils-for-target"
    84 
    85         CT_DoLog EXTRA "Configuring binutils for target"
    86         "${CT_SRC_DIR}/${CT_BINUTILS_FILE}/configure"   \
    87             --build=${CT_BUILD}                         \
    88             --host=${CT_TARGET}                         \
    89             --target=${CT_TARGET}                       \
    90             --prefix=/usr                               \
    91             --disable-werror                            \
    92             --enable-shared                             \
    93             --enable-static                             \
    94             --disable-nls                               \
    95             --disable-multilib                          \
    96             ${CT_ARCH_WITH_FLOAT}                       \
    97             ${CT_BINUTILS_EXTRA_CONFIG}                 2>&1 |CT_DoLog ALL
    98 
    99         build_targets=$(echo "${targets}" |sed -r -e 's/(^| +)/\1all-/g;')
   100         install_targets=$(echo "${targets}" |sed -r -e 's/(^| +)/\1install-/g;')
   101 
   102         CT_DoLog EXTRA "Building binutils' libraries (${targets}) for target"
   103         make ${PARALLELMFLAGS} ${build_targets}  2>&1 |CT_DoLog ALL
   104         CT_DoLog EXTRA "Installing binutils' libraries (${targets}) for target"
   105         make DESTDIR="${CT_SYSROOT_DIR}" ${install_targets}  2>&1 |CT_DoLog ALL
   106 
   107         CT_Popd
   108         CT_EndStep
   109     fi
   110 }