From cbe0a0dd8a4cfde73d2192fbc77e637e3ac4271c Mon Sep 17 00:00:00 2001 From: Christopher Larson Date: Fri, 27 Jan 2012 11:13:46 -0600 Subject: 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 Signed-off-by: Richard Purdie --- meta/conf/distro/include/tcmode-external-csl.inc | 59 +++++++++++++++++++++++- 1 file changed, 58 insertions(+), 1 deletion(-) (limited to 'meta/conf/distro') 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)) -- cgit v1.2.3-54-g00ecf