ARCH_SUBDIR is computed based on the value of ARCH_SYSROOT_DIR and
SYSROOT_DIR. For nested toolchains ARCH_SYSROOT_DIR is a subdir of
SYSROOT_DIR, so a sed command like this one...
sed -r -e "s:^${SYSROOT_DIR}(.*)/$:\1:"
...basically removes the leading SYSROOT_DIR part from ARCH_SYSROOT_DIR.
But, for side-by-side sysroot toolchains ARCH_SYSROOT_DIR and
SYSROOT_DIR are at the same level, so the above sed command doesn't
make any effect.
This patch therefore improves the calculation of ARCH_SUBDIR to
clearly handle the three possible cases:
- There is a single sysroot, or the selected architecture sysroot is
the main one (i.e SYSROOT_DIR == ARCH_SYSROOT_DIR). In this case,
ARCH_SUBDIR is empty.
- There are side-by-side sysroots, such as
SYSROOT_DIR=.../sysroot/mips-r2-hard/ and
ARCH_SYSROOT_DIR=.../sysroot/mipsel-r2-hard/.
- The arch-sysroot is nested, such as SYSROOT_DIR=.../sysroot and
ARCH_SYSROOT_DIR=.../sysroot/armv4t/
Signed-off-by: Vicente Olivert Riera <Vincent.Riera@imgtec.com>
[Thomas: improve the logic to handle the SYSROOT_DIR==ARCH_SYSROOT_DIR
case.]
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
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:"` ; \
+ if [ "$${SYSROOT_DIR}" == "$${ARCH_SYSROOT_DIR}" ] ; then \
+ ARCH_SUBDIR="" ; \
+ elif [ "`dirname $${ARCH_SYSROOT_DIR}`" = "`dirname $${SYSROOT_DIR}`" ] ; then \
+ SYSROOT_DIR_DIRNAME=`dirname $${SYSROOT_DIR}`/ ; \
+ ARCH_SUBDIR=`echo $${ARCH_SYSROOT_DIR} | sed -r -e "s:^$${SYSROOT_DIR_DIRNAME}(.*)/$$:\1:"` ; \
+ else \
+ ARCH_SUBDIR=`echo $${ARCH_SYSROOT_DIR} | sed -r -e "s:^$${SYSROOT_DIR}(.*)/$$:\1:"` ; \
+ 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})
endef