Rust लाइब्रेरी मॉड्यूल दो तरह के होते हैं. पहला, Rust लाइब्रेरी बनाता है और दूसरा, C के साथ काम करने वाली लाइब्रेरी बनाता है. इसके अलावा, बिल्ड सिस्टम के लिए, Rust प्रोसेस्युरल मैक्रो (proc-macros
) को एक खास तरह की लाइब्रेरी माना जा सकता है.
rust_library
rust_library
मॉड्यूल, Rust लाइब्रेरी बनाता है, ताकि अन्य Rust मॉड्यूल उनका इस्तेमाल कर सकें.
_host
वैरिएंट के अलावा, Rust लाइब्रेरी में मॉड्यूल टाइप होते हैं, जो उपलब्ध लिंकेज को कंट्रोल करते हैं.
Rust लाइब्रेरी मॉड्यूल का टाइप | परिभाषा |
---|---|
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
मॉड्यूल, सी-लैंग्वेज के साथ काम करने वाली लाइब्रेरी बनाता है, ताकि वे सीसी मॉड्यूल के साथ काम कर सकें.
_host
वैरिएंट के अलावा, Rust FFI लाइब्रेरी में मॉड्यूल टाइप होते हैं, जो उपलब्ध लिंकेज को कंट्रोल करते हैं. इनके बारे में नीचे दी गई टेबल में बताया गया है.
Rust FFI लाइब्रेरी मॉड्यूल का टाइप | परिभाषा |
---|---|
rust_ffi | C लाइब्रेरी के दोनों वैरिएंट उपलब्ध कराता है: स्टैटिक और शेयर की गई. |
rust_ffi_shared | सिर्फ़ C शेयर की गई लाइब्रेरी का वैरिएंट उपलब्ध कराता है. |
rust_ffi_static | सिर्फ़ C स्टैटिक लाइब्रेरी का वैरिएंट उपलब्ध कराता है. |
C से Rust को कॉल करने के लिए, rust_ffi
का इस्तेमाल करने का बुनियादी उदाहरण देखने के लिए, Android Rust पैटर्न पेज देखें.
ज़्यादा बेहतर तरीके से इस्तेमाल करने के बारे में जानने के लिए, Rust का आधिकारिक दस्तावेज़ पढ़ें.
rust_proc_macro
Rust प्रोसेस्युरल मैक्रो (proc-macros), सोर्स कोड में बदलाव करने या नए एट्रिब्यूट देने के लिए, कंपाइलर को बेहतर बनाने में मदद कर सकते हैं. इनके बारे में ज़्यादा जानकारी, Rust के आधिकारिक दस्तावेज़ के प्रोसेड्यूरल मैक्रो पेज पर मिल सकती है.
बिल्ड सिस्टम के लिए, 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, सही वैरिएंट को अपने-आप लिंक कर देता है.