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.