author | "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr> |
Fri Apr 15 00:05:53 2011 +0200 (2011-04-15) | |
changeset 2541 | 7cce5c8fc79a |
parent 2488 | 58a28561f1bc |
child 2697 | 9cd87d279a99 |
permissions | -rw-r--r-- |
yann@1345 | 1 |
# This file adds functions to build binutils |
yann@1345 | 2 |
# Copyright 2007 Yann E. MORIN |
yann@1345 | 3 |
# Licensed under the GPL v2. See COPYING in the root of this package |
yann@1345 | 4 |
|
yann@1345 | 5 |
# Download binutils |
yann@1345 | 6 |
do_binutils_get() { |
yann@1345 | 7 |
CT_GetFile "binutils-${CT_BINUTILS_VERSION}" \ |
yann@1345 | 8 |
{ftp,http}://{ftp.gnu.org/gnu,ftp.kernel.org/pub/linux/devel}/binutils \ |
yann@1345 | 9 |
ftp://gcc.gnu.org/pub/binutils/{releases,snapshots} |
yann@1345 | 10 |
} |
yann@1345 | 11 |
|
yann@1345 | 12 |
# Extract binutils |
yann@1345 | 13 |
do_binutils_extract() { |
yann@1345 | 14 |
CT_Extract "binutils-${CT_BINUTILS_VERSION}" |
yann@1901 | 15 |
CT_Patch "binutils" "${CT_BINUTILS_VERSION}" |
yann@1345 | 16 |
} |
yann@1345 | 17 |
|
yann@1345 | 18 |
# Build binutils |
yann@1345 | 19 |
do_binutils() { |
yann@1483 | 20 |
local -a extra_config |
bryanhundven@2210 | 21 |
local -a extra_make_flags |
yann@2247 | 22 |
local -a binutils_tools |
yann@1483 | 23 |
|
yann@1345 | 24 |
mkdir -p "${CT_BUILD_DIR}/build-binutils" |
yann@1345 | 25 |
cd "${CT_BUILD_DIR}/build-binutils" |
yann@1345 | 26 |
|
yann@1345 | 27 |
CT_DoStep INFO "Installing binutils" |
yann@1345 | 28 |
|
yann@1345 | 29 |
CT_DoLog EXTRA "Configuring binutils" |
yann@2244 | 30 |
|
yann@2247 | 31 |
binutils_tools=( ar as ld strip ) |
yann@2244 | 32 |
if [ "${CT_BINUTILS_HAS_GOLD}" = "y" ]; then |
yann@2244 | 33 |
case "${CT_BINUTILS_LINKERS_LIST}" in |
yann@2244 | 34 |
ld) |
yann@2244 | 35 |
extra_config+=( --enable-ld=yes --enable-gold=no ) |
yann@2247 | 36 |
binutils_tools+=( ld.bfd ) |
yann@2244 | 37 |
;; |
yann@2244 | 38 |
gold) |
yann@2244 | 39 |
extra_config+=( --enable-ld=no --enable-gold=yes ) |
yann@2247 | 40 |
binutils_tools+=( ld.gold ) |
yann@2244 | 41 |
;; |
yann@2244 | 42 |
ld,gold) |
yann@2244 | 43 |
extra_config+=( --enable-ld=default --enable-gold=yes ) |
yann@2247 | 44 |
binutils_tools+=( ld.bfd ld.gold ) |
yann@2244 | 45 |
;; |
yann@2244 | 46 |
gold,ld) |
yann@2244 | 47 |
extra_config+=( --enable-ld=yes --enable-gold=default ) |
yann@2247 | 48 |
binutils_tools+=( ld.bfd ld.gold ) |
yann@2244 | 49 |
;; |
yann@2244 | 50 |
esac |
yann@2246 | 51 |
if [ "${CT_BINUTILS_GOLD_THREADED}" = "y" ]; then |
yann@2246 | 52 |
extra_config+=( --enable-threads ) |
yann@2246 | 53 |
fi |
yann@2244 | 54 |
fi |
yann@2245 | 55 |
if [ "${CT_BINUTILS_PLUGINS}" = "y" ]; then |
yann@2245 | 56 |
extra_config+=( --enable-plugins ) |
yann@2245 | 57 |
fi |
benoit@2488 | 58 |
if [ "${CT_BINUTILS_HAS_PKGVERSION_BUGURL}" = "y" ]; then |
benoit@2503 | 59 |
extra_config+=("--with-pkgversion=${CT_PKGVERSION}") |
benoit@2503 | 60 |
[ -n "${CT_TOOLCHAIN_BUGURL}" ] && extra_config+=("--with-bugurl=${CT_TOOLCHAIN_BUGURL}") |
benoit@2488 | 61 |
fi |
yann@2244 | 62 |
|
yann@2244 | 63 |
CT_DoLog DEBUG "Extra config passed: '${extra_config[*]}'" |
yann@2244 | 64 |
|
yann@2341 | 65 |
CT_DoExecLog CFG \ |
yann@1345 | 66 |
CFLAGS="${CT_CFLAGS_FOR_HOST}" \ |
yann@1345 | 67 |
"${CT_SRC_DIR}/binutils-${CT_BINUTILS_VERSION}/configure" \ |
yann@1345 | 68 |
--build=${CT_BUILD} \ |
yann@1345 | 69 |
--host=${CT_HOST} \ |
yann@1345 | 70 |
--target=${CT_TARGET} \ |
yann@1345 | 71 |
--prefix=${CT_PREFIX_DIR} \ |
yann@1345 | 72 |
--disable-nls \ |
yann@1345 | 73 |
--disable-multilib \ |
yann@1345 | 74 |
--disable-werror \ |
yann@1483 | 75 |
"${extra_config[@]}" \ |
yann@1345 | 76 |
${CT_ARCH_WITH_FLOAT} \ |
yann@2466 | 77 |
${BINUTILS_SYSROOT_ARG} \ |
yann@2467 | 78 |
"${CT_BINUTILS_EXTRA_CONFIG_ARRAY[@]}" |
yann@1345 | 79 |
|
bryanhundven@2210 | 80 |
if [ "${CT_STATIC_TOOLCHAIN}" = "y" ]; then |
bryanhundven@2210 | 81 |
extra_make_flags+=("LDFLAGS=-all-static") |
bryanhundven@2210 | 82 |
CT_DoLog EXTRA "Prepare binutils for static build" |
bryanhundven@2210 | 83 |
CT_DoExecLog ALL make configure-host |
bryanhundven@2210 | 84 |
fi |
bryanhundven@2210 | 85 |
|
yann@1345 | 86 |
CT_DoLog EXTRA "Building binutils" |
yann@2275 | 87 |
CT_DoExecLog ALL make "${extra_make_flags[@]}" ${JOBSFLAGS} |
yann@1345 | 88 |
|
yann@1345 | 89 |
CT_DoLog EXTRA "Installing binutils" |
yann@1345 | 90 |
CT_DoExecLog ALL make install |
yann@1345 | 91 |
|
yann@2247 | 92 |
# Install the wrapper if needed |
yann@2247 | 93 |
if [ "${CT_BINUTILS_LD_WRAPPER}" = "y" ]; then |
yann@2247 | 94 |
CT_DoLog EXTRA "Installing ld wrapper" |
yann@2247 | 95 |
rm -f "${CT_PREFIX_DIR}/bin/${CT_TARGET}-ld" |
yann@2375 | 96 |
rm -f "${CT_PREFIX_DIR}/${CT_TARGET}/bin/ld" |
yann@2247 | 97 |
sed -r -e "s/@@DEFAULT_LD@@/${CT_BINUTILS_LINKER_DEFAULT}/" \ |
yann@2247 | 98 |
"${CT_LIB_DIR}/scripts/build/binutils/binutils-ld.in" \ |
yann@2247 | 99 |
>"${CT_PREFIX_DIR}/bin/${CT_TARGET}-ld" |
yann@2247 | 100 |
chmod +x "${CT_PREFIX_DIR}/bin/${CT_TARGET}-ld" |
yann@2375 | 101 |
cp -a "${CT_PREFIX_DIR}/bin/${CT_TARGET}-ld" \ |
yann@2375 | 102 |
"${CT_PREFIX_DIR}/${CT_TARGET}/bin/ld" |
yann@2376 | 103 |
|
yann@2376 | 104 |
# If needed, force using ld.bfd during the toolchain build |
yann@2376 | 105 |
if [ "${CT_BINUTILS_FORCE_LD_BFD}" = "y" ]; then |
yann@2376 | 106 |
export CTNG_LD_IS=bfd |
yann@2376 | 107 |
fi |
yann@2247 | 108 |
fi |
yann@2247 | 109 |
|
yann@1345 | 110 |
# Make those new tools available to the core C compilers to come. |
yann@1345 | 111 |
# Note: some components want the ${TARGET}-{ar,as,ld,strip} commands as |
yann@1345 | 112 |
# well. Create that. |
yann@1345 | 113 |
mkdir -p "${CT_CC_CORE_STATIC_PREFIX_DIR}/${CT_TARGET}/bin" |
yann@1345 | 114 |
mkdir -p "${CT_CC_CORE_STATIC_PREFIX_DIR}/bin" |
yann@1345 | 115 |
mkdir -p "${CT_CC_CORE_SHARED_PREFIX_DIR}/${CT_TARGET}/bin" |
yann@1345 | 116 |
mkdir -p "${CT_CC_CORE_SHARED_PREFIX_DIR}/bin" |
yann@2247 | 117 |
for t in "${binutils_tools[@]}"; do |
yann@1345 | 118 |
ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_STATIC_PREFIX_DIR}/${CT_TARGET}/bin/${t}" |
yann@1345 | 119 |
ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_STATIC_PREFIX_DIR}/bin/${CT_TARGET}-${t}" |
yann@1345 | 120 |
ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_SHARED_PREFIX_DIR}/${CT_TARGET}/bin/${t}" |
yann@1345 | 121 |
ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_SHARED_PREFIX_DIR}/bin/${CT_TARGET}-${t}" |
yann@1345 | 122 |
done 2>&1 |CT_DoLog ALL |
yann@1345 | 123 |
|
yann@1345 | 124 |
CT_EndStep |
yann@1345 | 125 |
} |
yann@1345 | 126 |
|
yann@1345 | 127 |
# Now on for the target libraries |
yann@1345 | 128 |
do_binutils_target() { |
yann@1483 | 129 |
local -a extra_config |
yann@1483 | 130 |
local -a targets |
yann@1483 | 131 |
local -a build_targets |
yann@1483 | 132 |
local -a install_targets |
yann@1483 | 133 |
local t |
yann@1345 | 134 |
|
yann@1483 | 135 |
[ "${CT_BINUTILS_FOR_TARGET_IBERTY}" = "y" ] && targets+=("libiberty") |
yann@1483 | 136 |
[ "${CT_BINUTILS_FOR_TARGET_BFD}" = "y" ] && targets+=("bfd") |
yann@1483 | 137 |
for t in "${targets[@]}"; do |
yann@1483 | 138 |
build_targets+=("all-${t}") |
yann@1483 | 139 |
install_targets+=("install-${t}") |
yann@1483 | 140 |
done |
yann@1483 | 141 |
|
yann@1483 | 142 |
if [ "${#targets[@]}" -ne 0 ]; then |
yann@1345 | 143 |
CT_DoStep INFO "Installing binutils for target" |
yann@1345 | 144 |
mkdir -p "${CT_BUILD_DIR}/build-binutils-for-target" |
yann@1345 | 145 |
CT_Pushd "${CT_BUILD_DIR}/build-binutils-for-target" |
yann@1345 | 146 |
|
yann@1345 | 147 |
CT_DoLog EXTRA "Configuring binutils for target" |
benoit@2488 | 148 |
|
benoit@2488 | 149 |
if [ "${CT_BINUTILS_HAS_PKGVERSION_BUGURL}" = "y" ]; then |
benoit@2503 | 150 |
extra_config+=("--with-pkgversion=${CT_PKGVERSION}") |
benoit@2503 | 151 |
[ -n "${CT_TOOLCHAIN_BUGURL}" ] && extra_config+=("--with-bugurl=${CT_TOOLCHAIN_BUGURL}") |
benoit@2488 | 152 |
fi |
benoit@2488 | 153 |
|
yann@2333 | 154 |
CT_DoExecLog CFG \ |
yann@1345 | 155 |
"${CT_SRC_DIR}/binutils-${CT_BINUTILS_VERSION}/configure" \ |
yann@1345 | 156 |
--build=${CT_BUILD} \ |
yann@1345 | 157 |
--host=${CT_TARGET} \ |
yann@1345 | 158 |
--target=${CT_TARGET} \ |
yann@1345 | 159 |
--prefix=/usr \ |
yann@1345 | 160 |
--disable-werror \ |
yann@1345 | 161 |
--enable-shared \ |
yann@1345 | 162 |
--enable-static \ |
yann@1345 | 163 |
--disable-nls \ |
yann@1345 | 164 |
--disable-multilib \ |
yann@1483 | 165 |
"${extra_config[@]}" \ |
yann@1345 | 166 |
${CT_ARCH_WITH_FLOAT} \ |
yann@2466 | 167 |
"${CT_BINUTILS_EXTRA_CONFIG[@]}" |
yann@1345 | 168 |
|
yann@1483 | 169 |
CT_DoLog EXTRA "Building binutils' libraries (${targets[*]}) for target" |
yann@2275 | 170 |
CT_DoExecLog ALL make ${JOBSFLAGS} "${build_targets[@]}" |
yann@1483 | 171 |
CT_DoLog EXTRA "Installing binutils' libraries (${targets[*]}) for target" |
yann@1483 | 172 |
CT_DoExecLog ALL make DESTDIR="${CT_SYSROOT_DIR}" "${install_targets[@]}" |
yann@1345 | 173 |
|
yann@1345 | 174 |
CT_Popd |
yann@1345 | 175 |
CT_EndStep |
yann@1345 | 176 |
fi |
yann@1345 | 177 |
} |