diff options
-rw-r--r-- | meta/conf/distro/include/tcmode-external-csl.inc | 59 | ||||
-rw-r--r-- | meta/recipes-core/meta/external-csl-toolchain.bb | 5 |
2 files changed, 63 insertions, 1 deletions
diff --git a/meta/conf/distro/include/tcmode-external-csl.inc b/meta/conf/distro/include/tcmode-external-csl.inc index 1d82ca1900..0135590060 100644 --- a/meta/conf/distro/include/tcmode-external-csl.inc +++ b/meta/conf/distro/include/tcmode-external-csl.inc @@ -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)) diff --git a/meta/recipes-core/meta/external-csl-toolchain.bb b/meta/recipes-core/meta/external-csl-toolchain.bb index 37ea271eb1..a866e3e3dd 100644 --- a/meta/recipes-core/meta/external-csl-toolchain.bb +++ b/meta/recipes-core/meta/external-csl-toolchain.bb @@ -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" |