external-toolchain: support libraries outside of /lib

The copy_toolchain_lib_root function was making the assumption that
all libraries were stored inside the /lib directory of the sysroot
directory. However, this isn't true for certain toolchains,
particularly for the libstdc++ library.

The function is therefore reworked to find the library and its related
symlink either in /lib or /usr/lib in the sysroot, and copies it at
the same location in the target directory.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
This commit is contained in:
Thomas Petazzoni 2010-02-09 21:34:49 +01:00
parent 7b7a4be0e1
commit ea2505ee56
1 changed files with 13 additions and 10 deletions

View File

@ -1,3 +1,4 @@
# #
# This file implements the support for external toolchains, i.e # This file implements the support for external toolchains, i.e
# toolchains that have not been produced by Buildroot itself and that # toolchains that have not been produced by Buildroot itself and that
@ -45,27 +46,29 @@ copy_toolchain_lib_root = \
DST="$(strip $3)"; \ DST="$(strip $3)"; \
STRIP="$(strip $4)"; \ STRIP="$(strip $4)"; \
\ \
LIB_DIR="$${SYSROOT_DIR}/lib" ; \ LIBS=`(cd $${SYSROOT_DIR}; find . -path "./lib/$${LIB}.*" -o -path "./usr/lib/$${LIB}.*")` ; \
for FILE in `find $${LIB_DIR} -maxdepth 1 -name "$${LIB}.*"`; do \ for FILE in $${LIBS} ; do \
LIB=`basename $${FILE}`; \ LIB=`basename $${FILE}`; \
LIBDIR=`dirname $${FILE}` ; \
while test \! -z "$${LIB}"; do \ while test \! -z "$${LIB}"; do \
rm -fr $(TARGET_DIR)$${DST}/$${LIB}; \ FULLPATH="$${SYSROOT_DIR}/$${LIBDIR}/$${LIB}" ; \
mkdir -p $(TARGET_DIR)$${DST}; \ rm -fr $(TARGET_DIR)/$${LIBDIR}/$${LIB}; \
if test -h $${LIB_DIR}/$${LIB}; then \ mkdir -p $(TARGET_DIR)/$${LIBDIR}; \
cp -d $${LIB_DIR}/$${LIB} $(TARGET_DIR)$${DST}/; \ if test -h $${FULLPATH} ; then \
elif test -f $${LIB_DIR}/$${LIB}; then \ cp -d $${FULLPATH} $(TARGET_DIR)/$${LIBDIR}/; \
$(INSTALL) -D -m0755 $${LIB_DIR}/$${LIB} $(TARGET_DIR)$${DST}/$${LIB}; \ elif test -f $${FULLPATH}; then \
$(INSTALL) -D -m0755 $${FULLPATH} $(TARGET_DIR)/$${LIBDIR}/$${LIB}; \
case "$${STRIP}" in \ case "$${STRIP}" in \
(0 | n | no) \ (0 | n | no) \
;; \ ;; \
(*) \ (*) \
$(TARGET_CROSS)strip "$(TARGET_DIR)$${DST}/$${LIB}"; \ $(TARGET_CROSS)strip "$(TARGET_DIR)/$${LIBDIR}/$${LIB}"; \
;; \ ;; \
esac; \ esac; \
else \ else \
exit -1; \ exit -1; \
fi; \ fi; \
LIB="`readlink $${LIB_DIR}/$${LIB}`"; \ LIB="`readlink $${FULLPATH}`"; \
done; \ done; \
done; \ done; \
\ \