Ejemplo de Hola Rust

El siguiente es un ejemplo de construcción de un binario de Rust que depende de una biblioteca de Rust.

Los módulos de Rust actualmente están confinados a directorios específicos definidos en build/soong/rust/config/allowed_list.go . El siguiente módulo helloWorld utiliza el directorio external/rust para evitar modificar esta lista.

Desde la raíz fuente de AOSP

mkdir -p external/rust/hello_rust/src/
mkdir -p external/rust/libsimple_printer/src/

Cree external/rust/hello_rust/src/hello_rust.rs con el siguiente contenido:

use simple_printer;
fn main
() {
 simple_printer
::print_hello_rust();
}

Cree un archivo external/rust/libsimple_printer/src/lib.rs con el siguiente contenido:

pub fn print_hello_rust() {
  println
!("Hello Rust!");
}

Cree un archivo external/rust/hello_rust/Android.bp con el siguiente contenido:

rust_binary {
    name
: "hello_rust",

   
// srcs must contain a single source file, the entry point source.
    srcs
: ["src/hello_rust.rs"],

   
// rustlibs are Rust library dependencies. The type, rlib (static) or dylib
   
// (dynamic), are chosen automatically based on module type and target
   
// to avoid linkage issues.
    rustlibs
: ["libsimple_printer"],

   
// define any additional compilation flags
    flags
: [
       
"-C debug-assertions=yes",
   
],

   
// cc libraries can be linked in to rust binaries and libraries through the
   
// shared_libs and static_libs properties. These are not needed for this
   
// simple example, so they are not included.
}

Cree un archivo external/rust/libsimple_printer/Android.bp con el siguiente contenido:

// rust_library provides dylib and rlib variants.
rust_library
{
   
//name or stem properties must be of the form lib<crate_name><any_suffix>
    name
: "libsimple_printer",

   
//crate_name must match the name used in source (e.g. extern crate <name>)
    crate_name
: "simple_printer",

   
//srcs must contain a single source file, the entry point source
    srcs
: ["src/lib.rs"],
}

Finalmente, construye tu módulo hello_rust :

source build/envsetup.sh
lunch aosp_arm64-eng
m hello_rust