Esistono due tipi di moduli della libreria Rust: uno che produce librerie Rust e
uno che produce librerie compatibili con C. Inoltre, ai fini del sistema di build, puoi considerare le macro procedurali Rust (proc-macros
) come un tipo speciale di libreria.
rust_library
Il modulo rust_library
produce librerie Rust da utilizzare in altri moduli Rust.
Oltre alle varianti _host
, le librerie Rust hanno tipi di moduli che controllano
il collegamento disponibile.
Tipo di modulo della libreria Rust | Definizione |
---|---|
rust_library | Fornisce entrambe le varianti della libreria, rlib e dylib . AOSP consiglia questo tipo di modulo per le librerie Rust, in quanto consente ai moduli di funzionare correttamente quando sono elencati come dipendenza nella proprietà rustlibs |
rust_library_rlib | Fornisce solo la variante rlib di una libreria Rust;
non è garantito che i moduli che forniscono solo varianti rlib funzionino con la proprietà
rustlibs . |
rust_library_dylib | Fornisce solo la variante dylib di una libreria Rust;
non è garantito che i moduli che forniscono solo varianti dylib
funzionino con la proprietà rustlibs . |
rust_ffi
Il modulo rust_ffi
produce librerie compatibili con C per l'interoperabilità con i moduli CC.
Oltre alle varianti _host
, le librerie FFI Rust hanno tipi di moduli che
controllano il collegamento disponibile, mostrato nella tabella seguente.
Tipo di modulo della libreria FFI di Rust | Definizione |
---|---|
rust_ffi | Fornisce entrambe le varianti della libreria C: statica e condivisa. |
rust_ffi_shared | Fornisce solo la variante della libreria condivisa C. |
rust_ffi_static | Fornisce solo la variante della libreria statica C. |
Per un esempio di base dell'utilizzo di rust_ffi
per chiamare Rust da C, consulta la pagina
Android Rust Patterns.
Per informazioni sull'utilizzo più avanzato, visita la documentazione ufficiale di Rust.
rust_proc_macro
Le macro procedurali Rust (proc-macro) possono essere utili per estendere il compilatore in modo da eseguire trasformazioni del codice sorgente o fornire nuovi attributi. Per ulteriori informazioni, consulta la pagina Macro procedurali della documentazione ufficiale di Rust.
Ai fini del sistema di compilazione, il modulo rust_proc_macro
funziona in modo simile
ai moduli rust_library
. Per i moduli che dipendono da rust_proc_macros
,
aggiungi il nome del modulo alla proprietà proc_macros
.
Poiché proc_macros
sono plug-in del compilatore, hanno come target l'host e non
producono codice che verrà eseguito su un dispositivo.
Proprietà della libreria Rust degne di nota
Le proprietà definite nella tabella seguente si aggiungono alle proprietà comuni importanti
che si applicano a tutti i moduli. Questi sono particolarmente importanti per i moduli della libreria Rust o mostrano un comportamento unico specifico per il tipo di modulo rust_library
.
Proprietà della libreria Rust | Definizione |
---|---|
stem / name | La proprietà stem controlla il nome del file della libreria di output,
che altrimenti è impostato su name per impostazione predefinita.
Il compilatore Rust impone determinati requisiti per i nomi dei file delle librerie e, di conseguenza, il sistema di build applica questi requisiti per evitare problemi di compilazione.
Il nome del file di output deve essere conforme al formato |
crate_name | Si tratta di una proprietà obbligatoria per i moduli che producono librerie;
inoltre, ha una relazione con il nome del file di output. Consulta la definizione di stem . |
export_include_dirs | Per i moduli rust_ffi , questa proprietà definisce un elenco di
stringhe che rappresentano i percorsi di inclusione relativi: percorsi che contengono intestazioni
che i moduli cc dipendenti possono utilizzare. |
Collegamento di rust_library o rust_ffi
Per impostazione predefinita, i moduli della libreria Rust che hanno come target i dispositivi sono sempre collegati dinamicamente
a libstd
. I moduli host, tuttavia, sono sempre collegati staticamente
a libstd
.
Il collegamento utilizzato per le dipendenze di rustlibs
dipende dalle preferenze di collegamento del modulo radice. (Ad esempio, un rust_binary
con prefer_rlib: true
utilizzerà
varianti della libreria Rust che collegano rustlibs
come rlibs
.)
Per consentire la produzione di moduli di dipendenza radice che non si basano su librerie Rust dinamiche (come eseguibili statici), rlibs
fornisce varianti di collegamento sia dinamiche che statiche di libstd
. La variante corretta viene collegata automaticamente da
Soong.