aboutsummaryrefslogtreecommitdiff
path: root/toolchain/toolchain-external
diff options
context:
space:
mode:
authorGravatar Thomas Petazzoni <thomas.petazzoni@free-electrons.com>2014-12-01 22:41:37 +0100
committerGravatar Thomas Petazzoni <thomas.petazzoni@free-electrons.com>2015-01-10 18:00:05 +0100
commit054269ac0e624aa74f45b5f7a43cbc74b310e299 (patch)
tree78fc81fcc3700ae2dd5968b355c3894d82db5012 /toolchain/toolchain-external
parentb07b14a130f37a09d92a63ad22a16bdd61a1f8e0 (diff)
downloadbuildroot-054269ac0e624aa74f45b5f7a43cbc74b310e299.tar.gz
buildroot-054269ac0e624aa74f45b5f7a43cbc74b310e299.tar.bz2
toolchain-external: split target installation from staging installation
Currently, all the installation work of the toolchain-external package is done during the install-staging step. However, in order to be able to properly collect the size added by each package to the target filesystem, we need to make sure that toolchain-external installs its files to $(TARGET_DIR) during the install-target step. Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> Tested-by: Jérôme Pouiller <jezz@sysmic.org>
Diffstat (limited to 'toolchain/toolchain-external')
-rw-r--r--toolchain/toolchain-external/toolchain-external.mk36
1 files changed, 29 insertions, 7 deletions
diff --git a/toolchain/toolchain-external/toolchain-external.mk b/toolchain/toolchain-external/toolchain-external.mk
index b07b16ccb7..5a69eb8895 100644
--- a/toolchain/toolchain-external/toolchain-external.mk
+++ b/toolchain/toolchain-external/toolchain-external.mk
@@ -538,7 +538,7 @@ endif
# considered when searching libraries for copy
# to the target filesystem.
-define TOOLCHAIN_EXTERNAL_INSTALL_CORE
+define TOOLCHAIN_EXTERNAL_INSTALL_TARGET_LIBS
$(Q)SYSROOT_DIR="$(call toolchain_find_sysroot,$(TOOLCHAIN_EXTERNAL_CC))" ; \
if test -z "$${SYSROOT_DIR}" ; then \
@echo "External toolchain doesn't support --sysroot. Cannot use." ; \
@@ -563,8 +563,6 @@ define TOOLCHAIN_EXTERNAL_INSTALL_CORE
$(call copy_toolchain_lib_root,$${ARCH_SYSROOT_DIR},$${SUPPORT_LIB_DIR},$${ARCH_LIB_DIR},$$libs,/usr/lib); \
done ; \
fi ; \
- $(call MESSAGE,"Copying external toolchain sysroot to staging...") ; \
- $(call copy_toolchain_sysroot,$${SYSROOT_DIR},$${ARCH_SYSROOT_DIR},$${ARCH_SUBDIR},$${ARCH_LIB_DIR},$${SUPPORT_LIB_DIR}) ; \
if test "$(BR2_TOOLCHAIN_EXTERNAL_GDB_SERVER_COPY)" = "y"; then \
$(call MESSAGE,"Copying gdbserver") ; \
gdbserver_found=0 ; \
@@ -582,6 +580,26 @@ define TOOLCHAIN_EXTERNAL_INSTALL_CORE
fi
endef
+define TOOLCHAIN_EXTERNAL_INSTALL_SYSROOT_LIBS
+ $(Q)SYSROOT_DIR="$(call toolchain_find_sysroot,$(TOOLCHAIN_EXTERNAL_CC))" ; \
+ if test -z "$${SYSROOT_DIR}" ; then \
+ @echo "External toolchain doesn't support --sysroot. Cannot use." ; \
+ exit 1 ; \
+ fi ; \
+ ARCH_SYSROOT_DIR="$(call toolchain_find_sysroot,$(TOOLCHAIN_EXTERNAL_CC) $(TOOLCHAIN_EXTERNAL_CFLAGS))" ; \
+ ARCH_LIB_DIR="$(call toolchain_find_libdir,$(TOOLCHAIN_EXTERNAL_CC) $(TOOLCHAIN_EXTERNAL_CFLAGS))" ; \
+ SUPPORT_LIB_DIR="" ; \
+ if test `find $${ARCH_SYSROOT_DIR} -name 'libstdc++.a' | wc -l` -eq 0 ; then \
+ LIBSTDCPP_A_LOCATION=$$(LANG=C $(TOOLCHAIN_EXTERNAL_CC) $(TOOLCHAIN_EXTERNAL_CFLAGS) -print-file-name=libstdc++.a) ; \
+ if [ -e "$${LIBSTDCPP_A_LOCATION}" ]; then \
+ SUPPORT_LIB_DIR=`readlink -f $${LIBSTDCPP_A_LOCATION} | sed -r -e 's:libstdc\+\+\.a::'` ; \
+ fi ; \
+ fi ; \
+ ARCH_SUBDIR=`echo $${ARCH_SYSROOT_DIR} | sed -r -e "s:^$${SYSROOT_DIR}(.*)/$$:\1:"` ; \
+ $(call MESSAGE,"Copying external toolchain sysroot to staging...") ; \
+ $(call copy_toolchain_sysroot,$${SYSROOT_DIR},$${ARCH_SYSROOT_DIR},$${ARCH_SUBDIR},$${ARCH_LIB_DIR},$${SUPPORT_LIB_DIR})
+endef
+
# Special installation target used on the Blackfin architecture when
# FDPIC is not the primary binary format being used, but the user has
# nonetheless requested the installation of the FDPIC libraries to the
@@ -680,15 +698,19 @@ define TOOLCHAIN_EXTERNAL_INSTALL_GDBINIT
fi
endef
+define TOOLCHAIN_EXTERNAL_INSTALL_STAGING_CMDS
+ $(TOOLCHAIN_EXTERNAL_INSTALL_SYSROOT_LIBS)
+ $(TOOLCHAIN_EXTERNAL_INSTALL_WRAPPER)
+ $(TOOLCHAIN_EXTERNAL_INSTALL_GDBINIT)
+endef
+
# Even though we're installing things in both the staging, the host
# and the target directory, we do everything within the
# install-staging step, arbitrarily.
-define TOOLCHAIN_EXTERNAL_INSTALL_STAGING_CMDS
- $(TOOLCHAIN_EXTERNAL_INSTALL_CORE)
+define TOOLCHAIN_EXTERNAL_INSTALL_TARGET_CMDS
+ $(TOOLCHAIN_EXTERNAL_INSTALL_TARGET_LIBS)
$(TOOLCHAIN_EXTERNAL_INSTALL_BFIN_FDPIC)
$(TOOLCHAIN_EXTERNAL_INSTALL_BFIN_FLAT)
- $(TOOLCHAIN_EXTERNAL_INSTALL_WRAPPER)
- $(TOOLCHAIN_EXTERNAL_INSTALL_GDBINIT)
endef
$(eval $(generic-package))