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.