2017-10-20 10 views
0

J'essaie d'ajouter ASAN sanitize à notre projet qui utilise Bazel et qui se bloque avec le problème suivant. J'ai ajouté liste noire pour aseptiser dans notre bazel.rcLa règle de Bazel manque de dépendance pour la liste noire sanitize de clang

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

mais quand je construis une cible, je me manque erreur de dépendance

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 

Il semble que blacklist.txt devrait être ajouté à la règle de construction dans le fichier BUILD, mais nous ne pouvons pas vraiment le faire pour toutes les règles gazillion que nous avons déjà. Existe-t-il un moyen d'ajouter une dépendance globale pour toutes les règles ou quelque chose comme ça?

+0

À quoi ressemble la définition de la règle '// main: memory_leak'? Pourquoi pensez-vous que vous devez ajouter blacklist.txt à une règle gazillion? –

+0

'// main: memory_leak' est juste un exemple. Nous avons des centaines ou des règles dans notre projet. – user1767432

Répondre

1

Normalement, la chaîne d'outils C++ devrait avoir la dépendance mais elle est générée automatiquement.

Vous pouvez toujours créer une macro pour remplacer le cc_library par défaut:

En tools/build_rules/prelude_bazel:

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

dans tools/build_rules/cc.bzl:

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

dans memory/BUILD:

exports_files(['blacklist.txt'])

ajouter également un fichier vide tools/build_rules/BUILD.

Le premier fichier est importé le cc_library dans le début de tout fichier, le second fichier définit une nouvelle cc_library qui ajoute la dépendance manquante et le troisième fichier qui vient d'exposer le « blacklist.txt » à toutes les autres règles. Le dernier fichier vide est juste pour définir un paquet pour Bazel qui est nécessaire pour charger le fichier cc.bzl.