Existem dois tipos de módulos de biblioteca Rust, um que produz bibliotecas Rust e outro que produz bibliotecas compatíveis com C. Além disso, para fins de construção do sistema, você pode considerar as macros procedurais do Rust ( proc-macros
) como um tipo especial de biblioteca.
biblioteca_ferrugem
O módulo rust_library
produz bibliotecas Rust para uso por outros módulos Rust.
Além das variantes _host
, as bibliotecas Rust possuem tipos de módulos que controlam a ligação disponível.
Tipo de módulo de biblioteca Rust | Definição |
---|---|
biblioteca_ferrugem | Fornece variantes de biblioteca, rlib e dylib . AOSP recomenda este tipo de módulo para bibliotecas Rust, pois permite que os módulos funcionem corretamente quando listados como uma dependência na propriedade rustlibs |
ferrugem_library_rlib | Fornece apenas a variante rlib de uma biblioteca Rust; módulos que fornecem apenas variantes rlib não podem funcionar com a propriedade rustlibs . |
ferrugem_library_dylib | Fornece apenas a variante dylib de uma biblioteca Rust; módulos que fornecem apenas variantes dylib não podem funcionar com a propriedade rustlibs . |
ferrugem_ffi
O módulo rust_ffi
produz bibliotecas compatíveis com C para interoperar com módulos CC.
Além das variantes _host
, as bibliotecas Rust FFI possuem tipos de módulos que controlam a ligação disponível, mostrada na tabela a seguir.
Tipo de módulo de biblioteca Rust FFI | Definição |
---|---|
ferrugem_ffi | Fornece ambas as variantes da biblioteca C: estática e compartilhada. |
ferrugem_ffi_shared | Fornece apenas a variante da biblioteca compartilhada C. |
ferrugem_ffi_static | Fornece apenas a variante da biblioteca estática C. |
Para obter um exemplo básico de uso de rust_ffi
para chamar Rust de C, consulte a página Android Rust Patterns .
Para obter informações sobre uso mais avançado, visite a documentação oficial do Rust .
ferrugem_proc_macro
Macros procedurais de ferrugem (proc-macros) podem ser úteis para estender o compilador para realizar transformações de código-fonte ou fornecer novos atributos. Mais informações podem ser encontradas na página Macros processuais da documentação oficial do Rust.
Para efeitos do sistema de construção, o módulo rust_proc_macro
funciona de forma semelhante aos módulos rust_library
. Para módulos que dependem de rust_proc_macros
, adicione o nome do módulo à propriedade proc_macros
.
Como proc_macros
são plug-ins de compilador, eles necessariamente têm como alvo o host e não produzem nenhum código que possa ser executado em um dispositivo.
Propriedades notáveis da biblioteca Rust
As propriedades definidas na tabela abaixo são adicionais às propriedades comuns importantes que se aplicam a todos os módulos. Eles são particularmente importantes para os módulos da biblioteca Rust ou exibem um comportamento exclusivo específico para o tipo de módulo rust_library
.
Propriedades da biblioteca Rust | Definição |
---|---|
radical / nome | A propriedade stem controla o nome do arquivo da biblioteca de saída, cujo padrão é name . O compilador Rust impõe certos requisitos aos nomes de arquivos da biblioteca e, como resultado, o sistema de compilação impõe esses requisitos para evitar problemas de compilação. O nome do arquivo de saída deve estar em conformidade com o formato |
nome_da_caixa | Esta é uma propriedade obrigatória para módulos de produção de bibliotecas; além disso, tem uma relação com o nome do arquivo de saída. (Veja a definição stem .) |
export_include_dirs | Para módulos rust_ffi , esta propriedade define uma lista de strings que representam caminhos de inclusão relativos: caminhos que contêm cabeçalhos que os módulos cc dependentes podem usar. |
Ligação de ferrugem_library ou ferrugem_ffi
Por padrão, os módulos da biblioteca Rust direcionados a dispositivos são sempre vinculados dinamicamente a libstd
. Os módulos host, entretanto, são sempre vinculados estaticamente ao libstd
.
A ligação usada para dependências rustlibs
depende das preferências de ligação do módulo raiz. (Por exemplo, um rust_binary
com prefer_rlib: true
usará variantes da biblioteca Rust que vinculam rustlibs
como rlibs
.)
Para permitir a produção de módulos de dependência raiz que não dependem de nenhuma biblioteca de ferrugem dinâmica (como executáveis estáticos), rlibs
fornece variantes de ligação libstd
dinâmicas e estáticas. A variante correta é automaticamente vinculada pelo Soong.