โมดูลไลบรารี Rust มี 2 ประเภท ได้แก่ โมดูลที่สร้างไลบรารี Rust และโมดูลที่สร้างไลบรารีที่ใช้ร่วมกับ C ได้ นอกจากนี้ สำหรับวัตถุประสงค์ของระบบบิลด์ คุณสามารถพิจารณามาโครแบบโพรซีเดอรัลของ Rust (proc-macros) เป็นไลบรารีประเภทพิเศษได้
rust_library
โมดูล rust_library จะสร้างไลบรารี Rust เพื่อให้โมดูล Rust อื่นๆ ใช้
นอกจาก_hostตัวแปรแล้ว ไลบรารี Rust ยังมีประเภทโมดูลที่ควบคุม
การเชื่อมโยงที่ใช้ได้
| ประเภทโมดูลไลบรารี Rust | คำจำกัดความ |
|---|---|
| rust_library | มีทั้งไลบรารี rlib และ dylib AOSP ขอแนะนำให้ใช้โมดูลประเภทนี้
สำหรับไลบรารี Rust เนื่องจากจะช่วยให้โมดูล
ทำงานได้อย่างถูกต้องเมื่อแสดงเป็นทรัพยากร Dependency ภายใต้พร็อพเพอร์ตี้ rustlibs
|
| rust_library_rlib | มีเฉพาะไลบรารี Rust เวอร์ชัน rlib
โมดูลที่มีเฉพาะเวอร์ชัน rlib ไม่รับประกันว่าจะใช้งานได้กับพร็อพเพอร์ตี้ rustlibs |
| rust_library_dylib | มีเฉพาะตัวแปร dylib ของไลบรารี Rust
โมดูลที่มีเฉพาะตัวแปร dylib ไม่รับประกันว่าจะทำงานกับพร็อพเพอร์ตี้ rustlibs ได้ |
rust_ffi
rust_ffi โมดูลจะสร้างไลบรารีที่ใช้ร่วมกับ C ได้เพื่อทำงานร่วมกับโมดูล CC
นอกเหนือจากตัวแปร _host แล้ว ไลบรารี Rust FFI ยังมีประเภทโมดูลที่ควบคุมการลิงก์ที่ใช้ได้ ซึ่งแสดงในตารางต่อไปนี้
| ประเภทโมดูลไลบรารี FFI ของ Rust | คำจำกัดความ |
|---|---|
| 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 เพื่ออนุญาตให้สร้างโมดูลทรัพยากร Dependency รูทที่ไม่ต้องอาศัยไลบรารี Rust แบบไดนามิก (เช่น ไฟล์ปฏิบัติการแบบคงที่) Soong จะลิงก์ตัวแปรที่ถูกต้องโดยอัตโนมัติ