โมดูลไลบรารี

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

ห้องสมุดของรัสเซีย

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

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

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

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

rust_proc_macro

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