]> code.ossystems Code Review - openembedded-core.git/commitdiff
external-csl-toolchain: support ia32
authorChristopher Larson <chris_larson@mentor.com>
Fri, 27 Jan 2012 17:13:46 +0000 (11:13 -0600)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Fri, 3 Feb 2012 16:14:35 +0000 (16:14 +0000)
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.

Signed-off-by: Christopher Larson <chris_larson@mentor.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
meta/conf/distro/include/tcmode-external-csl.inc
meta/recipes-core/meta/external-csl-toolchain.bb

index 1d82ca190091b3df0e9774b05291662b83ec66a7..01355900604c98799424c908996f1041cd6b4cb5 100644 (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))
index 37ea271eb121c35b04dca29174aa59de8714bb37..a866e3e3dd06f8314e483c25053af8dace097b21 100644 (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"