diff options
Diffstat (limited to 'scripts/build/binutils/binutils.sh')
-rw-r--r-- | scripts/build/binutils/binutils.sh | 165 |
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[@]}" |