toolchain-scrpts: Fix sitecache issues with multilib

The use of TCLIBC in TOOLCHAIN_NEED_CONFIGSITE_CACHE is problematic
since a multilib may have both uclibc and glibc for different multilibs
yet switching between them doesn't change TCLIBC. This would result
in "lib32-glibc" being attempted when lib32 was actually uclibc.

The fix here is to use the virtual providers which bitbake switches
to point correctly at the right things.

This does mean we need to resolve virtual providers but we can do this using
sysroot-providers.

[YCOTO #7607]

(From OE-Core rev: 6d1dc943a9c8d97cd59d8cd98069d9bdb2615ff5)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Richard Purdie 2015-06-19 11:24:39 +01:00
parent fed80c3d40
commit 6cfed59323
1 changed files with 11 additions and 2 deletions

View File

@ -98,7 +98,7 @@ EOF
#we get the cached site config in the runtime
TOOLCHAIN_CONFIGSITE_NOCACHE = "${@siteinfo_get_files(d, True)}"
TOOLCHAIN_CONFIGSITE_SYSROOTCACHE = "${STAGING_DIR}/${MLPREFIX}${MACHINE}/${target_datadir}/${TARGET_SYS}_config_site.d"
TOOLCHAIN_NEED_CONFIGSITE_CACHE ??= "${TCLIBC} ncurses"
TOOLCHAIN_NEED_CONFIGSITE_CACHE ??= "virtual/libc ncurses"
#This function create a site config file
toolchain_create_sdk_siteconfig () {
@ -113,6 +113,12 @@ toolchain_create_sdk_siteconfig () {
#get cached site config
for sitefile in ${TOOLCHAIN_NEED_CONFIGSITE_CACHE}; do
# Resolve virtual/* names to the real recipe name using sysroot-providers info
case $sitefile in virtual/*)
sitefile=`echo $sitefile | tr / _`
sitefile=`cat ${STAGING_DIR_TARGET}/sysroot-providers/$sitefile`
esac
if [ -r ${TOOLCHAIN_CONFIGSITE_SYSROOTCACHE}/${sitefile}_config ]; then
cat ${TOOLCHAIN_CONFIGSITE_SYSROOTCACHE}/${sitefile}_config >> $siteconfig
fi
@ -134,10 +140,13 @@ toolchain_create_sdk_version () {
toolchain_create_sdk_version[vardepsexclude] = "DATETIME"
python __anonymous () {
import oe.classextend
deps = ""
for dep in (d.getVar('TOOLCHAIN_NEED_CONFIGSITE_CACHE', True) or "").split():
deps += " %s:do_populate_sysroot" % dep
for variant in (d.getVar('MULTILIB_VARIANTS', True) or "").split():
deps += " %s-%s:do_populate_sysroot" % (variant, dep)
clsextend = oe.classextend.ClassExtender(variant, d)
newdep = clsextend.extend_name(dep)
deps += " %s:do_populate_sysroot" % newdep
d.appendVarFlag('do_configure', 'depends', deps)
}