123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- def csl_run(d, cmd, *args):
- import bb.process
- import subprocess
- topdir = d.getVar('TOPDIR', True)
- toolchain_path = d.getVar('EXTERNAL_TOOLCHAIN', True)
- if not toolchain_path:
- return 'UNKNOWN', 'UNKNOWN'
- target_prefix = d.getVar('TARGET_PREFIX', True)
- path = os.path.join(toolchain_path, 'bin', target_prefix + cmd)
- args = [path] + list(args)
- return bb.process.run(args, cwd=topdir, stderr=subprocess.PIPE)
- def csl_get_version(d):
- try:
- stdout, stderr = csl_run(d, 'gcc', '-v')
- except bb.process.CmdError as exc:
- bb.error('Failed to obtain CodeSourcery toolchain version: %s' % exc)
- return 'UNKNOWN'
- else:
- last_line = stderr.splitlines()[-1]
- return last_line
- def csl_get_main_version(d):
- version = csl_get_version(d)
- if version != 'UNKNOWN':
- return version.split()[-1].rstrip(')')
- else:
- return version
- def csl_get_gcc_version(d):
- version = csl_get_version(d)
- if version != 'UNKNOWN':
- return version.split()[2]
- else:
- return version
- def csl_get_libc_version(d):
- syspath = d.expand('${EXTERNAL_TOOLCHAIN}/${CSL_TARGET_SYS}')
- if not syspath:
- return 'UNKNOWN'
- libpath = syspath + '/libc/lib/'
- if not os.path.exists(libpath):
- libpath = syspath + '/libc/sgxx-glibc/lib/'
- if os.path.exists(libpath):
- for file in os.listdir(libpath):
- if file.find('libc-') == 0:
- return file[5:-3]
- return 'UNKNOWN'
- def csl_get_kernel_version(d):
- syspath = d.expand('${EXTERNAL_TOOLCHAIN}/${CSL_TARGET_SYS}')
- if not syspath:
- return 'UNKNOWN'
- vf = syspath + '/libc/usr/include/linux/version.h'
- if not os.path.exists(vf):
- vf = syspath + '/libc/sgxx-glibc/usr/include/linux/version.h'
- try:
- f = open(vf, 'r')
- except (OSError, IOError):
- return 'UNKNOWN'
- l = f.readlines();
- f.close();
- for s in l:
- if s.find('LINUX_VERSION_CODE') > 0:
- ver = int(s.split()[2])
- maj = ver / 65536
- ver = ver % 65536
- min = ver / 256
- ver = ver % 256
- return str(maj)+'.'+str(min)+'.'+str(ver)
- return 'UNKNOWN'
- def csl_get_gdb_version(d):
- try:
- stdout, stderr = csl_run(d, 'gdb', '-v')
- except bb.process.CmdError:
- return 'UNKNOWN'
- else:
- first_line = stdout.splitlines()[0]
- return first_line.split()[-1]
- python csl_version_handler () {
- d = e.data
- ld = d.createCopy()
- ld.finalize()
- d.setVar('CSL_VER_MAIN', csl_get_main_version(ld))
- d.setVar('CSL_VER_GCC', csl_get_gcc_version(ld))
- d.setVar('CSL_VER_LIBC', csl_get_libc_version(ld))
- d.setVar('CSL_VER_KERNEL', csl_get_kernel_version(ld))
- d.setVar('CSL_VER_GDB', csl_get_gdb_version(ld))
- }
- addhandler csl_version_handler
- csl_version_handler[eventmask] = "bb.event.ConfigParsed"
- # Ensure that any variable which includes the --sysroot (CC, CXX, etc) also
- # depends on the toolchain version
- TOOLCHAIN_OPTIONS[vardeps] += "CSL_VER_MAIN CSL_VER_GCC"
|