Reglas de Compilación (Build)

El código de Rust se suele compilar con cargo. Chromium se compila con gn y ninja para aumentar la eficiencia. Sus reglas estáticas permiten el máximo paralelismo. Rust no es una excepción.

Añadir código de Rust a Chromium

En algunos archivos BUILD.gn de Chromium, declara una rust_static_library:

import("//build/rust/rust_static_library.gni")

rust_static_library("my_rust_lib") {
  crate_root = "lib.rs"
  sources = [ "lib.rs" ]
}

También puedes añadir deps en otros segmentos de Rust. Más adelante, lo usaremos en función del código de terceros.

Debes especificar tanto la raíz del crate como una lista completa de recursos. crate_root es el archivo proporcionado al compilador de Rust que representa el archivo raíz de la unidad de compilación, que suele ser lib.rs. sources es una lista completa de todos los archivos de origen que necesita ninja para determinar cuándo es necesario compilar de nuevo.

(No existe source_set en Rust porque un crate completo ya es una unidad de compilación. Una static_library es la unidad más pequeña).

Puede que los participantes se pregunten por qué necesitamos una plantilla gn en vez de usar la compatibilidad integrada de gn para las bibliotecas estáticas de Rust. La respuesta es que esta plantilla es compatible con la interoperabilidad de CXX, las funciones de Rust y las pruebas unitarias, algunas de las cuales usaremos más adelante.