scripts/build/binutils/binutils.sh
changeset 2926 d304c8a7bfa8
parent 2924 0eab838768b1
child 2928 3f70dd642d34
     1.1 --- a/scripts/build/binutils/binutils.sh	Sun Jan 01 17:49:44 2012 +0100
     1.2 +++ b/scripts/build/binutils/binutils.sh	Sun Jul 17 18:29:35 2011 +0200
     1.3 @@ -15,39 +15,92 @@
     1.4      CT_Patch "binutils" "${CT_BINUTILS_VERSION}"
     1.5  }
     1.6  
     1.7 -# Build binutils
     1.8 -do_binutils() {
     1.9 +# Build binutils for host -> target
    1.10 +do_binutils_for_host() {
    1.11 +    local -a binutils_tools
    1.12 +    local -a binutils_opts
    1.13 +
    1.14 +    CT_DoStep INFO "Installing binutils for host"
    1.15 +    CT_mkdir_pushd "${CT_BUILD_DIR}/build-binutils-host-${CT_HOST}"
    1.16 +
    1.17 +    binutils_opts+=( "host=${CT_HOST}" )
    1.18 +    binutils_opts+=( "prefix=${CT_PREFIX_DIR}" )
    1.19 +    binutils_opts+=( "static_build=${CT_STATIC_TOOLCHAIN}" )
    1.20 +    binutils_opts+=( "cflags=${CT_CFLAGS_FOR_HOST}" )
    1.21 +    binutils_opts+=( "build_manuals=${CT_BUILD_MANUALS}" )
    1.22 +
    1.23 +    do_binutils_backend "${binutils_opts[@]}"
    1.24 +
    1.25 +    # Make those new tools available to the core C compilers to come.
    1.26 +    # Note: some components want the ${TARGET}-{ar,as,ld,strip} commands as
    1.27 +    # well. Create that.
    1.28 +    # Don't do it for canadian or cross-native, because the binutils
    1.29 +    # are not executable on the build machine.
    1.30 +    case "${CT_TOOLCHAIN_TYPE}" in
    1.31 +        cross|native)
    1.32 +            binutils_tools=( ar as ld strip )
    1.33 +            case "${CT_BINUTILS_LINKERS_LIST}" in
    1.34 +                ld)         binutils_tools+=( ld.bfd ) ;;
    1.35 +                gold)       binutils_tools+=( ld.gold ) ;;
    1.36 +                ld,gold)    binutils_tools+=( ld.bfd ld.gold ) ;;
    1.37 +                gold,ld)    binutils_tools+=( ld.bfd ld.gold ) ;;
    1.38 +            esac
    1.39 +            mkdir -p "${CT_BUILDTOOLS_PREFIX_DIR}/${CT_TARGET}/bin"
    1.40 +            mkdir -p "${CT_BUILDTOOLS_PREFIX_DIR}/bin"
    1.41 +            for t in "${binutils_tools[@]}"; do
    1.42 +                CT_DoExecLog ALL ln -sv                                         \
    1.43 +                                    "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}"    \
    1.44 +                                    "${CT_BUILDTOOLS_PREFIX_DIR}/${CT_TARGET}/bin/${t}"
    1.45 +                CT_DoExecLog ALL ln -sv                                         \
    1.46 +                                    "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}"    \
    1.47 +                                    "${CT_BUILDTOOLS_PREFIX_DIR}/bin/${CT_TARGET}-${t}"
    1.48 +            done
    1.49 +            ;;
    1.50 +        *)  ;;
    1.51 +    esac
    1.52 +
    1.53 +    CT_Popd
    1.54 +    CT_EndStep
    1.55 +}
    1.56 +
    1.57 +# Build binutils for X -> target
    1.58 +#     Parameter     : description               : type      : default
    1.59 +#     host          : machine to run on         : tuple     : (none)
    1.60 +#     prefix        : prefix to install into    : dir       : (none)
    1.61 +#     static_build  : build statcially          : bool      : no
    1.62 +#     cflags        : host cflags to use        : string    : (empty)
    1.63 +#     build_manuals : whether to build manuals  : bool      : no
    1.64 +do_binutils_backend() {
    1.65 +    local host
    1.66 +    local prefix
    1.67 +    local static_build
    1.68 +    local cflags
    1.69 +    local build_manuals=no
    1.70      local -a extra_config
    1.71      local -a extra_make_flags
    1.72 -    local -a binutils_tools
    1.73      local -a manuals_for
    1.74      local -a manuals_install
    1.75 +    local arg
    1.76  
    1.77 -    mkdir -p "${CT_BUILD_DIR}/build-binutils"
    1.78 -    cd "${CT_BUILD_DIR}/build-binutils"
    1.79 -
    1.80 -    CT_DoStep INFO "Installing binutils"
    1.81 +    for arg in "$@"; do
    1.82 +        eval "${arg// /\\ }"
    1.83 +    done
    1.84  
    1.85      CT_DoLog EXTRA "Configuring binutils"
    1.86  
    1.87 -    binutils_tools=( ar as ld strip )
    1.88      if [ "${CT_BINUTILS_HAS_GOLD}" = "y" ]; then
    1.89          case "${CT_BINUTILS_LINKERS_LIST}" in
    1.90              ld)
    1.91                  extra_config+=( --enable-ld=yes --enable-gold=no )
    1.92 -                binutils_tools+=( ld.bfd )
    1.93                  ;;
    1.94              gold)
    1.95                  extra_config+=( --enable-ld=no --enable-gold=yes )
    1.96 -                binutils_tools+=( ld.gold )
    1.97                  ;;
    1.98              ld,gold)
    1.99                  extra_config+=( --enable-ld=default --enable-gold=yes )
   1.100 -                binutils_tools+=( ld.bfd ld.gold )
   1.101                  ;;
   1.102              gold,ld)
   1.103                  extra_config+=( --enable-ld=yes --enable-gold=default )
   1.104 -                binutils_tools+=( ld.bfd ld.gold )
   1.105                  ;;
   1.106          esac
   1.107          if [ "${CT_BINUTILS_GOLD_THREADED}" = "y" ]; then
   1.108 @@ -72,20 +125,20 @@
   1.109      CT_DoLog DEBUG "Extra config passed: '${extra_config[*]}'"
   1.110  
   1.111      CT_DoExecLog CFG                                            \
   1.112 -    CFLAGS="${CT_CFLAGS_FOR_HOST}"                              \
   1.113 -    CXXFLAGS="${CT_CFLAGS_FOR_HOST}"                            \
   1.114 +    CFLAGS="${cflags}"                                          \
   1.115 +    CXXFLAGS="${cflags}"                                        \
   1.116      "${CT_SRC_DIR}/binutils-${CT_BINUTILS_VERSION}/configure"   \
   1.117          --build=${CT_BUILD}                                     \
   1.118 -        --host=${CT_HOST}                                       \
   1.119 +        --host=${host}                                          \
   1.120          --target=${CT_TARGET}                                   \
   1.121 -        --prefix=${CT_PREFIX_DIR}                               \
   1.122 +        --prefix=${prefix}                                      \
   1.123          --disable-werror                                        \
   1.124          "${extra_config[@]}"                                    \
   1.125          ${CT_ARCH_WITH_FLOAT}                                   \
   1.126          ${BINUTILS_SYSROOT_ARG}                                 \
   1.127          "${CT_BINUTILS_EXTRA_CONFIG_ARRAY[@]}"
   1.128  
   1.129 -    if [ "${CT_STATIC_TOOLCHAIN}" = "y" ]; then
   1.130 +    if [ "${static_build}" = "y" ]; then
   1.131          extra_make_flags+=("LDFLAGS=-static -all-static")
   1.132          CT_DoLog EXTRA "Prepare binutils for static build"
   1.133          CT_DoExecLog ALL make ${JOBSFLAGS} configure-host
   1.134 @@ -97,7 +150,7 @@
   1.135      CT_DoLog EXTRA "Installing binutils"
   1.136      CT_DoExecLog ALL make install
   1.137  
   1.138 -    if [ "${CT_BUILD_MANUALS}" = "y" ]; then
   1.139 +    if [ "${build_manuals}" = "y" ]; then
   1.140          CT_DoLog EXTRA "Building and installing the binutils manuals"
   1.141          manuals_for=( gas binutils ld gprof )
   1.142          if [ "${CT_BINUTILS_LINKER_GOLD}" = "y" ]; then
   1.143 @@ -112,39 +165,20 @@
   1.144      # Install the wrapper if needed
   1.145      if [ "${CT_BINUTILS_LD_WRAPPER}" = "y" ]; then
   1.146          CT_DoLog EXTRA "Installing ld wrapper"
   1.147 -        rm -f "${CT_PREFIX_DIR}/bin/${CT_TARGET}-ld"
   1.148 -        rm -f "${CT_PREFIX_DIR}/${CT_TARGET}/bin/ld"
   1.149 +        rm -f "${prefix}/bin/${CT_TARGET}-ld"
   1.150 +        rm -f "${prefix}/${CT_TARGET}/bin/ld"
   1.151          sed -r -e "s/@@DEFAULT_LD@@/${CT_BINUTILS_LINKER_DEFAULT}/" \
   1.152              "${CT_LIB_DIR}/scripts/build/binutils/binutils-ld.in"   \
   1.153 -            >"${CT_PREFIX_DIR}/bin/${CT_TARGET}-ld"
   1.154 -        chmod +x "${CT_PREFIX_DIR}/bin/${CT_TARGET}-ld"
   1.155 -        cp -a "${CT_PREFIX_DIR}/bin/${CT_TARGET}-ld"    \
   1.156 -              "${CT_PREFIX_DIR}/${CT_TARGET}/bin/ld"
   1.157 +            >"${prefix}/bin/${CT_TARGET}-ld"
   1.158 +        chmod +x "${prefix}/bin/${CT_TARGET}-ld"
   1.159 +        cp -a "${prefix}/bin/${CT_TARGET}-ld"   \
   1.160 +              "${prefix}/${CT_TARGET}/bin/ld"
   1.161  
   1.162          # If needed, force using ld.bfd during the toolchain build
   1.163          if [ "${CT_BINUTILS_FORCE_LD_BFD}" = "y" ]; then
   1.164              export CTNG_LD_IS=bfd
   1.165          fi
   1.166      fi
   1.167 -
   1.168 -    # Make those new tools available to the core C compilers to come.
   1.169 -    # Note: some components want the ${TARGET}-{ar,as,ld,strip} commands as
   1.170 -    # well. Create that.
   1.171 -    # Don't do it for canadian or cross-native, because the binutils
   1.172 -    # are not executable on the build machine.
   1.173 -    case "${CT_TOOLCHAIN_TYPE}" in
   1.174 -        cross|native)
   1.175 -            mkdir -p "${CT_BUILDTOOLS_PREFIX_DIR}/${CT_TARGET}/bin"
   1.176 -            mkdir -p "${CT_BUILDTOOLS_PREFIX_DIR}/bin"
   1.177 -            for t in "${binutils_tools[@]}"; do
   1.178 -                ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_BUILDTOOLS_PREFIX_DIR}/${CT_TARGET}/bin/${t}"
   1.179 -                ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_BUILDTOOLS_PREFIX_DIR}/bin/${CT_TARGET}-${t}"
   1.180 -            done 2>&1 |CT_DoLog ALL
   1.181 -            ;;
   1.182 -        *)  ;;
   1.183 -    esac
   1.184 -
   1.185 -    CT_EndStep
   1.186  }
   1.187  
   1.188  # Now on for the target libraries