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 Hors ligne Administrateur Points: 20789 Défis: 143 Message

fxSDK, un SDK alternatif pour écrire des add-ins

Posté le 29/08/2014 22:00

Le fxSDK est une alternative au SDK habituel de Casio. Il permet de développer des add-ins pour la famille de la Graph 35+E et la Graph 90+E, et offre de meilleures performances et plus de possibilités !

Les outils du fxSDK

Le fxSDK marche sous Linux et a été compilé pour Mac OS ; il ne marche pas encore pour Windows mais on peut en discuter.

Il se fonde sur l'indispensable compilateur gcc et sa suite d'outils : as, ld, objdump, objcopy (entre autres). Contrairement au vieux compilateur du SDK, gcc est un compilateur moderne avec beaucoup de possibilités. Il n'est pas fourni avec le fxSDK et fait l'objet d'un tutoriel d'installation à part.

Côté calculatrice, c'est le noyau gint qui fait le travail. Il remplace fxlib 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 !

Le fxSDK fournit également des outils spécifiques pour compiler et étudier les programmes de la calculatrice.

fxsdk est un petit gestionnaire de projet qui vous permet de créer et compiler facilement des projets sans vous prendre la tête avec le Makefile. Parfait si vous ne voulez pas connaître toutes les détails compliqués.

fxg1a sert à créer les fichiers g1a finaux à partir du programme compilé. C'est le successeur de mon vieux g1a-wrapper qui était beaucoup moins puissant.

fxconv convertit des données pour vos add-ins, commes vos images ou polices, dans des formats spécifiques de gint. C'est un peu comme le Sprite Coder mais ça vous évite de copier des gros tableaux dans votre programme et surtout le dessin est beaucoup plus performant !

fxos est un désassembleur et manipulateur d'OS capable de retrouver et disséquer des syscalls en un tour de poignet. C'est un outil de reverse-engineering dont l'usage principal est de produire des listings assembleur annotés pour comprendre très rapidement le code.

Il y a pas mal de différences avec le SDK de Casio donc passer au fxSDK nécessite un peu d'adaptation.

Installer le fxSDK sur votre ordinateur

Ça se passe en trois étapes :

1. Compiler un compilateur gcc à destination de la calculatrice
2. Installer le fxSDK
3. Installer le noyau, gint

Je suppose ici que vous connaissez les bases de la ligne de commande, mais si ce n'est pas le cas, n'hésitez pas à laisser un commentaire pour demander.

La première chose est de vous préparer un cross-compilateur gcc. Vous pouvez sauter l'installation du g1a-wrapper et venir ici dès que la libgcc est installée. Assurez-vous que le compilateur est dans le PATH est vous serez prêt ! C'est le plus gros morceau donc une fois que vous aurez ça, vous aurez déjà pratiquement fini.

Clônez le dépôt git du fxSDK depuis la forge de Planète Casio (vous pouvez aussi utiliser SSH).

% git clone 'https://gitea.planet-casio.com/Lephenixnoir/fxsdk.git'

Configurez le fxSDK ; vous pouvez taper "./configure --help" voir les options disponibles. Par défaut, le fxSDK sera installé dans votre dossier personnel (dans ".local").

% cd fxsdk
% ./configure

Ensuite compilez et installez ! Si vous avez choisi un dossier d'installation différent avec --prefix ou si vous compilez sous Mac, vous pourriez avoir besoin de sudo à l'installation.

% make
% make install

Assurez-vous que votre dossier de destination est dans votre PATH, puis vous pouvez installer gint.

Vous êtes alors prêt à partir !

Développer des programmes avec le fxSDK

TODO: Ajouter l'utilisation de fxsdk. Template intermédiaire par KikooDX.

Toute la partie programmation revient à développer des programmes avec gint. Les tutoriels d'utilisation de gint couvrent tous ce dont vous aurez besoin, y compris l'utilisation de fxconv.

Fichier joint


Précédente 1, 2, 3 ··· 10 ··· 20 ··· 27, 28, 29, 30, 31 Suivante
Lephenixnoir Hors ligne Administrateur Points: 20789 Défis: 143 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 Hors ligne Administrateur Points: 20789 Défis: 143 Message

Citer : Posté le 04/07/2021 17:41 | #


Nouveaux patchs : fxSDK 2.5.1 et fxSDK 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 Hors ligne Administrateur Points: 20789 Défis: 143 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: 161 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 Hors ligne Administrateur Points: 20789 Défis: 143 Message

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


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

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


avec
fxsdk build-fx
Lephenixnoir Hors ligne Administrateur Points: 20789 Défis: 143 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: 161 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 Hors ligne Administrateur Points: 20789 Défis: 143 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: 161 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: 2384 Défis: 22 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 Hors ligne Administrateur Points: 20789 Défis: 143 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: 2384 Défis: 22 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 Hors ligne Administrateur Points: 20789 Défis: 143 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: 2384 Défis: 22 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 Hors ligne Administrateur Points: 20789 Défis: 143 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: 2384 Défis: 22 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 Hors ligne Administrateur Points: 20789 Défis: 143 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: 2384 Défis: 22 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 Hors ligne Administrateur Points: 20789 Défis: 143 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: 2384 Défis: 22 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 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 - 2021 | Il y a 37 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