Buildroot Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] [PATCH v2] toolchain: add a harmless link when sysroot detection is not accurate
@ 2016-01-22 15:05 Vicente Olivert Riera
  2016-02-02 10:57 ` Vicente Olivert Riera
  0 siblings, 1 reply; 7+ messages in thread
From: Vicente Olivert Riera @ 2016-01-22 15:05 UTC (permalink / raw)
  To: buildroot

Sometimes is not possible to detect if the sysroots are nested or side
by side. For instance this happens for MIPS big endian, where the
sysroot and the arch-sysroot directories are the same. Examples:

=== Mentor Sourcery CodeBench toolchain

$ readlink -f $(LANG=C mips-linux-gnu-gcc -print-file-name=libc.a) | sed
-r -e 's:(usr/)?lib(32|64)?([^/]*)?/([^/]*/)?libc\.a::'
/toolchains/mips-2015.11/mips-linux-gnu/libc/

$ readlink -f $(LANG=C mips-linux-gnu-gcc -EB -print-file-name=libc.a) |
sed -r -e 's:(usr/)?lib(32|64)?([^/]*)?/([^/]*/)?libc\.a::'
/toolchains/mips-2015.11/mips-linux-gnu/libc/

=== Codescape toolchain

$ readlink -f $(LANG=C mips-img-linux-gnu-gcc -print-file-name=libc.a) |
sed -r -e 's:(usr/)?lib(32|64)?([^/]*)?/([^/]*/)?libc\.a::'
/toolchains/mips-img-linux-gnu/2015.06-05/sysroot/mips-r6-hard/

$ readlink -f $(LANG=C mips-img-linux-gnu-gcc -EB
-print-file-name=libc.a) | sed -r -e
's:(usr/)?lib(32|64)?([^/]*)?/([^/]*/)?libc\.a::'
/toolchains/mips-img-linux-gnu/2015.06-05/sysroot/mips-r6-hard/

For those cases where the sysroot detection is not accurate we add a
harmless symlink necessary for certain toolchains such as Codescape for
MIPS. The other toolchains in this situation (unknown sysroot layout)
don't need this symlink to work, but as stated before, this symlink is
harmless.

Signed-off-by: Vicente Olivert Riera <Vincent.Riera@imgtec.com>
---
Changes v1 -> v2:
 - Update the comment above the copy_toolchain_sysroot function.
 - Explain in the commit log which toolchains are affected and provide
   some outputs of -print-file-name to explain the problem.
   (Both changes requested by Thomas Petazzoni)

 toolchain/helpers.mk | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/toolchain/helpers.mk b/toolchain/helpers.mk
index 70695ee..c8245f7 100644
--- a/toolchain/helpers.mk
+++ b/toolchain/helpers.mk
@@ -130,6 +130,12 @@ copy_toolchain_lib_root = \
 #
 # * Create a symbolic link
 #
+# If we are in the situation where we don't know if the sysroot layout
+# is nested of side by side, we:
+#
+# * Create a symbolic link because it's harmless and is necessary for
+#   certain toolchains like Codescape for MIPS.
+#
 # Finally, some toolchains (i.e Linaro binary toolchains) store
 # support libraries (libstdc++, libgcc_s) outside of the sysroot, so
 # we simply copy all the libraries from the "support lib directory"
@@ -160,9 +166,12 @@ copy_toolchain_sysroot = \
 	done ; \
 	SYSROOT_DIR_CANON=`readlink -f $${SYSROOT_DIR}` ; \
 	ARCH_SYSROOT_DIR_CANON=`readlink -f $${ARCH_SYSROOT_DIR}` ; \
+	echo "SYSROOT_DIR_CANON: $${ARCH_SYSROOT_DIR_CANON}" ; \
+	echo "ARCH_SYSROOT_DIR_CANON: $${ARCH_SYSROOT_DIR_CANON}" ; \
 	if [ $${SYSROOT_DIR_CANON} != $${ARCH_SYSROOT_DIR_CANON} ] ; then \
 		relpath="./" ; \
 		if [ $${ARCH_SYSROOT_DIR_CANON:0:$${\#SYSROOT_DIR_CANON}} == $${SYSROOT_DIR_CANON} ] ; then \
+			echo "Nested sysroots detected." ; \
 			if [ ! -d $${ARCH_SYSROOT_DIR}/usr/include ] ; then \
 				cp -a $${SYSROOT_DIR}/usr/include $(STAGING_DIR)/usr ; \
 			fi ; \
@@ -174,9 +183,16 @@ copy_toolchain_sysroot = \
 			ln -s $${relpath} $(STAGING_DIR)/$${ARCH_SUBDIR} ; \
 			echo "Symlinking $(STAGING_DIR)/$${ARCH_SUBDIR} -> $${relpath}" ; \
 		elif [ `dirname $${ARCH_SYSROOT_DIR_CANON}` == `dirname $${SYSROOT_DIR_CANON}` ] ; then \
+			echo "Side by side sysroots detected." ; \
 			ln -snf $${relpath} $(STAGING_DIR)/`basename $${ARCH_SYSROOT_DIR_CANON}` ; \
 			echo "Symlinking $(STAGING_DIR)/`basename $${ARCH_SYSROOT_DIR_CANON}` -> $${relpath}" ; \
 		fi ; \
+	else \
+		relpath="./" ; \
+		echo "Unable to detect if sysroots are nested or side by side." ; \
+		echo "Creating a harmless symlink necessary for certain toolchains." ; \
+		ln -snf $${relpath} $(STAGING_DIR)/`basename $${ARCH_SYSROOT_DIR_CANON}` ; \
+		echo "Symlinking $(STAGING_DIR)/`basename $${ARCH_SYSROOT_DIR_CANON}` -> $${relpath}" ; \
 	fi ; \
 	if test -n "$${SUPPORT_LIB_DIR}" ; then \
 		cp -a $${SUPPORT_LIB_DIR}/* $(STAGING_DIR)/lib/ ; \
-- 
2.4.10

^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2016-05-01 11:59 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-01-22 15:05 [Buildroot] [PATCH v2] toolchain: add a harmless link when sysroot detection is not accurate Vicente Olivert Riera
2016-02-02 10:57 ` Vicente Olivert Riera
2016-02-02 14:21   ` Romain Naour
2016-02-02 15:14     ` Vicente Olivert Riera
2016-02-02 15:30       ` Romain Naour
2016-04-30 19:27         ` Romain Naour
2016-05-01 11:59           ` Thomas Petazzoni

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox