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

Rust लाइब्रेरी मॉड्यूल दो तरह के होते हैं. पहला, Rust लाइब्रेरी बनाता है और दूसरा, C के साथ काम करने वाली लाइब्रेरी बनाता है. इसके अलावा, बिल्ड सिस्टम के मकसद के लिए, रस्ट प्रोसीजरल मैक्रो (proc-macros) को खास तरह की लाइब्रेरी के तौर पर इस्तेमाल किया जा सकता है.

rust_library

rust_library मॉड्यूल में Rust लाइब्रेरी तैयार की जाती हैं, ताकि अन्य Rust मॉड्यूल का इस्तेमाल किया जा सके.

_host वैरिएंट के अलावा, Rust लाइब्रेरी में मॉड्यूल टाइप होते हैं, जो उपलब्ध लिंकेज को कंट्रोल करते हैं.

Rust लाइब्रेरी मॉड्यूल का टाइप परिभाषा
rust_library लाइब्रेरी के दोनों वैरिएंट, rlib और dylib उपलब्ध कराता है. एओएसपी, 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 लाइब्रेरी मॉड्यूल का टाइप परिभाषा
रस्ट_फ़ी C लाइब्रेरी के दोनों वैरिएंट उपलब्ध कराता है: स्टैटिक और शेयर किया गया.
रस्ट_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_library मॉड्यूल टाइप के लिए अलग तरह के होते हैं.

Rust लाइब्रेरी प्रॉपर्टी परिभाषा
स्टेम / नाम 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, सही वैरिएंट को अपने-आप लिंक कर देता है.