Hay dos tipos de módulos de biblioteca Rust, uno que produce bibliotecas Rust y otro que produce bibliotecas compatibles con C. Además, para fines de compilación del sistema, puede considerar las macros de procedimiento de Rust ( proc-macros
) como un tipo especial de biblioteca.
biblioteca_óxido
El módulo rust_library
produce bibliotecas de Rust para que las utilicen otros módulos de Rust.
Además de las variantes _host
, las bibliotecas de Rust tienen tipos de módulos que controlan el enlace disponible.
Tipo de módulo de biblioteca Rust | Definición |
---|---|
biblioteca_óxido | Proporciona ambas variantes de biblioteca, rlib y dylib . AOSP recomienda este tipo de módulo para las bibliotecas de Rust, ya que permite que los módulos funcionen correctamente cuando se enumeran como una dependencia en la propiedad rustlibs . |
biblioteca_oxidada_rlib | Proporciona sólo la variante rlib de una biblioteca Rust; No se puede garantizar que los módulos que proporcionan solo variantes rlib funcionen con la propiedad rustlibs . |
biblioteca_oxidada_dylib | Proporciona sólo la variante dylib de una biblioteca Rust; No se puede garantizar que los módulos que proporcionan solo variantes dylib funcionen con la propiedad rustlibs . |
óxido_ffi
El módulo rust_ffi
produce bibliotecas compatibles con C para interoperar con módulos CC.
Además de las variantes _host
, las bibliotecas Rust FFI tienen tipos de módulos que controlan el enlace disponible, como se muestra en la siguiente tabla.
Tipo de módulo de biblioteca Rust FFI | Definición |
---|---|
óxido_ffi | Proporciona ambas variantes de la biblioteca C: estática y compartida. |
oxida_ffi_compartido | Proporciona solo la variante de biblioteca compartida C. |
óxido_ffi_estático | Proporciona solo la variante de biblioteca estática C. |
Para ver un ejemplo básico del uso de rust_ffi
para llamar a Rust desde C, consulte la página Patrones de Rust de Android .
Para obtener información sobre un uso más avanzado, visite la documentación oficial de Rust .
óxido_proc_macro
Las macros de procedimiento de Rust (proc-macros) pueden ser útiles para extender el compilador para realizar transformaciones del código fuente o proporcionar nuevos atributos. Puede encontrar más información sobre estos en la página Macros de procedimiento de la documentación oficial de Rust.
Para los propósitos del sistema de compilación, el módulo rust_proc_macro
funciona de manera similar a los módulos rust_library
. Para los módulos que dependen de rust_proc_macros
, agregue el nombre del módulo a la propiedad proc_macros
.
Como proc_macros
son complementos del compilador, necesariamente apuntan al host y no producen ningún código que se pueda ejecutar en un dispositivo.
Propiedades notables de la biblioteca Rust
Las propiedades definidas en la siguiente tabla se suman a las propiedades comunes importantes que se aplican a todos los módulos. Estos son particularmente importantes para los módulos de la biblioteca Rust o exhiben un comportamiento único específico del tipo de módulo rust_library
.
Propiedades de la biblioteca Rust | Definición |
---|---|
raíz / nombre | La propiedad stem controla el nombre del archivo de la biblioteca de salida, que de lo contrario el valor predeterminado es name . El compilador de Rust impone ciertos requisitos a los nombres de archivos de las bibliotecas y, como resultado, el sistema de compilación aplica estos requisitos para evitar problemas de compilación. El nombre del archivo de salida debe ajustarse al formato |
nombre_caja | Esta es una propiedad obligatoria para los módulos productores de bibliotecas; además tiene una relación con el nombre del archivo de salida. (Consulte la definición stem ). |
export_include_dirs | Para los módulos rust_ffi , esta propiedad define una lista de cadenas que representan rutas de inclusión relativas: rutas que contienen encabezados que los módulos cc dependientes pueden usar. |
Vinculación de Rust_library o Rust_ffi
De forma predeterminada, los módulos de la biblioteca Rust dirigidos a dispositivos siempre están vinculados dinámicamente con libstd
. Los módulos host, sin embargo, siempre están vinculados estáticamente a libstd
.
El enlace utilizado para las dependencias rustlibs
depende de las preferencias de enlace del módulo raíz. (Por ejemplo, un rust_binary
con prefer_rlib: true
usará variantes de la biblioteca Rust que vinculan rustlibs
como rlibs
).
Para permitir la producción de módulos de dependencia raíz que no dependen de ninguna biblioteca dinámica de Rust (como ejecutables estáticos), rlibs
proporciona variantes de enlace libstd
tanto dinámicas como estáticas. Soong vincula automáticamente la variante correcta.