Ejemplo de Hello Rust

El siguiente es un ejemplo de cómo crear un objeto binario de Rust que utilice una biblioteca de Rust.

Por el momento, los módulos de Rust se limitan a directorios específicos definidos en build/soong/rust/config/allowed_list.go. En el siguiente módulo helloWorld, se usa el directorio external/rust para evitar modificar la lista.

Desde la fuente raíz de AOSP

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

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

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

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

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

Crea 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.
}

Crea 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"],
}

Por último, compila tu módulo hello_rust:

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