מודולים של ספריות

יש שני סוגים של מודולים של ספריות 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 אוכפת את הדרישות האלה כדי למנוע בעיות בהדרכה. שם קובץ הפלט חייב להיות בפורמט lib<crate_name><suffix>. (יש כאן תלות בנכס crate_name).

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 מקשרת באופן אוטומטי את הווריאנט הנכון.