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:
parent
9e56d3be4b
commit
b24520ffa9
@ -33,6 +33,11 @@ def parse_arguments():
|
||||
path_help = "Path to the compilation database to parse"
|
||||
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()
|
||||
|
||||
|
||||
@ -45,14 +50,27 @@ def init(l, a):
|
||||
|
||||
def run_analysis(entry):
|
||||
# Disable all checks, then re-enable the ones we want
|
||||
checks = []
|
||||
checks.append("-checks=-*")
|
||||
if args.type == "clang-tidy":
|
||||
checks.append("linuxkernel-*")
|
||||
global args
|
||||
checks = None
|
||||
if args.checks:
|
||||
checks = args.checks.split(',')
|
||||
else:
|
||||
checks.append("clang-analyzer-*")
|
||||
checks.append("-clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling")
|
||||
p = subprocess.run(["clang-tidy", "-p", args.path, ",".join(checks), entry["file"]],
|
||||
checks = ["-*"]
|
||||
if args.type == "clang-tidy":
|
||||
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,
|
||||
stderr=subprocess.STDOUT,
|
||||
cwd=entry["directory"])
|
||||
|
Loading…
Reference in New Issue
Block a user