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 del sistema de compilación, puede considerar las macros de procedimiento de Rust ( proc-macros
) como un tipo especial de biblioteca.
rust_library
El módulo rust_library
produce bibliotecas de Rust para que las utilicen otros módulos de Rust.
Además de las variantes de _host
, las bibliotecas de Rust tienen tipos de módulos que controlan la vinculación disponible.
Tipo de módulo de biblioteca de óxido | Definición |
---|---|
rust_library | 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 . |
rust_library_rlib | Proporciona solo la variante rlib de una biblioteca de Rust; No se puede garantizar que los módulos que solo proporcionan variantes de rlib funcionen con la propiedad rustlibs . |
rust_library_dylib | Proporciona solo la variante dylib de una biblioteca Rust; No se puede garantizar que los módulos que solo proporcionan variantes de dylib funcionen con la propiedad rustlibs . |
rust_ffi
El módulo rust_ffi
produce bibliotecas compatibles con C para interoperar con módulos CC.
Además de las variantes de _host
, las bibliotecas Rust FFI tienen tipos de módulos que controlan el enlace disponible, que se muestra en la siguiente tabla.
Tipo de módulo de biblioteca Rust FFI | Definición |
---|---|
rust_ffi | Proporciona ambas variantes de la biblioteca C: estática y compartida. |
rust_ffi_shared | Solo proporciona la variante de biblioteca compartida C. |
rust_ffi_static | Solo proporciona 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 de patrones de Android Rust .
Para obtener información sobre un uso más avanzado, visite la documentación oficial de Rust .
rust_proc_macro
Las macros de procedimiento de Rust (proc-macros) pueden ser útiles para extender el compilador para realizar transformaciones de código fuente o proporcionar nuevos atributos. Se puede encontrar más información sobre estos en la página de macros de procedimiento de la documentación oficial de Rust.
A los efectos 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 se dirigen al host y no producen ningún código que pueda ejecutarse 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 para el tipo de módulo rust_library
.
Propiedades de la biblioteca de óxido | Definición |
---|---|
tallo / nombre | La propiedad stem controla el nombre de archivo de la biblioteca de salida, que de lo contrario se establece de forma predeterminada en name . El compilador de Rust impone ciertos requisitos en los nombres de archivo de la biblioteca y, como resultado, el sistema de compilación impone estos requisitos para evitar problemas de compilación. El nombre del archivo de salida debe ajustarse al formato |
nombre_caja | Esta es una propiedad necesaria para los módulos que producen bibliotecas; además tiene una relación con el nombre del archivo de salida. (Vea la definición de la stem .) |
incluir_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 pueden usar los módulos cc dependientes. |
Enlace de rust_library o rust_ffi
De forma predeterminada, los módulos de la biblioteca de Rust que se dirigen a los dispositivos siempre se vinculan dinámicamente con libstd
. Sin embargo, los módulos host siempre están vinculados estáticamente con libstd
.
El enlace utilizado para las dependencias de rustlibs
depende de las preferencias de enlace de los módulos raíz. (Por ejemplo, un rust_binary
con prefer_rlibs
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 se basen en bibliotecas de óxido dinámicas (como ejecutables estáticos), rlibs
proporciona variantes de vinculación de libstd
dinámicas y estáticas. Soong vincula automáticamente la variante correcta.