โมดูลไลบรารี Rust มี 2 ประเภท ได้แก่ โมดูลที่สร้างไลบรารี Rust และโมดูลที่สร้างไลบรารีที่ใช้ร่วมกับ C ได้ นอกจากนี้ คุณยังพิจารณามาโครแบบโพรซีเดอรัลของ Rust (proc-macros) เป็นไลบรารีประเภทพิเศษ
เพื่อวัตถุประสงค์ของระบบบิลด์ได้ด้วย
rust_library
โมดูล rust_library จะสร้างไลบรารี Rust เพื่อให้โมดูล Rust อื่นๆ ใช้
นอกจากตัวแปร _host แล้ว ไลบรารี Rust ยังมีประเภทโมดูลที่ควบคุม
การลิงก์ที่ใช้ได้
| ประเภทโมดูลไลบรารี Rust | คำจำกัดความ |
|---|---|
| rust_library | มีทั้งไลบรารี 2 รูปแบบ ได้แก่ rlib และ dylib AOSP ขอแนะนำให้ใช้โมดูลประเภทนี้สำหรับไลบรารี Rust เนื่องจากจะช่วยให้โมดูลทำงานได้อย่างถูกต้องเมื่อแสดงเป็นทรัพยากร Dependency ภายใต้พร็อพเพอร์ตี้ rustlibs
|
| rust_library_rlib | มีเฉพาะrlibไลบรารี Rust
โมดูลที่มีเฉพาะตัวแปร rlib ไม่รับประกันว่าจะทำงานร่วมกับพร็อพเพอร์ตี้
rustlibs ได้ |
| rust_library_dylib | มีเฉพาะไลบรารี Rust เวอร์ชัน dylib
โมดูลที่มีเฉพาะเวอร์ชัน dylib ไม่รับประกันว่าจะทำงานกับพร็อพเพอร์ตี้ rustlibs ได้ |
rust_ffi
โมดูล rust_ffi จะสร้างไลบรารีที่ใช้ร่วมกับ C ได้เพื่อทำงานร่วมกับโมดูล CC
นอกเหนือจากตัวแปร _host แล้ว ไลบรารี Rust FFI ยังมีประเภทโมดูลที่ควบคุมการลิงก์ที่ใช้ได้ ซึ่งแสดงในตารางต่อไปนี้
| ประเภทโมดูลไลบรารี Rust FFI | คำจำกัดความ |
|---|---|
| rust_ffi | มีทั้งไลบรารี C แบบคงที่และแบบแชร์ |
| rust_ffi_shared | มีเฉพาะตัวแปรไลบรารีที่ใช้ร่วมกันของ C |
| rust_ffi_static | มีเฉพาะตัวแปรไลบรารีแบบคงที่ของ C |
ดูตัวอย่างพื้นฐานของการใช้ rust_ffi เพื่อเรียกใช้ Rust จาก C ได้ที่หน้ารูปแบบ Rust ของ Android
ดูข้อมูลเกี่ยวกับการใช้งานขั้นสูงเพิ่มเติมได้ที่เอกสารประกอบอย่างเป็นทางการของ Rust
rust_proc_macro
มาโครแบบโพรซีเดอรัล (proc-macros) ของ Rust มีประโยชน์ในการขยายคอมไพเลอร์เพื่อ ทำการแปลงโค้ดต้นฉบับหรือระบุแอตทริบิวต์ใหม่ ดูข้อมูลเพิ่มเติม ได้ในหน้ามาโครเชิงกระบวนการ ของเอกสารประกอบอย่างเป็นทางการของ Rust
สำหรับวัตถุประสงค์ของระบบบิลด์ rust_proc_macro โมดูลจะทำงานคล้ายกับrust_library โมดูล
สำหรับโมดูลที่ขึ้นอยู่กับ rust_proc_macros
ให้เพิ่มชื่อโมดูลลงในพร็อพเพอร์ตี้ proc_macros
เนื่องจาก proc_macros เป็นปลั๊กอินคอมไพเลอร์ จึงจำเป็นต้องกำหนดเป้าหมายไปยังโฮสต์และไม่
สร้างโค้ดที่จะทำงานบนอุปกรณ์
คุณสมบัติที่สำคัญของไลบรารี Rust
พร็อพเพอร์ตี้ที่กำหนดไว้ในตารางด้านล่างเป็นพร็อพเพอร์ตี้เพิ่มเติมจากพร็อพเพอร์ตี้ทั่วไปที่สำคัญ
ซึ่งใช้กับโมดูลทั้งหมด ซึ่งมีความสำคัญอย่างยิ่งต่อโมดูลไลบรารี Rust
หรือแสดงลักษณะการทำงานที่ไม่เหมือนใครซึ่งเจาะจงสำหรับประเภทโมดูล rust_library
| พร็อพเพอร์ตี้ของไลบรารี Rust | คำจำกัดความ |
|---|---|
| stem / name | พร็อพเพอร์ตี้ stem จะควบคุมชื่อไฟล์ไลบรารีเอาต์พุต
ซึ่งมีค่าเริ่มต้นเป็น name
คอมไพเลอร์ Rust กำหนดข้อกำหนดบางอย่างเกี่ยวกับชื่อไฟล์ไลบรารี และด้วยเหตุนี้ ระบบบิลด์จึงบังคับใช้ข้อกำหนดเหล่านี้เพื่อหลีกเลี่ยงปัญหาในการคอมไพล์
ชื่อไฟล์เอาต์พุตต้องเป็นไปตามรูปแบบ |
| crate_name | นี่คือพร็อพเพอร์ตี้ที่จำเป็นสำหรับโมดูลที่สร้างไลบรารี
นอกจากนี้ ยังมีความสัมพันธ์กับชื่อไฟล์เอาต์พุตด้วย (ดูคำจำกัดความของ stem) |
| export_include_dirs | สำหรับโมดูล rust_ffi พร็อพเพอร์ตี้นี้จะกำหนดรายการสตริงที่แสดงเส้นทางการรวมแบบสัมพัทธ์ ซึ่งเป็นเส้นทางที่มีส่วนหัวที่โมดูล cc ที่ขึ้นต่อกันสามารถใช้ได้ |
การลิงก์ rust_library หรือ rust_ffi
โดยค่าเริ่มต้น โมดูลไลบรารี Rust ที่กำหนดเป้าหมายเป็นอุปกรณ์จะลิงก์แบบไดนามิกกับ libstd เสมอ
อย่างไรก็ตาม โมดูลโฮสต์จะลิงก์แบบคงที่กับ libstd เสมอ
การลิงก์ที่ใช้สำหรับทรัพยากร Dependency ของ rustlibs จะขึ้นอยู่กับ
ค่ากำหนดการลิงก์ของโมดูลราก (เช่น rust_binary ที่มี prefer_rlib: true จะ
ใช้ตัวแปรของไลบรารี Rust ที่ลิงก์ rustlibs เป็น rlibs)
rlibs มีทั้งตัวแปรการลิงก์แบบไดนามิกและแบบคงที่ libstd เพื่ออนุญาตให้สร้างโมดูลการอ้างอิงรูทที่ไม่ต้องอาศัยไลบรารี Rust แบบไดนามิก (เช่น ไฟล์ปฏิบัติการแบบคงที่) Soong จะลิงก์ตัวแปรที่ถูกต้องโดยอัตโนมัติ