fxSDK, un SDK alternatif pour écrire des add-ins
Posté le 29/08/2014 22:00
Cette page sert d'index pour la série de topics du fxSDK.
Le fxSDK est une collection d'outils permettant de développer des add-ins pour les calculatrices Casio des séries Graph. C'est une alternative au
fx-9860G SDK et
PrizmSDK qui ne sont plus activement maintenus, et le compagnon classique de mon noyau
gint.
Index des topics
Ce projet existe depuis 2015, alors il y a pas mal de topics liés. En voici une liste complète !
Topics principaux
Installation du fxSDK
Tutoriels
Compatibilité sur calculatrice et PC
Côté PC, le fxSDK est compatible avec
Linux, Mac OS, et WSL pour Windows ; normalement tout le monde peut l'utiliser. Je teste constamment sous Linux, et WSL est un Linux donc c'est testé aussi. Je n'ai pas de Mac OS donc il peut y avoir quelques surprises, mais en général c'est l'affaire de corriger un bug ou deux.
En termes de calculatrices, le fxSDK supporte :
Calculatrices monochromes
- Graph 35+E II
- Graph 35+ USB / Graph 35+E (SH3/SH4)
- Graph 75/75+/75+E
- Graph 85/85 SD/95 (SD) (pas activement testé)
Calculatrices couleurs
- Graph 90+E / fx-CG 50
- Prizm fx-CG 10/20
Comment installer le fxSDK et coder des add-ins
Le fxSDK s'installe à partir de dépôts Git sur la
forge de Planète Casio (par exemple
Lephenixnoir/fxsdk). Il y en a un peu beaucoup, donc manuellement c'est assez long. Pour que ça aille plus vite et pour simplifier le travail des débutants, il y a un outil appelé
GiteaPC qui peut faire ça pour vous.
Si vous utilisez Windows, vous aurez besoin de WSL pour accéder à un système Linux dans Windows. Heureusement, Microsoft a fait ça bien et c'est facile à faire. Voyez le
tutoriel d'installation de WSL 2 (et l'explication rapide de
ce que WSL 2 est).
Si vous utilisez Mac OS, ouvrez l’œil en lisant les topics pour ne pas manquer les informations supplémentaires et éventuelles déviations par rapport à la procédure normale sous Linux.
Méthode automatique avec GiteaPC (plus rapide / recommandée pour les débutants)
- Suivez le tutoriel d'utilisation de GiteaPC, qui explique comment obtenir le fxSDK.
Méthode automatique avec plugin VS Code
- Yannis300307 a créé un plugin VS Code Casio Dev Tools qui fonctionne sous Windows (avec WSL) et Debian (probablement les dérivés aussi).
Méthode AUR pour les utilisateurs Arch/Manjaro/dérivés (ils se reconnaîtront)
- Dark Storm maintient MiddleArch, un dépôt de paquets précompilés qui a entre autres le fxSDK.
Méthode manuelle (plus fine / classique pour les habitués)
- Compilez et installez le cross-compilateur GCC pour SuperH.
- installez (dans cet ordre) les dépôts fxSDK, OpenLibm, fxlibc, gint ; en option, Slyvtt/µSTL_2.3.
Description sommaire du fxSDK
Pour une introduction à l'utilisation du fxSDK qui montre comment utiliser les outils pour développer un add-in, lisez plutôt les
tutoriels d'utilisation de gint. Cette section est juste une description sommaire.
Le cœur du fxSDK est un cross-compilateur GCC pour SuperH, habituellement nommé
sh-elf-gcc. Bien sûr on a avec toute la suite d'outils, dont
as,
ld,
objdump,
objcopy (entre autres). Contrairement au vieux compilateur du SDK, GCC est un compilateur moderne avec beaucoup d'options et capable de très solides optimisations.
Sur la calculatrice, c'est
le noyau gint qui fait la majorité du travail. Il remplace fxlib/libfxcg et une partie de l'OS pour vous offrir des fonctionnalités plus cool et plus rapides. Les add-ins développés avec le fxSDK utilisent gint toutes les trois lignes !
Il y a enfin plusieurs outils utiles sur le PC qui sont utilisés durant le développement ou l'utilisation des add-ins :
- fxsdk est un script shell qui permet de créer et compiler les projets sans se prendre trop la tête. Le système de compilation officiel pour les add-ins est CMake, mais un système plus ancien de Makefile est encore supporté.
- fxconv est un outil très polyvalent qui convertit à la compilation les assets (images, polices, maps....). Il permet de travailler avec des logiciels et formats de fichiers normaux sur le PC et d'avoir automatiquement un format optimisé sur la calculatrice. fxconv est extrêmement extensible et chaque projet peut ajouter des conversions personnalisées.
- fxgxa crée les fichiers g1a (format des add-ins pour Graph monochromes) et g3a (format des add-ins pour Graph couleurs) à partir des programmes compilés.
- fxlink est un outil de communication qui peut transférer des fichiers vers les Graph 35+E II et Graph 90+E en ligne de commande, mais aussi échanger interactivement avec les add-ins gint par le câble USB, et est couramment utilisé pour réaliser des captures d'écran ou captures vidéo des add-ins.
Changelog et informations techniques
Ci-dessous se trouve la liste des posts annonçant les nouvelles versions du fxSDK, ainsi que des liens vers les instructions/tutoriels supplémentaires publiés avec.
Citer : Posté le 29/01/2021 18:46 | #
Nouvelle version : fxSDK 2.3.0
Release associée de gint : gint 2.3.0
Et voici la version 2.3 du fxSDK. C'est une version très orientée vers la distribution, pour rendre plus facile le partage des outils, programmes et bibliothèques, et la gestion des projets. J'espère que vous y trouverez votre compte, toute l'intention est de vous aider et/ou simplifier la vie.
Cette version arrive aussi avec GiteaPC qui fait le plus gros du boulot pour utiliser et mettre à jour des bibliothèques en deux coups de clavier. Je vous suggère d'y jeter un oeil, vous pourriez tourner avec tout à jour en 5-10 minutes.
Trois tutoriels accompagnent cette version :
• Utilisation de GiteaPC pour gérer un environnement de développement
• [Tutoriel] Compiler des add-ins avec CMake (fxSDK)
• Lephenixnoir/Template-gint-library d'écrit l'utilisation du fxSDK et de CMake pour créer une bibliothèque gint
Voici les détails des changements !
Nouveautés
• Ajouté un système plus élégant de conversion pour fxconv. Explications et instructions de migration.
• Ajouté le support de CMake comme système de compilation. Tout l'écosystème fxSDK bénéficie de ce support, j'ai par exemple modifié mes libs en conséquence. Explications et instructions de migration.
• Ajouté des modules CMake utilitaires : pour déterminer la version d'un projet à partir des tags et commits Git, et pour faciliter l'écriture de Find<Package>.cmake pour les bibliothèques
Changements
• libprof est désormais séparée en libprof-fx et libprof-cg. Brèves instructions de migration.
• La commande fxsdk update a été supprimée, les mises à jour de Makefile étant toujours plus compliquées qu'une simple copie. Si vous voulez éviter de vous y intéresser, considérez l'utilisation de CMake, qui est plus simple à comprendre et à gérer pour les débutants.
• fxg1a donnera toujours un nom interne (celui de la forme @ADDIN) correct donc ce n'est plus la peine de le spécifier. De toute façon personne ne s'en sert, c'était juste un coup à se planter de format (ce qui rend l'add-in invisible sur le menu principal).
• fxsdk new ne demande plus d'informations interactivement. Pour les Makefile il choisit des valeurs par défaut sensibles (à modifier dans project.cfg), pour CMake vous devez modifier CMakeLists.txt (dans lequel vous devez déjà ajouter les fichiers source etc).
• fxsdk new a une nouvelle option --makefile pour générer des Makefile (par défaut il utilise CMake).
Ajouté le 29/01/2021 à 19:36 :
Les instructions d'utilisation de GiteaPC ont été mises à jour avec des instructions spécifiques pour la création et la migration d'environnements de développement fxSDK/gint, ce qui conclut cette release (à quelques détails près).
Enjoy!
Citer : Posté le 30/01/2021 23:11 | #
Comme toujours avec les releases plus ou moins grosses, des bugs sont aussitôt trouvés, aussitôt corrigés.
Nouveau patch : fxSDK 2.3.1
Release associée de gint : gint 2.3.1
Corrections de bugs
• Corrigé la détection du dossier d'installation du compilateur dans le système CMake, qui était mal détecté sur les systèmes où la locale n'est pas anglaise.
Citer : Posté le 04/04/2021 23:07 | #
J'ai regardé les quelques dernières pages sans trouver de réponde, donc désolé de te déranger encore un peu,
mais j'ai une erreur au make install
Citer : Posté le 04/04/2021 23:15 | #
Une erreur à cause des différences de cp sous Mac OS, il semblerait. Essaie s'il te plaît de modifier la ligne 96 du Makefile par un cp -rp, ça devrait marcher aussi bien. Une fois la modif faite relance ton make install (ou la commande GiteaPC si tu t'es servi de ça).
Citer : Posté le 05/04/2021 00:01 | #
Merci, j'ai cherché sur internent mais je ne vois pas comment modifier ça, je n'ai pas la main sur le fichier. Je ne suis pas un as de git
Comment dois-je faire ?
Ajouté le 05/04/2021 à 00:30 :
C'est bon j'ai trouvé (et surtout, j'ai compris). Etape suivante !
Citer : Posté le 16/04/2021 11:26 | #
Bonjour ! J'ai créé un template de projet fxsdk sur le Gitea. Pas grand chose vraiment, mais dans l'espoir que cela aide quelques personnes je le partage ici.
https://gitea.planet-casio.com/KikooDX/gint-project-template
Cette base comprend :
un README plus complet que nécessaire
une LICENSE 0BSD (vous êtes libres d'en utiliser une autre ou de la supprimer !)
un exemple d'inclusion de function
un CMakeLists.txt facilement customisable avec pas mal de warnings par défaut
une tarte au citron
une configuration clang-format prête à partir
quelques autres détails que j'ai oublié
Si vous avez des commentaires/retours, je peux réduire ou augmenter cette base au besoin.
Ce sera tout, bonne fin de matinée
Citer : Posté le 16/04/2021 11:29 | #
Je cherche encore la tarte au citron.
Mon blog ⋅ Mes autres projets
Citer : Posté le 16/04/2021 11:40 | #
Nice ! Il faut que je refasse ce topic, j'ajouterai une référence à ton template pour sûr. En attendant j'ai mis un lien dans le TODO comme ça j'oublierai pas.
Rien à dire sur le template, à part que -Os ne fait rien de particulier pour réduire la taille du code, c'est juste -O2 moins 5-10 optis qui ont tendance à faire augmenter le poids du fichier.
Citer : Posté le 16/04/2021 11:47 | #
Je cherche encore la tarte au citron.
Cherche aux tréfonds de ton âme, la tarte au citron t'y attend.
Rien à dire sur le template, à part que -Os ne fait rien de particulier pour réduire la taille du code, c'est juste -O2 moins 5-10 optis qui ont tendance à faire augmenter le poids du fichier.
Je n'ai pas trouvé de meilleure description, est-ce que tu peux me suggérer quelque chose ?
Citer : Posté le 16/04/2021 11:48 | #
C'est pas très important, mais je peux suggérer ça.
# -O2: good speed/compile time tradeoff
# -O3: gotta go fast
Citer : Posté le 16/04/2021 11:53 | #
J'ai poussé le changement (et corrigé un oubli de ma part en passant), merci
Citer : Posté le 27/04/2021 15:56 | #
Nouvelle version : fxSDK 2.4.0
Release associée de gint : gint 2.4.0
Cette release accompagne gint 2.4.0, même s'il n'y a pas beaucoup de changements. Il n'y a qu'un ajout :
• Ajouté un nouvel outil fxlink qui permet pour l'instant de monter les calculatrices Stockage de Masse USB (Graph 35+E II et Graph 90+E) via UDisks2 pour transférer des fichiers entièrement sur la ligne de commande. D'autres fonctionnalités viendront dans la prochaine version, couplées avec le driver USB dans gint.
Et surtout des modifications sur la compilation du fxSDK et les questions compatibilité :
• Le fxSDK est maintenant compilé avec CMake
• Les flags x86/x64 par défaut de CMake sont désactivés sur les OS qui en fournissent
• L'ordre des arguments de fxg1a et mkg3a est ajusté pour marcher avec le getopt POSIX de musl
• __VA_OPT__ est remplacé par ##__VA_ARGS__ pour marcher avec clang (berk)
• libpng est localisée avec PkgConfig et pas FindPNG, à cause de subtilités de frameworks sous Mac
• Corrigé une erreur stupide qui se produisait s'il y avait "gcc" dans le chemin d'installation du compilo
Citer : Posté le 27/04/2021 19:31 | #
Génial !
Plein de bonnes nouvelles en somme pour faciliter l'installation. J'ai l'impression que mon cas t'as fait ajuster quelques petits trucs
Je suis pressé de pouvoir utiliser fxlink
PS : tu as pu récupérer le doc que je t'avais envoyé par MP ?
PS 2 : lien mort pour fxsdk 2.4
Citer : Posté le 27/04/2021 19:38 | #
• Ajouté un nouvel outil fxlink qui permet pour l'instant de monter les calculatrices Stockage de Masse USB (Graph 35+E II et Graph 90+E) via UDisks2 pour transférer des fichiers entièrement sur la ligne de commande. D'autres fonctionnalités viendront dans la prochaine version, couplées avec le driver USB dans gint.
Finalement, fini le montage manuel, le rm du .g3a et le cp!
Citer : Posté le 27/04/2021 19:57 | #
Merci ! Oui ton installation m'a pas mal aidé. J'ai bien reçu et récupéré ton doc, désolé de ne pas t'avoir envoyé de réponse. C'est un truc assez gros à traiter et donc je ne l'ai pas encore fait. ^^"
J'ai corrigé le lien, j'avais édité à la main celui de gint mais modifié la mauvaise partie lol.
Exactement ! fxlink -sw addin.g3a marche. Bon c'est très primitif, c'est juste un cp des arguments vers le point de montage, on peut pas récupérer dans l'autre sens, etc. mais ça cherche pas à remplacer le gestionnaire de fichiers.
Ajouté le 10/05/2021 à 18:49 :
En discutant avec Druzyek j'ai pensé que je pourrais publier des versions binaires du fxSDK, avec toutes les libs déjà compilées et peut-être même le compilo aussi (pourvu que l'architecture ne varie pas trop).
Par contre, comme le fxSDK est fréquemment mis à jour pour l'instant, ça n'empêcherait pas d'avoir à mettre à jour. Mais ça permettrait de passer d'une version à l'autre en remplaçant un dossier par le même dossier extrait d'un zip plus récent, donc ce serait sans doute pratique.
Citer : Posté le 10/05/2021 21:01 | #
Lephe à deux doigts de réinventer Appimage.
Citer : Posté le 10/05/2021 21:19 | #
Non juste à deux doigts de réinventer le logiciel téléchargé sous la forme d'un tar.gz. N'abusons rien
Non mais sinon tu conviendras que c'est pas moi qui pousse pour ça. C'est qu'il y a des vrais problèmes de gestion dans la nature pour les utilisateurs. Si ça ne tenait qu'à moi je n'aurais même pas écrit GiteaPC, moi je peux gérer 30 dépôts en parallèle.
Honnêtement, je pense que je ne suis pas fou, et pourtant il est évident que la publication et le déploiement du fxSDK est un problème très épineux. J'ose même dire : beaucoup plus épineux que ce que vous imaginez. J'ose le dire parce que malgré mon expérience en développement similaire à celle des autres membres de Planète Casio, j'étais incapable d'imaginer tout ce qui m'est tombé dessus une fois que j'ai vraiment publié le projet (ou de façon plus crue : je pense que vous ne comprendrez pas non plus à moins de vous retrouver dans la même démarche).
Depuis quelques temps, même si je hais toujours les gestionnaires de paquets des langages, les Dockers, les FlatPak et tout le bordel, je comprends très distinctement pourquoi ils ont été inventés. Déployer un programme ça n'a rien à voir avec développer un programme. Il y a un aspect simple sur lequel c'est beaucoup plus dur : quand tu programmes, tu as un langage et une bibliothèque standard qui ont un comportement garanti ; strlen() est consistant, l'opérateur + est consistant, etc. Alors que quand tu déploies, tu as affaire à des OS, outils en ligne de commande, paquets installés ou pas installés, etc. qui sont une jungle sans nom. Y'a aucun outil qui n'existe pas en version BSD ou GNU, y'a pas un outil qui soit garanti installé sur la machine de l'utilisateur, y'a que des inconnues. On ne se l'imagine pas quand on code ça.
Citer : Posté le 10/05/2021 22:11 | #
CQFD :
squashfs-root/.DS_Store
squashfs-root/.DirIcon
squashfs-root/AppRun
squashfs-root/osu!.desktop
squashfs-root/osu!.png
squashfs-root/usr
squashfs-root/usr/bin
squashfs-root/usr/bin/Commons.Music.Midi.dll
squashfs-root/usr/bin/Dapper.dll
squashfs-root/usr/bin/DeltaCompressionDotNet.dll
squashfs-root/usr/bin/DiffPlex.dll
Bon là c'est du .NET, donc c'est de la dll à la Windows, mais c'est pour l'exemple.
Tout comme le forgeron laisse le cordonnier faire l'étui de son couteau, est-ce que c'est au développeur de packager son appli ?
Je conçois parfaitement que linker statiquement (comme Go), embarquer ses dépendances (comme Appimage, Flatpak et autres) ou même son système complet (comme Docker) ; permet à un dev seul de packager son logiciel sans prise de tête. (Et c'est sûrement souhaitable). Pour le reste, autant ne pas réinventer la roue.
Citer : Posté le 10/05/2021 22:14 | #
Si le fxSDK était un logiciel célèbre comme Firefox, il serait packagé par les mainteneurs des distributions. Malheureusement, ce n'est pas le cas. Et quelqu'un doit s'y coller.
Citer : Posté le 10/05/2021 22:16 | #
C'est ce que je voulais dire par "ne pas réinventer la roue". Quitte à packager un truc complet, Appimage a l'air de correspondre parfaitement au cahier des charges.
Citer : Posté le 10/05/2021 22:19 | #
Je ne connais pas vraiment la différence avec un tar.gz pour être honnête. Si le fichier AppImage embarque juste de quoi extraire, ça revient à peu près au même, la vraie différence pour moi c'est le fait de fournir des binaires. (Et puis c'est vite fait de dire « réinventer AppImage » alors que le taux d'utilisation de AppImage est certainement très minoritaire par rapport aux logiciels distribués dans une archive, qui existent depuis bieeeen plus longtemps.)
La subtilité derrière c'est de faire les mises à jour. Je ne sais même pas si fournir des binaire m'intéresse. Pour être honnête, je m'en passerais volontiers.