قوانین 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 و تست‌های واحد پشتیبانی می‌کند که بعداً از برخی از آنها استفاده خواهیم کرد.