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