From 1c7d6584a7811b7785ae5c1e378f14b5ba0971cf Mon Sep 17 00:00:00 2001 From: takeshi_hoshina Date: Mon, 2 Nov 2020 11:07:33 +0900 Subject: basesystem-jj recipes --- .../include/external-arm-toolchain-versions.inc | 133 +++++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 bsp/meta-arm/meta-arm-toolchain/conf/distro/include/external-arm-toolchain-versions.inc (limited to 'bsp/meta-arm/meta-arm-toolchain/conf/distro/include/external-arm-toolchain-versions.inc') diff --git a/bsp/meta-arm/meta-arm-toolchain/conf/distro/include/external-arm-toolchain-versions.inc b/bsp/meta-arm/meta-arm-toolchain/conf/distro/include/external-arm-toolchain-versions.inc new file mode 100644 index 00000000..5c40af20 --- /dev/null +++ b/bsp/meta-arm/meta-arm-toolchain/conf/distro/include/external-arm-toolchain-versions.inc @@ -0,0 +1,133 @@ +def eat_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 eat_get_version(d): + try: + stdout, stderr = eat_run(d, 'gcc', '-v') + except bb.process.CmdError as exc: + bb.error('Failed to obtain external Arm toolchain version: %s' % exc) + return 'UNKNOWN' + else: + last_line = stderr.splitlines()[-1] + return last_line + +# Extract the YYYY.MM version +def eat_get_main_version(d): + version = eat_get_version(d) + bb.debug(2, 'Trying for parse version info from: %s' % version) + if version != 'UNKNOWN': + if version.split()[4] == '(GNU': + # gcc version 9.2.1 20191025 (GNU Toolchain for the A-profile Architecture 9.2-2019.12 (arm-9.10)) + # gcc version 8.2.1 20180802 (GNU Toolchain for the A-profile Architecture 8.2-2018.11 (arm-rel-8.26)) + return version.split()[10].split('-')[1] + elif version.split()[3] == '(GNU': + # gcc version 8.3.0 (GNU Toolchain for the A-profile Architecture 8.3-2019.03 (arm-rel-8.36)) + return version.split()[9].split('-')[1] + else: + bb.error('Failed to parse external Arm toolchain version from: %s' % version) + else: + return version + +# Extract the x.y.z version from 'gcc version 4.9.1' +def eat_get_gcc_version(d): + version = eat_get_version(d) + if version != 'UNKNOWN': + return version.split()[2] + else: + return version + +def eat_get_libc_version(d): + import os,bb + syspath = bb.data.expand('${EXTERNAL_TOOLCHAIN}/${EAT_TARGET_SYS}', d) + if not syspath: + return 'UNKNOWN' + + libpath = syspath + '/libc/' + bb.data.expand('${EAT_LIBDIR}/${EAT_TARGET_SYS}/', d) + + if os.path.exists(libpath): + for file in os.listdir(libpath): + if file.find('libc-') == 0: + return file[5:-3] + + libpath = syspath + '/libc/' + bb.data.expand('${EAT_LIBDIR}/', d) + + if os.path.exists(libpath): + for file in os.listdir(libpath): + if file.find('libc-') == 0: + return file[5:-3] + + libpath = syspath + '/libc/usr/' + bb.data.expand('${EAT_LIBDIR}/${EAT_TARGET_SYS}/', d) + + if os.path.exists(libpath): + for file in os.listdir(libpath): + if file.find('libc-') == 0: + return file[5:-3] + + libpath = syspath + '/libc/usr/' + bb.data.expand('${EAT_LIBDIR}/', d) + + if os.path.exists(libpath): + for file in os.listdir(libpath): + if file.find('libc-') == 0: + return file[5:-3] + return 'UNKNOWN' + +def eat_get_kernel_version(d): + import os,bb + syspath = bb.data.expand('${EXTERNAL_TOOLCHAIN}/${EAT_TARGET_SYS}', d) + if not syspath: + return 'UNKNOWN' + + vf = syspath + '/libc/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 eat_get_gdb_version(d): + try: + stdout, stderr = eat_run(d, 'gdb', '-v') + except bb.process.CmdError: + return 'UNKNOWN' + else: + first_line = stdout.splitlines()[0] + return first_line.split()[-1] + +python external_arm_toolchain_version_handler () { + if not isinstance(e, bb.event.ConfigParsed): + return + d = e.data + ld = d.createCopy() + ld.finalize() + + d.setVar('EAT_VER_MAIN', eat_get_main_version(ld)) + d.setVar('EAT_VER_GCC', eat_get_gcc_version(ld)) + d.setVar('EAT_VER_LIBC', eat_get_libc_version(ld)) + d.setVar('EAT_VER_KERNEL', eat_get_kernel_version(ld)) + d.setVar('EAT_VER_GDB', eat_get_gdb_version(ld)) +} +addhandler external_arm_toolchain_version_handler -- cgit 1.2.3-korg