From f6462a3a8c616a0c550f1ff5b5280ce02e90b5fc Mon Sep 17 00:00:00 2001 From: Anas Nashif Date: Sun, 29 Mar 2020 19:02:51 -0400 Subject: [PATCH] sanitycheck: get rid of global VERBOSE Do not declare VERBOSE as global, instead pass verbosity as argument. Also get rid of options as global and fix coverage class to not use global option variable. Signed-off-by: Anas Nashif --- scripts/sanity_chk/sanitylib.py | 46 +++++++++++++++++---------------- scripts/sanitycheck | 12 +++------ 2 files changed, 28 insertions(+), 30 deletions(-) diff --git a/scripts/sanity_chk/sanitylib.py b/scripts/sanity_chk/sanitylib.py index 9bf0f24963f..8f7303aa30d 100644 --- a/scripts/sanity_chk/sanitylib.py +++ b/scripts/sanity_chk/sanitylib.py @@ -64,13 +64,9 @@ sys.path.insert(0, os.path.join(ZEPHYR_BASE, "scripts/")) from sanity_chk import scl from sanity_chk import expr_parser -VERBOSE = 0 - logger = logging.getLogger('sanitycheck') logger.setLevel(logging.DEBUG) - -options = None pipeline = queue.LifoQueue() class CMakeCacheEntry: @@ -1807,6 +1803,7 @@ class ProjectBuilder(FilterBuilder): self.west_runner = kwargs.get('west_runner', None) self.generator = kwargs.get('generator', None) self.generator_cmd = kwargs.get('generator_cmd', None) + self.verbose = kwargs.get('verbose', None) @staticmethod def log_info(filename, inline_logs): @@ -1977,7 +1974,7 @@ class ProjectBuilder(FilterBuilder): if instance.status in ["failed", "timeout"]: self.suite.total_failed += 1 - if VERBOSE: + if self.verbose: status = Fore.RED + "FAILED " + Fore.RESET + instance.reason else: print("") @@ -1988,7 +1985,7 @@ class ProjectBuilder(FilterBuilder): Fore.RED, Fore.RESET, instance.reason)) - if not VERBOSE: + if not self.verbose: self.log_info_file(self.inline_logs) elif instance.status == "skipped": self.suite.total_skipped += 1 @@ -1996,7 +1993,7 @@ class ProjectBuilder(FilterBuilder): else: status = Fore.GREEN + "PASSED" + Fore.RESET - if VERBOSE: + if self.verbose: if self.cmake_only: more_info = "cmake" elif instance.status == "skipped": @@ -2746,7 +2743,8 @@ class TestSuite: west_flash=self.west_flash, west_runner=self.west_runner, generator=self.generator, - generator_cmd=self.generator_cmd + generator_cmd=self.generator_cmd, + verbose=self.verbose ) future_to_test[executor.submit(pb.process, message)] = test.name @@ -3011,20 +3009,25 @@ class CoverageTool: """ def __init__(self): - self.gcov_tool = options.gcov_tool + self.gcov_tool = None + self.base_dir = None @staticmethod def factory(tool): if tool == 'lcov': - return Lcov() - if tool == 'gcovr': - return Gcovr() - logger.error("Unsupported coverage tool specified: {}".format(tool)) + t = Lcov() + elif tool == 'gcovr': + t = Lcov() + else: + logger.error("Unsupported coverage tool specified: {}".format(tool)) + return None + + t.gcov_tool = tool + return t @staticmethod def retrieve_gcov_data(intput_file): - if VERBOSE: - logger.debug("Working on %s" % intput_file) + logger.debug("Working on %s" % intput_file) extracted_coverage_info = {} capture_data = False capture_complete = False @@ -3057,8 +3060,7 @@ class CoverageTool: @staticmethod def create_gcda_files(extracted_coverage_info): - if VERBOSE: - logger.debug("Generating gcda files") + logger.debug("Generating gcda files") for filename, hexdump_val in extracted_coverage_info.items(): # if kobject_hash is given for coverage gcovr fails # hence skipping it problem only in gcovr v4.1 @@ -3113,14 +3115,14 @@ class Lcov(CoverageTool): # We want to remove tests/* and tests/ztest/test/* but save tests/ztest subprocess.call(["lcov", "--gcov-tool", self.gcov_tool, "--extract", coveragefile, - os.path.join(ZEPHYR_BASE, "tests", "ztest", "*"), + os.path.join(self.base_dir, "tests", "ztest", "*"), "--output-file", ztestfile, "--rc", "lcov_branch_coverage=1"], stdout=coveragelog) if os.path.exists(ztestfile) and os.path.getsize(ztestfile) > 0: subprocess.call(["lcov", "--gcov-tool", self.gcov_tool, "--remove", ztestfile, - os.path.join(ZEPHYR_BASE, "tests/ztest/test/*"), + os.path.join(self.base_dir, "tests/ztest/test/*"), "--output-file", ztestfile, "--rc", "lcov_branch_coverage=1"], stdout=coveragelog) @@ -3168,12 +3170,12 @@ class Gcovr(CoverageTool): excludes = Gcovr._interleave_list("-e", self.ignores) # We want to remove tests/* and tests/ztest/test/* but save tests/ztest - subprocess.call(["gcovr", "-r", ZEPHYR_BASE, "--gcov-executable", + subprocess.call(["gcovr", "-r", self.base_dir, "--gcov-executable", self.gcov_tool, "-e", "tests/*"] + excludes + ["--json", "-o", coveragefile, outdir], stdout=coveragelog) - subprocess.call(["gcovr", "-r", ZEPHYR_BASE, "--gcov-executable", + subprocess.call(["gcovr", "-r", self.base_dir, "--gcov-executable", self.gcov_tool, "-f", "tests/ztest", "-e", "tests/ztest/test/*", "--json", "-o", ztestfile, outdir], stdout=coveragelog) @@ -3188,7 +3190,7 @@ class Gcovr(CoverageTool): tracefiles = self._interleave_list("--add-tracefile", files) - return subprocess.call(["gcovr", "-r", ZEPHYR_BASE, "--html", + return subprocess.call(["gcovr", "-r", self.base_dir, "--html", "--html-details"] + tracefiles + ["-o", os.path.join(subdir, "index.html")], stdout=coveragelog) diff --git a/scripts/sanitycheck b/scripts/sanitycheck index c6d27da0482..ba071e73a75 100755 --- a/scripts/sanitycheck +++ b/scripts/sanitycheck @@ -195,13 +195,9 @@ sys.path.insert(0, os.path.join(ZEPHYR_BASE, "scripts/sanity_chk")) from sanitylib import HardwareMap, TestSuite, SizeCalculator, CoverageTool -VERBOSE = 0 - logger = logging.getLogger('sanitycheck') logger.setLevel(logging.DEBUG) -options = None - def size_report(sc): logger.info(sc.filename) logger.info("SECTION NAME VMA LMA SIZE HEX SZ TYPE") @@ -635,8 +631,6 @@ structure in the main Zephyr tree: boards///""") def main(): start_time = time.time() - global VERBOSE - global options options = parse_arguments() @@ -669,7 +663,7 @@ def main(): # create console handler with a higher log level ch = logging.StreamHandler() - VERBOSE += options.verbose + VERBOSE = options.verbose if VERBOSE > 1: ch.setLevel(logging.DEBUG) else: @@ -757,6 +751,7 @@ def main(): suite.extra_args = options.extra_args suite.west_flash = options.west_flash suite.west_runner = options.west_runner + suite.verbose = VERBOSE if options.ninja: suite.generator_cmd = "ninja" @@ -1018,7 +1013,7 @@ def main(): suite.summary(options.disable_unrecognized_section_test) if options.coverage: - if options.gcov_tool is None: + if not options.gcov_tools: use_system_gcov = False for plat in options.coverage_platform: @@ -1034,6 +1029,7 @@ def main(): logger.info("Generating coverage files...") coverage_tool = CoverageTool.factory(options.coverage_tool) + coverage_tool.base_dir = ZEPHYR_BASE coverage_tool.add_ignore_file('generated') coverage_tool.add_ignore_directory('tests') coverage_tool.add_ignore_directory('samples')