# This file is licensed under the Apache License v2.0 with LLVM Exceptions. # See https://llvm.org/LICENSE.txt for license information. # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception load("@bazel_skylib//rules:common_settings.bzl", "bool_flag") load("@bazel_skylib//rules:expand_template.bzl", "expand_template") load("@bazel_skylib//rules:native_binary.bzl", "native_binary") load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library") load("defs.bzl", "clang_tidy_library") package( default_visibility = ["//visibility:public"], features = ["layering_check"], ) licenses(["notice"]) # Include static analyzer checks in clang-tidy. Usage: # $ bazel build --@llvm-project//clang-tools-extra/clang-tidy:enable_static_analyzer=true //... # $ bazel build --@llvm-project//clang-tools-extra/clang-tidy:enable_static_analyzer=false //... bool_flag( name = "enable_static_analyzer", build_setting_default = True, ) config_setting( name = "static_analyzer_enabled", flag_values = { ":enable_static_analyzer": "true", }, ) expand_template( name = "config", out = "clang-tidy-config.h", substitutions = select({ ":static_analyzer_enabled": { "#cmakedefine01 CLANG_TIDY_ENABLE_STATIC_ANALYZER": "#define CLANG_TIDY_ENABLE_STATIC_ANALYZER 1", }, "//conditions:default": { "#cmakedefine01 CLANG_TIDY_ENABLE_STATIC_ANALYZER": "#define CLANG_TIDY_ENABLE_STATIC_ANALYZER 0", }, }), template = "clang-tidy-config.h.cmake", visibility = ["//visibility:private"], ) cc_binary( name = "confusable_table_builder", srcs = ["misc/ConfusableTable/BuildConfusableTable.cpp"], visibility = ["//visibility:private"], deps = ["//llvm:Support"], ) genrule( name = "confusables_inc", srcs = ["misc/ConfusableTable/confusables.txt"], outs = ["Confusables.inc"], cmd = "$(location :confusable_table_builder) $(SRCS) $(OUTS)", tools = [":confusable_table_builder"], visibility = ["//visibility:private"], ) cc_library( name = "confusables", hdrs = [":confusables_inc"], include_prefix = ".", ) clang_tidy_library( name = "lib", srcs = glob(["*.cpp"]) + [":config"], hdrs = glob(["*.h"]), includes = ["."], deps = [ "//clang:analysis", "//clang:format", "//clang:frontend_rewrite", "//clang:rewrite", "//clang:sema", "//clang:serialization", "//clang:tooling", "//clang:tooling_core", ] + select({ ":static_analyzer_enabled": [ "//clang:static_analyzer_core", "//clang:static_analyzer_frontend", ], "//conditions:default": [], }), ) clang_tidy_library( name = "misc", deps = [ ":confusables", ":lib", ":utils", "//clang:analysis", "//clang:format", "//clang:serialization", "//clang:tooling", "//clang:tooling_core", "//clang:tooling_inclusions", "//clang-tools-extra/include-cleaner:include_cleaner", ], ) clang_tidy_library( name = "portability", deps = [ ":lib", "//llvm:TargetParser", ], ) clang_tidy_library( name = "utils", deps = [ ":lib", "//clang:analysis", "//clang:sema", "//clang:tooling", "//clang:transformer", ], ) clang_tidy_library( name = "readability", deps = [ ":lib", ":utils", "//clang:analysis", "//clang:tooling", ], ) clang_tidy_library( name = "google", deps = [ ":lib", ":readability", ":utils", ], ) clang_tidy_library( name = "fuchsia", deps = [ ":google", ":lib", ], ) clang_tidy_library( name = "llvm", deps = [ ":lib", ":readability", ":utils", "//clang:tooling", ], ) clang_tidy_library( name = "llvmlibc", deps = [ ":lib", ":portability", ":utils", ], ) clang_tidy_library( name = "abseil", deps = [ ":lib", ":utils", "//clang:tooling", "//clang:transformer", ], ) clang_tidy_library( name = "altera", deps = [":lib"], ) clang_tidy_library( name = "android", deps = [ ":lib", ":utils", ], ) clang_tidy_library( name = "boost", deps = [":lib"], ) clang_tidy_library( name = "concurrency", deps = [":lib"], ) clang_tidy_library( name = "darwin", deps = [":lib"], ) clang_tidy_library( name = "linuxkernel", deps = [":lib"], ) clang_tidy_library( name = "modernize", deps = [ ":lib", ":utils", "//clang:tooling", ], ) clang_tidy_library( name = "mpi", deps = [ ":lib", "//clang:static_analyzer_checkers", "//clang:static_analyzer_core", "//clang:static_analyzer_frontend", "//clang:tooling", ], ) clang_tidy_library( name = "objc", deps = [ ":lib", ":utils", ], ) clang_tidy_library( name = "openmp", deps = [ ":lib", ":utils", ], ) clang_tidy_library( name = "zircon", deps = [ ":lib", ":utils", ], ) clang_tidy_library( name = "cppcoreguidelines", deps = [ ":lib", ":misc", ":modernize", ":performance", ":readability", ":utils", "//clang:analysis", ], ) clang_tidy_library( name = "bugprone", deps = [ ":cppcoreguidelines", ":lib", ":utils", "//clang:analysis", "//clang:tooling", "//clang:transformer", ], ) clang_tidy_library( name = "performance", deps = [ ":lib", ":utils", "//clang:analysis", "//clang:tooling", ], ) clang_tidy_library( name = "cert", deps = [ ":bugprone", ":concurrency", ":google", ":lib", ":misc", ":performance", ":readability", ":utils", ], ) clang_tidy_library( name = "hicpp", deps = [ ":bugprone", ":cppcoreguidelines", ":google", ":lib", ":misc", ":modernize", ":performance", ":readability", ], ) clang_tidy_library( name = "plugin", deps = [":lib"], ) CHECKS = [ ":abseil", ":altera", ":android", ":boost", ":bugprone", ":cert", ":concurrency", ":cppcoreguidelines", ":darwin", ":fuchsia", ":google", ":hicpp", ":linuxkernel", ":llvm", ":llvmlibc", ":misc", ":modernize", ":objc", ":openmp", ":performance", ":portability", ":readability", ":zircon", ] + select({ ":static_analyzer_enabled": [":mpi"], "//conditions:default": [], }) cc_library( name = "tool", srcs = ["tool/ClangTidyMain.cpp"], hdrs = ["tool/ClangTidyMain.h"], deps = CHECKS + [ ":lib", ":utils", "//clang:tooling", "//llvm:Support", ], ) cc_binary( name = "clang-tidy", srcs = ["tool/ClangTidyToolMain.cpp"], stamp = 0, deps = [":tool"], ) native_binary( name = "run-clang-tidy", src = "tool/run-clang-tidy.py", out = "run-clang-tidy", data = [":clang-tidy"], )