mirror of
https://github.com/YosysHQ/yosys
synced 2025-04-20 07:36:39 +00:00
62 lines
1.4 KiB
Python
Executable file
62 lines
1.4 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
|
|
import sys
|
|
|
|
from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter
|
|
from pathlib import Path
|
|
from subprocess import run
|
|
from concurrent.futures import ThreadPoolExecutor
|
|
|
|
def main() -> int:
|
|
parser = ArgumentParser(
|
|
formatter_class = ArgumentDefaultsHelpFormatter,
|
|
description = 'clang-tidy runner',
|
|
prog = 'run-clang-tidy.py',
|
|
)
|
|
|
|
parser.add_argument(
|
|
'--source-path', '-s',
|
|
required = True,
|
|
type = Path,
|
|
metavar = 'source_path',
|
|
help = 'Path to the source directory to run clang-tidy in'
|
|
)
|
|
|
|
parser.add_argument(
|
|
'--build-path', '-p',
|
|
required = True,
|
|
type = Path,
|
|
metavar = 'build_path',
|
|
help = 'Path to the build directory containing a compile_commands.json'
|
|
)
|
|
|
|
args = parser.parse_args()
|
|
|
|
def glob_files():
|
|
paths = {'backends', 'frontend', 'kernel', 'passes', 'techlibs'}
|
|
suffixes = {'cc', 'h'}
|
|
|
|
for path in paths:
|
|
for suffix in suffixes:
|
|
yield args.source_path.glob(f'{path}/**/*.{suffix}')
|
|
|
|
def gather_files():
|
|
for file_glob in glob_files():
|
|
for file in file_glob:
|
|
yield file
|
|
|
|
extra_args = ()
|
|
futures = []
|
|
|
|
with ThreadPoolExecutor() as pool:
|
|
for file in gather_files():
|
|
futures.append(pool.submit(
|
|
run, ['clang-tidy', *extra_args, '-p', args.build_path, file]
|
|
))
|
|
|
|
return max((future.result().returncode for future in futures))
|
|
|
|
|
|
if __name__ == '__main__':
|
|
sys.exit(main())
|