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 26/05/2021 20:14 | #
Tu es mon lobby C++ et honnêtement si ça marche ce sera un grand pas en avant
Citer : Posté le 04/07/2021 17:41 | #
Nouveaux patchs : fxSDK 2.5.1 et fxSDK 2.5.2
Release associée de gint : gint 2.5.2
Surtout des corrections de bugs, avec quelques changements très mineurs sur fxconv.
Et pour ce qui est des bugs :
Citer : Posté le 25/08/2021 22:38 | #
J'ai programmé pour Tituya une amélioration des capacités de fxconv en termes de génération de structures. Vous allez voir, c'est assez lourd ! Ce sera disponible avec la prochaine mise à jour (demain s'il n'y a pas de bugs typiquement).
Ça veut dire que maintenant on peut faire ce genre de choses :
# int when;
# const char *text;
# };
#
# struct Character {
# const char *name;
# bopti_image_t *spritesheet;
# struct Dialog *dialogs;
# };
dialogs = fxconv.Structure()
dialogs += fxconv.u32(0) # when=0
dialogs += fxconv.string("Wow je suis dans le jeu !")
dialogs += fxconv.u32(1) # when=1
dialogs += fxconv.string("Déjà 22h37 ?!")
character = fxconv.Structure()
character += fxconv.string("Lephe")
character += fxconv.ptr(fxconv.convert_bopti_cg(...)) # une image
character += fxconv.ptr(dialogs)
Je commence à trouver ça pété, c'est dire.
Citer : Posté le 26/08/2021 10:41 | #
je peux pas compiler gintctl...
fxsdk ne trouve pas les fichier de config de gint
CMake Error at CMakeLists.txt:10 (find_package):
By not providing "FindGint.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "Gint", but
CMake did not find one.
Could not find a package configuration file provided by "Gint" (requested
version 2.1) with any of the following names:
GintConfig.cmake
gint-config.cmake
Add the installation prefix of "Gint" to CMAKE_PREFIX_PATH or set
"Gint_DIR" to a directory containing one of the above files. If "Gint"
provides a separate development package or SDK, be sure it has been
installed.
-- Configuring incomplete, errors occurred!
See also "/home/pierre/casio-fx/gintctl/build-fx/CMakeFiles/CMakeOutput.log".
See also "/home/pierre/casio-fx/gintctl/build-fx/CMakeFiles/CMakeError.log".
pourtant j'ai tout bien installé avec la branche dev et sans erreur
et avec toutes les dépendances
Citer : Posté le 26/08/2021 10:42 | #
Et tu as installé gint comment du coup ?
Citer : Posté le 26/08/2021 10:44 | #
avec
Citer : Posté le 26/08/2021 10:45 | #
Ah ! Tu y étais presque donc, il faut poursuivre avec l'installation :
D'ailleurs tu peux omettre le build-fx tout seul et passer immédiatement au build-fx install pour aller plus vite.
Citer : Posté le 26/08/2021 10:47 | #
euh... c'est pais dans le readme.md de gint ca!
je vais ajouter ca.
Ajouté le 26/08/2021 à 10:48 :
ah il fait faire un fork! je vais par faire tout ça pour une ligne de texte
Citer : Posté le 26/08/2021 10:50 | #
Aha t'inquiète je l'ai déjà modifié. Ce n'était pas écrit non, c'est... évident en fait, mais l'écart entre le fonctionnement réel et la façade accessible qu'il faut créer est très grand, d'où les imperfections partout.
Citer : Posté le 26/08/2021 10:58 | #
euh. gintctl trouve gint mais pas justUI, la dernière mise-a-jour remonte il y a 3 mois
Ajouté le 26/08/2021 à 11:00 :
(désolé pour le double post!) j'ai rien dit! j'ai réfléchit et j'ai tenté fxsdk et ça marche!
Citer : Posté le 29/08/2021 11:32 | #
Okey, bon désormais j'ai installé fxlibc correctement, j'ai ensuite fait
Mis à jour le dossier gint puis
fxsdk build-fx
// OK tout est bon
cd /Users/olivier/Documents/CASIO/windmill
fxsdk build-fx
Et là j'ai tout un tas d'erreurs qui surgissent, la première ci dessous
In file included from /Users/olivier/Documents/CASIO/gcc/lib/gcc/sh3eb-elf/10.2.0/include/gint/gint.h:9,
from /Users/olivier/Documents/CASIO/windmill/src/main.hpp:3,
from /Users/olivier/Documents/CASIO/windmill/src/main.cpp:1:
/Users/olivier/Documents/CASIO/gcc/lib/gcc/sh3eb-elf/10.2.0/include/gint/defs/call.h: In function 'int gint_call(gint_call_t)':
/Users/olivier/Documents/CASIO/gcc/lib/gcc/sh3eb-elf/10.2.0/include/gint/defs/call.h:134:48: error: invalid conversion from 'void*' to 'int (*)(int, int, int, int)' [-fpermissive]
134 | int (*f)(int r4, int r5, int r6, int r7) = cb.function;
Citer : Posté le 29/08/2021 11:55 | #
C'est normal, le fix pour ça était encore sur dev. Ça faisait longtemps que j'avais pas publié une nouvelle version ! Je viens de le faire (2.6.0), tu n'as plus qu'à refaire pareil pour mettre à jour.
Attention, fxsdk build-fx tout seul compile la lib mais ne l'installe pas, tu dois bien aller jusqu'au bout :
fxsdk build-fx install
Citer : Posté le 29/08/2021 12:03 | #
Ok super, je vais un cran plus loin 😉
Malheureusement j'ai un autre message après avoir installé gint 2.6.0
fxsdk build-fx
[100%] Linking CXX executable Windmill
/Users/olivier/Documents/CASIO/gcc/bin/../lib/gcc/sh3eb-elf/10.2.0/../../../../sh3eb-elf/bin/ld: cannot find -lsupc++
collect2: error: ld returned 1 exit status
make[2]: *** [Windmill] Error 1
make[1]: *** [CMakeFiles/Windmill.dir/all] Error 2
make: *** [all] Error 2
Citer : Posté le 29/08/2021 12:05 | #
T'as raté l'étape cruciale de compiler et installer la lib C++. Est-ce que tu as bien appliqué les instructions jusqu'au bout ? C'est la dernière commande ci-dessous qui installe la lib, il faut en arriver là.
Citer : Posté le 29/08/2021 15:49 | #
Ok, je viens de comprendre que ton message c'était juste pour compiler fxlibc et qu'il faut en plus compiler ce truc https://gitea.planet-casio.com/Lephenixnoir/sh-elf-gcc, mais faire que ce qui dans la section "Notes on building libstdc++-v3"
Ce que j'ai fait
export PREFIX="$(pwd)"
mkdir build-libstdc++
cd build-libstdc++
../gcc-10.2.0/configure //blabla.................
make -j$(nproc) all-gcc all-target-libgcc
// Là ça a pris du temps
make -j$(nproc) install-strip-gcc install-strip-target-libgcc
// là je réinstalle fxlibc et OpenLibm est déjà installé donc je touche à rien
SRC="$(sh-elf-gcc -print-file-name=include/openlibm)"
% DST="../sh3eb-elf/sys-include"
% mkdir -p "$DST"
% for x in "$SRC"/*.h; do ln -s "$x" "$DST/${x#$SRC/}"; done
echo '#include "stdint-gcc.h"' > ../sh3eb-elf/sys-include/stdint.h
make all-target-libstdc++-v3
Et là ça n'a pas fonctionné avec les deux dernière lignes qui disent
make: *** [configure-target-libstdc++-v3] Error 1
Dans /Users/olivier/Documents/CASIO/gcc/sh3eb-elf j'ai que deux dossier bin et lib
PS : je réponds à droite à gauche, désolé mais je ne sais plus sur quel topic répondre haha
Citer : Posté le 29/08/2021 16:53 | #
Très bien, excellent ! Ça a m'a l'air tout bon.
Normalement il y a un commit dans fxlibc qui résoud ce problème. Ça date de fin Juin, mais je pense qu'il n'est sur la branche master que depuis ~2 semaines. Est-ce que ton dépôt fxlibc est bien à jour ?
Si c'est ça, tu peux réinstaller fxlibc comme avant et reprendre ensuite ta compilation de libstdc++ à la toute dernière commande make sans te retaper toutes les commandes que tu as déjà présentées et qui sont bien.
Encore une fois merci de ta patience, ces affaires-là sont réellement compliquées (surtout quand on ne s'y connaît pas trop).
Citer : Posté le 29/08/2021 17:10 | #
Ok "super" !
Je pense avoir la dernière version de fxlibc car je l'ai retéléchargé ce matin.
Du coup dans le doute j'ai fait :
Supprimé le dossier CASIO/fxlibc puis
git clone "https://gitea.planet-casio.com/Vhex-Kernel-Core/fxlibc.git"
cd fxlibc
cmake -B build-gint -DFXLIBC_TARGET=gint -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-sh.cmake
make -C build-gint install
cd /Users/olivier/Documents/CASIO/gcc/build-libstdc++
make all-target-libstdc++-v3
Citer : Posté le 29/08/2021 17:20 | #
Ah bon, ça c'est fort !
Tu peux vérifier donc que ton stdio.h a bien EOF (dans le dossier fxlibc) ?
#define EOF ((int)(-1))
Si tu n'as pas la ligne avec le #define alors le code n'est pas bon. Sinon, il me faut une copie du config.log parce que c'est là que l'erreur exacte est indiqué. Quand il dit "computing EOF failed" en fait il compile un programme et ça échoue, mais sans config.log il est difficile de deviner ce qui s'est mal passé.
Citer : Posté le 29/08/2021 17:25 | # | Fichier joint
J'ai bien le #define qui apparait.
Mon CASIO/gcc/build-libstdc++ /Config.log en pièce jointe (renommé en txt pour l'upload)
Ajouté le 29/08/2021 à 17:27 :
PS : je ne sais pas si make -j$(nproc) all-gcc all-target-libgcc a bien fonctionné, parce qu'il y a eu un bug d'affichage, tous les caractères de la console étaient random... ???? C'était pas trop lisible, j'ai attendu la fin j'ai fermé le terminal puis repris, et c'est revenu normalement
Citer : Posté le 29/08/2021 17:43 | #
Il n'y a probablement pas de problème avec ton compilateur (à savoir le make précédent), tant qu'on n'a pas d'erreurs explicites à ce sujet on peut supposer qu'il est bon.
Et le fichier ne contient pas l'erreur, celui dont j'ai besoin c'est le build-libstdc++/sh3eb-elf/libstdc++-v3/config.log (comme mentionné, quoique brièvement, dans les instructions).
Citer : Posté le 29/08/2021 19:29 | # | Fichier joint
Ok, le voici !