módulos da biblioteca

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 lib<crate_name><suffix> . (Há uma dependência aqui na propriedade crate_name ).

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.