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 ··· 28, 29, 30, 31
Ninestars Hors ligne Membre Points: 2384 Défis: 22 Message

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


Ok, le voici !
Lephenixnoir Hors ligne Administrateur Points: 20789 Défis: 143 Message

Citer : Posté le 29/08/2021 20:11 | #


Ta fxlibc n'est pas bien installée je pense, stdio.h n'est simplement pas trouvé. Peux-tu tester :

% /Users/olivierlanneau/Documents/CASIO/gcc/build-libstdc++/./gcc/xgcc
# Doit afficher une ligne avec "Target: sh3eb-elf"

Ainsi que :

% ll $(/Users/olivierlanneau/Documents/CASIO/gcc/build-libstdc++/./gcc/xgcc -print-file-name=include)
Ninestars Hors ligne Membre Points: 2384 Défis: 22 Message

Citer : Posté le 29/08/2021 23:40 | #


La première commande me renvoie
xgcc: erreur fatale: pas de fichier à l'entrée
compilation terminée.

Et la seconde commande renvoie
total 160
-rw-r--r--  1 olivierlanneau  staff   719 29 aoû 17:04 assert.h
-rw-r--r--  1 olivierlanneau  staff    74 29 aoû 17:04 complex.h
-rw-r--r--  1 olivierlanneau  staff  2430 29 aoû 17:04 ctype.h
-rw-r--r--  1 olivierlanneau  staff   320 29 aoû 17:04 errno.h
-rw-r--r--  1 olivierlanneau  staff   664 29 aoû 17:04 fcntl.h
-rw-r--r--  1 olivierlanneau  staff    71 29 aoû 17:04 fenv.h
drwxr-xr-x  3 olivierlanneau  staff    96 29 aoû 17:04 fxlibc
-rw-r--r--  1 olivierlanneau  staff  6037 29 aoû 17:04 inttypes.h
-rw-r--r--  1 olivierlanneau  staff   958 29 aoû 17:04 locale.h
-rw-r--r--  1 olivierlanneau  staff    71 29 aoû 17:04 math.h
-rw-r--r--  1 olivierlanneau  staff   654 29 aoû 17:04 setjmp.h
-rw-r--r--  1 olivierlanneau  staff  1266 29 aoû 17:04 signal.h
-rw-r--r--  1 olivierlanneau  staff  4473 29 aoû 17:04 stdio.h
-rw-r--r--  1 olivierlanneau  staff  3759 29 aoû 17:04 stdlib.h
-rw-r--r--  1 olivierlanneau  staff  3866 29 aoû 17:04 string.h
drwxr-xr-x  8 olivierlanneau  staff   256 29 aoû 17:04 sys
-rw-r--r--  1 olivierlanneau  staff    25 29 aoû 17:04 syscall.h
drwxr-xr-x  7 olivierlanneau  staff   224 29 aoû 17:04 target
-rw-r--r--  1 olivierlanneau  staff  1791 29 aoû 17:04 threads.h
-rw-r--r--  1 olivierlanneau  staff   566 29 aoû 17:04 time.h
-rw-r--r--  1 olivierlanneau  staff  2402 29 aoû 17:04 unistd.h
Lephenixnoir Hors ligne Administrateur Points: 20789 Défis: 143 Message

Citer : Posté le 30/08/2021 08:56 | #


Oups j'ai oublié -v sur la première commande. Mais peu importe, c'est le bon compilo aucun doute. Et les headers fxlibc sont là, donc la compilation ne reflète pas ce qui devrait se passer.

Est-ce que dans ton dossier GCC (le parent de build-libstdc++) tu as bien sh3eb-elf avec ces éléments ?

% ll sh3eb-elf
Permissions Size User Date Modified Name
drwxr-xr-x     - el   30 May 14:15  bin
lrwxrwxrwx    86 el   30 May 14:52  include -> <CHEMIN>/sh-elf-gcc/lib/gcc/sh3eb-elf/11.1.0/include
lrwxrwxrwx    79 el   30 May 14:52  lib -> <CHEMIN>/sh-elf-gcc/lib/gcc/sh3eb-elf/11.1.0
drwxr-xr-x     - el   13 Jun 18:20  sys-include

En particulier le faut le lien symbolique include et que si tu ll le répertoire visé tu aies bien stdio.h dedans.
Lephenixnoir Hors ligne Administrateur Points: 20789 Défis: 143 Message

Citer : Posté le 30/08/2021 21:11 | #


Nouvelle version : fxSDK 2.6.0

Deux changements dans cette version :

Les deux sont des changements assez pétés, je vous laisse voir les messages respectifs pour les détails.
Ninestars Hors ligne Membre Points: 2384 Défis: 22 Message

Citer : Posté le 30/08/2021 21:35 | #


Dans le dossier CASIO/gcc/sh3eb-elf j'ai un dossier bin et un dossier lib. Visiblement, rien d'autre dedans : )

Génial la capture vidéo sur l'ordi, plus besoin de passer par l'émulateur ni de filmer l'écran irl !
Balèze ! bravo
Lephenixnoir Hors ligne Administrateur Points: 20789 Défis: 143 Message

