โมดูลคลัง

โมดูลไลบรารี Rust มี 2 ประเภท ได้แก่ โมดูลที่สร้างไลบรารี Rust และโมดูลที่สร้างไลบรารีที่เข้ากันได้กับ C นอกจากนี้ คุณยังพิจารณามาโครเชิงกระบวนการของ Rust (proc-macros) เป็นคลังประเภทพิเศษสำหรับวัตถุประสงค์ของระบบการสร้างได้

rust_library

โมดูล rust_library จะสร้างไลบรารี Rust ไว้ให้โมดูล Rust อื่นๆ ใช้งาน

นอกจากตัวแปร _host แล้ว ไลบรารี Rust ยังมีประเภทโมดูลที่ควบคุมการลิงก์ที่ใช้ได้

ประเภทโมดูลไลบรารี Rust คำจำกัดความ
rust_library มีทั้งตัวแปรไลบรารี rlib และ dylib AOSP แนะนำประเภทโมดูลนี้สำหรับไลบรารี Rust เนื่องจากช่วยให้โมดูลทำงานได้อย่างถูกต้องเมื่อแสดงเป็นข้อกำหนดในพร็อพเพอร์ตี้ rustlibs
rust_library_rlib มีเฉพาะตัวแปร rlib ของไลบรารี Rust เท่านั้น ไม่สามารถรับประกันได้ว่าโมดูลที่มีเฉพาะตัวแปร rlib จะทำงานร่วมกับพร็อพเพอร์ตี้ rustlibs ได้
rust_library_dylib มีเฉพาะตัวแปร dylib ของไลบรารี Rust เท่านั้น ไม่สามารถรับประกันได้ว่าโมดูลที่มีเฉพาะตัวแปร dylib จะทำงานร่วมกับพร็อพเพอร์ตี้ rustlibs ได้

rust_ffi

โมดูล rust_ffi จะสร้างไลบรารีที่เข้ากันได้กับ C เพื่อทำงานร่วมกับโมดูล CC

นอกจากตัวแปร _host แล้ว ไลบรารี FFI ของ Rust ยังมีประเภทโมดูลที่ควบคุมการลิงก์ที่ใช้ได้ดังที่แสดงในตารางต่อไปนี้

ประเภทโมดูลไลบรารี FFI ของ Rust คำจำกัดความ
rust_ffi มีทั้งตัวแปรของไลบรารี C แบบคงที่และแบบแชร์
rust_ffi_shared มีเฉพาะตัวแปรไลบรารีที่ใช้ร่วมกัน C เท่านั้น
rust_ffi_static มีเฉพาะตัวแปรไลบรารีแบบคงที่ C เท่านั้น

ดูตัวอย่างพื้นฐานของการใช้ rust_ffi สำหรับการเรียกใช้ Rust จาก C ได้ที่หน้ารูปแบบ Rust ของ Android

ดูข้อมูลเกี่ยวกับการใช้งานขั้นสูงได้ที่เอกสารประกอบอย่างเป็นทางการของ Rust

rust_proc_macro

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

การลิงก์ที่ใช้สำหรับ rustlibs Dependencies จะขึ้นอยู่กับค่ากําหนดการลิงก์ของโมดูลรูท (เช่น rust_binary ที่มี prefer_rlib: true จะต้องใช้ตัวแปรไลบรารี Rust ที่ลิงก์ rustlibs เป็น rlibs)

rlibs มีตัวแปรการลิงก์ทั้งแบบไดนามิกและแบบคงที่ของ libstd เพื่อให้สามารถผลิตโมดูลการพึ่งพารูทที่ไม่ใช้ไลบรารี Rust แบบไดนามิก (เช่น ไฟล์ปฏิบัติการแบบคงที่) โดย Soong จะลิงก์ตัวแปรที่ถูกต้องโดยอัตโนมัติ