יש שני סוגים של מודולים של ספריות 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
, לספריות FFI של Rust יש סוגי מודולים ששולטים בקישור הזמין. הם מפורטים בטבלה הבאה.
סוג מודול של ספריית 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 יחסיים: נתיבים שמכילים כותרות שמודולים תלויים של rust_ffi יכולים להשתמש בהן.cc |
קישור של rust_library או rust_ffi
כברירת מחדל, מודולים של ספריות Rust שמטרגטים מכשירים תמיד מקושרים באופן דינמי ל-libstd
. עם זאת, מודולים של מארחים תמיד מקושרים באופן סטטי ל-libstd
.
הקישור שמשמש ליחסי התלות של rustlibs
תלוי בהעדפות הקישור של מודול הבסיס. (לדוגמה, rust_binary
עם prefer_rlib: true
ישתמש בוריאנטים של ספריית Rust שמקשרים את rustlibs
בתור rlibs
).
כדי לאפשר ייצור של מודולים של יחסי תלות ברמה הבסיסית שלא מסתמכים על ספריות דינמיות של Rust (כמו קובצי הפעלה סטטיים), rlibs
מספק וריאנטים של קישור libstd
דינמיים וסטטיים. מערכת Soong מקשרת באופן אוטומטי את הווריאנט הנכון.