2017-07-14 2 views
1

J'ai récemment travaillé sur tout un tas de règles de bazel dans mon entreprise et j'ai créé des règles personnalisées qui sont spécifiques à mon entreprise. Une chose que j'ai remarquée est que lors de la création des règles, j'ai souvent utilisé la propagation de données transitives sur mesure afin d'aider mes règles à faire le travail. Voici ce que je veux dire:Convention sur la structure transitive de Bazel

attrs = { 
    'deps': attr.label_list(
     providers=[ 
      'transitive_srcs', 
      'transitive_gens', 
      'transitive_data', 
      'transitive_reqs', 
      'transitive_deps', 
      'transitive_builds' 
     ], 
     allow_files=False 
    ) 
} 

Ce que cela finit par causer est qu'il crée une incompatibilité avec le reste des règles standard de Bazel. Si mes règles dépendent de dire cc_binary() alors il s'attend à ce que cc_binary() envoie des données transitives supplémentaires. Y a-t-il des conventions sur la façon dont nous devrions établir des règles? J'adorerais en suivre ou en créer quelques-unes pour que ce soit plus facile de partager des règles.

C'est ici que j'ai pris l'exemple de code. https://github.com/findmine/bazel-pex-rule

Répondre

1

Il est possible de créer des fournisseurs natifs pour Java rules mais pas encore pour les règles C++ malheureusement. Ce travail est en cours. Pour l'instant la meilleure approche consiste à avoir des macros qui enveloppent vos règles personnalisées et ajoute les différents fichiers dans une règle cc_.*.

+0

Pour l'instant, mon approche consiste à suivre les définitions des règles cc_ * à titre indicatif et à ajuster mes règles pex existantes pour refléter cela. Je n'aurais probablement pas besoin d'ajouter ces fournisseurs de transitions de cas spéciaux si je pouvais transmettre des informations variables entre des cibles dépendantes. –

+0

Que voulez-vous dire? Pouvez-vous envoyer une discussion de suivi à [email protected] parce que cela semble nécessiter une discussion plus approfondie. –