מודולי חלודה של אנדרואיד

כעיקרון כללי, הגדרות מודול rust_* תואמות באופן הדוק לשימוש ולציפיות cc_* . להלן דוגמה להגדרת מודול עבור בינארי Rust :

rust_binary {
    name: "hello_rust",
    crate_name: "hello_rust",
    srcs: ["src/hello_rust.rs"],
    host_supported: true,
}

דף זה מכסה את המאפיינים הנפוצים ביותר עבור מודולי rust_* . למידע נוסף על סוגי מודולים ספציפיים והגדרות מודולים לדוגמה, ראה מודולים בינאריים , מודולי ספרייה או מודולי בדיקה .

סוגי מודולים בסיסיים

סוּג הַגדָרָה למידע נוסף
rust_binary בינארי חלודה עמוד מודולים בינאריים
rust_library מייצר ספריית Rust , ומספק גרסאות rlib ו- dylib כאחד. rust_library , דף מודולי ספרייה.
rust_ffi מייצר ספריית Rust C הניתנת לשימוש על ידי מודולי cc, ומספקת גרסאות סטטיות ומשותפות כאחד. rust_ffi , דף מודולי ספרייה
rust_proc_macro מייצר ספריית proc-macro Rust . (אלה מקבילים לתוספי מהדר.) rust_proc_macro , עמוד ספריות מודולים
rust_test מייצר בינארי לבדיקת חלודה המשתמש ברתמת בדיקת החלודה הסטנדרטית. דף מודולי בדיקה
rust_fuzz מייצר libfuzzer בינארי Rust fuzz. דוגמה של מודול rust_fuzz
rust_protobuf מייצר מקור ומייצר ספריית Rust המספקת ממשק לפרוטובף מסוים. דפי מודולי פרוטובופס ומחוללי מקור
rust_bindgen מייצר מקור ומייצר ספריית Rust המכילה כריכות Rust לספריות C. דפי מודולי כריכות Bindgen ו- Source Generators

מאפיינים משותפים חשובים

מאפיינים אלה נפוצים בכל מודולי החלודה של אנדרואיד. כל מאפיינים נוספים (ייחודיים) הקשורים למודולי Rust בודדים מופיעים בדף של אותו מודול.

שֵׁם

name הוא השם של המודול שלך. כמו מודולים אחרים של Soong, זה חייב להיות ייחודי ברוב סוגי המודולים של Android.bp . כברירת מחדל, name משמש כשם קובץ הפלט. אם שם קובץ הפלט חייב להיות שונה משם המודול, השתמש במאפיין stem כדי להגדיר אותו.

גֶזַע

stem (אופציונלי) מספק שליטה ישירה על שם קובץ הפלט (למעט סיומת הקובץ וסיומות אחרות). לדוגמה, ספריית rust_library_rlib עם ערך גזע של libfoo מייצרת קובץ libfoo.rlib . אם לא תספק ערך למאפיין stem , שם קובץ הפלט מאמץ את שם המודול כברירת מחדל.

השתמש בפונקציית stem כאשר אינך יכול להגדיר את שם המודול לשם קובץ הפלט הרצוי. לדוגמה, rust_library עבור ארגז log נקראת liblog_rust , מכיוון שכבר קיימת liblog cc_library . שימוש במאפיין stem במקרה זה מבטיח שקובץ הפלט נקרא liblog.* במקום liblog_rust.* .

srcs

srcs מכיל קובץ מקור יחיד המייצג את נקודת הכניסה למודול שלך (בדרך כלל main.rs או lib.rs ). rustc מטפל ברזולוציה ובגילוי של כל קבצי המקור האחרים הנדרשים להידור, ואלה רשומים בקובץ deps שמיוצר.

במידת האפשר, הימנע משימוש זה עבור קוד פלטפורמה; ראה מחוללי מקור למידע נוסף.

שם_ארגז

crate_name מגדיר את המטא נתונים של שם הארגז באמצעות דגל rustc --crate_name . עבור מודולים המייצרים ספריות, זה חייב להתאים לשם הארגז הצפוי בשימוש במקור. לדוגמה, אם מודול libfoo_bar מופנה במקור כ- extern crate foo_bar , אז זה חייב להיות crate_name: "foo_bar".

מאפיין זה משותף לכל המודולים rust_* , אך הוא נדרש עבור מודולים המייצרים ספריות Rust (כגון rust_library rust_ffi , rust_bindgen , rust_protobuf ו- rust_proc_macro ). מודולים אלה אוכפים דרישות rustc על הקשר בין crate_name לשם קובץ הפלט. למידע נוסף, עיין בסעיף מודולי ספרייה .

מוך

ה- rustc linter מופעל כברירת מחדל עבור כל סוגי המודולים למעט מחוללי מקור. ערכות מוך מסוימות מוגדרות ומשמשות לאימות מקור המודול. ערכים אפשריים עבור ערכות מוך כאלה הם כדלקמן:

  • default של ערכת המוכים המוגדרת כברירת מחדל, בהתאם למיקום המודול
  • android ערכת המוך המחמירה ביותר החלה על כל קוד פלטפורמת אנדרואיד
  • vendor קבוצה רגועה של מוך שהוחל על קוד הספק
  • none להתעלם מכל האזהרות והשגיאות המוך

clippy_lints

ה- clippy linter מופעל גם כברירת מחדל עבור כל סוגי המודולים למעט מחוללי מקור. מוגדרות כמה קבוצות של מוך המשמשות לאימות מקור המודול. אלה כמה ערכים אפשריים:

  • ברירת default של ערכת מוך בהתאם למיקום המודול
  • android ערכת המוך המחמירה ביותר החלה על כל קוד פלטפורמת אנדרואיד
  • vendor קבוצה רגועה של מוך שהוחל על קוד הספק
  • none להתעלם מכל האזהרות והשגיאות המוך

