โมดูลคลัง

โมดูลไลบรารี 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 กำหนดข้อกำหนดบางอย่างเกี่ยวกับชื่อไฟล์ไลบรารี และด้วยเหตุนี้ ระบบบิลด์จึงบังคับใช้ข้อกำหนดเหล่านี้เพื่อหลีกเลี่ยงปัญหาในการคอมไพล์ ชื่อไฟล์เอาต์พุตต้องเป็นไปตามรูปแบบ lib<crate_name><suffix> (ที่นี่มีการขึ้นต่อกันในพร็อพเพอร์ตี้ crate_name)

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