df1df36fcb
Fix issues with binary external toolchains Fix two problems encountered while using an external binary toolchain generated by crosstool-ng: - Don't remove the ending / in LIB_DIR, otherwise find $LIB_DIR -maxdepth 1 doesn't find any file in the case LIB_DIR is a symbolic link and not a directory. For some reason, find -maxdepth 1 doesn't have the same behaviour on directories and symbolic links. Demonstration: $ mkdir foobar $ touch foobar/t1 $ touch foobar/t2 $ ln -s foobar barfoo $ find foobar -maxdepth 1 -name 't*' foobar/t1 foobar/t2 $ find barfoo -maxdepth 1 -name 't*' $ find barfoo/ -maxdepth 1 -name 't*' barfoo/t1 barfoo/t2 * Make sure the libraries are writable, otherwise the strip operation might fail. The library files may not be writable if the toolchain is not writable (which may happen if one wants to prevent anyone from overwriting the toolchain, which is done by crosstool-ng, for example). Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
57 lines
1.6 KiB
Makefile
57 lines
1.6 KiB
Makefile
#
|
|
# copy_toolchain_lib_root
|
|
#
|
|
# $1: source
|
|
# $2: destination
|
|
# $3: strip (y|n) default is to strip
|
|
#
|
|
copy_toolchain_lib_root = \
|
|
LIB="$(strip $1)"; \
|
|
DST="$(strip $2)"; \
|
|
STRIP="$(strip $3)"; \
|
|
\
|
|
LIB_DIR=`$(TARGET_CC) -print-file-name=$${LIB} | sed -e "s,$${LIB}\$$,,"`; \
|
|
\
|
|
if test -z "$${LIB_DIR}"; then \
|
|
echo "copy_toolchain_lib_root: lib=$${LIB} not found"; \
|
|
exit -1; \
|
|
fi; \
|
|
\
|
|
LIB="$(strip $1)"; \
|
|
for FILE in `find $${LIB_DIR} -maxdepth 1 -type l -name "$${LIB}*"`; do \
|
|
LIB=`basename $${FILE}`; \
|
|
while test \! -z "$${LIB}"; do \
|
|
echo "copy_toolchain_lib_root lib=$${LIB} dst=$${DST}"; \
|
|
rm -fr $(TARGET_DIR)$${DST}/$${LIB}; \
|
|
mkdir -p $(TARGET_DIR)$${DST}; \
|
|
if test -h $${LIB_DIR}/$${LIB}; then \
|
|
cp -d $${LIB_DIR}/$${LIB} $(TARGET_DIR)$${DST}/; \
|
|
elif test -f $${LIB_DIR}/$${LIB}; then \
|
|
$(INSTALL) -D -m0755 $${LIB_DIR}/$${LIB} $(TARGET_DIR)$${DST}/$${LIB}; \
|
|
case "$${STRIP}" in \
|
|
(0 | n | no) \
|
|
;; \
|
|
(*) \
|
|
$(TARGET_CROSS)strip "$(TARGET_DIR)$${DST}/$${LIB}"; \
|
|
;; \
|
|
esac; \
|
|
else \
|
|
exit -1; \
|
|
fi; \
|
|
LIB="`readlink $${LIB_DIR}/$${LIB}`"; \
|
|
done; \
|
|
done; \
|
|
\
|
|
echo -n
|
|
|
|
uclibc: dependencies $(TARGET_DIR)/lib/$(strip $(subst ",, $(BR2_TOOLCHAIN_EXTERNAL_LIB_C)))
|
|
|
|
$(TARGET_DIR)/lib/$(strip $(subst ",, $(BR2_TOOLCHAIN_EXTERNAL_LIB_C))):
|
|
#"))
|
|
mkdir -p $(TARGET_DIR)/lib
|
|
@$(call copy_toolchain_lib_root, $(strip $(subst ",, $(BR2_TOOLCHAIN_EXTERNAL_LIB_C))), /lib, $(BR2_TOOLCHAIN_EXTERNAL_STRIP))
|
|
#")))
|
|
for libs in $(strip $(subst ",, $(BR2_TOOLCHAIN_EXTERNAL_LIBS))); do \
|
|
$(call copy_toolchain_lib_root, $$libs, /lib, $(BR2_TOOLCHAIN_EXTERNAL_STRIP)); \
|
|
done
|