Add 'companion tools for host' step.

Signed-off-by: Alexey Neyman <stilor@att.net>
This commit is contained in:
Alexey Neyman 2016-11-28 16:55:22 -08:00
parent 3f7fbd7bed
commit cf86df688a
9 changed files with 227 additions and 47 deletions

View File

@ -24,7 +24,15 @@ config COMP_TOOLS
If your system has older versions, we can build them for you,
but you are strongly encouraged to update your system instead!
if COMP_TOOLS
config COMP_TOOLS_FOR_HOST
bool
prompt "Install companion tools for host"
help
Enable this option if you want to include the selected companion
tools into the final toolchain (rather than just using them
to build it).
if COMP_TOOLS || COMP_TOOLS_FOR_HOST
source "config.gen/companion_tools.in"
endif

View File

@ -29,9 +29,45 @@ do_companion_tools_extract() {
done
}
# Build the companion tools facilities
# Build the companion tools facilities for build
do_companion_tools_for_build() {
# Skip out if:
# - native/cross, and companion tools were neither selected
# to be built, nor included in the final toolchain
# - canadian/cross-native, and companion tools were not
# selected to be built
case "${CT_TOOLCHAIN_TYPE}" in
native|cross)
if [ -z "${CT_COMP_TOOLS}${CT_COMP_TOOLS_FOR_HOST}" ]; then
return
fi
;;
canadian|cross-native)
if [ -z "${CT_COMP_TOOLS}" ]; then
return
fi
;;
esac
for f in ${CT_COMP_TOOLS_FACILITY_LIST}; do
do_companion_tools_${f}_for_build
done
}
# Build the companion tools facilities for host
do_companion_tools_for_host() {
# For native/cross, build==host, and the tools were built
# earlier by do_companion_tools_for_build.
case "${CT_TOOLCHAIN_TYPE}" in
native|cross)
return
;;
canadian|cross-native)
if [ -z "${CT_COMP_TOOLS_FOR_HOST}" ]; then
return
fi
;;
esac
for f in ${CT_COMP_TOOLS_FACILITY_LIST}; do
do_companion_tools_${f}_for_host
done
}

View File

@ -12,22 +12,56 @@ do_companion_tools_make_extract() {
}
do_companion_tools_make_for_build() {
CT_DoStep EXTRA "Installing make"
mkdir -p "${CT_BUILD_DIR}/build-make"
CT_Pushd "${CT_BUILD_DIR}/build-make"
CT_DoStep EXTRA "Installing make for build"
CT_mkdir_pushd "${CT_BUILD_DIR}/build-make-build"
do_make_backend \
host=${CT_BUILD} \
prefix="${CT_BUILD_COMPTOOLS_DIR}" \
cflags="${CT_CFLAGS_FOR_BUILD}" \
ldflags="${CT_LDFLAGS_FOR_BUILD}"
CT_Popd
if [ "${CT_MAKE_GMAKE_SYMLINK}" = "y" ]; then
CT_DoExecLog ALL ln -sv make "${CT_BUILD_COMPTOOLS_DIR}/bin/gmake"
fi
CT_EndStep
}
do_companion_tools_make_for_host() {
CT_DoStep EXTRA "Installing make for host"
CT_mkdir_pushd "${CT_BUILD_DIR}/build-make-host"
do_make_backend \
host=${CT_HOST} \
prefix="${CT_PREFIX_DIR}" \
cflags="${CT_CFLAGS_FOR_HOST}" \
ldflags="${CT_LDFLAGS_FOR_HOST}"
CT_Popd
if [ "${CT_MAKE_GMAKE_SYMLINK}" = "y" ]; then
CT_DoExecLog ALL ln -sv make "${CT_PREFIX_DIR}/bin/gmake"
fi
CT_EndStep
}
do_make_backend() {
local host
local prefix
local cflags
local ldflags
for arg in "$@"; do
eval "${arg// /\\ }"
done
CT_DoLog EXTRA "Configuring make"
CT_DoExecLog CFG "${CT_SRC_DIR}/make-${CT_MAKE_VERSION}/configure" \
--prefix="${CT_BUILDTOOLS_PREFIX_DIR}"
CT_DoExecLog CFG \
CFLAGS="${cflags}" \
LDFLAGS="${ldflags}" \
"${CT_SRC_DIR}/make-${CT_MAKE_VERSION}/configure" \
--host="${host}" \
--prefix="${prefix}"
CT_DoLog EXTRA "Building make"
CT_DoExecLog ALL make
CT_DoLog EXTRA "Installing make"
CT_DoExecLog ALL make install
if [ "${CT_MAKE_GMAKE_SYMLINK}" = "y" ]; then
CT_DoExecLog ALL ln -sv make "${CT_BUILDTOOLS_PREFIX_DIR}/bin/gmake"
fi
CT_Popd
CT_EndStep
}

