2017-10-20 2 views
0

Bazel을 사용하는 프로젝트에 ASAN sanitize를 추가하려고하는데 다음과 같은 문제가 있습니다. 나는 우리 bazel.rcBazel 규칙에 clang의 sanitize-blacklist에 대한 의존성이 없습니다.

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' 규칙의 정의는 어떻게 생겼습니까? 왜 gazillion 규칙에 blacklist.txt를 추가해야한다고 생각하십니까? –

+0

'// main : memory_leak'은 그 예입니다. 우리는 프로젝트에 수백 가지의 규칙을 가지고 있습니다. – user1767432

답변

1

일반적으로 C++ 도구 체인에는 종속성이 있어야하지만 자동 생성됩니다. memory/BUILD

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

:

tools/build_rules/prelude_bazel에서 :

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

tools/build_rules/cc.bzl에서

당신은 항상 기본 cc_library을 덮어 쓸 수있는 매크로를 만들 수 있습니다

exports_files(['blacklist.txt'])

또한 빈 파일 tools/build_rules/BUILD을 추가합니다.

첫 번째 파일은 모든 파일의 시작에 cc_library을 가져 오는, 두 번째 파일이 누락 된 의존성 세 번째 파일이 단지 다른 모든 규칙에 'blacklist.txt을'노출을 추가하는 새로운 cc_library을 정의한다. 마지막 빈 파일은 cc.bzl 파일을로드하는 데 필요한 Bazel 용 패키지를 정의하는 것입니다.

관련 문제