2017-10-20 149 views
0

我想添加ASAN卫生对我们的项目,它使用巴泽尔和坚持以下问题。我已经添加了sanitize方法黑名单中我们bazel.rcBazel规则缺失叮当的卫生黑名单依赖

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规则,我们无法做到这一点。有没有办法为所有规则添加全局依赖或类似的东西?

+0

'// main:memory_leak'规则的定义是怎样的?为什么你认为你必须添加blacklist.txt到gazillion规则? –

+0

'// main:memory_leak'就是一个例子。我们的项目中有数百个或规则。 – user1767432

回答

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”所有其他规则。最后一个空文件只是定义一个加载cc.bzl文件所需的Bazel包。