2017-10-20 17 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ファイル内にありますが、私たちがすでに持っているすべての巨大なルールについては、実際にはそうすることはできません。すべてのルールまたはこれに類するものにグローバル依存関係を追加する方法はありますか?

+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を追加します。

最初のファイルは、第二のファイルが欠落している依存関係と3番目のファイルは、他のすべてのルールに「blacklist.txt」を公開追加する新しいcc_libraryを定義して、すべてのファイルの初めにcc_libraryを輸入しています。最後の空のファイルは、cc.bzlファイルをロードするために必要なBazel用のパッケージを定義することです。

関連する問題