From 3966d30a4f1f90339efb0f0c8ca7519ec9d9f5b0 Mon Sep 17 00:00:00 2001 From: Anas Nashif Date: Sat, 10 Jun 2023 00:55:21 +0000 Subject: [PATCH] twister: support filtering by vendor Add a new option --vendor which allows filtering by vendors tracked in the board/platform yaml file. The vendor string is compatible with DTS and is what we have in dts/bindings/vendor-prefixes.txt. Providing multiple vendors is also supported. Signed-off-by: Anas Nashif --- scripts/pylib/twister/twisterlib/environment.py | 4 ++++ scripts/pylib/twister/twisterlib/platform.py | 4 ++++ scripts/pylib/twister/twisterlib/testplan.py | 15 ++++++++++++--- scripts/schemas/twister/platform-schema.yaml | 4 ++++ 4 files changed, 24 insertions(+), 3 deletions(-) diff --git a/scripts/pylib/twister/twisterlib/environment.py b/scripts/pylib/twister/twisterlib/environment.py index 160233a66fe..0517e8ce2b7 100644 --- a/scripts/pylib/twister/twisterlib/environment.py +++ b/scripts/pylib/twister/twisterlib/environment.py @@ -481,6 +481,10 @@ structure in the main Zephyr tree: boards///""") that support this feature (currently only Linux). """) + parser.add_argument( + "--vendor", action="append", default=[], + help="Vendor filter for testing") + parser.add_argument( "-p", "--platform", action="append", default=[], help="Platform filter for testing. This option may be used multiple " diff --git a/scripts/pylib/twister/twisterlib/platform.py b/scripts/pylib/twister/twisterlib/platform.py index fbbd10523b1..f3773ef4c67 100644 --- a/scripts/pylib/twister/twisterlib/platform.py +++ b/scripts/pylib/twister/twisterlib/platform.py @@ -36,6 +36,8 @@ class Platform: self.supported = set() self.arch = "" + self.vendor = "" + self.tier = -1 self.type = "na" self.simulation = "na" self.simulation_exec = None @@ -67,6 +69,8 @@ class Platform: self.supported.add(item) self.arch = data['arch'] + self.vendor = data.get('vendor', '') + self.tier = data.get("tier", -1) self.type = data.get('type', "na") self.simulation = data.get('simulation', "na") self.simulation_exec = data.get('simulation_exec') diff --git a/scripts/pylib/twister/twisterlib/testplan.py b/scripts/pylib/twister/twisterlib/testplan.py index 1a524a67019..bbe86c6fc64 100755 --- a/scripts/pylib/twister/twisterlib/testplan.py +++ b/scripts/pylib/twister/twisterlib/testplan.py @@ -623,6 +623,7 @@ class TestPlan: toolchain = self.env.toolchain platform_filter = self.options.platform + vendor_filter = self.options.vendor exclude_platform = self.options.exclude_platform testsuite_filter = self.run_individual_testsuite arch_filter = self.options.arch @@ -637,29 +638,35 @@ class TestPlan: emu_filter = self.options.emulation_only logger.debug("platform filter: " + str(platform_filter)) + logger.debug(" vendor filter: " + str(vendor_filter)) logger.debug(" arch_filter: " + str(arch_filter)) logger.debug(" tag_filter: " + str(tag_filter)) logger.debug(" exclude_tag: " + str(exclude_tag)) default_platforms = False + vendor_platforms = False emulation_platforms = False if all_filter: logger.info("Selecting all possible platforms per test case") # When --all used, any --platform arguments ignored platform_filter = [] - elif not platform_filter and not emu_filter: + elif not platform_filter and not emu_filter and not vendor_filter: logger.info("Selecting default platforms per test case") default_platforms = True elif emu_filter: logger.info("Selecting emulation platforms per test case") emulation_platforms = True + elif vendor_filter: + vendor_platforms = True if platform_filter: self.verify_platforms_existence(platform_filter, f"platform_filter") platforms = list(filter(lambda p: p.name in platform_filter, self.platforms)) elif emu_filter: platforms = list(filter(lambda p: p.simulation != 'na', self.platforms)) + elif vendor_filter: + platforms = list(filter(lambda p: p.vendor in vendor_filter, self.platforms)) elif arch_filter: platforms = list(filter(lambda p: p.arch in arch_filter, self.platforms)) elif default_platforms: @@ -706,8 +713,6 @@ class TestPlan: if not c: platform_scope = list(filter(lambda item: item.name in ts.platform_allow, \ self.platforms)) - - # list of instances per testsuite, aka configurations. instance_list = [] for plat in platform_scope: @@ -935,6 +940,10 @@ class TestPlan: self.add_instances(instance_list) for instance in list(filter(lambda inst: not inst.platform.simulation != 'na', instance_list)): instance.add_filter("Not an emulated platform", Filters.CMD_LINE) + elif vendor_platforms: + self.add_instances(instance_list) + for instance in list(filter(lambda inst: not inst.platform.vendor in vendor_filter, instance_list)): + instance.add_filter("Not a selected vendor platform", Filters.CMD_LINE) else: self.add_instances(instance_list) diff --git a/scripts/schemas/twister/platform-schema.yaml b/scripts/schemas/twister/platform-schema.yaml index 6524e5f8769..f1ba2d88748 100644 --- a/scripts/schemas/twister/platform-schema.yaml +++ b/scripts/schemas/twister/platform-schema.yaml @@ -41,6 +41,10 @@ mapping: type: str "arch": type: str + "vendor": + type: str + "tier": + type: int "toolchain": type: seq seq: