Modules de la bibliothèque

Il existe deux types de modules de bibliothèque Rust, l'un qui produit des bibliothèques Rust et l'autre qui produit des bibliothèques compatibles C. De plus, pour les besoins du système de construction, vous pouvez considérer les macros procédurales Rust ( proc-macros ) comme un type spécial de bibliothèque.

bibliothèque_rouille

Le module rust_library produit des bibliothèques Rust destinées à être utilisées par d'autres modules Rust.

En plus des variantes _host , les bibliothèques Rust ont des types de modules qui contrôlent la liaison disponible.

Type de module de bibliothèque Rust Définition
bibliothèque_rouille Fournit les deux variantes de bibliothèque, rlib et dylib . AOSP recommande ce type de module pour les bibliothèques Rust, car il permet aux modules de fonctionner correctement lorsqu'ils sont répertoriés comme dépendance sous la propriété rustlibs
rust_library_rlib Fournit uniquement la variante rlib d'une bibliothèque Rust ; les modules fournissant uniquement des variantes rlib ne peuvent pas être garantis de fonctionner avec la propriété rustlibs .
rust_library_dylib Fournit uniquement la variante dylib d'une bibliothèque Rust ; les modules fournissant uniquement des variantes dylib ne peuvent pas être garantis de fonctionner avec la propriété rustlibs .

rust_ffi

Le module rust_ffi produit des bibliothèques compatibles C pour interagir avec les modules CC.

En plus des variantes _host , les bibliothèques Rust FFI ont des types de modules qui contrôlent la liaison disponible, indiqués dans le tableau suivant.

Type de module de bibliothèque Rust FFI Définition
rust_ffi Fournit les deux variantes de la bibliothèque C : statique et partagée.
rust_ffi_shared Fournit uniquement la variante de bibliothèque partagée C.
rust_ffi_static Fournit uniquement la variante de la bibliothèque statique C.

Pour un exemple de base d'utilisation rust_ffi pour appeler Rust à partir de C, consultez la page Modèles de rouille Android .

Pour plus d'informations sur une utilisation plus avancée, visitez la documentation officielle de Rust .

rust_proc_macro

Les macros procédurales Rust (proc-macros) peuvent être utiles pour étendre le compilateur afin d'effectuer des transformations de code source ou de fournir de nouveaux attributs. Plus d’informations peuvent être trouvées à ce sujet sur la page Macros procédurales de la documentation officielle de Rust.

Pour les besoins du système de build, le module rust_proc_macro fonctionne de la même manière que les modules rust_library . Pour les modules qui dépendent de rust_proc_macros , ajoutez le nom du module à la propriété proc_macros .

Comme proc_macros sont des plugins de compilateur, ils ciblent nécessairement l'hôte et ne produisent aucun code qui s'exécuterait sur un périphérique.

Propriétés notables de la bibliothèque Rust

Les propriétés définies dans le tableau ci-dessous s'ajoutent aux propriétés communes importantes qui s'appliquent à tous les modules. Ceux-ci sont soit particulièrement importants pour les modules de la bibliothèque Rust, soit présentent un comportement unique spécifique au type de module rust_library .

Propriétés de la bibliothèque Rust Définition
tige / nom La propriété stem contrôle le nom du fichier de la bibliothèque de sortie, qui autrement est par défaut name .

Le compilateur Rust impose certaines exigences sur les noms de fichiers de bibliothèque et, par conséquent, le système de construction applique ces exigences pour éviter les problèmes de compilation. Le nom du fichier de sortie doit être conforme au format lib<crate_name><suffix> . (Il y a ici une dépendance sur la propriété crate_name ).

nom_caisse Il s'agit d'une propriété obligatoire pour les modules producteurs de bibliothèques ; il a également une relation avec le nom du fichier de sortie. (Voir la définition stem .)
export_include_dirs Pour les modules rust_ffi , cette propriété définit une liste de chaînes représentant les chemins d'inclusion relatifs : chemins qui contiennent des en-têtes que les modules cc dépendants peuvent utiliser.

Liaison de rust_library ou rust_ffi

Par défaut, les modules de la bibliothèque Rust ciblant les appareils sont toujours liés dynamiquement à libstd . Les modules hôtes, cependant, sont toujours liés statiquement à libstd .

La liaison utilisée pour les dépendances rustlibs dépend des préférences de liaison du module racine. (Par exemple, un rust_binary avec prefer_rlib: true utilisera les variantes de la bibliothèque Rust qui lient rustlibs en tant que rlibs .)

Pour permettre la production de modules de dépendance racine qui ne reposent sur aucune bibliothèque Rust dynamique (telle que des exécutables statiques), rlibs fournit des variantes de liaison libstd dynamiques et statiques. La bonne variante est automatiquement liée par Soong.