scripts/build/binutils/binutils.sh
author Esben Haabendal <esben.haabendal@prevas.dk>
Fri Oct 07 15:06:44 2011 +0200 (2011-10-07)
changeset 2721 7b64746b0ab3
parent 2697 9cd87d279a99
child 2765 6c5658b8b588
child 2846 f634ec0447cd
permissions -rw-r--r--
scripts/functions: Fix CT_ExtractGit function.

Change CT_ExtractGit so that it clones the repository, instead of just
symlinking it. After cloning, any given ref is checked out, or if no
ref is given, the HEAD of the repository is checked out.

This makes CT_Extract behave similar for git repositories as it does
for tarballs, so that it for example can be used for passing glibc-ports
as a git repository.

Signed-off-by: "Esben Haabendal" <esben.haabendal@prevas.dk>
[yann.morin.1998@anciens.enib.fr: fix incomplete var rename]
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     if [ "${CT_BINUTILS_HAS_PKGVERSION_BUGURL}" = "y" ]; then
    59         extra_config+=("--with-pkgversion=${CT_PKGVERSION}")
    60         [ -n "${CT_TOOLCHAIN_BUGURL}" ] && extra_config+=("--with-bugurl=${CT_TOOLCHAIN_BUGURL}")
    61     fi
    62 
    63     CT_DoLog DEBUG "Extra config passed: '${extra_config[*]}'"
    64 
    65     CT_DoExecLog CFG                                            \
    66     CFLAGS="${CT_CFLAGS_FOR_HOST}"                              \
    67     CXXFLAGS="${CT_CFLAGS_FOR_HOST}"                            \
    68     "${CT_SRC_DIR}/binutils-${CT_BINUTILS_VERSION}/configure"   \
    69         --build=${CT_BUILD}                                     \
    70         --host=${CT_HOST}                                       \
    71         --target=${CT_TARGET}                                   \
    72         --prefix=${CT_PREFIX_DIR}                               \
    73         --disable-nls                                           \
    74         --disable-multilib                                      \
    75         --disable-werror                                        \
    76         "${extra_config[@]}"                                    \
    77         ${CT_ARCH_WITH_FLOAT}                                   \
    78         ${BINUTILS_SYSROOT_ARG}                                 \
    79         "${CT_BINUTILS_EXTRA_CONFIG_ARRAY[@]}"
    80 
    81     if [ "${CT_STATIC_TOOLCHAIN}" = "y" ]; then
    82         extra_make_flags+=("LDFLAGS=-static -all-static")
    83         CT_DoLog EXTRA "Prepare binutils for static build"
    84         CT_DoExecLog ALL make ${JOBSFLAGS} configure-host
    85     fi
    86 
    87     CT_DoLog EXTRA "Building binutils"
    88     CT_DoExecLog ALL make "${extra_make_flags[@]}" ${JOBSFLAGS}
    89 
    90     CT_DoLog EXTRA "Installing binutils"
    91     CT_DoExecLog ALL make install
    92 
    93     # Install the wrapper if needed
    94     if [ "${CT_BINUTILS_LD_WRAPPER}" = "y" ]; then
    95         CT_DoLog EXTRA "Installing ld wrapper"
    96         rm -f "${CT_PREFIX_DIR}/bin/${CT_TARGET}-ld"
    97         rm -f "${CT_PREFIX_DIR}/${CT_TARGET}/bin/ld"
    98         sed -r -e "s/@@DEFAULT_LD@@/${CT_BINUTILS_LINKER_DEFAULT}/" \
    99             "${CT_LIB_DIR}/scripts/build/binutils/binutils-ld.in"   \
   100             >"${CT_PREFIX_DIR}/bin/${CT_TARGET}-ld"
   101         chmod +x "${CT_PREFIX_DIR}/bin/${CT_TARGET}-ld"
   102         cp -a "${CT_PREFIX_DIR}/bin/${CT_TARGET}-ld"    \
   103               "${CT_PREFIX_DIR}/${CT_TARGET}/bin/ld"
   104 
   105         # If needed, force using ld.bfd during the toolchain build
   106         if [ "${CT_BINUTILS_FORCE_LD_BFD}" = "y" ]; then
   107             export CTNG_LD_IS=bfd
   108         fi
   109     fi
   110 
   111     # Make those new tools available to the core C compilers to come.
   112     # Note: some components want the ${TARGET}-{ar,as,ld,strip} commands as
   113     # well. Create that.
   114     mkdir -p "${CT_CC_CORE_STATIC_PREFIX_DIR}/${CT_TARGET}/bin"
   115     mkdir -p "${CT_CC_CORE_STATIC_PREFIX_DIR}/bin"
   116     mkdir -p "${CT_CC_CORE_SHARED_PREFIX_DIR}/${CT_TARGET}/bin"
   117     mkdir -p "${CT_CC_CORE_SHARED_PREFIX_DIR}/bin"
   118     for t in "${binutils_tools[@]}"; do
   119         ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_STATIC_PREFIX_DIR}/${CT_TARGET}/bin/${t}"
   120         ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_STATIC_PREFIX_DIR}/bin/${CT_TARGET}-${t}"
   121         ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_SHARED_PREFIX_DIR}/${CT_TARGET}/bin/${t}"
   122         ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_SHARED_PREFIX_DIR}/bin/${CT_TARGET}-${t}"
   123     done 2>&1 |CT_DoLog ALL
   124 
   125     CT_EndStep
   126 }
   127 
   128 # Now on for the target libraries
   129 do_binutils_target() {
   130     local -a extra_config
   131     local -a targets
   132     local -a build_targets
   133     local -a install_targets
   134     local t
   135 
   136     [ "${CT_BINUTILS_FOR_TARGET_IBERTY}" = "y" ] && targets+=("libiberty")
   137     [ "${CT_BINUTILS_FOR_TARGET_BFD}"    = "y" ] && targets+=("bfd")
   138     for t in "${targets[@]}"; do
   139         build_targets+=("all-${t}")
   140         install_targets+=("install-${t}")
   141     done
   142 
   143     if [ "${#targets[@]}" -ne 0 ]; then
   144         CT_DoStep INFO "Installing binutils for target"
   145         mkdir -p "${CT_BUILD_DIR}/build-binutils-for-target"
   146         CT_Pushd "${CT_BUILD_DIR}/build-binutils-for-target"
   147 
   148         CT_DoLog EXTRA "Configuring binutils for target"
   149 
   150         if [ "${CT_BINUTILS_HAS_PKGVERSION_BUGURL}" = "y" ]; then
   151             extra_config+=("--with-pkgversion=${CT_PKGVERSION}")
   152             [ -n "${CT_TOOLCHAIN_BUGURL}" ] && extra_config+=("--with-bugurl=${CT_TOOLCHAIN_BUGURL}")
   153         fi
   154 
   155         CT_DoExecLog CFG                                            \
   156         "${CT_SRC_DIR}/binutils-${CT_BINUTILS_VERSION}/configure"   \
   157             --build=${CT_BUILD}                                     \
   158             --host=${CT_TARGET}                                     \
   159             --target=${CT_TARGET}                                   \
   160             --prefix=/usr                                           \
   161             --disable-werror                                        \
   162             --enable-shared                                         \
   163             --enable-static                                         \
   164             --disable-nls                                           \
   165             --disable-multilib                                      \
   166             "${extra_config[@]}"                                    \
   167             ${CT_ARCH_WITH_FLOAT}                                   \
   168             "${CT_BINUTILS_EXTRA_CONFIG[@]}"
   169 
   170         CT_DoLog EXTRA "Building binutils' libraries (${targets[*]}) for target"
   171         CT_DoExecLog ALL make ${JOBSFLAGS} "${build_targets[@]}"
   172         CT_DoLog EXTRA "Installing binutils' libraries (${targets[*]}) for target"
   173         CT_DoExecLog ALL make DESTDIR="${CT_SYSROOT_DIR}" "${install_targets[@]}"
   174 
   175         CT_Popd
   176         CT_EndStep
   177     fi
   178 }