Rust लाइब्रेरी मॉड्यूल दो तरह के होते हैं. एक Rust लाइब्रेरी बनाता है और दूसरा C के साथ काम करने वाली लाइब्रेरी बनाता है. इसके अलावा, बिल्ड सिस्टम के लिए, Rust के प्रोसीजरल मैक्रोज़ (proc-macros
) को एक खास तरह की लाइब्रेरी के तौर पर इस्तेमाल किया जा सकता है.
rust_library
rust_library
मॉड्यूल, अन्य Rust मॉड्यूल के इस्तेमाल के लिए Rust लाइब्रेरी बनाता है.
_host
वैरिएंट के अलावा, Rust लाइब्रेरी में मॉड्यूल टाइप होते हैं. ये मॉड्यूल टाइप, उपलब्ध लिंकेज को कंट्रोल करते हैं.
Rust Library Module Type | परिभाषा |
---|---|
rust_library | लाइब्रेरी के दोनों वैरिएंट, rlib और dylib उपलब्ध कराता है. AOSP, Rust लाइब्रेरी के लिए इस मॉड्यूल टाइप का सुझाव देता है. इससे मॉड्यूल, rustlibs प्रॉपर्टी के तहत डिपेंडेंसी के तौर पर लिस्ट होने पर सही तरीके से काम कर पाते हैं |
rust_library_rlib | सिर्फ़ Rust लाइब्रेरी का rlib वैरिएंट उपलब्ध कराता है;
सिर्फ़ rlib वैरिएंट उपलब्ध कराने वाले मॉड्यूल, rustlibs प्रॉपर्टी के साथ काम करेंगे, इसकी गारंटी नहीं दी जा सकती. |
rust_library_dylib | सिर्फ़ Rust लाइब्रेरी का dylib वैरिएंट उपलब्ध कराता है;
सिर्फ़ dylib वैरिएंट उपलब्ध कराने वाले मॉड्यूल, rustlibs प्रॉपर्टी के साथ काम करेंगे, इसकी गारंटी नहीं दी जा सकती. |
rust_ffi
rust_ffi
मॉड्यूल, C के साथ काम करने वाली लाइब्रेरी बनाता है, ताकि CC मॉड्यूल के साथ इंटरऑप किया जा सके.
_host
के वैरिएंट के अलावा, Rust FFI लाइब्रेरी में ऐसे मॉड्यूल टाइप होते हैं जो उपलब्ध लिंकेज को कंट्रोल करते हैं. इन्हें इस टेबल में दिखाया गया है.
Rust FFI लाइब्रेरी मॉड्यूल का टाइप | परिभाषा |
---|---|
rust_ffi | यह C लाइब्रेरी के दोनों वैरिएंट उपलब्ध कराता है: स्टैटिक और शेयर की गई. |
rust_ffi_shared | यह सिर्फ़ C शेयर की गई लाइब्रेरी का वैरिएंट उपलब्ध कराता है. |
rust_ffi_static | सिर्फ़ C स्टैटिक लाइब्रेरी वैरिएंट उपलब्ध कराता है. |
C से Rust को कॉल करने के लिए rust_ffi
का इस्तेमाल करने का बुनियादी उदाहरण देखने के लिए, Android Rust Patterns पेज देखें.
ज़्यादा बेहतर तरीके से इस्तेमाल करने के बारे में जानने के लिए, Rust का आधिकारिक दस्तावेज़ पढ़ें.
rust_proc_macro
Rust के प्रोसीजरल मैक्रो (प्रॉक-मैक्रो), कंपाइलर को बढ़ाने के लिए काम आ सकते हैं. इनका इस्तेमाल सोर्स कोड में बदलाव करने या नए एट्रिब्यूट देने के लिए किया जा सकता है. इनके बारे में ज़्यादा जानकारी, Rust के आधिकारिक दस्तावेज़ के Procedural Macros पेज पर मिल सकती है.
बिल्ड सिस्टम के लिए, rust_proc_macro
मॉड्यूल, rust_library
मॉड्यूल की तरह ही काम करता है. rust_proc_macros
पर निर्भर रहने वाले मॉड्यूल के लिए, proc_macros
प्रॉपर्टी में मॉड्यूल का नाम जोड़ें.
proc_macros
कंपाइलर प्लगिन होते हैं. इसलिए, ये होस्ट को टारगेट करते हैं और ऐसा कोई कोड नहीं बनाते जो किसी डिवाइस पर चल सके.
Rust लाइब्रेरी की खास प्रॉपर्टी
नीचे दी गई टेबल में बताई गई प्रॉपर्टी के अलावा, ज़रूरी सामान्य प्रॉपर्टी भी होती हैं. ये प्रॉपर्टी सभी मॉड्यूल पर लागू होती हैं. ये Rust लाइब्रेरी मॉड्यूल के लिए खास तौर पर ज़रूरी होते हैं या rust_library
मॉड्यूल टाइप के लिए खास तौर पर यूनीक व्यवहार दिखाते हैं.
Rust लाइब्रेरी की प्रॉपर्टी | परिभाषा |
---|---|
stem / name | stem प्रॉपर्टी, आउटपुट लाइब्रेरी के फ़ाइल नाम को कंट्रोल करती है. हालांकि, यह डिफ़ॉल्ट रूप से name पर सेट होती है.
Rust कंपाइलर, लाइब्रेरी के फ़ाइल नामों के लिए कुछ ज़रूरी शर्तें लागू करता है. इसलिए, बिल्ड सिस्टम इन शर्तों को लागू करता है, ताकि कंपाइल करने से जुड़ी समस्याओं से बचा जा सके.
आउटपुट फ़ाइल का नाम, |
crate_name | यह लाइब्रेरी बनाने वाले मॉड्यूल के लिए ज़रूरी प्रॉपर्टी है. साथ ही, इसका संबंध आउटपुट फ़ाइल के नाम से भी है. (stem की परिभाषा देखें.) |
export_include_dirs | rust_ffi मॉड्यूल के लिए, यह प्रॉपर्टी ऐसी स्ट्रिंग की सूची तय करती है जो शामिल किए गए पाथ को दिखाती हैं. ये ऐसे पाथ होते हैं जिनमें हेडर शामिल होते हैं. इन हेडर का इस्तेमाल, डिपेंडेंट cc मॉड्यूल कर सकते हैं. |
rust_library या rust_ffi को लिंक करना
डिफ़ॉल्ट रूप से, डिवाइसों को टारगेट करने वाले Rust लाइब्रेरी मॉड्यूल, हमेशा libstd
के साथ डाइनैमिक रूप से लिंक होते हैं. हालांकि, होस्ट मॉड्यूल हमेशा libstd
के साथ स्टैटिक तौर पर लिंक होते हैं.
rustlibs
डिपेंडेंसी के लिए इस्तेमाल किया गया लिंक, रूट मॉड्यूल की लिंक करने की प्राथमिकताओं पर निर्भर करता है. (उदाहरण के लिए, prefer_rlib: true
के साथ rust_binary
, Rust लाइब्रेरी के उन वैरिएंट का इस्तेमाल करेगा जो rustlibs
को rlibs
के तौर पर लिंक करते हैं.)
ऐसे रूट डिपेंडेंसी मॉड्यूल बनाने के लिए जो किसी डाइनैमिक रस्ट लाइब्रेरी (जैसे कि स्टैटिक एक्ज़ीक्यूटेबल) पर निर्भर नहीं होते, rlibs
, डाइनैमिक और स्टैटिक, दोनों तरह के libstd
लिंकेज वैरिएंट उपलब्ध कराता है. Soong, सही वैरिएंट को अपने-आप लिंक कर देता है.