Regras de Compilação
O código Rust geralmente é compilado usando cargo
. O Chromium é compilado com gn
e ninja
para eficiência --- suas regras estáticas permitem a máxima paralelização. O Rust não é exceção.
Adicionando código Rust ao Chromium
Em algum arquivo BUILD.gn
existente do Chromium, declare um rust_static_library
:
import("//build/rust/rust_static_library.gni")
rust_static_library("my_rust_lib") {
crate_root = "lib.rs"
sources = [ "lib.rs" ]
}
Você também pode adicionar deps
em outros módulos Rust. Mais tarde, usaremos isso para depender de código de terceiros.
Você deve especificar ambos o crate root e uma lista completa de fontes. O crate_root
é o arquivo fornecido ao compilador Rust que representa o arquivo raiz da unidade de compilação --- normalmente lib.rs
. sources
é uma lista completa de todos os arquivos de código que o ninja
precisa para determinar quando as recompilações são necessárias.
(Não existe um source_set
Rust, porque em Rust, um crate inteiro é uma unidade de compilação. Uma static_library
é a menor unidade.)
Os alunos podem estar se perguntando por que precisamos de um template gn, em vez de usar o suporte integrado do gn para bibliotecas estáticas Rust. A resposta é que este template fornece suporte para interoperabilidade CXX, recursos Rust e testes unitários, alguns dos quais usaremos mais tarde.