View File

@ -11,20 +11,59 @@ do_companion_tools_m4_extract() {
}
do_companion_tools_m4_for_build() {
CT_DoStep EXTRA "Installing m4"
mkdir -p "${CT_BUILD_DIR}/build-m4"
CT_Pushd "${CT_BUILD_DIR}/build-m4"
CT_DoStep EXTRA "Installing m4 for build"
CT_mkdir_pushd "${CT_BUILD_DIR}/build-m4-build"
do_m4_backend \
host=${CT_BUILD} \
prefix="${CT_BUILD_COMPTOOLS_DIR}" \
cflags="${CT_CFLAGS_FOR_BUILD}" \
ldflags="${CT_LDFLAGS_FOR_BUILD}"
CT_Popd
CT_EndStep
}
do_companion_tools_m4_for_host() {
CT_DoStep EXTRA "Installing m4 for host"
CT_mkdir_pushd "${CT_BUILD_DIR}/build-m4-host"
do_m4_backend \
host=${CT_HOST} \
prefix="${CT_PREFIX_DIR}" \
cflags="${CT_CFLAGS_FOR_HOST}" \
ldflags="${CT_LDFLAGS_FOR_HOST}"
CT_Popd
CT_EndStep
}
do_m4_backend() {
local host
local prefix
local cflags
local ldflags
for arg in "$@"; do
eval "${arg// /\\ }"
done
case "${host}" in
*-uclibc)
# uClibc has posix_spawn in librt, but m4 configure only
# searches in libc. This leads to a later failure when
# it includes system <spawn.h> but expects a locally-built
# posix_spawn().
ldflags="${ldflags} -lrt"
esac
CT_DoLog EXTRA "Configuring m4"
CT_DoExecLog CFG \
"${CT_SRC_DIR}/m4-${CT_M4_VERSION}/configure" \
--prefix="${CT_BUILDTOOLS_PREFIX_DIR}"
CFLAGS="${cflags}" \
LDFLAGS="${ldflags}" \
"${CT_SRC_DIR}/m4-${CT_M4_VERSION}/configure" \
--host="${host}" \
--prefix="${prefix}"
CT_DoLog EXTRA "Building m4"
CT_DoExecLog ALL make
CT_DoLog EXTRA "Building m4"
CT_DoLog EXTRA "Installing m4"
CT_DoExecLog ALL make install
CT_Popd
CT_EndStep
}

View File

@ -12,25 +12,42 @@ do_companion_tools_autoconf_extract() {
}
do_companion_tools_autoconf_for_build() {
CT_DoStep EXTRA "Installing autoconf"
mkdir -p "${CT_BUILD_DIR}/build-autoconf"
CT_Pushd "${CT_BUILD_DIR}/build-autoconf"
CT_DoStep EXTRA "Installing autoconf for build"
CT_mkdir_pushd "${CT_BUILD_DIR}/build-autoconf-build"
do_autoconf_backend host=${CT_BUILD} prefix="${CT_BUILD_COMPTOOLS_DIR}"
CT_Popd
CT_EndStep
}
do_companion_tools_autoconf_for_host() {
CT_DoStep EXTRA "Installing autoconf for host"
CT_mkdir_pushd "${CT_BUILD_DIR}/build-autoconf-host"
do_autoconf_backend host=${CT_HOST} prefix="${CT_PREFIX_DIR}"
CT_Popd
CT_EndStep
}
do_autoconf_backend() {
local host
local prefix
for arg in "$@"; do
eval "${arg// /\\ }"
done
# Ensure configure gets run using the CONFIG_SHELL as configure seems to
# have trouble when CONFIG_SHELL is set and /bin/sh isn't bash
# For reference see:
# http://www.gnu.org/software/autoconf/manual/autoconf.html#CONFIG_005fSHELL
CT_DoLog EXTRA "Configuring autoconf"
CT_DoExecLog CFG ${CONFIG_SHELL} \
"${CT_SRC_DIR}/autoconf-${CT_AUTOCONF_VERSION}/configure" \
--prefix="${CT_BUILDTOOLS_PREFIX_DIR}"
--host="${host}" \
--prefix="${prefix}"
CT_DoLog EXTRA "Building autoconf"
CT_DoExecLog ALL make
CT_DoLog EXTRA "Installing autoconf"
CT_DoExecLog ALL make install
CT_Popd
CT_EndStep
}

View File

