โมดูลไลบรารี 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 จะลิงก์ตัวแปรที่ถูกต้องโดยอัตโนมัติ