Skip to content

Commit

Permalink
Merge pull request #487 from stilor/host-comp-tools
Browse files Browse the repository at this point in the history
Allow for installation of companion tools for host
  • Loading branch information
stilor committed Dec 3, 2016
2 parents a787e41 + bf0d593 commit 4042269
Show file tree
Hide file tree
Showing 10 changed files with 263 additions and 61 deletions.
10 changes: 9 additions & 1 deletion config/companion_tools.in
Expand Up @@ -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

Expand Down
Expand Up @@ -9,3 +9,6 @@ CT_BINUTILS_PLUGINS=y
CT_CC_LANG_CXX=y
CT_DEBUG_gdb=y
# CT_GDB_CROSS_PYTHON is not set
CT_COMP_TOOLS_FOR_HOST=y
CT_COMP_TOOLS_m4=y
CT_COMP_TOOLS_make=y
45 changes: 40 additions & 5 deletions scripts/build/companion_tools.sh
Expand Up @@ -7,11 +7,11 @@ for f in "${CT_LIB_DIR}/scripts/build/companion_tools/"*.sh; do
_f="${_f#???-}"
__f="CT_COMP_TOOLS_${_f}"
if [ "${!__f}" = "y" ]; then
CT_DoLog DEBUG "Enabling companion tools '${_f}'"
CT_DoLog DEBUG "Enabling companion tool '${_f}'"
. "${f}"
CT_COMP_TOOLS_FACILITY_LIST="${CT_COMP_TOOLS_FACILITY_LIST} ${_f}"
else
CT_DoLog DEBUG "Disabling companion tools '${_f}'"
CT_DoLog DEBUG "Disabling companion tool '${_f}'"
fi
done

Expand All @@ -29,10 +29,45 @@ do_companion_tools_extract() {
done
}

# Build the companion tools facilities
do_companion_tools() {
# 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}_build
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
}
59 changes: 49 additions & 10 deletions scripts/build/companion_tools/050-make.sh
Expand Up @@ -11,18 +11,57 @@ do_companion_tools_make_extract() {
CT_Patch "make" "${CT_MAKE_VERSION}"
}

do_companion_tools_make_build() {
CT_DoStep EXTRA "Installing make"
mkdir -p "${CT_BUILD_DIR}/build-make"
CT_Pushd "${CT_BUILD_DIR}/build-make"

CT_DoExecLog CFG "${CT_SRC_DIR}/make-${CT_MAKE_VERSION}/configure" \
--prefix="${CT_BUILDTOOLS_PREFIX_DIR}"
CT_DoExecLog ALL make
CT_DoExecLog ALL make install
do_companion_tools_make_for_build() {
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_BUILDTOOLS_PREFIX_DIR}/bin/gmake"
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 \
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
}
62 changes: 53 additions & 9 deletions scripts/build/companion_tools/100-m4.sh
Expand Up @@ -10,16 +10,60 @@ do_companion_tools_m4_extract() {
CT_Patch "m4" "${CT_M4_VERSION}"
}

do_companion_tools_m4_build() {
CT_DoStep EXTRA "Installing m4"
mkdir -p "${CT_BUILD_DIR}/build-m4"
CT_Pushd "${CT_BUILD_DIR}/build-m4"

do_companion_tools_m4_for_build() {
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 "Installing m4"
CT_DoExecLog ALL make install
CT_Popd
CT_EndStep
}
40 changes: 31 additions & 9 deletions scripts/build/companion_tools/200-autoconf.sh
Expand Up @@ -11,21 +11,43 @@ do_companion_tools_autoconf_extract() {
CT_Patch "autoconf" "${CT_AUTOCONF_VERSION}"
}

do_companion_tools_autoconf_build() {
CT_DoStep EXTRA "Installing autoconf"
mkdir -p "${CT_BUILD_DIR}/build-autoconf"
CT_Pushd "${CT_BUILD_DIR}/build-autoconf"

do_companion_tools_autoconf_for_build() {
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
}
42 changes: 32 additions & 10 deletions scripts/build/companion_tools/300-automake.sh
Expand Up @@ -11,16 +11,38 @@ do_companion_tools_automake_extract() {
CT_Patch "automake" "${CT_AUTOMAKE_VERSION}"
}

do_companion_tools_automake_build() {
CT_DoStep EXTRA "Installing automake"
mkdir -p "${CT_BUILD_DIR}/build-automake"
CT_Pushd "${CT_BUILD_DIR}/build-automake"

CT_DoExecLog CFG \
"${CT_SRC_DIR}/automake-${CT_AUTOMAKE_VERSION}/configure" \
--prefix="${CT_BUILDTOOLS_PREFIX_DIR}"
CT_DoExecLog ALL make
CT_DoExecLog ALL make install
do_companion_tools_automake_for_build() {
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" \
--host="${host}" \
--prefix="${prefix}"

CT_DoLog EXTRA "Building automake"
CT_DoExecLog ALL make

CT_DoLog EXTRA "Installing automake"
CT_DoExecLog ALL make install
}
42 changes: 32 additions & 10 deletions scripts/build/companion_tools/400-libtool.sh
Expand Up @@ -11,16 +11,38 @@ do_companion_tools_libtool_extract() {
CT_Patch "libtool" "${CT_LIBTOOL_VERSION}"
}

do_companion_tools_libtool_build() {
CT_DoStep EXTRA "Installing libtool"
mkdir -p "${CT_BUILD_DIR}/build-libtool"
CT_Pushd "${CT_BUILD_DIR}/build-libtool"

CT_DoExecLog CFG \
"${CT_SRC_DIR}/libtool-${CT_LIBTOOL_VERSION}/configure" \
--prefix="${CT_BUILDTOOLS_PREFIX_DIR}"
CT_DoExecLog ALL make
CT_DoExecLog ALL make install
do_companion_tools_libtool_for_build() {
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" \
--host="${host}" \
--prefix="${prefix}"

CT_DoLog EXTRA "Building libtool"
CT_DoExecLog ALL make

CT_DoLog EXTRA "Installing libtool"
CT_DoExecLog ALL make install
}

0 comments on commit 4042269

Please sign in to comment.