नियम
proto_lang_toolchain
नियम का सोर्स देखेंproto_lang_toolchain(name, blacklisted_protos, command_line, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, mnemonic, output_files, plugin, plugin_format_flag, progress_message, proto_compiler, restricted_to, runtime, tags, target_compatible_with, testonly, visibility)
अगर Bazel का इस्तेमाल किया जा रहा है, तो कृपया https://github.com/bazelbuild/rules_proto से नियम लोड करें.
इससे पता चलता है कि LANG_proto_library नियम (जैसे, java_proto_library) को proto-compiler को कॉल करना चाहिए.
LANG_proto_library के कुछ नियमों के तहत, कमांड-लाइन फ़्लैग का इस्तेमाल करके यह तय किया जा सकता है कि किस टूलचेन का इस्तेमाल करना है;
इनके दस्तावेज़ देखें.
आम तौर पर, आपको इस तरह के नियम नहीं लिखने चाहिए. हालांकि, अगर आपको अपने Java कंपाइलर को ट्यून करना है, तो ऐसा किया जा सकता है.
कोई कंपाइलर नहीं है. प्रोटो-कंपाइलर को proto_library नियम से लिया जाता है, जिसे हम अटैच करते हैं. इसे Blaze को कमांड-लाइन फ़्लैग के तौर पर पास किया जाता है.
कई सुविधाओं के लिए, proto_library नियम पर proto-compiler को चालू करना ज़रूरी होता है.
यह ज़रूरी है कि LANG_proto_library जिस कंपाइलर का इस्तेमाल करता है वह proto_library के कंपाइलर के जैसा ही हो.
उदाहरण
इसका एक सामान्य उदाहरण यह होगा:
proto_lang_toolchain(
    name = "javalite_toolchain",
    command_line = "--javalite_out=shared,immutable:$(OUT)",
    plugin = ":javalite_plugin",
    runtime = ":protobuf_lite",
)
तर्क
| विशेषताएं | |
|---|---|
name | 
        
           नाम; ज़रूरी है इस टारगेट के लिए यूनीक नाम.  | 
      
          blacklisted_protos
         | 
        
                     लेबल की सूची; डिफ़ॉल्ट वैल्यू  blacklisted_protos एट्रिब्यूट की srcs एट्रिब्यूट वाली फ़ाइलों के लिए कोई कोड जनरेट नहीं किया जाएगा.
        इसका इस्तेमाल उन .proto फ़ाइलों के लिए किया जाता है जो पहले से ही proto रनटाइम में लिंक की गई हैं. जैसे, any.proto.
         | 
      
          command_line
         | 
        
                     स्ट्रिंग; ज़रूरी है इस वैल्यू को कोड जनरेट करने के लिए, प्रोटो-कंपाइलर को पास किया जाएगा. सिर्फ़ उन हिस्सों को शामिल करें जो इस कोड-जनरेटर/प्लगिन के लिए खास हैं. उदाहरण के लिए, -I पैरामीटर शामिल न करें
  | 
      
          mnemonic
         | 
        
                     स्ट्रिंग; डिफ़ॉल्ट वैल्यू   | 
      
          output_files
         | 
        
                     स्ट्रिंग; डिफ़ॉल्ट वैल्यू  command_line में मौजूद $(OUT) को कैसे फ़ॉर्मैट किया जाए. इसके लिए, एक फ़ाइल का पाथ या एक से ज़्यादा फ़ाइलों के मामले में आउटपुट डायरेक्ट्री का इस्तेमाल किया जाता है.
        इन वैल्यू का इस्तेमाल किया जा सकता है: "single", "multiple".
         | 
      
          plugin
         | 
        
                     लेबल; डिफ़ॉल्ट वैल्यू  --plugin=protoc-gen-PLUGIN=<executable>.
         | 
      
          plugin_format_flag
         | 
        
                     स्ट्रिंग; डिफ़ॉल्ट वैल्यू  --plugin=protoc-gen-PLUGIN=<executable>.
         | 
      
          progress_message
         | 
        
                     स्ट्रिंग; डिफ़ॉल्ट वैल्यू   | 
      
          proto_compiler
         | 
        
                     लेबल; डिफ़ॉल्ट वैल्यू   | 
      
          runtime
         | 
        
                     लेबल; डिफ़ॉल्ट वैल्यू   | 
      
