summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorAlexey Neyman <stilor@att.net>2016-11-29 00:55:22 (GMT)
committerAlexey Neyman <stilor@att.net>2016-12-02 23:03:15 (GMT)
commitcf86df688a8e7aeba28767ae0f841022a2e8347b (patch)
tree1a66218983063c9531b00724d19967cbe5ceed8a /scripts
parent3f7fbd7beda5d840cd9a15189a94aaad4a802d37 (diff)
Add 'companion tools for host' step.
Signed-off-by: Alexey Neyman <stilor@att.net>
Diffstat (limited to 'scripts')
-rw-r--r--scripts/build/companion_tools.sh38
-rw-r--r--scripts/build/companion_tools/050-make.sh54
-rw-r--r--scripts/build/companion_tools/100-m4.sh57
-rw-r--r--scripts/build/companion_tools/200-autoconf.sh33
-rw-r--r--scripts/build/companion_tools/300-automake.sh35
-rw-r--r--scripts/build/companion_tools/400-libtool.sh35
-rw-r--r--scripts/crosstool-NG.sh.in11
7 files changed, 217 insertions, 46 deletions
diff --git a/scripts/build/companion_tools.sh b/scripts/build/companion_tools.sh
index 923c293..415f3a2 100644
--- a/scripts/build/companion_tools.sh
+++ b/scripts/build/companion_tools.sh
@@ -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
+}
diff --git a/scripts/build/companion_tools/050-make.sh b/scripts/build/companion_tools/050-make.sh
index 65e42ef..d8f6b66 100644
--- a/scripts/build/companion_tools/050-make.sh
+++ b/scripts/build/companion_tools/050-make.sh
@@ -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
}
diff --git a/scripts/build/companion_tools/100-m4.sh b/scripts/build/companion_tools/100-m4.sh
index 6300dd1..96cde39 100644
--- a/scripts/build/companion_tools/100-m4.sh
+++ b/scripts/build/companion_tools/100-m4.sh
@@ -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
}
diff --git a/scripts/build/companion_tools/200-autoconf.sh b/scripts/build/companion_tools/200-autoconf.sh
index 243e5d8..95b7115 100644
--- a/scripts/build/companion_tools/200-autoconf.sh
+++ b/scripts/build/companion_tools/200-autoconf.sh
@@ -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
}
diff --git a/scripts/build/companion_tools/300-automake.sh b/scripts/build/companion_tools/300-automake.sh
index 9d1b6e8..85afaea 100644
--- a/scripts/build/companion_tools/300-automake.sh
+++ b/scripts/build/companion_tools/300-automake.sh
@@ -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
}
diff --git a/scripts/build/companion_tools/400-libtool.sh b/scripts/build/companion_tools/400-libtool.sh
index a139369..39aa204 100644
--- a/scripts/build/companion_tools/400-libtool.sh
+++ b/scripts/build/companion_tools/400-libtool.sh
@@ -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
}
diff --git a/scripts/crosstool-NG.sh.in b/scripts/crosstool-NG.sh.in
index bb72069..063162d 100644
--- a/scripts/crosstool-NG.sh.in
+++ b/scripts/crosstool-NG.sh.in
@@ -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