summaryrefslogtreecommitdiffstats
path: root/meta/conf/distro
diff options
context:
space:
mode:
authorChristopher Larson <chris_larson@mentor.com>2012-01-27 11:13:46 -0600
committerRichard Purdie <richard.purdie@linuxfoundation.org>2012-02-03 16:17:16 +0000
commitcbe0a0dd8a4cfde73d2192fbc77e637e3ac4271c (patch)
tree5ac6cb55cf6ded06049a637f00ebf6171ace460f /meta/conf/distro
parentc0d7e9b062117a844293e7b358601d959e03b981 (diff)
downloadpoky-cbe0a0dd8a4cfde73d2192fbc77e637e3ac4271c.tar.gz
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>
Diffstat (limited to 'meta/conf/distro')
-rw-r--r--meta/conf/distro/include/tcmode-external-csl.inc59
1 files changed, 58 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 @@
4 4
5EXTERNAL_TOOLCHAIN ?= "/usr/local/csl/${TARGET_ARCH}" 5EXTERNAL_TOOLCHAIN ?= "/usr/local/csl/${TARGET_ARCH}"
6 6
7PATH =. "${EXTERNAL_TOOLCHAIN}/bin:" 7TOOLCHAIN_PATH_ADD = "${EXTERNAL_TOOLCHAIN}/bin:"
8PATH =. "${TOOLCHAIN_PATH_ADD}"
8 9
9CSL_TARGET_SYS_powerpc = "powerpc-linux-gnu" 10CSL_TARGET_SYS_powerpc = "powerpc-linux-gnu"
10CSL_TARGET_SYS_powerpc64 = "powerpc-linux-gnu" 11CSL_TARGET_SYS_powerpc64 = "powerpc-linux-gnu"
@@ -12,6 +13,8 @@ CSL_TARGET_SYS_arm = "arm-none-linux-gnueabi"
12CSL_TARGET_SYS_mips = "mips-linux-gnu" 13CSL_TARGET_SYS_mips = "mips-linux-gnu"
13CSL_TARGET_SYS_mipsel = "mips-linux-gnu" 14CSL_TARGET_SYS_mipsel = "mips-linux-gnu"
14CSL_TARGET_SYS_mips64 = "mips-linux-gnu" 15CSL_TARGET_SYS_mips64 = "mips-linux-gnu"
16CSL_TARGET_SYS_i686 = "i686-pc-linux-gnu"
17CSL_TARGET_SYS_i586 = "i686-pc-linux-gnu"
15CSL_TARGET_SYS = "${TARGET_SYS}" 18CSL_TARGET_SYS = "${TARGET_SYS}"
16 19
17TARGET_PREFIX = "${CSL_TARGET_SYS}-" 20TARGET_PREFIX = "${CSL_TARGET_SYS}-"
@@ -41,6 +44,8 @@ TOOLCHAIN_OPTIONS = " --sysroot=${STAGING_DIR_HOST}"
41def csl_target_core(d): 44def csl_target_core(d):
42 coredata = { 45 coredata = {
43 'armv7a-vfp-neon': 'armv7-a-neon', 46 'armv7a-vfp-neon': 'armv7-a-neon',
47 'i586': 'sgxx-glibc',
48 'i686': 'sgxx-glibc',
44 'mips': 'mips32', 49 'mips': 'mips32',
45 'mipsel': 'el', 50 'mipsel': 'el',
46 'ppce500': 'te500v1', 51 'ppce500': 'te500v1',
@@ -51,3 +56,55 @@ def csl_target_core(d):
51 return coredata.get(d.getVar('TUNE_PKGARCH', True), '') 56 return coredata.get(d.getVar('TUNE_PKGARCH', True), '')
52 57
53CSL_TARGET_CORE = "${@csl_target_core(d)}" 58CSL_TARGET_CORE = "${@csl_target_core(d)}"
59
60# Unfortunately, the CSL ia32 toolchain has non-prefixed binaries in its
61# bindir (e.g. gcc, ld). To avoid this messing up our build, we avoid adding
62# this bindir to our PATH, and instead add symlinks to the prefixed binaries
63# to our staging toolchain bindir.
64
65python toolchain_metadata_setup () {
66 if not isinstance(e, bb.event.ConfigParsed):
67 return
68
69 d = e.data
70
71 if d.getVar('TUNE_PKGARCH', True) in ('i586', 'i686'):
72 d.setVar('TOOLCHAIN_PATH_ADD', '')
73}
74addhandler toolchain_metadata_setup
75
76python toolchain_setup () {
77 if not isinstance(e, bb.event.BuildStarted):
78 return
79
80 d = e.data
81
82 if d.getVar('TUNE_PKGARCH', True) in ('i586', 'i686'):
83 populate_toolchain_links(d)
84}
85addhandler toolchain_setup
86
87def populate_toolchain_links(d):
88 import errno
89 import os
90 from glob import glob
91
92 d = d.createCopy()
93 d.finalize()
94
95 pattern = bb.data.expand('${EXTERNAL_TOOLCHAIN}/bin/${TARGET_PREFIX}*', d)
96 files = glob(pattern)
97 if not files:
98 bb.fatal("Unable to populate toolchain binary symlinks")
99
100 bindir = d.getVar('STAGING_BINDIR_TOOLCHAIN', True)
101 bb.mkdirhier(bindir)
102 for f in files:
103 base = os.path.basename(f)
104 newpath = os.path.join(bindir, base)
105 try:
106 os.symlink(f, newpath)
107 except OSError as exc:
108 if exc.errno == errno.EEXIST:
109 break
110 bb.fatal("Unable to populate toolchain binary symlink for %s: %s" % (newpath, exc))