2017-10-20 3 views
0

Ich versuche ASAN zu sanieren unser Projekt, das Bazel verwendet und stecken mit dem folgenden Problem. Ich habe schwarze Liste für sanitize in unserem bazel.rc hinzugefügtBazel Regel fehlt Abhängigkeit für Clang Sanitize-Blacklist

build:asan --copt -fsanitize=address 
build:asan --linkopt -fsanitize=address 
build:asan --copt -fsanitize-blacklist=blacklist.txt 

aber wenn ich ein Ziel baue Ich erhalte fehlende Abhängigkeit Fehler

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 

Es scheint, dass blacklist.txt zu der Build-Regel hinzugefügt werden soll in BUILD-Datei, aber wir können das nicht für alle gazillion Regeln tun, die wir bereits haben. Gibt es eine Möglichkeit, eine globale Abhängigkeit für alle Regeln oder so etwas hinzuzufügen?

+0

Wie sieht die Definition der '// main: memory_leak'-Regel aus? Warum denkst du, du musst blacklist.txt zu einer Vielzahl von Regeln hinzufügen? –

+0

'// main: memory_leak' ist nur ein Beispiel. Wir haben Hunderte oder Regeln in unserem Projekt. – user1767432

Antwort

1

Normalerweise sollte die C++ - Toolchain die Abhängigkeit haben, aber sie wird automatisch generiert.

Sie können immer ein Makros erstellen, den Standard cc_library zu überschreiben:

In tools/build_rules/prelude_bazel:

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

in tools/build_rules/cc.bzl:

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

in memory/BUILD:

exports_files(['blacklist.txt'])

auch eine leere Datei tools/build_rules/BUILD hinzufügen.

Die erste Datei ist die cc_library in dem Anfang aller Dateien importieren, die zweite Datei ein neues cc_library wird definiert, der die fehlende Abhängigkeit und die dritte Datei, die die ‚blacklist.txt‘ nur aussetzen fügt zu allen anderen Regeln. Die letzte leere Datei dient nur dazu, ein Paket für Bazel zu definieren, das benötigt wird, um die Datei cc.bzl zu laden.

Verwandte Themen