नियम
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
) को प्रोटो-कंपाइलर को कॉल करना चाहिए.
LANG_proto_library के कुछ नियमों की मदद से, कमांड-लाइन फ़्लैग का इस्तेमाल करके यह तय किया जा सकता है कि किस टूलचेन का इस्तेमाल करना है. इसके लिए, उनके दस्तावेज़ देखें.
आम तौर पर, आपको इस तरह के नियम तब तक नहीं लिखने चाहिए, जब तक कि आपको अपने Java कंपाइलर को बेहतर नहीं बनाना है.
कोई कंपाइलर नहीं है. प्रोटो-कंपाइलर को proto_library नियम से लिया जाता है, जिसे हम अटैच करते हैं. इसे Blaze को कमांड-लाइन फ़्लैग के तौर पर पास किया जाता है.
कई सुविधाओं के लिए, proto_library नियम पर प्रोटो-कंपाइलर को लागू करना ज़रूरी है.
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 फ़ाइलों के लिए किया जाता है जो पहले से ही प्रोटो रनटाइम से लिंक होती हैं, जैसे कि
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
होता है. यह फ़ाइल, मैसेज के लिए डिस्क्रिप्टर सेट होती है, जो कि नियम के सोर्स होते हैं. यह फ़ाइल, 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
नाम के उस नियम में होगी जो एक ही पैकेज में मौजूद है. -
foo_proto
नाम वालेproto_library
को रैप करने वाले[language]_proto_library
कोfoo_[language]_proto
कहा जाना चाहिए. साथ ही, यह एक ही पैकेज में होना चाहिए.
तर्क
विशेषताएं | |
---|---|
name |
नाम; यह ज़रूरी है इस टारगेट के लिए यूनीक नाम. |
deps
|
लेबल की सूची; डिफ़ॉल्ट proto_library नियमों की सूची.
proto_library सिर्फ़ दूसरे
proto_library टारगेट पर निर्भर हो सकता है.
ऐसा हो सकता है कि यह भाषा के हिसाब से लाइब्रेरी पर निर्भर न हो.
|
srcs
|
लेबल की सूची; डिफ़ॉल्ट .proto और .protodevel फ़ाइलों की सूची. आम तौर पर, यह सूची खाली नहीं होती. अन्य नाम वाली लाइब्रेरी एक ऐसा उदाहरण है जहां srcs खाली हो सकता है. यह एक ऐसा
proto_library नियम है जिसमें deps में एक या उससे ज़्यादा अन्य proto_library हैं.
इस पैटर्न का इस्तेमाल, किसी सार्वजनिक एपीआई को किसी ऐसे नाम से एक्सपोर्ट करने के लिए किया जा सकता है जो हमेशा मौजूद रहता है.
|
allow_exports
|
लेबल; डिफ़ॉल्ट |
exports
|
लेबल की सूची; डिफ़ॉल्ट |
import_prefix
|
स्ट्रिंग; डिफ़ॉल्ट रूप से सेट होने पर, इस नियम के इस प्रीफ़िक्स को जोड़ने से पहले, |
strip_import_prefix
|
स्ट्रिंग; डिफ़ॉल्ट रूप से सेट होने पर, इस नियम के अगर यह रिलेटिव पाथ है (स्लैश से शुरू नहीं होता), तो इसे पैकेज के हिसाब से रिलेटिव पाथ माना जाता है. अगर यह ऐब्सलूट पाथ है, तो इसे रिपॉज़िटरी से रिलेटिव पाथ माना जाता है.
|