summaryrefslogtreecommitdiff
path: root/scripts/build/binutils/binutils.sh
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/build/binutils/binutils.sh')
-rw-r--r--scripts/build/binutils/binutils.sh165
1 files changed, 72 insertions, 93 deletions
diff --git a/scripts/build/binutils/binutils.sh b/scripts/build/binutils/binutils.sh
index f9c5fe7..b16be90 100644
--- a/scripts/build/binutils/binutils.sh
+++ b/scripts/build/binutils/binutils.sh
@@ -4,44 +4,17 @@
# Download binutils
do_binutils_get() {
- if [ "${CT_BINUTILS_CUSTOM}" = "y" ]; then
- CT_GetCustom "binutils" "${CT_BINUTILS_CUSTOM_VERSION}" \
- "${CT_BINUTILS_CUSTOM_LOCATION}"
- else
- case "${CT_BINUTILS_VERSION}" in
- linaro-*)
- CT_GetLinaro "binutils" "${CT_BINUTILS_VERSION}"
- ;;
- *)
- CT_GetFile "binutils-${CT_BINUTILS_VERSION}" \
- {http,ftp}://{ftp.gnu.org/gnu,ftp.kernel.org/pub/linux/devel}/binutils \
- ftp://{sourceware.org,gcc.gnu.org}/pub/binutils/{releases,snapshots}
- ;;
- esac
- fi
-
+ CT_Fetch BINUTILS
if [ -n "${CT_ARCH_BINFMT_FLAT}" ]; then
- if [ "${CT_ELF2FLT_CUSTOM}" = "y" ]; then
- CT_GetCustom "elf2flt" "${CT_ELF2FLT_CUSTOM_VERSION}" \
- "${CT_ELF2FLT_CUSTOM_LOCATION}"
- else
- CT_GetGit elf2flt "${CT_ELF2FLT_GIT_CSET}" https://github.com/uclinux-dev/elf2flt.git
- fi
+ CT_Fetch ELF2FLT
fi
}
# Extract binutils
do_binutils_extract() {
- CT_Extract "binutils-${CT_BINUTILS_VERSION}"
- CT_Patch "binutils" "${CT_BINUTILS_VERSION}"
-
+ CT_ExtractPatch BINUTILS
if [ -n "${CT_ARCH_BINFMT_FLAT}" ]; then
- CT_Extract "elf2flt-${CT_ELF2FLT_GIT_CSET}"
- CT_Patch "elf2flt" "${CT_ELF2FLT_GIT_CSET}"
- fi
-
- if [ -n "${CT_ARCH_XTENSA_CUSTOM_NAME}" ]; then
- CT_ConfigureXtensa "binutils" "${CT_BINUTILS_VERSION}"
+ CT_ExtractPatch ELF2FLT
fi
}
@@ -67,7 +40,7 @@ do_binutils_for_build() {
if [ -n "${CT_ARCH_BINFMT_FLAT}" ]; then
# We re-use binutils' options, plus our owns
- binutils_opts+=( "binutils_src=${CT_SRC_DIR}/binutils-${CT_BINUTILS_VERSION}" )
+ binutils_opts+=( "binutils_src=${CT_SRC_DIR}/binutils" )
binutils_opts+=( "binutils_bld=${CT_BUILD_DIR}/build-binutils-build-${CT_BUILD}" )
CT_mkdir_pushd "${CT_BUILD_DIR}/build-elf2flt-build-${CT_BUILD}"
@@ -82,7 +55,6 @@ do_binutils_for_build() {
# Build binutils for host -> target
do_binutils_for_host() {
- local -a binutils_tools
local -a binutils_opts
CT_DoStep INFO "Installing binutils for host"
@@ -101,7 +73,7 @@ do_binutils_for_host() {
if [ -n "${CT_ARCH_BINFMT_FLAT}" ]; then
# We re-use binutils' options, plus our owns
- binutils_opts+=( "binutils_src=${CT_SRC_DIR}/binutils-${CT_BINUTILS_VERSION}" )
+ binutils_opts+=( "binutils_src=${CT_SRC_DIR}/binutils" )
binutils_opts+=( "binutils_bld=${CT_BUILD_DIR}/build-binutils-host-${CT_HOST}" )
CT_mkdir_pushd "${CT_BUILD_DIR}/build-elf2flt-host-${CT_HOST}"
@@ -118,26 +90,13 @@ do_binutils_for_host() {
# are not executable on the build machine.
case "${CT_TOOLCHAIN_TYPE}" in
cross|native)
- binutils_tools=( ar as ld ranlib strip )
- if [ -n "${CT_ARCH_BINFMT_FLAT}" ]; then
- binutils_tools+=( elf2flt flthdr )
- fi
- case "${CT_BINUTILS_LINKERS_LIST}" in
- ld) binutils_tools+=( ld.bfd ) ;;
- gold) binutils_tools+=( ld.gold ) ;;
- ld,gold) binutils_tools+=( ld.bfd ld.gold ) ;;
- gold,ld) binutils_tools+=( ld.bfd ld.gold ) ;;
- esac
- mkdir -p "${CT_BUILDTOOLS_PREFIX_DIR}/${CT_TARGET}/bin"
mkdir -p "${CT_BUILDTOOLS_PREFIX_DIR}/bin"
- for t in "${binutils_tools[@]}"; do
- CT_DoExecLog ALL ln -sv \
- "${CT_PREFIX_DIR}/${CT_TARGET}/bin/${t}" \
- "${CT_BUILDTOOLS_PREFIX_DIR}/${CT_TARGET}/bin/${t}"
- CT_DoExecLog ALL ln -sv \
- "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" \
- "${CT_BUILDTOOLS_PREFIX_DIR}/bin/${CT_TARGET}-${t}"
- done
+ CT_SymlinkTools "${CT_BUILDTOOLS_PREFIX_DIR}/bin" \
+ "${CT_PREFIX_DIR}/bin" \
+ "${CT_TARGET}"
+ CT_DoExecLog ALL mkdir -p "${CT_BUILDTOOLS_PREFIX_DIR}/${CT_TARGET}"
+ CT_DoExecLog ALL ln -sv "${CT_PREFIX_DIR}/${CT_TARGET}/bin" \
+ "${CT_BUILDTOOLS_PREFIX_DIR}/${CT_TARGET}/bin"
;;
*) ;;
esac
@@ -172,32 +131,36 @@ do_binutils_backend() {
CT_DoLog EXTRA "Configuring binutils"
- if [ "${CT_BINUTILS_HAS_GOLD}" = "y" ]; then
- case "${CT_BINUTILS_LINKERS_LIST}" in
- ld)
- extra_config+=( --enable-ld=yes --enable-gold=no )
- ;;
- gold)
- extra_config+=( --enable-ld=no --enable-gold=yes )
- ;;
- ld,gold)
- extra_config+=( --enable-ld=default --enable-gold=yes )
- ;;
- gold,ld)
- extra_config+=( --enable-ld=yes --enable-gold=default )
- ;;
- esac
- if [ "${CT_BINUTILS_GOLD_THREADS}" = "y" ]; then
- extra_config+=( --enable-threads )
- fi
+ case "${CT_BINUTILS_LINKERS_LIST}" in
+ ld)
+ extra_config+=( --enable-ld=yes --enable-gold=no )
+ ;;
+ gold)
+ extra_config+=( --enable-ld=no --enable-gold=yes )
+ ;;
+ ld,gold)
+ extra_config+=( --enable-ld=default --enable-gold=yes )
+ ;;
+ gold,ld)
+ extra_config+=( --enable-ld=yes --enable-gold=default )
+ ;;
+ esac
+ if [ "${CT_BINUTILS_GOLD_THREADS}" = "y" ]; then
+ extra_config+=( --enable-threads )
fi
if [ "${CT_BINUTILS_PLUGINS}" = "y" ]; then
extra_config+=( --enable-plugins )
fi
- if [ "${CT_BINUTILS_HAS_PKGVERSION_BUGURL}" = "y" ]; then
- extra_config+=("--with-pkgversion=${CT_PKGVERSION}")
- [ -n "${CT_TOOLCHAIN_BUGURL}" ] && extra_config+=("--with-bugurl=${CT_TOOLCHAIN_BUGURL}")
+ if [ "${CT_BINUTILS_RELRO}" = "y" ]; then
+ extra_config+=( --enable-relro )
+ elif [ "${CT_BINUTILS_RELRO}" != "m" ]; then
+ extra_config+=( --disable-relro )
fi
+ if [ "${CT_BINUTILS_DETERMINISTIC_ARCHIVES}" = "y" ]; then
+ extra_config+=( --enable-deterministic-archives )
+ fi
+ [ -n "${CT_PKGVERSION}" ] && extra_config+=("--with-pkgversion=${CT_PKGVERSION}")
+ [ -n "${CT_TOOLCHAIN_BUGURL}" ] && extra_config+=("--with-bugurl=${CT_TOOLCHAIN_BUGURL}")
if [ "${CT_MULTILIB}" = "y" ]; then
extra_config+=("--enable-multilib")
else
@@ -208,16 +171,27 @@ do_binutils_backend() {
extra_config+=("--disable-sim")
extra_config+=("--disable-gdb")
+ # libdebuginfod in incompatible with static linking
+ [ "${CT_STATIC_TOOLCHAIN}" = "y" ] && extra_config+=("--without-debuginfod")
+
[ "${CT_TOOLCHAIN_ENABLE_NLS}" != "y" ] && extra_config+=("--disable-nls")
+ # Disable usage of glob for higher compatibility.
+ # Not strictly needed for anything but GDB anyways.
+ export ac_cv_func_glob=no
+
CT_DoLog DEBUG "Extra config passed: '${extra_config[*]}'"
CT_DoExecLog CFG \
+ CC_FOR_BUILD="${CT_BUILD}-gcc" \
+ CFLAGS_FOR_BUILD="${CT_CFLAGS_FOR_BUILD}" \
+ CXXFLAGS_FOR_BUILD="${CT_CFLAGS_FOR_BUILD} ${CT_CXXFLAGS_FOR_BUILD}" \
+ LDFLAGS_FOR_BUILD="${CT_LDFLAGS_FOR_BUILD}" \
CFLAGS="${cflags}" \
- CXXFLAGS="${cflags}" \
+ CXXFLAGS="${cflags} ${CT_CXXFLAGS_FOR_BUILD}" \
LDFLAGS="${ldflags}" \
${CONFIG_SHELL} \
- "${CT_SRC_DIR}/binutils-${CT_BINUTILS_VERSION}/configure" \
+ "${CT_SRC_DIR}/binutils/configure" \
--build=${CT_BUILD} \
--host=${host} \
--target=${CT_TARGET} \
@@ -225,21 +199,27 @@ do_binutils_backend() {
--disable-werror \
"${extra_config[@]}" \
${CT_ARCH_WITH_FLOAT} \
- ${BINUTILS_SYSROOT_ARG} \
+ ${CT_BINUTILS_SYSROOT_ARG} \
"${CT_BINUTILS_EXTRA_CONFIG_ARRAY[@]}"
if [ "${static_build}" = "y" ]; then
extra_make_flags+=("LDFLAGS=${ldflags} -all-static")
CT_DoLog EXTRA "Prepare binutils for static build"
- CT_DoExecLog ALL make ${JOBSFLAGS} configure-host
+ CT_DoExecLog ALL make ${CT_JOBSFLAGS} configure-host
fi
CT_DoLog EXTRA "Building binutils"
- CT_DoExecLog ALL make "${extra_make_flags[@]}" ${JOBSFLAGS}
+ CT_DoExecLog ALL make "${extra_make_flags[@]}" ${CT_JOBSFLAGS}
CT_DoLog EXTRA "Installing binutils"
CT_DoExecLog ALL make install
+ if [ "${CT_BINUTILS_PLUGINS}" = "y" ]; then
+ # Create a directory for plugins such as LTO (to be installed by
+ # their providers later)
+ CT_DoExecLog ALL mkdir -p "${CT_PREFIX_DIR}/lib/bfd-plugins"
+ fi
+
if [ "${build_manuals}" = "y" ]; then
CT_DoLog EXTRA "Building and installing the binutils manuals"
manuals_for=( gas binutils ld gprof )
@@ -248,7 +228,7 @@ do_binutils_backend() {
fi
manuals_install=( "${manuals_for[@]/#/install-pdf-}" )
manuals_install+=( "${manuals_for[@]/#/install-html-}" )
- CT_DoExecLog ALL make ${JOBSFLAGS} pdf html
+ CT_DoExecLog ALL make ${CT_JOBSFLAGS} pdf html
CT_DoExecLog ALL make "${manuals_install[@]}"
fi
@@ -258,15 +238,16 @@ do_binutils_backend() {
rm -f "${prefix}/bin/${CT_TARGET}-ld"
rm -f "${prefix}/${CT_TARGET}/bin/ld"
sed -r -e "s/@@DEFAULT_LD@@/${CT_BINUTILS_LINKER_DEFAULT}/" \
- "${CT_LIB_DIR}/scripts/build/binutils/binutils-ld.in" \
+ "${CT_LIB_DIR}/packages/binutils/binutils-ld.in" \
>"${prefix}/bin/${CT_TARGET}-ld"
- chmod +x "${prefix}/bin/${CT_TARGET}-ld"
+ chmod a+x "${prefix}/bin/${CT_TARGET}-ld"
cp -a "${prefix}/bin/${CT_TARGET}-ld" \
"${prefix}/${CT_TARGET}/bin/ld"
- # If needed, force using ld.bfd during the toolchain build
- if [ "${CT_BINUTILS_FORCE_LD_BFD}" = "y" ]; then
- export CTNG_LD_IS=bfd
+ # If needed, force using ld.bfd during the toolchain build.
+ # Note that
+ if [ "${CT_BINUTILS_FORCE_LD_BFD_DEFAULT}" = "y" ]; then
+ CT_EnvModify export CTNG_LD_IS bfd
fi
fi
}
@@ -301,7 +282,7 @@ do_elf2flt_backend() {
CFLAGS="${cflags}" \
LDFLAGS="${ldflags}" \
${CONFIG_SHELL} \
- "${CT_SRC_DIR}/elf2flt-${CT_ELF2FLT_VERSION}/configure" \
+ "${CT_SRC_DIR}/elf2flt/configure" \
--build=${CT_BUILD} \
--host=${host} \
--target=${CT_TARGET} \
@@ -315,7 +296,7 @@ do_elf2flt_backend() {
"${CT_ELF2FLT_EXTRA_CONFIG_ARRAY[@]}"
CT_DoLog EXTRA "Building elf2flt"
- CT_DoExecLog ALL make ${JOBSFLAGS} CPU=${CT_ARCH}
+ CT_DoExecLog ALL make ${CT_JOBSFLAGS} CPU=${CT_ARCH}
CT_DoLog EXTRA "Installing elf2flt"
CT_DoExecLog ALL make install
@@ -343,10 +324,8 @@ do_binutils_for_target() {
CT_DoLog EXTRA "Configuring binutils for target"
- if [ "${CT_BINUTILS_HAS_PKGVERSION_BUGURL}" = "y" ]; then
- extra_config+=("--with-pkgversion=${CT_PKGVERSION}")
- [ -n "${CT_TOOLCHAIN_BUGURL}" ] && extra_config+=("--with-bugurl=${CT_TOOLCHAIN_BUGURL}")
- fi
+ [ -n "${CT_PKGVERSION}" ] && extra_config+=("--with-pkgversion=${CT_PKGVERSION}")
+ [ -n "${CT_TOOLCHAIN_BUGURL}" ] && extra_config+=("--with-bugurl=${CT_TOOLCHAIN_BUGURL}")
if [ "${CT_MULTILIB}" = "y" ]; then
extra_config+=("--enable-multilib")
else
@@ -361,7 +340,7 @@ do_binutils_for_target() {
CT_DoExecLog CFG \
${CONFIG_SHELL} \
- "${CT_SRC_DIR}/binutils-${CT_BINUTILS_VERSION}/configure" \
+ "${CT_SRC_DIR}/binutils/configure" \
--build=${CT_BUILD} \
--host=${CT_TARGET} \
--target=${CT_TARGET} \
@@ -374,7 +353,7 @@ do_binutils_for_target() {
"${CT_BINUTILS_EXTRA_CONFIG_ARRAY[@]}"
CT_DoLog EXTRA "Building binutils' libraries (${targets[*]}) for target"
- CT_DoExecLog ALL make ${JOBSFLAGS} "${build_targets[@]}"
+ CT_DoExecLog ALL make ${CT_JOBSFLAGS} "${build_targets[@]}"
CT_DoLog EXTRA "Installing binutils' libraries (${targets[*]}) for target"
CT_DoExecLog ALL make DESTDIR="${CT_SYSROOT_DIR}" "${install_targets[@]}"