@ -12,20 +12,37 @@ do_companion_tools_automake_extract() {
}
do_companion_tools_automake_for_build() {
CT_DoStep EXTRA "Installing automake"
mkdir -p "${CT_BUILD_DIR}/build-automake"
CT_Pushd "${CT_BUILD_DIR}/build-automake"
CT_DoStep EXTRA "Installing automake for build"
CT_mkdir_pushd "${CT_BUILD_DIR}/build-automake-build"
do_automake_backend host=${CT_BUILD} prefix="${CT_BUILD_COMPTOOLS_DIR}"
CT_Popd
CT_EndStep
}
do_companion_tools_automake_for_host() {
CT_DoStep EXTRA "Installing automake for host"
CT_mkdir_pushd "${CT_BUILD_DIR}/build-automake-host"
do_automake_backend host=${CT_HOST} prefix="${CT_PREFIX_DIR}"
CT_Popd
CT_EndStep
}
do_automake_backend() {
local host
local prefix
for arg in "$@"; do
eval "${arg// /\\ }"
done
CT_DoLog EXTRA "Configuring automake"
CT_DoExecLog CFG \
"${CT_SRC_DIR}/automake-${CT_AUTOMAKE_VERSION}/configure" \
--prefix="${CT_BUILDTOOLS_PREFIX_DIR}"
CT_DoExecLog CFG "${CT_SRC_DIR}/automake-${CT_AUTOMAKE_VERSION}/configure" \
--host="${host}" \
--prefix="${prefix}"
CT_DoLog EXTRA "Building automake"
CT_DoExecLog ALL make
CT_DoLog EXTRA "Installing automake"
CT_DoExecLog ALL make install
CT_Popd
CT_EndStep
}

View File

@ -12,20 +12,37 @@ do_companion_tools_libtool_extract() {
}
do_companion_tools_libtool_for_build() {
CT_DoStep EXTRA "Installing libtool"
mkdir -p "${CT_BUILD_DIR}/build-libtool"
CT_Pushd "${CT_BUILD_DIR}/build-libtool"
CT_DoStep EXTRA "Installing libtool for build"
CT_mkdir_pushd "${CT_BUILD_DIR}/build-libtool-build"
do_libtool_backend host=${CT_BUILD} prefix="${CT_BUILD_COMPTOOLS_DIR}"
CT_Popd
CT_EndStep
}
do_companion_tools_libtool_for_host() {
CT_DoStep EXTRA "Installing libtool for host"
CT_mkdir_pushd "${CT_BUILD_DIR}/build-libtool-host"
do_libtool_backend host=${CT_HOST} prefix="${CT_PREFIX_DIR}"
CT_Popd
CT_EndStep
}
do_libtool_backend() {
local host
local prefix
for arg in "$@"; do
eval "${arg// /\\ }"
done
CT_DoLog EXTRA "Configuring libtool"
CT_DoExecLog CFG \
"${CT_SRC_DIR}/libtool-${CT_LIBTOOL_VERSION}/configure" \
--prefix="${CT_BUILDTOOLS_PREFIX_DIR}"
CT_DoExecLog CFG "${CT_SRC_DIR}/libtool-${CT_LIBTOOL_VERSION}/configure" \
--host="${host}" \
--prefix="${prefix}"
CT_DoLog EXTRA "Building libtool"
CT_DoExecLog ALL make
CT_DoLog EXTRA "Installing libtool"
CT_DoExecLog ALL make install
CT_Popd
CT_EndStep
}

View File

@ -185,12 +185,23 @@ CT_STATE_DIR="${CT_WORK_DIR}/${CT_TARGET}/state"
# sub-dir. So we won't have to save/restore it, not even create it.
# In case of cross or native, host-complibs are used for build-complibs;
# in case of canadian or cross-native, host-complibs are specific
# Note about BUILD_COMPTOOLS_DIR: if installing companion tools for "host" in
# a native or simple cross, we can can use the same binaries we built for
# "build". However, we need companion tools for "build" early - as other
# components may depend on them - so we may skip building for "host" rather
# than for "build" in that case.
case "${CT_TOOLCHAIN_TYPE}" in
native|cross)
CT_HOST_COMPLIBS_DIR="${CT_BUILDTOOLS_PREFIX_DIR}"
if [ -n "${CT_COMP_TOOLS_FOR_HOST}" ]; then
CT_BUILD_COMPTOOLS_DIR="${CT_PREFIX_DIR}"
else
CT_BUILD_COMPTOOLS_DIR="${CT_BUILDTOOLS_PREFIX_DIR}"
fi
;;
canadian|cross-native)
CT_HOST_COMPLIBS_DIR="${CT_BUILDTOOLS_PREFIX_DIR}/complibs-host"
CT_BUILD_COMPTOOLS_DIR="${CT_BUILDTOOLS_PREFIX_DIR}"
;;
esac

View File

@ -22,6 +22,7 @@ CT_STEPS := \
companion_tools_for_build \
companion_libs_for_build \
binutils_for_build \
companion_tools_for_host \
companion_libs_for_host \
binutils_for_host \
cc_core_pass_1 \