110 lines
3.7 KiB
Plaintext
110 lines
3.7 KiB
Plaintext
|
|
# -*- bazel-starlark -*-
|
||
|
|
# Copyright 2023 The Chromium Authors. All rights reserved.
|
||
|
|
# Use of this source code is governed by a BSD-style license that can be
|
||
|
|
# found in the LICENSE file.
|
||
|
|
"""Siso configuration for clang/linux."""
|
||
|
|
|
||
|
|
load("@builtin//path.star", "path")
|
||
|
|
load("@builtin//struct.star", "module")
|
||
|
|
|
||
|
|
__filegroups = {}
|
||
|
|
|
||
|
|
def __clang_compile_coverage(ctx, cmd):
|
||
|
|
# TODO(b/278225415): add better support for coverage build.
|
||
|
|
# The instrument file contains the list of files affected by a patch.
|
||
|
|
# Including this file to remote action input prevents cache hits.
|
||
|
|
inputs = []
|
||
|
|
deps_args = []
|
||
|
|
for i, arg in enumerate(cmd.args):
|
||
|
|
if i == 0:
|
||
|
|
continue
|
||
|
|
if arg == "../../build/toolchain/clang_code_coverage_wrapper.py":
|
||
|
|
continue
|
||
|
|
if arg.startswith("--files-to-instrument="):
|
||
|
|
inputs.append(ctx.fs.canonpath(arg.removeprefix("--files-to-instrument=")))
|
||
|
|
continue
|
||
|
|
if len(deps_args) == 0 and path.base(arg).find("clang") >= 0:
|
||
|
|
deps_args.append(arg)
|
||
|
|
continue
|
||
|
|
if deps_args:
|
||
|
|
if arg in ["-MD", "-MMD", "-c"]:
|
||
|
|
continue
|
||
|
|
if arg.startswith("-MF") or arg.startswith("-o"):
|
||
|
|
continue
|
||
|
|
if i > 1 and cmd.args[i - 1] in ["-MF", "-o"]:
|
||
|
|
continue
|
||
|
|
deps_args.append(arg)
|
||
|
|
if deps_args:
|
||
|
|
deps_args.append("-M")
|
||
|
|
ctx.actions.fix(
|
||
|
|
tool_inputs = cmd.tool_inputs + inputs,
|
||
|
|
deps_args = deps_args,
|
||
|
|
)
|
||
|
|
|
||
|
|
__handlers = {
|
||
|
|
"clang_compile_coverage": __clang_compile_coverage,
|
||
|
|
}
|
||
|
|
|
||
|
|
def __step_config(ctx, step_config):
|
||
|
|
step_config["input_deps"].update({
|
||
|
|
# clang++ is a symlink to clang
|
||
|
|
# but siso doesn't add symlink target automatically.
|
||
|
|
"third_party/llvm-build/Release+Asserts/bin/clang++": [
|
||
|
|
"third_party/llvm-build/Release+Asserts/bin/clang",
|
||
|
|
],
|
||
|
|
})
|
||
|
|
step_config["rules"].extend([
|
||
|
|
{
|
||
|
|
"name": "clang/cxx",
|
||
|
|
"action": "(.*_)?cxx",
|
||
|
|
"command_prefix": "../../third_party/llvm-build/Release+Asserts/bin/clang++ ",
|
||
|
|
"inputs": [
|
||
|
|
"third_party/llvm-build/Release+Asserts/bin/clang++",
|
||
|
|
],
|
||
|
|
"remote": True,
|
||
|
|
"canonicalize_dir": True,
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"name": "clang/cc",
|
||
|
|
"action": "(.*_)?cc",
|
||
|
|
"command_prefix": "../../third_party/llvm-build/Release+Asserts/bin/clang ",
|
||
|
|
"inputs": [
|
||
|
|
"third_party/llvm-build/Release+Asserts/bin/clang",
|
||
|
|
],
|
||
|
|
"remote": True,
|
||
|
|
"canonicalize_dir": True,
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"name": "clang-coverage/cxx",
|
||
|
|
"action": "(.*_)?cxx",
|
||
|
|
"command_prefix": "\"python3\" ../../build/toolchain/clang_code_coverage_wrapper.py",
|
||
|
|
"inputs": [
|
||
|
|
"build/toolchain/clang_code_coverage_wrapper.py",
|
||
|
|
"third_party/llvm-build/Release+Asserts/bin/clang++",
|
||
|
|
],
|
||
|
|
"handler": "clang_compile_coverage",
|
||
|
|
"remote": True,
|
||
|
|
"canonicalize_dir": True,
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"name": "clang-coverage/cc",
|
||
|
|
"action": "(.*_)?cc",
|
||
|
|
"command_prefix": "\"python3\" ../../build/toolchain/clang_code_coverage_wrapper.py",
|
||
|
|
"inputs": [
|
||
|
|
"build/toolchain/clang_code_coverage_wrapper.py",
|
||
|
|
"third_party/llvm-build/Release+Asserts/bin/clang",
|
||
|
|
],
|
||
|
|
"handler": "clang_compile_coverage",
|
||
|
|
"remote": True,
|
||
|
|
"canonicalize_dir": True,
|
||
|
|
},
|
||
|
|
])
|
||
|
|
return step_config
|
||
|
|
|
||
|
|
clang = module(
|
||
|
|
"clang",
|
||
|
|
step_config = __step_config,
|
||
|
|
filegroups = __filegroups,
|
||
|
|
handlers = __handlers,
|
||
|
|
)
|