scripts/build/binutils/binutils.sh
author "Benoît Thébaudeau" <benoit.thebaudeau@advansee.com>
Mon Apr 16 15:25:36 2012 +0200 (2012-04-16)
changeset 2941 13e40098fffc
parent 2926 d304c8a7bfa8
child 3032 712a8ed22762
permissions -rw-r--r--
cc/gcc: update Linaro GCC revisions to 2012.04

Update Linaro GCC with the latest available revisions.

The 4.7 revision is also released, but the infrastructure is not yet ready for
it in CT-NG.

Signed-off-by: "Benoît Thébaudeau" <benoit.thebaudeau@advansee.com>
     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 for build -> target
    19 do_binutils_for_build() {
    20     local -a binutils_opts
    21 
    22     case "${CT_TOOLCHAIN_TYPE}" in
    23         native|cross)   return 0;;
    24     esac
    25 
    26     CT_DoStep INFO "Installing binutils for build"
    27     CT_mkdir_pushd "${CT_BUILD_DIR}/build-binutils-build-${CT_BUILD}"
    28 
    29     binutils_opts+=( "host=${CT_BUILD}" )
    30     binutils_opts+=( "prefix=${CT_BUILDTOOLS_PREFIX_DIR}" )
    31 
    32     do_binutils_backend "${binutils_opts[@]}"
    33 
    34     CT_Popd
    35     CT_EndStep
    36 }
    37 
    38 # Build binutils for host -> target
    39 do_binutils_for_host() {
    40     local -a binutils_tools
    41     local -a binutils_opts
    42 
    43     CT_DoStep INFO "Installing binutils for host"
    44     CT_mkdir_pushd "${CT_BUILD_DIR}/build-binutils-host-${CT_HOST}"
    45 
    46     binutils_opts+=( "host=${CT_HOST}" )
    47     binutils_opts+=( "prefix=${CT_PREFIX_DIR}" )
    48     binutils_opts+=( "static_build=${CT_STATIC_TOOLCHAIN}" )
    49     binutils_opts+=( "cflags=${CT_CFLAGS_FOR_HOST}" )
    50     binutils_opts+=( "build_manuals=${CT_BUILD_MANUALS}" )
    51 
    52     do_binutils_backend "${binutils_opts[@]}"
    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     # Don't do it for canadian or cross-native, because the binutils
    58     # are not executable on the build machine.
    59     case "${CT_TOOLCHAIN_TYPE}" in
    60         cross|native)
    61             binutils_tools=( ar as ld strip )
    62             case "${CT_BINUTILS_LINKERS_LIST}" in
    63                 ld)         binutils_tools+=( ld.bfd ) ;;
    64                 gold)       binutils_tools+=( ld.gold ) ;;
    65                 ld,gold)    binutils_tools+=( ld.bfd ld.gold ) ;;
    66                 gold,ld)    binutils_tools+=( ld.bfd ld.gold ) ;;
    67             esac
    68             mkdir -p "${CT_BUILDTOOLS_PREFIX_DIR}/${CT_TARGET}/bin"
    69             mkdir -p "${CT_BUILDTOOLS_PREFIX_DIR}/bin"
    70             for t in "${binutils_tools[@]}"; do
    71                 CT_DoExecLog ALL ln -sv                                         \
    72                                     "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}"    \
    73                                     "${CT_BUILDTOOLS_PREFIX_DIR}/${CT_TARGET}/bin/${t}"
    74                 CT_DoExecLog ALL ln -sv                                         \
    75                                     "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}"    \
    76                                     "${CT_BUILDTOOLS_PREFIX_DIR}/bin/${CT_TARGET}-${t}"
    77             done
    78             ;;
    79         *)  ;;
    80     esac
    81 
    82     CT_Popd
    83     CT_EndStep
    84 }
    85 
    86 # Build binutils for X -> target
    87 #     Parameter     : description               : type      : default
    88 #     host          : machine to run on         : tuple     : (none)
    89 #     prefix        : prefix to install into    : dir       : (none)
    90 #     static_build  : build statcially          : bool      : no
    91 #     cflags        : host cflags to use        : string    : (empty)
    92 #     build_manuals : whether to build manuals  : bool      : no
    93 do_binutils_backend() {
    94     local host
    95     local prefix
    96     local static_build
    97     local cflags
    98     local build_manuals=no
    99     local -a extra_config
   100     local -a extra_make_flags
   101     local -a manuals_for
   102     local -a manuals_install
   103     local arg
   104 
   105     for arg in "$@"; do
   106         eval "${arg// /\\ }"
   107     done
   108 
   109     CT_DoLog EXTRA "Configuring binutils"
   110 
   111     if [ "${CT_BINUTILS_HAS_GOLD}" = "y" ]; then
   112         case "${CT_BINUTILS_LINKERS_LIST}" in
   113             ld)
   114                 extra_config+=( --enable-ld=yes --enable-gold=no )
   115                 ;;
   116             gold)
   117                 extra_config+=( --enable-ld=no --enable-gold=yes )
   118                 ;;
   119             ld,gold)
   120                 extra_config+=( --enable-ld=default --enable-gold=yes )
   121                 ;;
   122             gold,ld)
   123                 extra_config+=( --enable-ld=yes --enable-gold=default )
   124                 ;;
   125         esac
   126         if [ "${CT_BINUTILS_GOLD_THREADED}" = "y" ]; then
   127             extra_config+=( --enable-threads )
   128         fi
   129     fi
   130     if [ "${CT_BINUTILS_PLUGINS}" = "y" ]; then
   131         extra_config+=( --enable-plugins )
   132     fi
   133     if [ "${CT_BINUTILS_HAS_PKGVERSION_BUGURL}" = "y" ]; then
   134         extra_config+=("--with-pkgversion=${CT_PKGVERSION}")
   135         [ -n "${CT_TOOLCHAIN_BUGURL}" ] && extra_config+=("--with-bugurl=${CT_TOOLCHAIN_BUGURL}")
   136     fi
   137     if [ "${CT_MULTILIB}" = "y" ]; then
   138         extra_config+=("--enable-multilib")
   139     else
   140         extra_config+=("--disable-multilib")
   141     fi
   142 
   143     [ "${CT_TOOLCHAIN_ENABLE_NLS}" != "y" ] && extra_config+=("--disable-nls")
   144 
   145     CT_DoLog DEBUG "Extra config passed: '${extra_config[*]}'"
   146 
   147     CT_DoExecLog CFG                                            \
   148     CFLAGS="${cflags}"                                          \
   149     CXXFLAGS="${cflags}"                                        \
   150     "${CT_SRC_DIR}/binutils-${CT_BINUTILS_VERSION}/configure"   \
   151         --build=${CT_BUILD}                                     \
   152         --host=${host}                                          \
   153         --target=${CT_TARGET}                                   \
   154         --prefix=${prefix}                                      \
   155         --disable-werror                                        \
   156         "${extra_config[@]}"                                    \
   157         ${CT_ARCH_WITH_FLOAT}                                   \
   158         ${BINUTILS_SYSROOT_ARG}                                 \
   159         "${CT_BINUTILS_EXTRA_CONFIG_ARRAY[@]}"
   160 
   161     if [ "${static_build}" = "y" ]; then
   162         extra_make_flags+=("LDFLAGS=-static -all-static")
   163         CT_DoLog EXTRA "Prepare binutils for static build"
   164         CT_DoExecLog ALL make ${JOBSFLAGS} configure-host
   165     fi
   166 
   167     CT_DoLog EXTRA "Building binutils"
   168     CT_DoExecLog ALL make "${extra_make_flags[@]}" ${JOBSFLAGS}
   169 
   170     CT_DoLog EXTRA "Installing binutils"
   171     CT_DoExecLog ALL make install
   172 
   173     if [ "${build_manuals}" = "y" ]; then
   174         CT_DoLog EXTRA "Building and installing the binutils manuals"
   175         manuals_for=( gas binutils ld gprof )
   176         if [ "${CT_BINUTILS_LINKER_GOLD}" = "y" ]; then
   177             manuals_for+=( gold )
   178         fi
   179         manuals_install=( "${manuals_for[@]/#/install-pdf-}" )
   180         manuals_install+=( "${manuals_for[@]/#/install-html-}" )
   181         CT_DoExecLog ALL make ${JOBSFLAGS} pdf html
   182         CT_DoExecLog ALL make "${manuals_install[@]}"
   183     fi
   184 
   185     # Install the wrapper if needed
   186     if [ "${CT_BINUTILS_LD_WRAPPER}" = "y" ]; then
   187         CT_DoLog EXTRA "Installing ld wrapper"
   188         rm -f "${prefix}/bin/${CT_TARGET}-ld"
   189         rm -f "${prefix}/${CT_TARGET}/bin/ld"
   190         sed -r -e "s/@@DEFAULT_LD@@/${CT_BINUTILS_LINKER_DEFAULT}/" \
   191             "${CT_LIB_DIR}/scripts/build/binutils/binutils-ld.in"   \
   192             >"${prefix}/bin/${CT_TARGET}-ld"
   193         chmod +x "${prefix}/bin/${CT_TARGET}-ld"
   194         cp -a "${prefix}/bin/${CT_TARGET}-ld"   \
   195               "${prefix}/${CT_TARGET}/bin/ld"
   196 
   197         # If needed, force using ld.bfd during the toolchain build
   198         if [ "${CT_BINUTILS_FORCE_LD_BFD}" = "y" ]; then
   199             export CTNG_LD_IS=bfd
   200         fi
   201     fi
   202 }
   203 
   204 # Now on for the target libraries
   205 do_binutils_for_target() {
   206     local -a extra_config
   207     local -a targets
   208     local -a build_targets
   209     local -a install_targets
   210     local t
   211 
   212     [ "${CT_BINUTILS_FOR_TARGET_IBERTY}" = "y" ] && targets+=("libiberty")
   213     [ "${CT_BINUTILS_FOR_TARGET_BFD}"    = "y" ] && targets+=("bfd")
   214     for t in "${targets[@]}"; do
   215         build_targets+=("all-${t}")
   216         install_targets+=("install-${t}")
   217     done
   218 
   219     if [ "${#targets[@]}" -ne 0 ]; then
   220         CT_DoStep INFO "Installing binutils for target"
   221         mkdir -p "${CT_BUILD_DIR}/build-binutils-for-target"
   222         CT_Pushd "${CT_BUILD_DIR}/build-binutils-for-target"
   223 
   224         CT_DoLog EXTRA "Configuring binutils for target"
   225 
   226         if [ "${CT_BINUTILS_HAS_PKGVERSION_BUGURL}" = "y" ]; then
   227             extra_config+=("--with-pkgversion=${CT_PKGVERSION}")
   228             [ -n "${CT_TOOLCHAIN_BUGURL}" ] && extra_config+=("--with-bugurl=${CT_TOOLCHAIN_BUGURL}")
   229         fi
   230         if [ "${CT_MULTILIB}" = "y" ]; then
   231             extra_config+=("--enable-multilib")
   232         else
   233             extra_config+=("--disable-multilib")
   234         fi
   235 
   236         [ "${CT_TOOLCHAIN_ENABLE_NLS}" != "y" ] && extra_config+=("--disable-nls")
   237 
   238         CT_DoExecLog CFG                                            \
   239         "${CT_SRC_DIR}/binutils-${CT_BINUTILS_VERSION}/configure"   \
   240             --build=${CT_BUILD}                                     \
   241             --host=${CT_TARGET}                                     \
   242             --target=${CT_TARGET}                                   \
   243             --prefix=/usr                                           \
   244             --disable-werror                                        \
   245             --enable-shared                                         \
   246             --enable-static                                         \
   247             "${extra_config[@]}"                                    \
   248             ${CT_ARCH_WITH_FLOAT}                                   \
   249             "${CT_BINUTILS_EXTRA_CONFIG_ARRAY[@]}"
   250 
   251         CT_DoLog EXTRA "Building binutils' libraries (${targets[*]}) for target"
   252         CT_DoExecLog ALL make ${JOBSFLAGS} "${build_targets[@]}"
   253         CT_DoLog EXTRA "Installing binutils' libraries (${targets[*]}) for target"
   254         CT_DoExecLog ALL make DESTDIR="${CT_SYSROOT_DIR}" "${install_targets[@]}"
   255 
   256         CT_Popd
   257         CT_EndStep
   258     fi
   259 }