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

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

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.