قوانین Build
کد Rust معمولاً با استفاده از cargo
ساخته میشود. Chromium با gn
و ninja
جهت کارایی بیشتر ساخته میشود --- قواعد استاتیک آن حداکثر موازیسازی را امکانپذیر میسازد. Rust نیز از این قاعده مستثنی نیست.
افزودن کد Rust به Chromium
در برخی از فایلهای موجود BUILD.gn
یک rust_static_library
را اعلام کنید:
import("//build/rust/rust_static_library.gni")
rust_static_library("my_rust_lib") {
crate_root = "lib.rs"
sources = [ "lib.rs" ]
}
همچنین میتوانید deps
را روی سایر اهداف Rust اضافه کنید. بعداً از این برای وابستگی به کد شخص ثالث استفاده خواهیم کرد.
شما باید هر دوی crate root و فهرست کامل منابع را مشخص کنید. crate_root
فایلی است که به کامپایلر Rust داده میشود که نشاندهنده فایل ریشه واحد کامپایل است --- معمولاً بهنام lib.rs
است. همینطور sources
فهرست کاملی از تمام فایلهای منبعی است که ninja
برای تعیین زمان لازم برای بازسازی به آنها نیاز دارد.
(چیزی به نام Rust source_set
وجود ندارد، زیرا در Rust، تمامی crate یک واحد جمعآوری است. static_library
کوچکترین واحد است.)
دانشآموزان ممکن است تعجب کنند که چرا به جای استفاده از پشتیبانی داخلی gn برای کتابخانههای استاتیک Rust به یک الگوی gn نیاز داریم. پاسخ این است که این الگو از CXX interop، ویژگیهای Rust و تستهای واحد پشتیبانی میکند که بعداً از برخی از آنها استفاده خواهیم کرد.