scripts/build/binutils/binutils.sh
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sun Jan 01 17:49:44 2012 +0100 (2012-01-01)
changeset 2924 0eab838768b1
parent 2923 60f5ceb1b413
child 2926 d304c8a7bfa8
permissions -rw-r--r--
cc/gcc: install the core compilers in the build-tools dir

There really is no good reason to install the core compilers in their
own places, one for each pass. We can install them with the other
build tools.

Also, this implies that:
- there are fewer directories to save/restore
- there are fewer symlinks to create for binutils
- the PATH is shorter

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