लाइब्रेरी मॉड्यूल

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 कंपाइलर, लाइब्रेरी के फ़ाइल नामों पर कुछ ज़रूरी शर्तें लागू करता है. इसलिए, कंपाइल करने से जुड़ी समस्याओं से बचने के लिए, बिल्ड सिस्टम इन शर्तों को लागू करता है. आउटपुट फ़ाइल का नाम, lib<crate_name><suffix> फ़ॉर्मैट में होना चाहिए. (यहां crate_name प्रॉपर्टी पर डिपेंडेंसी है).

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, सही वैरिएंट को अपने-आप लिंक कर देता है.