Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions src/clang.bzl
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
load("@bazel_tools//tools/build_defs/cc:action_names.bzl", "ACTION_NAMES")
load("@bazel_tools//tools/cpp:toolchain_utils.bzl", "find_cpp_toolchain")
load(
"@default_codechecker_tools//:defs.bzl",
"CCACHE_DISABLE"
)

CLANG_TIDY_WRAPPER_SCRIPT = """#!/usr/bin/env bash
CLANG_TIDY=$1
Expand Down Expand Up @@ -176,12 +180,19 @@ def _run_analyzer(
direct = input_files,
transitive = [compilation_context.headers],
)

# Have it None by default to avoid overwriting use_default_shell_env
env_var = {}
if CCACHE_DISABLE == "1":
env_var["CCACHE_DISABLE"] = CCACHE_DISABLE

ctx.actions.run(
inputs = inputs,
outputs = [outfile],
executable = wrapper,
arguments = [args],
mnemonic = "ClangAnalyzer",
env = env_var,
use_default_shell_env = True,
progress_message = "Run clang -analyze on {}".format(infile.short_path),
)
Expand Down
10 changes: 10 additions & 0 deletions src/clang_ctu.bzl
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
load("@bazel_tools//tools/build_defs/cc:action_names.bzl", "ACTION_NAMES")
load("@bazel_tools//tools/cpp:toolchain_utils.bzl", "find_cpp_toolchain")
load(
"@default_codechecker_tools//:defs.bzl",
"CCACHE_DISABLE"
)

CLANG_CTU_WRAPPER_SCRIPT = """#!/usr/bin/env bash
#set -x
Expand Down Expand Up @@ -99,13 +103,19 @@ def _run_clang_ctu(
args.add(src.path)
args.add_all(arguments)

# Have it None by default to avoid overwriting use_default_shell_env
env_var = None
if CCACHE_DISABLE == 1:
env_var = {"CCACHE_DISABLE": CCACHE_DISABLE}

# Action to run CodeChecker for a file
ctx.actions.run(
inputs = inputs,
outputs = outputs,
executable = wrapper,
arguments = [args],
mnemonic = "ClangCTU",
env = env_var,
use_default_shell_env = True,
progress_message = "clang -analyze +CTU {}".format(src.short_path),
)
Expand Down
8 changes: 8 additions & 0 deletions src/codechecker.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ load(
load(
"@default_codechecker_tools//:defs.bzl",
"CODECHECKER_BIN_PATH",
"CCACHE_DISABLE"
)
load(
"per_file.bzl",
Expand Down Expand Up @@ -102,6 +103,11 @@ def _codechecker_impl(ctx):
if compile_commands != ctx.outputs.compile_commands:
fail("Seems compile_commands.json file is incorrect!")

# Have it None by default to avoid overwriting use_default_shell_env
env_var = {}
if CCACHE_DISABLE == "1":
env_var["CCACHE_DISABLE"] = CCACHE_DISABLE

# Convert flacc calls to clang in compile_commands.json
# and save to codechecker_commands.json
ctx.actions.run(
Expand All @@ -115,6 +121,7 @@ def _codechecker_impl(ctx):
],
mnemonic = "CodeCheckerConvertFlaccToClang",
progress_message = "Filtering %s" % str(ctx.label),
env = env_var,
# use_default_shell_env = True,
)

Expand Down Expand Up @@ -199,6 +206,7 @@ def _codechecker_impl(ctx):
arguments = [],
mnemonic = "CodeChecker",
progress_message = "CodeChecker %s" % str(ctx.label),
env = env_var,
# use_default_shell_env = True,
)

Expand Down
10 changes: 10 additions & 0 deletions src/per_file.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@

load("@bazel_tools//tools/build_defs/cc:action_names.bzl", "ACTION_NAMES")
load("@bazel_tools//tools/cpp:toolchain_utils.bzl", "find_cpp_toolchain")
load(
"@default_codechecker_tools//:defs.bzl",
"CCACHE_DISABLE"
)

CODE_CHECKER_WRAPPER_SCRIPT = """#!/usr/bin/env bash
#set -x
Expand Down Expand Up @@ -94,13 +98,19 @@ def _run_code_checker(
args.add("--output=" + data_dir)
args.add("--file=*/" + src.path)

# Have it None by default to avoid overwriting use_default_shell_env
env_var = {}
if CCACHE_DISABLE == "1":
env_var["CCACHE_DISABLE"] = CCACHE_DISABLE

# Action to run CodeChecker for a file
ctx.actions.run(
inputs = inputs,
outputs = outputs,
executable = wrapper,
arguments = [args],
mnemonic = "CodeChecker",
env = env_var,
use_default_shell_env = True,
progress_message = "CodeChecker analyze {}".format(src.short_path),
)
Expand Down
41 changes: 40 additions & 1 deletion src/tools.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,46 @@ def _codechecker_local_repository_impl(repository_ctx):
if not codechecker_bin_path:
fail("ERROR! CodeChecker is not detected")

defs = "CODECHECKER_BIN_PATH = '{}'\n".format(codechecker_bin_path)
# In future versions use repository_ctx.getenv()
ccache_disable = repository_ctx.os.environ.get("CCACHE_DISABLE", 0)

analyzers = repository_ctx.execute([codechecker_bin_path, "analyzers"])

parsed_analyzers = {}

lines = analyzers.stdout.strip().split('\n')
for line in lines:
parts_dirty = line.split(" ")
parts = []
for fragment in parts_dirty:
if fragment != "":
parts.append(fragment)
tool_name = parts[0]
if 'NOT' not in parts:
path = parts[1]
version = parts[2]
parsed_analyzers[tool_name] = {'path': path, 'version': version}
bash_bin = repository_ctx.which("bash")
clang_ccache = repository_ctx.execute(
[
bash_bin, "-c",
"{} -xc -c - --ccache-skip </dev/null".format(
parsed_analyzers["clangsa"]["path"])]
)
gcc_ccache = repository_ctx.execute(
[
bash_bin, "-c",
"{} -xc -c - --ccache-skip </dev/null".format(
parsed_analyzers["gcc"]["path"]
)
]
)
if (clang_ccache.return_code == 0 or gcc_ccache.return_code == 0) and \
ccache_disable != "1":
fail("ERROR! ccache detected")

defs = "CODECHECKER_BIN_PATH = '{}'\n".format(codechecker_bin_path) + \
"CCACHE_DISABLE = '{}'\n".format(ccache_disable)
repository_ctx.file(
repository_ctx.path("defs.bzl"),
content = defs,
Expand Down