mirror of
https://git.yoctoproject.org/meta-arm
synced 2026-01-11 15:00:39 +00:00
In d8e9ee8fd53b7620e72b2dfebb2e8d464b737dbb the finalize method was removed. Signed-off-by: David Bagonyi <david.bagonyi@gmail.com> Signed-off-by: Jon Mason <jon.mason@arm.com>
135 lines
4.3 KiB
PHP
135 lines
4.3 KiB
PHP
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 or release 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] == '(Arm':
|
|
# gcc version 11.3.1 20220712 (Arm GNU Toolchain 11.3.Rel1)
|
|
return version.split()[7].split(')')[0]
|
|
elif 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
|
|
import subprocess
|
|
|
|
syspath = bb.data.expand('${EXTERNAL_TOOLCHAIN}/${EAT_TARGET_SYS}', d)
|
|
if not syspath:
|
|
return 'UNKNOWN'
|
|
|
|
topdir = d.getVar('TOPDIR', True)
|
|
lddpath = syspath + '/libc/usr/bin/ldd'
|
|
|
|
if os.path.exists(lddpath):
|
|
cmd = '/bin/sh ' + lddpath + ' --version'
|
|
try:
|
|
stdout, stderr = bb.process.run(cmd, cwd=topdir, stderr=subprocess.PIPE)
|
|
except bb.process.CmdError as exc:
|
|
bb.error('Failed to obtain external Arm libc version: %s' % exc)
|
|
return 'UNKNOWN'
|
|
else:
|
|
first_line = stdout.splitlines()[0]
|
|
return first_line.split()[2]
|
|
|
|
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]
|
|
|
|
def eat_get_bfd_version(d):
|
|
try:
|
|
stdout, stderr = eat_run(d, 'as', '--version')
|
|
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()
|
|
|
|
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))
|
|
d.setVar('EAT_VER_BFD', eat_get_bfd_version(ld))
|
|
}
|
|
addhandler external_arm_toolchain_version_handler
|