scripts/build/binutils/binutils.sh
author Remy Bohmer <linux@bohmer.net>
Thu May 27 23:18:19 2010 +0200 (2010-05-27)
changeset 2060 51e4597b07fc
parent 1809 b488b4815f9b
child 2097 056a2c826185
permissions -rw-r--r--
scripts: add option to strip all toolchain executables

To reduce filesizes of the toolchain and even improve build times
of projects to be build with this toolchain it is usefull to strip
the delivered toolchain executables. Since it is not likely that we
will debug the toolchain executables itself we do not need the
debug information inside the executables itself.

Signed-off-by: Remy Bohmer <linux@bohmer.net>
     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 
    22     mkdir -p "${CT_BUILD_DIR}/build-binutils"
    23     cd "${CT_BUILD_DIR}/build-binutils"
    24 
    25     CT_DoStep INFO "Installing binutils"
    26 
    27     # If GMP and MPFR were configured, then use that,
    28     # otherwise let binutils find the system-wide libraries, if they exist.
    29     [ -z "${CT_GMP}"    ] || extra_config+=("--with-gmp=${CT_PREFIX_DIR}")
    30     [ -z "${CT_MPFR}"   ] || extra_config+=("--with-mpfr=${CT_PREFIX_DIR}")
    31 
    32     CT_DoLog EXTRA "Configuring binutils"
    33     CFLAGS="${CT_CFLAGS_FOR_HOST}"                              \
    34     CT_DoExecLog ALL                                            \
    35     "${CT_SRC_DIR}/binutils-${CT_BINUTILS_VERSION}/configure"   \
    36         --build=${CT_BUILD}                                     \
    37         --host=${CT_HOST}                                       \
    38         --target=${CT_TARGET}                                   \
    39         --prefix=${CT_PREFIX_DIR}                               \
    40         --disable-nls                                           \
    41         --disable-multilib                                      \
    42         --disable-werror                                        \
    43         "${extra_config[@]}"                                    \
    44         ${CT_ARCH_WITH_FLOAT}                                   \
    45         ${CT_BINUTILS_EXTRA_CONFIG}                             \
    46         ${BINUTILS_SYSROOT_ARG}
    47 
    48     CT_DoLog EXTRA "Building binutils"
    49     CT_DoExecLog ALL make ${PARALLELMFLAGS}
    50 
    51     CT_DoLog EXTRA "Installing binutils"
    52     CT_DoExecLog ALL make install
    53 
    54     # Make those new tools available to the core C compilers to come.
    55     # Note: some components want the ${TARGET}-{ar,as,ld,strip} commands as
    56     # well. Create that.
    57     mkdir -p "${CT_CC_CORE_STATIC_PREFIX_DIR}/${CT_TARGET}/bin"
    58     mkdir -p "${CT_CC_CORE_STATIC_PREFIX_DIR}/bin"
    59     mkdir -p "${CT_CC_CORE_SHARED_PREFIX_DIR}/${CT_TARGET}/bin"
    60     mkdir -p "${CT_CC_CORE_SHARED_PREFIX_DIR}/bin"
    61     for t in ar as ld strip; do
    62         ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_STATIC_PREFIX_DIR}/${CT_TARGET}/bin/${t}"
    63         ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_STATIC_PREFIX_DIR}/bin/${CT_TARGET}-${t}"
    64         ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_SHARED_PREFIX_DIR}/${CT_TARGET}/bin/${t}"
    65         ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_SHARED_PREFIX_DIR}/bin/${CT_TARGET}-${t}"
    66     done 2>&1 |CT_DoLog ALL
    67 
    68     CT_EndStep
    69 }
    70 
    71 # Now on for the target libraries
    72 do_binutils_target() {
    73     local -a extra_config
    74     local -a targets
    75     local -a build_targets
    76     local -a install_targets
    77     local t
    78 
    79     [ "${CT_BINUTILS_FOR_TARGET_IBERTY}" = "y" ] && targets+=("libiberty")
    80     [ "${CT_BINUTILS_FOR_TARGET_BFD}"    = "y" ] && targets+=("bfd")
    81     for t in "${targets[@]}"; do
    82         build_targets+=("all-${t}")
    83         install_targets+=("install-${t}")
    84     done
    85 
    86     # If GMP and MPFR were configured, then use that
    87     if [ "${CT_BINUTILS_TARGET_USE_GMP_MPFR}" = "y" ]; then
    88         extra_config+=("--with-gmp=${CT_SYSROOT_DIR}/usr")
    89         extra_config+=("--with-mpfr=${CT_SYSROOT_DIR}/usr")
    90     fi
    91 
    92     if [ "${#targets[@]}" -ne 0 ]; then
    93         CT_DoStep INFO "Installing binutils for target"
    94         mkdir -p "${CT_BUILD_DIR}/build-binutils-for-target"
    95         CT_Pushd "${CT_BUILD_DIR}/build-binutils-for-target"
    96 
    97         CT_DoLog EXTRA "Configuring binutils for target"
    98         CT_DoExecLog ALL                                            \
    99         "${CT_SRC_DIR}/binutils-${CT_BINUTILS_VERSION}/configure"   \
   100             --build=${CT_BUILD}                                     \
   101             --host=${CT_TARGET}                                     \
   102             --target=${CT_TARGET}                                   \
   103             --prefix=/usr                                           \
   104             --disable-werror                                        \
   105             --enable-shared                                         \
   106             --enable-static                                         \
   107             --disable-nls                                           \
   108             --disable-multilib                                      \
   109             "${extra_config[@]}"                                    \
   110             ${CT_ARCH_WITH_FLOAT}                                   \
   111             ${CT_BINUTILS_EXTRA_CONFIG}
   112 
   113         CT_DoLog EXTRA "Building binutils' libraries (${targets[*]}) for target"
   114         CT_DoExecLog ALL make ${PARALLELMFLAGS} "${build_targets[@]}"
   115         CT_DoLog EXTRA "Installing binutils' libraries (${targets[*]}) for target"
   116         CT_DoExecLog ALL make DESTDIR="${CT_SYSROOT_DIR}" "${install_targets[@]}"
   117 
   118         CT_Popd
   119         CT_EndStep
   120     fi
   121 }