proto_library
नियम का सोर्स देखेंproto_library(name, deps, srcs, data, allow_exports, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, exports, features, import_prefix, licenses, restricted_to, strip_import_prefix, tags, target_compatible_with, testonly, visibility)
समर्थन नहीं होना या रुकना. इसके बजाय, कृपया https://github.com/bazelbuild/rules_proto का इस्तेमाल करें.
proto_library का इस्तेमाल करके, प्रोटोकॉल बफ़र की लाइब्रेरी तय करें. इनका इस्तेमाल कई भाषाओं में किया जा सकता है. proto_library को, deps क्लॉज़ में शामिल किया जा सकता है. जैसे, java_proto_library.
कमांड-लाइन पर कंपाइल करने पर, proto_library foo-descriptor-set.proto.bin नाम की एक फ़ाइल बनाता है. यह फ़ाइल, नियम के src में मौजूद मैसेज के लिए डिस्क्रिप्टर सेट होती है. यह फ़ाइल, क्रम से लगाई गई FileDescriptorSet है. इसके बारे में 
   https://developers.google.com/protocol-buffers/docs/techniques#self-description में बताया गया है.
इसमें सिर्फ़ उन .proto फ़ाइलों की जानकारी होती है जिनका सीधे तौर पर proto_library नियम में ज़िक्र किया गया है. ट्रांज़िटिव डिस्क्रिप्टर सेट का कलेक्शन, [ProtoInfo].transitive_descriptor_sets Starlark प्रोवाइडर के ज़रिए उपलब्ध होता है.
ProtoInfo.java में दस्तावेज़ देखें.
कोड को व्यवस्थित करने का सुझाव:
-  हर 
.protoफ़ाइल के लिए, एकproto_libraryनियम. -  
foo.protoनाम की फ़ाइल,foo_protoनाम के नियम में होगी. यह नियम, उसी पैकेज में मौजूद होगा. -  
proto_libraryनाम के[language]_proto_libraryको रैप करने वालेfoo_protoकोfoo_[language]_protoकहा जाना चाहिए. साथ ही, यह एक ही पैकेज में होना चाहिए. 
तर्क
| विशेषताएं | |
|---|---|
name | 
        
           नाम; ज़रूरी है इस टारगेट के लिए यूनीक नाम.  | 
      
          deps
         | 
        
                     लेबल की सूची; डिफ़ॉल्ट वैल्यू  proto_library के उन अन्य नियमों की सूची जिन पर टारगेट निर्भर करता है.
        proto_library सिर्फ़ अन्य proto_library टारगेट पर निर्भर हो सकता है.
        यह भाषा के हिसाब से बनाई गई लाइब्रेरी पर निर्भर नहीं होना चाहिए.
         | 
      
          srcs
         | 
        
                     लेबल की सूची; डिफ़ॉल्ट वैल्यू  .proto और .protodevel फ़ाइलों की सूची, जिन्हें टारगेट बनाने के लिए प्रोसेस किया जाता है. आम तौर पर, यह सूची खाली नहीं होती है. srcs को खाली छोड़ने का एक उदाहरण alias-library है. यह एक proto_library नियम है, जिसमें deps में एक या उससे ज़्यादा अन्य proto_library हैं.
        इस पैटर्न का इस्तेमाल, उदाहरण के लिए, किसी सार्वजनिक एपीआई को एक स्थायी नाम से एक्सपोर्ट करने के लिए किया जा सकता है.
         | 
      
          allow_exports
         | 
        
                     लेबल; डिफ़ॉल्ट वैल्यू   | 
      
          exports
         | 
        
                     लेबल की सूची; डिफ़ॉल्ट वैल्यू   | 
      
          import_prefix
         | 
        
                     स्ट्रिंग; डिफ़ॉल्ट वैल्यू  इस नियम के  इस प्रीफ़िक्स को जोड़ने से पहले,   | 
      
          strip_import_prefix
         | 
        
                     स्ट्रिंग; डिफ़ॉल्ट वैल्यू  इस विकल्प को सेट करने पर, इस नियम के  अगर यह रिलेटिव पाथ है (स्लैश से शुरू नहीं होता), तो इसे पैकेज-रिलेटिव पाथ माना जाता है. अगर यह ऐब्सलूट पाथ है, तो इसे रिपॉज़िटरी के हिसाब से रिलेटिव पाथ माना जाता है. इस प्रीफ़िक्स को हटाने के बाद,   |