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 sistema de compilação, você pode considerar as macros procedurais 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ódulo que controlam a ligação disponível.
Tipo de Módulo da Biblioteca Rust | Definição |
---|---|
biblioteca_ferrugem | Fornece ambas as 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 |
rust_library_rlib | Fornece apenas a variante rlib de uma biblioteca Rust; módulos que fornecem apenas variantes rlib não podem ser garantidos para funcionar com a propriedade rustlibs . |
rust_library_dylib | Fornece apenas a variante dylib de uma biblioteca Rust; módulos que fornecem apenas variantes dylib não podem ser garantidos para 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 têm tipos de módulo que controlam a vinculação disponível, mostrada na tabela a seguir.
Tipo de módulo de biblioteca Rust FFI | Definição |
---|---|
ferrugem_ffi | Fornece as duas variantes da biblioteca C: estática e compartilhada. |
rust_ffi_shared | Fornece apenas a variante de biblioteca compartilhada C. |
rust_ffi_static | Fornece apenas a variante de 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 .
rust_proc_macro
As macros procedurais Rust (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 Procedurais da documentação oficial do Rust.
Para os propósitos do sistema de compilaçã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
, inclua o nome do módulo na propriedade proc_macros
.
Como proc_macros
são plugins de compilador, eles necessariamente têm como alvo o host e não produzem nenhum código que seria 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 |
---|---|
haste / nome | A propriedade stem controla o nome do arquivo da biblioteca de saída, que, caso contrário, o padrão é name . O compilador Rust impõe certos requisitos aos nomes dos arquivos de 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 necessária para módulos de produção de biblioteca; além disso, tem uma relação com o nome do arquivo de saída. (Veja a definição do stem .) |
include_dirs | Para módulos rust_ffi , esta propriedade define uma lista de strings representando caminhos de inclusão relativos: caminhos que contêm cabeçalhos que os módulos cc dependentes podem usar. |
Ligação de rust_library ou rust_ffi
Por padrão, os módulos da biblioteca Rust direcionados a dispositivos são sempre vinculados dinamicamente a libstd
. Os módulos host, no entanto, são sempre vinculados estaticamente a libstd
.
A vinculação usada para dependências do rustlibs
depende das preferências de vinculação dos módulos raiz. (Por exemplo, um rust_binary
com prefer_rlibs
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.