Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » fxSDK, un SDK alternatif pour écrire des add-ins
Lephenixnoir En ligne Administrateur Points: 22599 Défis: 149 Message

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)
  1. Suivez le tutoriel d'utilisation de GiteaPC, qui explique comment obtenir le fxSDK.

Méthode AUR pour les utilisateurs Arch/Manjaro/dérivés (ils se reconnaîtront)
  1. 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)
  1. Compilez et installez le cross-compilateur GCC pour SuperH.
  2. 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.

VersionDateInfos supplémentaires
fxSDK 2.9.129 Août 2022
fxSDK 2.9.021 Août 2022Réinstallation complète nécessaire
fxSDK 2.8.017 Mai 2022
fxSDK 2.7.119 Mars 2022
fxSDK 2.7.031 Décembre 2021Collecter toutes les images d'un projet avec fxconv
fxSDK 2.6.030 Août 2021Génération de structures complexes avec fxconv
fxSDK 2.5.24 Juillet 2021
fxSDK 2.5.14 Juillet 2021
fxSDK 2.5.025 Mai 2021
fxSDK 2.4.027 Avril 2021
fxSDK 2.3.130 Janvier 2021
fxSDK 2.3.029 Janvier 2021Introduction de fxconv-metadata.txtInstructions de migration vers CMake
Séparation de libprof en fx/cg



Précédente 1, 2, 3 ··· 10 ··· 20 ··· 27, 28, 29, 30, 31, 32, 33 ··· 35, 36, 37 Suivante
Lephenixnoir En ligne Administrateur Points: 22599 Défis: 149 Message

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
Lephenixnoir En ligne Administrateur Points: 22599 Défis: 149 Message

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.

  • On peut maintenant ajouter un bytearray ou un ObjectData à un ObjectData (avec +=).
  • On peut maintenant appeler les fonctions de conversion standard genre fxconv.convert_bopti_cg(), qui renvoient des bytes ou des ObjectData, ce qui permet de convertir des images ou des polices à l'intérieur de vos conversions personnalisées.

Et pour ce qui est des bugs :
  • fxlink n'affiche plus chaque transfert individuel (c'était un outil de debug).
  • fxconv ne devrait plus se plaindre à propos d'importlib.util.
  • fxconv plantait si on soumettait un ObjectData sans code assembleur (ie. sans références), c'est maintenant corrigé.
Lephenixnoir En ligne Administrateur Points: 22599 Défis: 149 Message

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).

  • J'ai ajouté un synonyme fxconv.Structure pour fxconv.ObjectData, ce qui devrait clarifier le rôle de l'outil.
  • J'ai aussi ajouté un synonyme fxconv.ptr() pour fxconv.ref(), pour montrer que c'est des pointeurs.
  • On peut maintenant ajouter des pointeurs vers des structures, c'est-à-dire fxconv.ptr(<une Structure>), dans les champs d'une structure.
  • Une nouvelle fonction fxconv.string() convertit les chaînes de caractères Python en chaînes C (terminées par des zéros), pour les champs de type char * ou const char *.
  • Une nouvelle fonction fxconv.chars() convertit les chaînes de caractères, cette fois pour les champs de type char text[20].

Ça veut dire que maintenant on peut faire ce genre de choses :

# struct Dialog {
#   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.
Inikiwi Hors ligne Membre Points: 373 Défis: 0 Message

Citer : Posté le 26/08/2021 10:41 | #


je peux pas compiler gintctl...
fxsdk ne trouve pas les fichier de config de gint
fxsdk build-fx
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
Lephenixnoir En ligne Administrateur Points: 22599 Défis: 149 Message

Citer : Posté le 26/08/2021 10:42 | #


Et tu as installé gint comment du coup ?
Inikiwi Hors ligne Membre Points: 373 Défis: 0 Message

Citer : Posté le 26/08/2021 10:44 | #


avec
fxsdk build-fx

Lephenixnoir En ligne Administrateur Points: 22599 Défis: 149 Message

Citer : Posté le 26/08/2021 10:45 | #


Ah ! Tu y étais presque donc, il faut poursuivre avec l'installation :

fxsdk build-fx install

D'ailleurs tu peux omettre le build-fx tout seul et passer immédiatement au build-fx install pour aller plus vite.
Inikiwi Hors ligne Membre Points: 373 Défis: 0 Message

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
Lephenixnoir En ligne Administrateur Points: 22599 Défis: 149 Message

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.
Inikiwi Hors ligne Membre Points: 373 Défis: 0 Message

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!
Ninestars Hors ligne Membre Points: 2449 Défis: 24 Message

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
cd /Users/olivier/Documents/CASIO/gint
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
[ 10%] Building CXX object CMakeFiles/Windmill.dir/src/main.cpp.obj
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;
Lephenixnoir En ligne Administrateur Points: 22599 Défis: 149 Message

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 :

cd /Users/olivier/Documents/CASIO/gint
fxsdk build-fx install
Ninestars Hors ligne Membre Points: 2449 Défis: 24 Message

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
cd /Users/olivier/Documents/CASIO/windmill
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
Lephenixnoir En ligne Administrateur Points: 22599 Défis: 149 Message

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à.

% make install-strip-target-libstdc++-v3
Ninestars Hors ligne Membre Points: 2449 Défis: 24 Message

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
cd /Users/olivier/Documents/CASIO/gcc
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
checking for the value of EOF... configure: error: computing EOF failed
make: *** [configure-target-libstdc++-v3] Error 1
Mais je n'ai pas trouvé de fichier sh3eb-elf/libstdc++-v3/config.log
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
Lephenixnoir En ligne Administrateur Points: 22599 Défis: 149 Message

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).
Ninestars Hors ligne Membre Points: 2449 Défis: 24 Message

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
cd /Users/olivier/Documents/CASIO
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
Mais j'ai exactement le même retour quand dans mon message précédent. Me remercie pas, merci à toi
Lephenixnoir En ligne Administrateur Points: 22599 Défis: 149 Message

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) ?

% grep EOF include/stdio.h
#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é.
Ninestars Hors ligne Membre Points: 2449 Défis: 24 Message

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
Lephenixnoir En ligne Administrateur Points: 22599 Défis: 149 Message

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).
Ninestars Hors ligne Membre Points: 2449 Défis: 24 Message

Citer : Posté le 29/08/2021 19:29 | # | Fichier joint


Ok, le voici !
Précédente 1, 2, 3 ··· 10 ··· 20 ··· 27, 28, 29, 30, 31, 32, 33 ··· 35, 36, 37 Suivante

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2022 | Il y a 66 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd