run-clang-tools: Add pass through checks and and header-filter arguments

Add a -checks argument to allow the checks passed to the clang-tool to
be set on the command line.

Add a pass through -header-filter option.

Don't run analysis on non-C or CPP files.

Signed-off-by: Ian Rogers <irogers@google.com>
Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>
Cc: Ravi Bangoria <ravi.bangoria@amd.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Yang Jihong <yangjihong1@huawei.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Huacai Chen <chenhuacai@kernel.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Nathan Chancellor <nathan@kernel.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: llvm@lists.linux.dev
Cc: Ming Wang <wangming01@loongson.cn>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Tom Rix <trix@redhat.com>
Cc: bpf@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Cc: linux-perf-users@vger.kernel.org
Link: https://lore.kernel.org/r/20231009183920.200859-4-irogers@google.com
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
This commit is contained in:
Ian Rogers 2023-10-09 11:39:04 -07:00 committed by Namhyung Kim
parent 9e56d3be4b
commit b24520ffa9

View File

@ -33,6 +33,11 @@ def parse_arguments():
path_help = "Path to the compilation database to parse" path_help = "Path to the compilation database to parse"
parser.add_argument("path", type=str, help=path_help) parser.add_argument("path", type=str, help=path_help)
checks_help = "Checks to pass to the analysis"
parser.add_argument("-checks", type=str, default=None, help=checks_help)
header_filter_help = "Pass the -header-filter value to the tool"
parser.add_argument("-header-filter", type=str, default=None, help=header_filter_help)
return parser.parse_args() return parser.parse_args()
@ -45,14 +50,27 @@ def init(l, a):
def run_analysis(entry): def run_analysis(entry):
# Disable all checks, then re-enable the ones we want # Disable all checks, then re-enable the ones we want
checks = [] global args
checks.append("-checks=-*") checks = None
if args.type == "clang-tidy": if args.checks:
checks.append("linuxkernel-*") checks = args.checks.split(',')
else: else:
checks.append("clang-analyzer-*") checks = ["-*"]
checks.append("-clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling") if args.type == "clang-tidy":
p = subprocess.run(["clang-tidy", "-p", args.path, ",".join(checks), entry["file"]], checks.append("linuxkernel-*")
else:
checks.append("clang-analyzer-*")
checks.append("-clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling")
file = entry["file"]
if not file.endswith(".c") and not file.endswith(".cpp"):
with lock:
print(f"Skipping non-C file: '{file}'", file=sys.stderr)
return
pargs = ["clang-tidy", "-p", args.path, "-checks=" + ",".join(checks)]
if args.header_filter:
pargs.append("-header-filter=" + args.header_filter)
pargs.append(file)
p = subprocess.run(pargs,
stdout=subprocess.PIPE, stdout=subprocess.PIPE,
stderr=subprocess.STDOUT, stderr=subprocess.STDOUT,
cwd=entry["directory"]) cwd=entry["directory"])