summaryrefslogtreecommitdiffstats
path: root/conf
diff options
context:
space:
mode:
Diffstat (limited to 'conf')
-rw-r--r--conf/distro/include/tcmode-external-xilinx.inc79
-rw-r--r--conf/distro/include/xilinx-versions.inc108
2 files changed, 187 insertions, 0 deletions
diff --git a/conf/distro/include/tcmode-external-xilinx.inc b/conf/distro/include/tcmode-external-xilinx.inc
new file mode 100644
index 00000000..6859f8f9
--- /dev/null
+++ b/conf/distro/include/tcmode-external-xilinx.inc
@@ -0,0 +1,79 @@
1#
2# Configuration to use external Xilinx toolchain
3#
4
5TOOLCHAIN_PATH_ADD = "${EXTERNAL_TOOLCHAIN}/bin:"
6PATH =. "${TOOLCHAIN_PATH_ADD}"
7
8CSL_TARGET_SYS_armv7a ?= "arm-xilinx-linux-gnueabi"
9CSL_TARGET_SYS_microblazeel ?= "microblazeel-xilinx-linux-gnu"
10CSL_TARGET_SYS = "${TARGET_SYS}"
11
12TARGET_PREFIX = "${CSL_TARGET_SYS}-"
13
14PREFERRED_PROVIDER_linux-libc-headers = "external-xilinx-toolchain"
15PREFERRED_PROVIDER_linux-libc-headers-dev = "external-xilinx-toolchain"
16PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc = "external-xilinx-toolchain"
17PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc-initial = "external-xilinx-toolchain"
18PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc-intermediate = "external-xilinx-toolchain"
19PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}g++ = "external-xilinx-toolchain"
20PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}binutils = "external-xilinx-toolchain"
21PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}libc-for-gcc = "external-xilinx-toolchain"
22PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}libc-initial = "external-xilinx-toolchain"
23PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}compilerlibs = "external-xilinx-toolchain"
24PREFERRED_PROVIDER_libgcc = "external-xilinx-toolchain"
25PREFERRED_PROVIDER_eglibc = "external-xilinx-toolchain"
26PREFERRED_PROVIDER_virtual/libc = "external-xilinx-toolchain"
27PREFERRED_PROVIDER_virtual/libintl = "external-xilinx-toolchain"
28PREFERRED_PROVIDER_virtual/libiconv = "external-xilinx-toolchain"
29PREFERRED_PROVIDER_glibc-thread-db = "external-xilinx-toolchain"
30PREFERRED_PROVIDER_virtual/linux-libc-headers = "external-xilinx-toolchain"
31PREFERRED_PROVIDER_virtual/linux-libc-headers-dev = "external-xilinx-toolchain"
32PREFERRED_PROVIDER_gdbserver ?= "external-xilinx-toolchain"
33
34# No need to re-compile the locale files
35GLIBC_INTERNAL_USE_BINARY_LOCALE = "precompiled"
36ENABLE_BINARY_LOCALE_GENERATION = ""
37
38TOOLCHAIN_OPTIONS = " --sysroot=${STAGING_DIR_HOST}"
39
40# Default sysroot is inside the Xilinx ARM v7-A toolchain in the '<CSL_TARGET_SYS>/libc' (no debug-root)
41EXTERNAL_TOOLCHAIN_SYSROOT_armv7a ?= "${EXTERNAL_TOOLCHAIN}/${CSL_TARGET_SYS}/libc"
42EXTERNAL_TOOLCHAIN_DBGROOT_armv7a ?= ""
43
44# Default sysroot is inside the Xilinx MicroBlaze toolchain in the '<CSL_TARGET_SYS>/sys-root'
45EXTERNAL_TOOLCHAIN_SYSROOT_microblaze ?= "${EXTERNAL_TOOLCHAIN}/${CSL_TARGET_SYS}/sys-root"
46EXTERNAL_TOOLCHAIN_DBGROOT_microblaze ?= "${EXTERNAL_TOOLCHAIN}/${CSL_TARGET_SYS}/debug-root"
47
48addhandler toolchain_setup
49python toolchain_setup () {
50 if not isinstance(e, bb.event.BuildStarted):
51 return
52 import errno
53
54 d = e.data
55 d = d.createCopy()
56 d.finalize()
57
58 tarprefix = d.expand('${TARGET_PREFIX}')
59 files = []
60 if tarprefix == "arm-xilinx-linux-gnueabi-":
61 files.append((tarprefix + "ld", tarprefix + "ld.bfd"))
62
63 if len(files) > 0:
64 ext_bindir = d.expand('${EXTERNAL_TOOLCHAIN}/bin')
65 loc_bindir = d.getVar('STAGING_BINDIR_TOOLCHAIN', True)
66 bb.mkdirhier(loc_bindir)
67 for f in files:
68 source = os.path.join(ext_bindir, f[0])
69 dest = os.path.join(loc_bindir, f[1])
70 try:
71 os.symlink(source, dest)
72 except OSError as exc:
73 if exc.errno == errno.EEXIST:
74 break
75 bb.fatal("Unable to populate toolchain binary symlink for %s: %s" % (f[0], f[1]))
76}
77
78require conf/distro/include/xilinx-versions.inc
79
diff --git a/conf/distro/include/xilinx-versions.inc b/conf/distro/include/xilinx-versions.inc
new file mode 100644
index 00000000..a65358d4
--- /dev/null
+++ b/conf/distro/include/xilinx-versions.inc
@@ -0,0 +1,108 @@
1def csl_run(d, cmd, *args):
2 import bb.process
3 import subprocess
4
5 topdir = d.getVar('TOPDIR', True)
6 toolchain_path = d.getVar('EXTERNAL_TOOLCHAIN', True)
7 if not toolchain_path:
8 return 'UNKNOWN', 'UNKNOWN'
9
10 target_prefix = d.getVar('TARGET_PREFIX', True)
11 path = os.path.join(toolchain_path, 'bin', target_prefix + cmd)
12 args = [path] + list(args)
13
14 return bb.process.run(args, cwd=topdir, stderr=subprocess.PIPE)
15
16def csl_get_version(d):
17 try:
18 stdout, stderr = csl_run(d, 'gcc', '-v')
19 except bb.process.CmdError as exc:
20 bb.error('Failed to obtain CodeSourcery toolchain version: %s' % exc)
21 bb.error('Make sure that MACHINE is set correctly in your local.conf and the toolchain supports %s.' % d.getVar("TARGET_ARCH", True))
22 return 'UNKNOWN'
23 else:
24 last_line = stderr.splitlines()[-1]
25 return last_line
26
27def csl_get_main_version(d):
28 version = csl_get_version(d)
29 if version != 'UNKNOWN':
30 return version.split()[-1].rstrip(')')
31 else:
32 return version
33
34def csl_get_gcc_version(d):
35 version = csl_get_version(d)
36 if version != 'UNKNOWN':
37 return version.split()[2]
38 else:
39 return version
40
41def xilinx_get_libc_version(d):
42 syspath = d.expand('${EXTERNAL_TOOLCHAIN_SYSROOT}')
43 if not syspath:
44 return 'UNKNOWN'
45
46 libpath = syspath + '/lib/'
47 if not os.path.exists(libpath):
48 libpath = syspath + '/sgxx-glibc/lib/'
49
50 if os.path.exists(libpath):
51 for file in os.listdir(libpath):
52 if file.find('libc-') == 0:
53 return file[5:-3]
54 return 'UNKNOWN'
55
56def xilinx_get_kernel_version(d):
57 syspath = d.expand('${EXTERNAL_TOOLCHAIN_SYSROOT}')
58 if not syspath:
59 return 'UNKNOWN'
60
61 vf = syspath + '/usr/include/linux/version.h'
62 if not os.path.exists(vf):
63 vf = syspath + '/sgxx-glibc/usr/include/linux/version.h'
64
65 try:
66 f = open(vf, 'r')
67 except (OSError, IOError):
68 return 'UNKNOWN'
69
70 l = f.readlines();
71 f.close();
72 for s in l:
73 if s.find('LINUX_VERSION_CODE') > 0:
74 ver = int(s.split()[2])
75 maj = ver / 65536
76 ver = ver % 65536
77 min = ver / 256
78 ver = ver % 256
79 return str(maj)+'.'+str(min)+'.'+str(ver)
80 return 'UNKNOWN'
81
82def csl_get_gdb_version(d):
83 try:
84 stdout, stderr = csl_run(d, 'gdb', '-v')
85 except bb.process.CmdError:
86 return 'UNKNOWN'
87 else:
88 first_line = stdout.splitlines()[0]
89 return first_line.split()[-1]
90
91python xilinx_version_handler () {
92 if not isinstance(e, bb.event.ConfigParsed):
93 return
94 d = e.data
95 ld = d.createCopy()
96 ld.finalize()
97
98 d.setVar('CSL_VER_MAIN', csl_get_main_version(ld))
99 d.setVar('CSL_VER_GCC', csl_get_gcc_version(ld))
100 d.setVar('CSL_VER_LIBC', xilinx_get_libc_version(ld))
101 d.setVar('CSL_VER_KERNEL', xilinx_get_kernel_version(ld))
102 d.setVar('CSL_VER_GDB', csl_get_gdb_version(ld))
103}
104addhandler xilinx_version_handler
105
106# Ensure that any variable which includes the --sysroot (CC, CXX, etc) also
107# depends on the toolchain version
108TOOLCHAIN_OPTIONS[vardeps] += "CSL_VER_MAIN CSL_VER_GCC"