external-csl-toolchain: support ia32

Unfortunately, the CSL ia32 toolchain has non-prefixed binaries in its bindir
(e.g. gcc, ld). To avoid this messing up our build, we avoid adding this
bindir to our PATH, and instead add symlinks to the prefixed binaries to our
staging toolchain bindir.

(From OE-Core rev: c924d878b55cce7a0e98dc60acf706b5a1b4f404)

Signed-off-by: Christopher Larson <chris_larson@mentor.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Christopher Larson 2012-01-27 11:13:46 -06:00 committed by Richard Purdie
parent c0d7e9b062
commit cbe0a0dd8a
2 changed files with 63 additions and 1 deletions

View File

@ -4,7 +4,8 @@
EXTERNAL_TOOLCHAIN ?= "/usr/local/csl/${TARGET_ARCH}"
PATH =. "${EXTERNAL_TOOLCHAIN}/bin:"
TOOLCHAIN_PATH_ADD = "${EXTERNAL_TOOLCHAIN}/bin:"
PATH =. "${TOOLCHAIN_PATH_ADD}"
CSL_TARGET_SYS_powerpc = "powerpc-linux-gnu"
CSL_TARGET_SYS_powerpc64 = "powerpc-linux-gnu"
@ -12,6 +13,8 @@ CSL_TARGET_SYS_arm = "arm-none-linux-gnueabi"
CSL_TARGET_SYS_mips = "mips-linux-gnu"
CSL_TARGET_SYS_mipsel = "mips-linux-gnu"
CSL_TARGET_SYS_mips64 = "mips-linux-gnu"
CSL_TARGET_SYS_i686 = "i686-pc-linux-gnu"
CSL_TARGET_SYS_i586 = "i686-pc-linux-gnu"
CSL_TARGET_SYS = "${TARGET_SYS}"
TARGET_PREFIX = "${CSL_TARGET_SYS}-"
@ -41,6 +44,8 @@ TOOLCHAIN_OPTIONS = " --sysroot=${STAGING_DIR_HOST}"
def csl_target_core(d):
coredata = {
'armv7a-vfp-neon': 'armv7-a-neon',
'i586': 'sgxx-glibc',
'i686': 'sgxx-glibc',
'mips': 'mips32',
'mipsel': 'el',
'ppce500': 'te500v1',
@ -51,3 +56,55 @@ def csl_target_core(d):
return coredata.get(d.getVar('TUNE_PKGARCH', True), '')
CSL_TARGET_CORE = "${@csl_target_core(d)}"
# Unfortunately, the CSL ia32 toolchain has non-prefixed binaries in its
# bindir (e.g. gcc, ld). To avoid this messing up our build, we avoid adding
# this bindir to our PATH, and instead add symlinks to the prefixed binaries
# to our staging toolchain bindir.
python toolchain_metadata_setup () {
if not isinstance(e, bb.event.ConfigParsed):
return
d = e.data
if d.getVar('TUNE_PKGARCH', True) in ('i586', 'i686'):
d.setVar('TOOLCHAIN_PATH_ADD', '')
}
addhandler toolchain_metadata_setup
python toolchain_setup () {
if not isinstance(e, bb.event.BuildStarted):
return
d = e.data
if d.getVar('TUNE_PKGARCH', True) in ('i586', 'i686'):
populate_toolchain_links(d)
}
addhandler toolchain_setup
def populate_toolchain_links(d):
import errno
import os
from glob import glob
d = d.createCopy()
d.finalize()
pattern = bb.data.expand('${EXTERNAL_TOOLCHAIN}/bin/${TARGET_PREFIX}*', d)
files = glob(pattern)
if not files:
bb.fatal("Unable to populate toolchain binary symlinks")
bindir = d.getVar('STAGING_BINDIR_TOOLCHAIN', True)
bb.mkdirhier(bindir)
for f in files:
base = os.path.basename(f)
newpath = os.path.join(bindir, base)
try:
os.symlink(f, newpath)
except OSError as exc:
if exc.errno == errno.EEXIST:
break
bb.fatal("Unable to populate toolchain binary symlink for %s: %s" % (newpath, exc))

View File

@ -60,6 +60,11 @@ external_toolchain_sysroot_adjust() {
rm -f ${SYSROOT_DESTDIR}/${CSL_TARGET_CORE}
ln -s . ${SYSROOT_DESTDIR}/${CSL_TARGET_CORE}
fi
if [ "${TUNE_PKGARCH}" = "i586" ]; then
rm -f ${SYSROOT_DESTDIR}/system32
ln -s . ${SYSROOT_DESTDIR}/system32
fi
}
GLIBC_INTERNAL_USE_BINARY_LOCALE ?= "compile"