eSDK support runs of compatibility SDK tests
cover eSDK support runs of compatibility SDK tests
The following changes since commit b1d5267f0e31605b346af40778da0ac1ff298b78:
README.hardware: update flashing instructions for MPC8315 (2017-06-09 17:13:45 +0100)
are available in the git repository at:
git://git.yoctoproject.org/poky-contrib fjpedraz/emptyManifests
http://git.yoctoproject.org/cgit.cgi/poky-contrib/log/?h=fjpedraz/emptyManifests
Aníbal Limón (1):
oeqa/sdk/cases: Fix skip of buildgcalculator test
Francisco Pedraza (3):
lib/oe/sdk: Adds get_extra_sdk_info to reuse code in buildhistory meta/classes/populate_sdk: Adds support for generating eSDK manifest
files
oeqa/sdk/cases: Added validation for SDK compatibility tests with eSDK
meta/classes/buildhistory.bbclass | 19 ++++--------- meta/classes/populate_sdk_base.bbclass | 44 +++++++++++++++++------------- meta/classes/populate_sdk_ext.bbclass | 33 ++++++++++++++++++++++ meta/lib/oe/sdk.py | 19 +++++++++++++ meta/lib/oeqa/sdk/cases/buildgalculator.py | 2 +- meta/lib/oeqa/sdk/cases/buildiptables.py | 3 +- meta/lib/oeqa/sdk/cases/gcc.py | 3 +- meta/lib/oeqa/sdk/cases/perl.py | 3 +- meta/lib/oeqa/sdk/cases/python.py | 3 +- 9 files changed, 92 insertions(+), 37 deletions(-)
Signature · 1 line
2.1.4
PATCH 1/4 lib/oe/sdk: Adds get_extra_sdk_info to reuse code in buildhistory
From: Francisco Pedraza <[email protected]>
This function is going to be used for generating the target and host manifest files packages for eSDK. Added some fixes for buildhistory.bblclass, and docstring for get_extra_sdkinfo at oe.sdk
[YOCTO #9038]
--- meta/classes/buildhistory.bbclass | 18 ++++++------------ meta/lib/oe/sdk.py | 19 +++++++++++++++++++ 2 files changed, 25 insertions(+), 12 deletions(-)
meta/classes/buildhistory.bbclass +6 -12
@@ -582,25 +582,19 @@ END python buildhistory_get_extra_sdkinfo() { import operator import math + from oe.sdk import get_extra_sdkinfo + + sstate_dir = d.expand('${SDK_OUTPUT}/${SDKPATH}/sstate-cache') + extra_info = get_extra_sdkinfo(sstate_dir) if d.getVar('BB_CURRENTTASK') == 'populate_sdk_ext' and \ "sdk" in (d.getVar('BUILDHISTORY_FEATURES') or "").split(): - tasksizes = {} - filesizes = {} - for root, _, files in os.walk(d.expand('${SDK_OUTPUT}/${SDKPATH}/sstate-cache')): - for fn in files: - if fn.endswith('.tgz'): - fsize = int(math.ceil(float(os.path.getsize(os.path.join(root, fn))) / 1024)) - task = fn.rsplit(':', 1)[1].split('_', 1)[1].split('.')[0] - origtotal = tasksizes.get(task, 0) - tasksizes[task] = origtotal + fsize - filesizes[fn] = fsize with open(d.expand('${BUILDHISTORY_DIR_SDK}/sstate-package-sizes.txt'), 'w') as f: - filesizes_sorted = sorted(filesizes.items(), key=operator.itemgetter(1, 0), reverse=True) + filesizes_sorted = sorted(extra_info['filesizes'].items(), key=operator.itemgetter(1, 0), reverse=True) for fn, size in filesizes_sorted: f.write('%10d KiB %s\n' % (size, fn)) with open(d.expand('${BUILDHISTORY_DIR_SDK}/sstate-task-sizes.txt'), 'w') as f: - tasksizes_sorted = sorted(tasksizes.items(), key=operator.itemgetter(1, 0), reverse=True) + tasksizes_sorted = sorted(extra_info['tasksizes'].items(), key=operator.itemgetter(1, 0), reverse=True) for task, size in tasksizes_sorted: f.write('%10d KiB %s\n' % (size, task)) }
meta/lib/oe/sdk.py +19 -0
@@ -372,5 +372,24 @@ def populate_sdk(d, manifest_dir=None): os.environ.clear() os.environ.update(env_bkp) +def get_extra_sdkinfo(sstate_dir): + """ + This function is going to be used for generating the target and host manifest files packages of eSDK. + """ + import math + + extra_info = {} + extra_info['tasksizes'] = {} + extra_info['filesizes'] = {} + for root, _, files in os.walk(sstate_dir): + for fn in files: + if fn.endswith('.tgz'): + fsize = int(math.ceil(float(os.path.getsize(os.path.join(root, fn))) / 1024)) + task = fn.rsplit(':',1)[1].split('_',1)[1].split(',')[0] + origtotal = extra_info['tasksizes'].get(task, 0) + extra_info['tasksizes'][task] = origtotal + fsize + extra_info['filesizes'][fn] = fsize + return extra_info + if __name__ == "__main__": pass
Signature · 1 line
2.1.4
PATCH 2/4 meta/classes/populate_sdk: Adds support for generating eSDK manifest files
In reply to Aníbal LimónFrom: Francisco Pedraza <[email protected]>
Add get_extra_sdk_info to reuse code in buildhistory
The functionalities to generate SDK and eSDK manifest files are different, the SDK comes from package information and the eSDK comes from sstate artifacts. Only execute write_sdk_{host, target}_manifest when is on populate_sdk class.
Adds new functions write_sdk{host, target}_ext_manifest to execute on postprocess in populate_sdk_ext because at the end we have all the sstate artifacts to generate the manifest.
[YOCTO #9038]
--- meta/classes/buildhistory.bbclass | 1 - meta/classes/populate_sdk_base.bbclass | 44 +++++++++++++++++++--------------- meta/classes/populate_sdk_ext.bbclass | 33 +++++++++++++++++++++++++ 3 files changed, 58 insertions(+), 20 deletions(-)
meta/classes/buildhistory.bbclass +0 -1
@@ -581,7 +581,6 @@ END python buildhistory_get_extra_sdkinfo() { import operator - import math from oe.sdk import get_extra_sdkinfo sstate_dir = d.expand('${SDK_OUTPUT}/${SDKPATH}/sstate-cache')
meta/classes/populate_sdk_base.bbclass +25 -19
60 lines not on this page · raw message
meta/classes/populate_sdk_ext.bbclass +33 -0
@@ -83,6 +83,39 @@ TOOLCHAIN_OUTPUTNAME_task-populate-sdk-ext = "${TOOLCHAINEXT_OUTPUTNAME}" SDK_EXT_TARGET_MANIFEST = "${SDK_DEPLOY}/${TOOLCHAINEXT_OUTPUTNAME}.target.manifest" SDK_EXT_HOST_MANIFEST = "${SDK_DEPLOY}/${TOOLCHAINEXT_OUTPUTNAME}.host.manifest" +python write_target_sdk_ext_manifest () { + from oe.sdk import get_extra_sdkinfo + sstate_dir = d.expand('${SDK_OUTPUT}/${SDKPATH}/sstate-cache') + extra_info = get_extra_sdkinfo(sstate_dir) + + target = d.getVar('TARGET_SYS') + target_multimach = d.getVar('MULTIMACH_TARGET_SYS') + real_target_multimach = d.getVar('REAL_MULTIMACH_TARGET_SYS') + + pkgs = {} + with open(d.getVar('SDK_EXT_TARGET_MANIFEST'), 'w') as f: + for fn in extra_info['filesizes']: + info = fn.split(':') + if info[2] in (target, target_multimach, real_target_multimach) \ + or info[5] == 'allarch': + if not info[1] in pkgs: + f.write("%s %s %s\n" % (info[1], info[2], info[3])) + pkgs[info[1]] = {} +} +python write_host_sdk_ext_manifest () { + from oe.sdk import get_extra_sdkinfo + sstate_dir = d.expand('${SDK_OUTPUT}/${SDKPATH}/sstate-cache') + extra_info = get_extra_sdkinfo(sstate_dir) + host = d.getVar('BUILD_SYS') + with open(d.getVar('SDK_EXT_HOST_MANIFEST'), 'w') as f: + for fn in extra_info['filesizes']: + info = fn.split(':') + if info[2] == host: + f.write("%s %s %s\n" % (info[1], info[2], info[3])) +} + +SDK_POSTPROCESS_COMMAND_append_task-populate-sdk-ext = "write_target_sdk_ext_manifest; write_host_sdk_ext_manifest; " + SDK_TITLE_task-populate-sdk-ext = "${@d.getVar('DISTRO_NAME') or d.getVar('DISTRO')} Extensible SDK" def clean_esdk_builddir(d, sdkbasepath):
Signature · 1 line
2.1.4
PATCH 3/4 oeqa/sdk/cases: Added validation for SDK compatibility tests with eSDK
In reply to Aníbal LimónFrom: Francisco Pedraza <[email protected]>
The manifests for eSDK are generated using shared states so there is a need to validate to different "packages names" into the test cases.
For example for perl:
SDK provides nativesdk-perl
eSDK provides perl-native
[YOCTO #9090]
--- meta/lib/oeqa/sdk/cases/buildiptables.py | 3 ++- meta/lib/oeqa/sdk/cases/gcc.py | 3 ++- meta/lib/oeqa/sdk/cases/perl.py | 3 ++- meta/lib/oeqa/sdk/cases/python.py | 3 ++- 4 files changed, 8 insertions(+), 4 deletions(-)
meta/lib/oeqa/sdk/cases/buildiptables.py +2 -1
@@ -17,7 +17,8 @@ class BuildIptablesTest(OESDKTestCase): machine = self.td.get("MACHINE") - if not self.tc.hasHostPackage("packagegroup-cross-canadian-%s" % machine): + if not (self.tc.hasTargetPackage("packagegroup-cross-canadian-%s" % machine) or + self.tc.hasTargetPackage("gcc")): raise unittest.SkipTest("SDK doesn't contain a cross-canadian toolchain") def test_iptables(self):
meta/lib/oeqa/sdk/cases/gcc.py +2 -1
@@ -18,7 +18,8 @@ class GccCompileTest(OESDKTestCase): def setUp(self): machine = self.td.get("MACHINE") - if not self.tc.hasHostPackage("packagegroup-cross-canadian-%s" % machine): + if not (self.tc.hasTargetPackage("packagegroup-cross-canadian-%s" % machine) or + self.tc.hasTargetPackage("gcc")): raise unittest.SkipTest("GccCompileTest class: SDK doesn't contain a cross-canadian toolchain") def test_gcc_compile(self):
meta/lib/oeqa/sdk/cases/perl.py +2 -1
@@ -8,7 +8,8 @@ from oeqa.sdk.case import OESDKTestCase class PerlTest(OESDKTestCase): @classmethod def setUpClass(self): - if not self.tc.hasHostPackage("nativesdk-perl"): + if not (self.tc.hasHostPackage("nativesdk-perl") or + self.tc.hasHostPackage("perl-native")): raise unittest.SkipTest("No perl package in the SDK") for f in ['test.pl']:
meta/lib/oeqa/sdk/cases/python.py +2 -1
@@ -8,7 +8,8 @@ from oeqa.sdk.case import OESDKTestCase class PythonTest(OESDKTestCase): @classmethod def setUpClass(self): - if not self.tc.hasHostPackage("nativesdk-python"): + if not (self.tc.hasHostPackage("nativesdk-python") or + self.tc.hasHostPackage("python-native")): raise unittest.SkipTest("No python package in the SDK") for f in ['test.py']:
Signature · 1 line
2.1.4
PATCH 4/4 oeqa/sdk/cases: Fix skip of buildgcalculator test
In reply to Aníbal LimónThe tc.hasTargetPackage uses a re.search to see if gtk+3 is on the manifest but + in regex means 1 or more causing the test to be skipped.
--- meta/lib/oeqa/sdk/cases/buildgalculator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
meta/lib/oeqa/sdk/cases/buildgalculator.py +1 -1
@@ -8,7 +8,7 @@ class GalculatorTest(OESDKTestCase): @classmethod def setUpClass(self): - if not (self.tc.hasTargetPackage("gtk+3") or\ + if not (self.tc.hasTargetPackage("gtk\+3") or\ self.tc.hasTargetPackage("libgtk-3.0")): raise unittest.SkipTest("GalculatorTest class: SDK don't support gtk+3")
Signature · 1 line
2.1.4