Création d'une sys-crate pour la gestion des librairies FSV #70

Merged
florian_briand merged 4 commits from feat/38-fsv-sys-crate into main 2024-10-09 22:37:37 +02:00

Détails

Début d'implémentation de bindings pour FSV SESAM-Vitale

  • Création de la crates/fsv-sys
  • Ajout des headers des versions FSV 1.40.14 et 1.40.13 dans un sous-dossier crates/fsv-sys/vendor
  • Génération des bindings depuis ces headers avec bindgen
  • Implémentation d'une structure de loading de la librairie au runtime
    • Un pattern similaire au "TypeState pattern" est utilisé pour gérer plusieurs versions possibles des bindings FSV
    • Une macro permet de générer avec un peu moins de boilerplate que nécessaire la couche d'accès aux fonctions de la librairie

Pourquoi ?

Cette PR est une étape importante du ticket #38

Une telle sys-crate, respectant (à peu près) les bonnes pratiques d'une telle implem, permet :

  • Pouvoir être diffusée publiquement en tant que telle, pour faciliter le travail à des copaines
  • De concentrer le travail très spécifique et bas niveau de gestion des librairies et des bindings dans une crate dédiée
  • De ne pas "forcer" une approche "orientée" sur l'API plus haut niveau qu'on décide de brancher sur ces bindings
    • En effet, l'implem haut niveau fait des choix non neutres, comme le choix de certains types, la technique de gestion des erreurs, etc.

Documentation

Aide reçue sur les forums Rust

Documentations

### Détails Début d'implémentation de bindings pour FSV SESAM-Vitale - Création de la crates/fsv-sys - Ajout des headers des versions FSV 1.40.14 et 1.40.13 dans un sous-dossier crates/fsv-sys/vendor - Génération des bindings depuis ces headers avec bindgen - Implémentation d'une structure de loading de la librairie au runtime - Un pattern similaire au "TypeState pattern" est utilisé pour gérer plusieurs versions possibles des bindings FSV - Une macro permet de générer avec un peu moins de boilerplate que nécessaire la couche d'accès aux fonctions de la librairie ### Pourquoi ? Cette PR est une étape importante du ticket #38 Une telle sys-crate, respectant (à peu près) les bonnes pratiques d'une telle implem, permet : - Pouvoir être diffusée publiquement en tant que telle, pour faciliter le travail à des copaines - De concentrer le travail très spécifique et bas niveau de gestion des librairies et des bindings dans une crate dédiée - De ne pas "forcer" une approche "orientée" sur l'API plus haut niveau qu'on décide de brancher sur ces bindings - En effet, l'implem haut niveau fait des choix non neutres, comme le choix de certains types, la technique de gestion des erreurs, etc. ### Documentation # Aide reçue sur les forums Rust - [Génération des bindings avec Bindgen](https://users.rust-lang.org/t/how-to-handle-bindgen-generating-types-aliases-instead-of-callable-functions/118083) - [Gestion des versions multiples avec la structure de loading de la librairie](https://users.rust-lang.org/t/manage-various-versions-of-a-c-library-loaded-at-runtime/118973) # Documentations - [Making a sys-crate](https://kornel.ski/rust-sys-crate) - [LibLoading](https://docs.rs/libloading/latest/libloading/) - [Bindgen](https://rust-lang.github.io/rust-bindgen/)
florian_briand added the
enhancement
module/sesam-vitale
labels 2024-10-01 00:14:19 +02:00
florian_briand self-assigned this 2024-10-01 00:14:19 +02:00
florian_briand added 2 commits 2024-10-01 00:14:20 +02:00
- Création de la crates/fsv-sys
- Ajout des headers de la FSV 1.40.14.13 dans crates/fsv-sys/vendor
- Génération des bindings depuis ces headers avec bindgen
- Implémentation d'une structure de loading de la librairie au runtime
- Implémentation d'une macro permettant de générer facilement la couche d'accès aux fonctions de la librairie
florian_briand added this to the 0 - POC project 2024-10-01 00:14:20 +02:00
florian_briand requested review from kosssi 2024-10-01 00:14:30 +02:00
florian_briand requested review from theo 2024-10-01 00:14:30 +02:00
florian_briand added spent time 2024-10-01 00:15:49 +02:00
16 hours 54 minutes
florian_briand added 3 commits 2024-10-01 19:13:49 +02:00
florian_briand force-pushed feat/38-fsv-sys-crate from c9b1895e0c to 1a292c6316 2024-10-01 22:23:17 +02:00 Compare
florian_briand force-pushed feat/38-fsv-sys-crate from 1a292c6316 to 97b4d6c443 2024-10-02 12:13:38 +02:00 Compare
kosssi approved these changes 2024-10-07 22:34:09 +02:00
kosssi left a comment
Owner

J'ai eu du mal à comprendre dans un premier temps avec l'ensemble des commits, j'ai donc étudié chaque commit, c'est un peu plus « facile »...

Je n'ai pas énormément d'avis pour te challenger.

Je t'ai mis des micros commentaires.

J'ai eu du mal à comprendre dans un premier temps avec l'ensemble des commits, j'ai donc étudié chaque commit, c'est un peu plus « facile »... Je n'ai pas énormément d'avis pour te challenger. Je t'ai mis des micros commentaires.
@ -0,0 +13,4 @@
Les détails de l'avancement de l'implémentation des bindings FSV sont donnés dans le fichier [PROGRESS.md](PROGRESS.md)
| Module | Progression |
Owner

Je ne mettrai pas 2 fois le tableau, on risque de désynchroniser les 2 ;)
Je laisserai celui qui est dans le fichier PROGRESS.md surtout que les ancres ne fonctionnent pas ici.

Je ne mettrai pas 2 fois le tableau, on risque de désynchroniser les 2 ;) Je laisserai celui qui est dans le fichier `PROGRESS.md` surtout que les ancres ne fonctionnent pas ici.
Author
Owner

True, ça roule :)

  • Limiter le tableau d'avancement au fichier PROGRESS.md
True, ça roule :) - [x] Limiter le tableau d'avancement au fichier PROGRESS.md
florian_briand marked this conversation as resolved
@ -0,0 +39,4 @@
### Pré-requis
- Pour la génération des bindings lors de la pahse de `build` à l'aide de `bindgen`, il est nécessaire d'avoir installé `clang` ([documentation](https://rust-lang.github.io/rust-bindgen/requirements.html)).
Owner
  • Microtypo : pahse -> phase
- [x] Microtypo : pahse -> phase
florian_briand marked this conversation as resolved
florian_briand added 1 commit 2024-10-09 22:26:57 +02:00
florian_briand force-pushed feat/38-fsv-sys-crate from 5634089732 to d8b8ce9a77 2024-10-09 22:31:37 +02:00 Compare
florian_briand merged commit add40f32c5 into main 2024-10-09 22:37:37 +02:00
Sign in to join this conversation.
No reviewers
No Milestone
No project
No Assignees
2 Participants
Notifications
Total Time Spent: 16 hours 54 minutes
florian_briand
16 hours 54 minutes
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: P4Pillon/Krys4lide#70
No description provided.