libgcc: Fix symlink handling in cross-arch multilib cases

The symlink being generated needs to match both the current arch (e.g. mips
or mips64) but also use the underlying TARGET_SYS without multilib extensions
to TARGET_VENDOR or extensions to TARGET_OS.

The way multilib changes TARGET_VENDOR meant this code did not have
a way of removing that change. The method of removing some TARGET_OS
suffixes was also not working.

By using immediate expansion to run this code, we can run before the
multilib code changes it and get the original values.

We then use the *current* TARGET_ARCH value in case this does get changed
by the multilib since we need to point at the right compiler (32 bit one
for 32 bit code).

(From OE-Core rev: 89cd6c244b6bc0a8cb52ec84d378d5b305df030f)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Richard Purdie 2015-07-31 11:28:22 +01:00
parent 6c4b21d7af
commit c1148330a1
2 changed files with 14 additions and 14 deletions

View File

@ -116,23 +116,23 @@ fakeroot python do_multilib_install() {
os.symlink(src, dest)
}
def get_original_vendoros(d):
vendoros = d.expand('${TARGET_VENDOR}-${TARGET_OS}')
for suffix in [d.getVar('ABIEXTENSION', True), d.getVar('LIBCEXTENSION', True)]:
if suffix and vendoros.endswith(suffix):
vendoros = vendoros[:-len(suffix)]
return vendoros
ORIG_TARGET_VENDOROS := "${@get_original_vendoros(d)}"
BASETARGET_SYS = "${TARGET_ARCH}${ORIG_TARGET_VENDOROS}"
addtask extra_symlinks after do_multilib_install before do_package do_populate_sysroot
fakeroot python do_extra_symlinks() {
targetsysnoext = d.getVar('TARGET_SYS_NO_EXTENSION', True)
targetsys = d.getVar('BASETARGET_SYS', True)
if targetsysnoext != d.getVar('TARGET_SYS', True):
dest = d.getVar('D', True) + d.getVar('libdir', True) + '/' + targetsysnoext
if targetsys != d.getVar('TARGET_SYS', True):
dest = d.getVar('D', True) + d.getVar('libdir', True) + '/' + targetsys
src = d.getVar('TARGET_SYS', True)
if not os.path.lexists(dest) and os.path.lexists(d.getVar('D', True) + d.getVar('libdir', True)):
os.symlink(src, dest)
}
python () {
targetsysnoext = d.getVar('TARGET_SYS', True)
for suffix in [d.getVar('ABIEXTENSION', True), d.getVar('LIBCEXTENSION', True)]:
if suffix and targetsysnoext.endswith(suffix):
targetsysnoext = targetsysnoext[:-len(suffix)]
d.setVar('TARGET_SYS_NO_EXTENSION', targetsysnoext)
}

View File

@ -24,7 +24,7 @@ FILES_${PN}-dev = "\
${libdir}/${TARGET_SYS}/${BINV}/x32 \
${libdir}/${TARGET_SYS}/${BINV}/n32 \
${libdir}/${TARGET_SYS}/${BINV}/libgcc* \
${@base_conditional('TARGET_SYS_NO_EXTENSION', '${TARGET_SYS}', '', '${libdir}/${TARGET_SYS_NO_EXTENSION}', d)} \
${@base_conditional('BASETARGET_SYS', '${TARGET_SYS}', '', '${libdir}/${BASETARGET_SYS}', d)} \
${libdir}/${TARGET_SYS}/${BINV}/libgcov.a \
"