מַהֲדוּרָה

edition מגדירה את מהדורת Rust לשימוש עבור קומפילציה של קוד זה. זה דומה לגרסאות הסטנדרטיות עבור C ו-C++. ערכים חוקיים הם 2015 ו 2018 (ברירת מחדל).

דגלים

flags מכילה רשימת מחרוזת של דגלים שיש להעביר ל- rustc במהלך ההידור.

ld_flags

ld-flags מכיל רשימת מחרוזת של דגלים שיש להעביר למקשר בעת הידור של מקור. אלה מועברים על ידי דגל -C linker-args rustc. clang משמש כחזית המקשר, ומפעיל lld עבור הקישור בפועל.

מאפיינים

features היא רשימת מחרוזת של תכונות שיש להפעיל במהלך ההידור. זה מועבר ל-rustc על ידי --cfg 'feature="foo"' . רוב המאפיינים הם תוספים, כך שבמקרים רבים זה מורכב מכלל התכונות הנדרשות על ידי כל המודולים התלויים. עם זאת, במקרים שבהם תכונות ייחודיות זו לזו, הגדר מודולים נוספים בכל קבצי בנייה המספקים תכונות סותרות.

cfgs

cfgs מכיל רשימת מחרוזות של דגלי cfg שיופעלו במהלך ההידור. זה מועבר ל- rustc על ידי --cfg foo ו-- --cfg "fizz=buzz" .

מערכת הבנייה מגדירה באופן אוטומטי דגלי cfg מסוימים במצבים מסוימים, המפורטים להלן:

  • מודולים שנבנו כ-dylib יקבלו את ערכת android_dylib cfg.

  • מודולים שישתמשו ב-VNDK יהיו בעלי ערכת android_vndk cfg. זה דומה להגדרה __ANDROID_VNDK__ עבור C++.

לְהִתְפַּשֵׁט

רצועה strip אם וכיצד קובץ הפלט יוסר (אם רלוונטי). אם זה לא מוגדר, ברירת המחדל של מודולי ההתקן מסיר הכל פרט ל-mini debuginfo. מודולים מארח, כברירת מחדל, אינם מפשירים שום סמל. ערכים חוקיים כוללים none כדי להשבית את הפשטה, all כדי להסיר הכל, כולל מיני debuginfo. ניתן למצוא ערכים נוספים ב- Soong Modules Reference .

host_supported

עבור מודולי מכשיר, הפרמטר host_supported מציין אם המודול צריך לספק גם וריאנט מארח.

הגדר תלות בספרייה

מודולי חלודה יכולים להיות תלויים בספריות CC וגם בספריות Rust באמצעות המאפיינים הבאים:

שם הנכס תיאור
rustlibs רשימה של מודולי rust_library שהם גם תלות. השתמש בזה כשיטה המועדפת עליך להכריז על תלות, מכיוון שהיא מאפשרת למערכת הבנייה לבחור את הקישור המועדף. (ראה בעת קישור נגד ספריות Rust , להלן)
rlibs רשימה של מודולי rust_library שחייבים להיות מקושרים סטטית כ- rlibs . (השתמש בזהירות; ראה בעת קישור נגד ספריות חלודה , להלן.)
shared_libs רשימה של מודולי cc_library שחייבים להיות מקושרים באופן דינמי כספריות משותפות.
static_libs רשימה של מודולי cc_library שחייבים להיות מקושרים סטטית כספריות סטטיות.
whole_static_libs רשימה של מודולי cc_library שאמורים להיות מקושרים סטטית כספריות סטטיות ולכלול בשלמותם בספרייה המתקבלת. עבור גרסאות rust_ffi_static , whole_static_libraries ייכללו בארכיון הספרייה הסטטי שנוצר. עבור גרסאות rust_library_rlib , ספריות whole_static_libraries יקובצו בספריית rlib שתתקבל.

כאשר מקשרים נגד ספריות Rust , כשיטת עבודה מומלצת, עשה זאת באמצעות המאפיין rustlibs במקום rlibs או dylibs , אלא אם יש לך סיבה ספציפית לעשות זאת. זה מאפשר למערכת ה-build לבחור את הקישור הנכון על סמך מה שמודול השורש דורש, וזה מקטין את הסיכוי שעץ תלות מכיל גם את גרסאות rlib וגם את גרסת dylib של ספרייה (מה שיגרום לכשל של קומפילציה).

תכונות בניית תמיכה לא נתמכות ומוגבלות

Soong's Rust מציע תמיכה מוגבלת עבור תמונות ותמונות מצב vendor ו- vendor_ramdisk . עם זאת, staticlibs , cdylibs , rlibs binaries נתמכים. עבור יעדי בניית תמונה של ספקים, המאפיין android_vndk cfg מוגדר. אתה יכול להשתמש בזה בקוד אם יש הבדלים בין יעדי המערכת והספקים. rust_proc_macros אינם נלכדים כחלק מצילומי מצב של הספק; אם תלויים בהם, ודא שאתה שולט בגירסה כראוי בהם.

תמונות מוצר, VNDK ו-Recovery אינן נתמכות.

בנייה מצטברת

מפתחים יכולים לאפשר הידור מצטבר של מקור Rust על ידי הגדרת משתנה הסביבה SOONG_RUSTC_INCREMENTAL ל- true .

אזהרה : זה לא מובטח לייצר קבצים בינאריים זהים לאלה שנוצרו על ידי buildbots. הכתובות של פונקציות או נתונים הכלולים בקובצי האובייקט עשויות להיות שונות. כדי להבטיח שהחפצים שנוצרו זהים ב-100% לאלה שנבנו על ידי תשתית EngProd, השאר את הערך הזה לא מוגדר.