יש שני סוגים של מודולים של ספריות Rust: מודול אחד שמייצר ספריות Rust ומודול אחד שמייצר ספריות שתואמות ל-C. בנוסף, למטרות של מערכת build, אפשר להתייחס לפקודות מאקרו פרוצדורליות של Rust (proc-macros) כאל סוג מיוחד של ספריות.
rust_library
מודול rust_library יוצר ספריות Rust לשימוש של מודולי Rust אחרים.
בנוסף ל_hostהווריאציות, בספריות Rust יש סוגי מודולים ששולטים בקישור הזמין.
| סוג המודול של ספריית Rust | הגדרה |
|---|---|
| rust_library | הספרייה מספקת את שני סוגי הווריאציות, rlib ו-dylib. ב-AOSP מומלץ להשתמש בסוג המודול הזה לספריות Rust, כי הוא מאפשר למודולים לפעול בצורה תקינה כשהם מופיעים כהסתמכות במאפיין rustlibs. |
| rust_library_rlib | מספק רק את הווריאציה rlib של ספריית Rust;
אי אפשר להבטיח שמודולים שמספקים רק וריאציות rlib יפעלו עם המאפיין rustlibs. |
| rust_library_dylib | מספק רק את הווריאציה dylib של ספריית Rust. אי אפשר להבטיח שמודולים שמספקים רק וריאציות dylib יפעלו עם המאפיין rustlibs. |
rust_ffi
מודול rust_ffi יוצר ספריות שתואמות ל-C כדי לאפשר פעולה הדדית עם מודולים של CC.
בנוסף ל_host variants, בספריות Rust FFI יש סוגי מודולים ששולטים בקישור הזמין, כמו שמוצג בטבלה הבאה.
| סוג מודול של ספריית Rust FFI | הגדרה |
|---|---|
| rust_ffi | הוא מספק שני סוגים של ספריות C: סטטיות ומשותפות. |
| rust_ffi_shared | מספק רק את הגרסה של הספרייה המשותפת C. |
| rust_ffi_static | מספק רק את הגרסה של ספריית C סטטית. |
דוגמה בסיסית לשימוש ב-rust_ffi לקריאה ל-Rust מ-C מופיעה בדף Android Rust Patterns.
למידע על שימוש מתקדם יותר, אפשר לעיין במסמכי התיעוד הרשמיים של Rust.
rust_proc_macro
פקודות מאקרו פרוצדורליות (proc-macros) של Rust יכולות להיות שימושיות להרחבת הקומפיילר כדי לבצע טרנספורמציות של קוד מקור או לספק מאפיינים חדשים. מידע נוסף על המאקרו האלה זמין בדף Procedural Macros במסמכי התיעוד הרשמיים של Rust.
לצורך מערכת ה-build, המודול rust_proc_macro פועל באופן דומה למודולים rust_library. במודולים שתלויים ב-rust_proc_macros, מוסיפים את שם המודול למאפיין proc_macros.
proc_macros הם תוספים של קומפיילר, ולכן הם מטרגטים את המארח ולא יוצרים קוד שיפעל במכשיר.
מאפיינים בולטים של ספריות Rust
המאפיינים שמוגדרים בטבלה שלמטה הם בנוסף למאפיינים משותפים חשובים שרלוונטיים לכל המודולים. הם חשובים במיוחד למודולים של ספריות Rust, או שהם מציגים התנהגות ייחודית שספציפית לסוג המודול rust_library.
| מאפייני ספריית Rust | הגדרה |
|---|---|
| stem / name | המאפיין stem קובע את שם הקובץ של ספריית הפלט, שאם לא מציינים אותו, ברירת המחדל היא name.
קומפיילר Rust מטיל דרישות מסוימות על שמות הקבצים של הספריות, וכתוצאה מכך מערכת ה-build אוכפת את הדרישות האלה כדי למנוע בעיות קומפילציה.
שם קובץ הפלט צריך להיות בפורמט |
| crate_name | זהו מאפיין חובה למודולים שמפיקים ספריות;
יש לו גם קשר לשם קובץ הפלט. (ראו את ההגדרה של stem). |
| export_include_dirs | במודולים מסוג rust_ffi, המאפיין הזה מגדיר רשימה של מחרוזות שמייצגות נתיבי include יחסיים: נתיבים שמכילים כותרות שמודולים תלויים מסוג cc יכולים להשתמש בהן. |
קישור של rust_library או rust_ffi
כברירת מחדל, מודולים של ספריות Rust שמיועדים למכשירים תמיד מקושרים באופן דינמי ל-libstd. עם זאת, מודולים של מארחים תמיד מקושרים באופן סטטי ל-libstd.
הקישור שמשמש לתלות rustlibs תלוי בהעדפות הקישור של מודול הבסיס. (לדוגמה, rust_binary עם prefer_rlib: true ישתמש בווריאציות של ספריית Rust שמקשרות rustlibs בתור rlibs).
כדי לאפשר יצירה של מודולים של תלות ברמה הבסיסית שלא מסתמכים על ספריות דינמיות של Rust (כמו קובצי הפעלה סטטיים), rlibs מספקת וריאציות של קישור דינמי וסטטי של libstd. הווריאנט הנכון מקושר אוטומטית על ידי Soong.