diff --git a/scripts/pylib/twister/twister/coverage.py b/scripts/pylib/twister/twister/coverage.py index 200e421e821..133dcff9123 100644 --- a/scripts/pylib/twister/twister/coverage.py +++ b/scripts/pylib/twister/twister/coverage.py @@ -207,3 +207,29 @@ class Gcovr(CoverageTool): "--html-details"] + tracefiles + ["-o", os.path.join(subdir, "index.html")], stdout=coveragelog) + + + +def run_coverage(testplan, options): + if not options.gcov_tool: + use_system_gcov = False + + for plat in options.coverage_platform: + ts_plat = testplan.get_platform(plat) + if ts_plat and (ts_plat.type in {"native", "unit"}): + use_system_gcov = True + + if use_system_gcov or "ZEPHYR_SDK_INSTALL_DIR" not in os.environ: + options.gcov_tool = "gcov" + else: + options.gcov_tool = os.path.join(os.environ["ZEPHYR_SDK_INSTALL_DIR"], + "x86_64-zephyr-elf/bin/x86_64-zephyr-elf-gcov") + + logger.info("Generating coverage files...") + coverage_tool = CoverageTool.factory(options.coverage_tool) + coverage_tool.gcov_tool = options.gcov_tool + coverage_tool.base_dir = os.path.abspath(options.coverage_basedir) + coverage_tool.add_ignore_file('generated') + coverage_tool.add_ignore_directory('tests') + coverage_tool.add_ignore_directory('samples') + coverage_tool.generate(options.outdir) diff --git a/scripts/pylib/twister/twister/hardwaremap.py b/scripts/pylib/twister/twister/hardwaremap.py index 48cd68cffcc..3e81d1ea611 100644 --- a/scripts/pylib/twister/twister/hardwaremap.py +++ b/scripts/pylib/twister/twister/hardwaremap.py @@ -186,6 +186,18 @@ class HardwareMap: d.fixtures.extend(self.options.fixture) return 1 + + def summary(self, selected_platforms): + print("\nHardware distribution summary:\n") + table = [] + header = ['Board', 'ID', 'Counter'] + for d in self.duts: + if d.connected and d.platform in selected_platforms: + row = [d.platform, d.id, d.counter] + table.append(row) + print(tabulate(table, headers=header, tablefmt="github")) + + def add_device(self, serial, platform, pre_script, is_pty, baud=None): device = DUT(platform=platform, connected=True, pre_script=pre_script, serial_baud=baud) diff --git a/scripts/twister b/scripts/twister index 2cd8f3d71fc..e4f31295080 100755 --- a/scripts/twister +++ b/scripts/twister @@ -199,11 +199,10 @@ except ImportError: sys.path.insert(0, os.path.join(ZEPHYR_BASE, "scripts/pylib/twister")) from twister.testplan import TestPlan -from twister.runner import ExecutionCounter -from twister.enviornment import TwisterEnv, canonical_zephyr_base +from twister.enviornment import TwisterEnv from twister.reports import Reporting from twister.hardwaremap import HardwareMap -from twister.coverage import CoverageTool +from twister.coverage import run_coverage from twister.runner import TwisterRunner logger = logging.getLogger('twister') @@ -890,11 +889,12 @@ def main(): env.discover() hwm = HardwareMap(env) - env.hwm = hwm ret = hwm.discover() if ret == 0: return + env.hwm = hwm + tplan = TestPlan(options.board_root, options.testsuite_root, env, options.outdir) try: tplan.discover() @@ -977,38 +977,10 @@ def main(): report.summary(runner.results, options.disable_unrecognized_section_test, duration) if options.coverage: - if not options.gcov_tool: - use_system_gcov = False - - for plat in options.coverage_platform: - ts_plat = tplan.get_platform(plat) - if ts_plat and (ts_plat.type in {"native", "unit"}): - use_system_gcov = True - - if use_system_gcov or "ZEPHYR_SDK_INSTALL_DIR" not in os.environ: - options.gcov_tool = "gcov" - else: - options.gcov_tool = os.path.join(os.environ["ZEPHYR_SDK_INSTALL_DIR"], - "x86_64-zephyr-elf/bin/x86_64-zephyr-elf-gcov") - - logger.info("Generating coverage files...") - coverage_tool = CoverageTool.factory(options.coverage_tool) - coverage_tool.gcov_tool = options.gcov_tool - coverage_tool.base_dir = os.path.abspath(options.coverage_basedir) - coverage_tool.add_ignore_file('generated') - coverage_tool.add_ignore_directory('tests') - coverage_tool.add_ignore_directory('samples') - coverage_tool.generate(options.outdir) + run_coverage(tplan, options) if options.device_testing and not options.build_only: - print("\nHardware distribution summary:\n") - table = [] - header = ['Board', 'ID', 'Counter'] - for d in hwm.duts: - if d.connected and d.platform in tplan.selected_platforms: - row = [d.platform, d.id, d.counter] - table.append(row) - print(tabulate(table, headers=header, tablefmt="github")) + hwm.summary(tplan.selected_platforms) report.save_reports(options.report_name, options.report_suffix,