Citer : Posté le 30/08/2021 21:37 | #


Il faut que tu crées le symlink à la main du coup :

% ln -s $(sh-elf-gcc -print-file-name=include) sh3eb-elf/include

Quant à sys-include les instructions pour le créer sont dans le README, tu as dû y passer normalement.
Ninestars Hors ligne Membre Points: 2384 Défis: 22 Message

Citer : Posté le 31/08/2021 00:22 | #


C'est bien parce que en même temps j'apprends des trucs à chaque fois, là j'ai découvert ce qu'est un symlink

Ok, du coup j'ai désormais dans CASIO/gcc/sh3eb-elf j'ai bien :
- bin
- lib
- include : symlink vers CASIO/gcc/lib/gcc/sh3eb-elf/10.2.0/include
- sys-include : avec dedans plein de symlink de .h + stdint.h (pas stdio.h je pense que tu t'es trompé dans ton message plus haut)

J'ai lancé echo '#include "stdint-gcc.h"' > ../sh3eb-elf/sys-include/stdint.h mais il "ne s'est rien passé". En tout cas j'ai eu aucune affichage et comme je sais pas ce que fait la commande

Ensuite make all-target-libstdc++-v3 puis make install-strip-target-libstdc++-v3 qui s'est terminé sans que je sache trop si ça a bien fonctionné, ça fini par :
make[4]: Nothing to be done for install-data-am

Avec toutefois un tas de
Libraries have been installed in
Donc ça sent pas trop mauvais !
Lephenixnoir Hors ligne Administrateur Points: 20789 Défis: 143 Message

Citer : Posté le 31/08/2021 08:02 | #


Ça a l'air pas mal !

Ninestars a écrit :
- sys-include : avec dedans plein de symlink de .h + stdint.h (pas stdio.h je pense que tu t'es trompé dans ton message plus haut)

En effet pas de stdio.h ici (mais je ne crois pas avoir dit ça, enfin en tous cas tu as raison.

J'ai lancé echo '#include "stdint-gcc.h"' > ../sh3eb-elf/sys-include/stdint.h mais il "ne s'est rien passé". En tout cas j'ai eu aucune affichage et comme je sais pas ce que fait la commande

echo ça affiche ce que tu demandes, ici #include "stdint-gcc.h". Et le reste de la commande, de la forme > fichier, est une primitive du shell (qui ne fait donc pas partie de la commande echo) pour rediriger l'affichage vers un fichier. En bref, cette commande écrit #include "stdint-gcc.h" dans le fichier ../sh3eb-elf/sys-include/stdint.h ce qui "génère" le header. En sortie tu n'as rien parce que c'est une commande toute simple et que la sortie est déjà dans le fichier.

Ensuite make all-target-libstdc++-v3 puis make install-strip-target-libstdc++-v3 qui s'est terminé sans que je sache trop si ça a bien fonctionné, ça fini par :

Ça doit être bon
Caboun Hors ligne Membre Points: 1200 Défis: 0 Message

Citer : Posté le 22/09/2021 09:42 | #


Bonjour,

Tout d'abord bravo pour cet ambitieux projet.
Je viens de redécouvrir ma vieille Graph 85 dans un carton et cela m'a motivé pour y faire quelques tests, ce qui m'a conduit vers ce tutoriel.
Je tente de configurer mon PC sous Ubuntu en suivant les 3 étapes, mais reste bloqué à l'installation du FxSDK.
J'ai bien suivi toutes les commandes évoquées dans le tuto cross-compilateur-gcc, j'en suis donc à l'étape "Installer le fxSDK", étape qui me pose problème.

Voici ce que j'ai fait :
- récupéré les fichiers dans mon répertoire ~/.local avec git clone 'https://gitea.planet-casio.com/Lephenixnoir/fxsdk.git'
- depuis ce nouveau répertoire (cd fxsdk), fait make, mais la commande n'est pas reconnue
- J'ai vu qu'il y avait un CMake, donc j'ai tenté de faire cmake, mais à l'issue de cette commande il n'y a pas d'exécutable de créé.
- Je tente quand même un "fxsdk new MyAddin" (commande proposée dans le ReadMe du repo git), mais sans résultat

Je comprends que des modifications ont été faites sur le FxSDK depuis ce tutoriel, peut-être que celles-ci nécessitent d'autres commandes.

Auriez-vous une piste ? Avez-vous une idée de là où ça coince pour moi ?

Merci d'avance
Lephenixnoir Hors ligne Administrateur Points: 20789 Défis: 143 Message

Citer : Posté le 22/09/2021 09:48 | #


Merci ! Bon retour sur Planète Casio. Tu n'es franchement pas loin, les instructions détaillées sont un peu cachées en bas du README.

CMake ne fait que créer un Makefile qu'il faut ensuite lancer. Je conseille de faire cmake -B build pour compiler dans un sous-dossier build. À l'issue de cette commande, tu peux faire make -C build et même directement make -C build install.

Cela dit, je conseille d'installer dans un dossier local genre ~/.local, auquel cas il faut ajouter un paramètre (standard) à la commande CMake :

% cmake -B build -DCMAKE_INSTALL_PREFIX=$HOME/.local

Le dépôt n'est pas trop pensé pour être clôné dans ~/.local (j'aurais un peu peur que le code du dépôt se mélange aux fichiers installés), si ce n'est pas trop tard je conseille de le mettre ailleurs (ou d'installer ailleurs, ~/.prefix est un classique). Dans tous les cas il faudra t'assurer que le dossier de destination est dans ton PATH, il y a un petit tutoriel si jamais tu ne sais pas déjà le faire par coeur.
Caboun Hors ligne Membre Points: 1200 Défis: 0 Message

Citer : Posté le 22/09/2021 09:56 | #


Merci pour ton retour.

Je teste ça ce soir et je croise les doigts.

Ajouté le 22/09/2021 à 19:35 :
Je progresse !

Suite à ton message, j'ai effacé le repo git de .local pour le cloner dans .prefix, puis j'ai fait la commande "cmake -B build -DCMAKE_INSTALL_PREFIX=$HOME/.local"
Cela n'est pas allé jusqu'au bout, (message : No package 'udisks2' found).
Comme c'est indiqué dans le Readme que Udisks2 est optionnel, j'ai ouvert CMakeLists.txt et j'ai commenté toutes les lignes contenant "UDISKS2", notamment "option(FXLINK_DISABLE_UDISKS2 "Do not build the UDisks2-based features of fxlink")". Je pense qu'on peut faire plus simple au passage, mais au moins ça me permet d'executer le cmake sans erreur.

En revanche quand j'entre "make -C build install" j'ai un nouveau message d'erreur :
In file included from /home/***/.prefix/fxsdk/fxlink/ud2.c:4:
/home/***/.prefix/fxsdk/fxlink/ud2.h:10:10: fatal error: udisks/udisks.h: Aucun fichier ou dossier de ce type
   10 | #include <udisks/udisks.h>
      |          ^~~~~~~~~~~~~~~~~
compilation terminated.
make[2]: *** [CMakeFiles/fxlink.dir/build.make:141 : CMakeFiles/fxlink.dir/fxlink/ud2.c.o] Erreur 1
make[2] : on quitte le répertoire « /home/***/.prefix/fxsdk/build »
make[1]: *** [CMakeFiles/Makefile2:80 : CMakeFiles/fxlink.dir/all] Erreur 2
make[1] : on quitte le répertoire « /home/***/.prefix/fxsdk/build »
make: *** [Makefile:130 : all] Erreur 2
make : on quitte le répertoire « /home/***/.prefix/fxsdk/build »


Je tente d'installer le paquet udisks mais on m'indique qu'il est obsolète et ne peut être installé.

Où me suis-je trompé ?

Merci d'avance
Lephenixnoir Hors ligne Administrateur Points: 20789 Défis: 143 Message

Citer : Posté le 22/09/2021 19:57 | #


Tu t'es trompé quand tu as voulu modifier le CMakeLists.txt ! La ligne option(FXLINK_DISABLE_UDISKS2 etc) indique justement l'existence d'une option, qu'il te suffit d'activer sur la ligne de commande :

% cmake -B build -DCMAKE_INSTALL_PREFIX=$HOME/.local -DFXLINK_DISABLE_UDISKS2=1

Edit: Tu peux annuler tes modifications avec git checkout CMakeLists.txt
Caboun Hors ligne Membre Points: 1200 Défis: 0 Message

Citer : Posté le 22/09/2021 20:35 | #


Je savais que ça devait fonctionner a peu près comme ça, mais je n'avais pas la bonne règle.
Et pour le coup ça marche nickel. Merci beaucoup !
Lephenixnoir Hors ligne Administrateur Points: 20789 Défis: 143 Message

Citer : Posté le 22/09/2021 20:36 | #


Super ! Bon courage pour le reste des installations (il doit y en avoir encore un peu), et amuse-toi bien
Caboun Hors ligne Membre Points: 1200 Défis: 0 Message

Citer : Posté le 23/09/2021 15:03 | #


C'est bon tout fonctionne. J'ai pu compiler mon premier .g1a !
Petite question en revanche : le programme de test (Sample fxSDK add-in.) fait tout de même 25852 octets. Ça te paraît cohérent ? J'imagine que cela peut monter assez vite avec toutes les librairies chargées.
Lephenixnoir Hors ligne Administrateur Points: 20789 Défis: 143 Message

Citer : Posté le 23/09/2021 15:41 | #


Aaah tu as mis le doigt sur l'inconvénient le plus évident de gint : tu trimballes beaucoup de code. Selon si tu utilises beaucoup de fonctions ou pas tu vas généralement payer entre 25 ko et 75 ko (sur la Graph 90+E de toute façon il y a déjà dans les 27 ko qui sont pris par l'icône du g3a, gint ou pas).

Donc oui c'est normal ; a priori ton propre code devrait vite dépasser celui de gint en termes de place.
Précédente 1, 2, 3 ··· 10 ··· 20 ··· 28, 29, 30, 31

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 54 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