יש שני סוגים של מודולים של ספריות 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
יוצר ספריות תואמות ל-C כדי לאפשר פעולה הדדית עם מודולים של CC.
בנוסף למשתני _host
, לספריות FFI של Rust יש סוגי מודולים ששולטים בקישור הזמין. הם מפורטים בטבלה הבאה.
Rust FFI Library Module Type | הגדרה |
---|---|
rust_ffi | מספקת את שתי הווריאציות של ספריית C: סטטיות ומשותפת. |
rust_ffi_shared | מספק רק את הווריאנט של הספרייה המשותפת ב-C. |
rust_ffi_static | מספק רק את הווריאנט של ספריית C סטטית. |
דוגמה בסיסית לשימוש ב-rust_ffi
לקריאה ל-Rust מ-C מופיעה בדף תבניות חלודה ב-Android.
למידע נוסף על שימוש מתקדם יותר, אפשר לעיין במסמכי התיעוד הרשמיים של 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_library
.
מאפייני ספריית Rust | הגדרה |
---|---|
stem / name | המאפיין stem קובע את שם הקובץ של ספריית הפלט, שבמקרה אחר יהיה name כברירת מחדל.
למהדר של Rust יש דרישות מסוימות לשמות של קובצי ספריות, וכתוצאה מכך מערכת ה-build אוכפת את הדרישות האלה כדי למנוע בעיות בהדרכה.
שם הקובץ של הפלט חייב לעמוד בפורמט |
crate_name | זהו מאפיין נדרש למודול שיוצר ספרייה, ויש לו גם קשר לשם קובץ הפלט. (ראו ההגדרה של stem ). |
export_include_dirs | במודולים של rust_ffi , המאפיין הזה מגדיר רשימה של מחרוזות שמייצגות נתיבים כוללים יחסיים: נתיבים שמכילים כותרות
שאפשר להשתמש בהם במודולים תלויים של cc . |
קישור של rust_library או rust_ffi
כברירת מחדל, מודולים של ספריית חלודה שמטרגטים מכשירים תמיד מקושרים באופן דינמי מול libstd
. עם זאת, מודולים של מארחים תמיד מקושרים באופן סטטי ל-libstd
.
הקישור שמשמש ליחסי התלות של rustlibs
תלוי בהעדפות הקישור של מודול הבסיס. (לדוגמה, rust_binary
עם prefer_rlib: true
ישתמש בוריאנטים של ספריית Rust שמקשרים את rustlibs
בתור rlibs
).
כדי לאפשר ייצור של מודולים של תלות ברמה הבסיסית (root) שלא מסתמכים על ספריות חלודה דינמיות (כמו קובצי הפעלה סטטיים), rlibs
מספק וריאנטים של קישור libstd
דינמי וגם סטטי. הווריאנט הנכון מקושר באופן אוטומטי על ידי Soong.