Bazel规则缺少对clang的消毒黑名单的依赖

时间:2017-10-20 15:55:32

标签: clang bazel blacklist sanitizer address-sanitizer

我试图将ASAN清理添加到使用Bazel的项目中并遇到以下问题。我已经在bazel.rc

中添加了黑名单以进行消毒
build:asan --copt -fsanitize=address
build:asan --linkopt -fsanitize=address
build:asan --copt -fsanitize-blacklist=blacklist.txt

但是当我构建目标时,我会发现缺少依赖性错误

ERROR: memory/main/BUILD:1:1: undeclared inclusion(s) in rule '//main:memory_leak':
this rule is missing dependency declarations for the following files included by 'main/memory_leak.cpp':
  'memory/blacklist.txt'
Target //main:memory_leak failed to build

似乎应该将blacklist.txt添加到BUILD文件中的构建规则中,但是对于我们已经拥有的所有gazillion规则,我们无法真正做到这一点。有没有办法为所有规则或类似的东西添加全局依赖?

1 个答案:

答案 0 :(得分:1)

通常,C ++工具链应具有依赖性,但它是自动生成的。

您始终可以创建一个宏来覆盖默认的cc_library:

tools/build_rules/prelude_bazel

load('@//tools/build_rules:cc.bzl', 'cc_library')

tools/build_rules/cc.bzl中的

def cc_library(data=[], **kwargs): native.cc_library(data = data + ['//memory:blacklist.txt'], **kwargs)

memory/BUILD中的

exports_files(['blacklist.txt'])

还要添加一个空文件tools/build_rules/BUILD

第一个文件是在所有文件的开头导入cc_library,第二个文件定义了一个新的cc_library,它添加了缺少的依赖项,第三个文件只是暴露了'blacklist.txt '对所有其他规则。最后一个空文件只是为Bazel定义加载cc.bzl文件所需的包。