Forums Casio - Projets de programmation

Index du Forum > Projets de programmation > fxSDK, un outil de développement d'add-ins sous Linux
Lephenixnoir
Hors ligne
Administrateur
Points: 13150
Défis: 136
Message
Posté le 29/08/2014 22:00

fxSDK, un outil de développement d'add-ins sous Linux :

Le fxSDK est un ensemble d'outils en ligne de commande pour développer des add-ins sous Linux, qui simplifie l'utilisation de gint et effectue du travail en amont de l'exécution. Il effectue ainsi le travail spécifique à la calculatrice en laissant les tâches de programmation à la suite GCC.

On y trouve les outils suivants :
— GCC, l'indispensable compilateur, et sa suite : as, ld, objdump, objcopy, dont vous ne pourrez plus vous passer. Voyez le tutoriel d'installation pour vous familiariser.
— Un support partiel de libc : réécrit de zéro à part quelques syscalls pour l'allocation dynamique. Utile quelquefois.
— Gint, le noyau dur qui interface entre votre add-in et le matériel de la calculatrice. C'est la bibliothèque utilisée toutes les deux lignes par les programmes développés avec le fxSDK.
fxconv, un convertisseur multi-fonctions qui prépare vos images, polices, données pour les rendre lisibles par gint. Le prétraitement effectué sur les images, plus complexe que le classique effectué par SpriteCoder, est la principale source de performance pour les rendus.
fxos, un désassembleur d'OS capable de retrouver un syscall en un tour de poignet. Outil de reverse-engineering assez utile, il pallie au défaut d'objdump de ne pas connaître toutes les instructions du multiplieur.
fxsdk, un petit exécutable qui fournit des options de compilation et de linkage.

Le fxSDK est une méthode de développement alternative que l'on peut comparer au fx-9860G SDK. Dans cette analogie, gint serait l'équivalent de fxlib. Mais attention, les outils, les fonctions, les formats ne sont pas les mêmes, donc la transition du second au premier nécessite un peu d'adaptation !


Installer le fxSDK sur votre ordinateur

La procédure suivante installera aussi gint et vous mettra sur les rails pour commencer à développer. 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.

Avant de commencer, il faut absolument que vous ayez un cross-compilateur GCC installé sur votre système ! Le fxSDK fait à votre place une partie de l'étape 7, concernant les options de compilation, mais vous aurez besoin de tout le reste. 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. Gint s'y trouve aussi.
$ git clone --recursive "http://git.planet-casio.com/lephe/fxsdk"

Configurez le fxSDK en ajoutant des options (invoquez ./configure --help pour les voir) si vous le souhaitez, puis compilez-le et installez-le :
$ cd fxsdk
$ ./configure
$ make
$ sudo make install

Vous aurez besoin de votre mot de passe pour l'installation (dernière commande). Par défaut, les binaires sont placés dans /usr/bin et les fichiers de données dans /usr/share/fxsdk.

Ensuite, plus qu'à faire pareil pour gint. C'est le moment d'envoyer la sauce
$ cd gint
$ ./configure
$ make
$ sudo make install

Gint s'installe toujours au même endroit que le fxSDK. Vous pouvez aussi personnaliser votre compilation de la bibliothèque en étudiant les options de ./configure --help.

Vous êtes maintenant prêts à partir !


Développer des programmes avec le fxSDK

Cela revient à développer des programmes avec gint. Les tutoriels d'utilisation de gint couvrent tous les sujets liés au fxSDK dont vous pourrez avoir besoin, ce qui représente essentiellement l'invocation de fxsdk et l'utilisation de fxos.


Fichier joint



Lephenixnoir
Hors ligne
Administrateur
Points: 13150
Défis: 136
Message
Dernier message de la page précédente :Posté le 22/04/2016 17:55 |
Dark storm a écrit :
Bon bah avis à qui entendra, le GitLab n'attend que vous pour proposer une implémentation de la lib standard du C sans se baser sur la fxlib.

Tu comprends mal ce que je dis... ^^'
En plus je te rappelle que ça fera des collisions avec fxlib !
----------------------------------
Rise.



Pages: Précédente | 1 ... , 7, 8, 9, 10, 11, 12, 13 | Suivante

Dark storm
Hors ligne
Membre d'honneur
Points: 10691
Défis: 174
Message
Citer : Posté le 22/04/2016 18:05 | #
Suffit de se passer de la fxlib
Gint est fait pour ça non ?
----------------------------------
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Páranÿe quetë Quendya
Lephenixnoir
Hors ligne
Administrateur
Points: 13150
Défis: 136
Message
Citer : Posté le 22/04/2016 18:10 | #
C'est exact !
Mais donc gint est une condition pour la libc... c'est pour ça que je ne la publie pas encore...
----------------------------------
Rise.
Dark storm
Hors ligne
Membre d'honneur
Points: 10691
Défis: 174
Message
Citer : Posté le 22/04/2016 18:15 | #
En soit, rien n'empêche de faire une libc, au moins se sera fait. Et puis la fxlib a tendance à bugguer avec les flottants chez moi…
----------------------------------
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Páranÿe quetë Quendya
Lephenixnoir
Hors ligne
Administrateur
Points: 13150
Défis: 136
Message
Citer : Posté le 22/04/2016 18:42 | #
Ah mais le calcul flottant est assuré par la libgcc Si tu parles des fonctions, c'est soit parce qu'elles sont incompatibles (IsKeyDown()), soit parce que mon « portage » de fxlib est trop dégueulasse pour être valable. Cherche du côté d'un outil appelé convrenesaslib
----------------------------------
Rise.
Hackcell
Hors ligne
Membre
Points: 892
Défis: 6
Message
Citer : Posté le 23/05/2016 20:45 | #
Heu, pourquoi tu t'embêterai à faire un IDE complet, pour l'éditeur de texte, tu sais bien que sous linux tout le monde va faire comme il veut et utiliser son éditeur de texte préfère. Donc après, le sdk est utile car il permet d'éviter les commandes a rallonge
----------------------------------
I usually spend meow time cosplaying as a diligent student...
So it can get pretty stressful.
That's exactly why PC is such a happy place for meow to be ⭐
Lephenixnoir
Hors ligne
Administrateur
Points: 13150
Défis: 136
Message
Citer : Posté le 27/05/2016 21:14 | #
C'est exactement la réflexion que je me suis faite il y a quelques mois de ça !

Le programme existe toujours mais l'interface graphique n'a pas de réel intérêt. Le fxSDK que j'ai en local (enfin, une partie, que j'ai finie de développer) est basé sur des outils en ligne de commande et des formats usuels pour éviter aux programmeurs d'utiliser des outils spécifiques, justement. Par exemple, gint est capable d'afficher du texte à partir de polices personnalisées. Mais plutôt que de réutiliser mon éditeur graphique, je me suis basé sur des images bitmap, que chacun pourra éditer avec son logiciel habituel.

Ajouté le 11/07/2017 à 14:20 :
J'ai mis à jour le topic avec les instructions d'installation pour Linux. Normalement ça devrait bien marcher, mais j'ai sans doute laissé échapper quelque chose. Dites-moi si vous avez un problème en essayant
----------------------------------
Rise.
Nemhardy
Hors ligne
Grand maître des Traits d'Esprit
Points: 1232
Défis: 54
Message
Citer : Posté le 17/07/2017 12:23 | #
Alors, soit j'ai raté quelque chose, soit ton Makefile n'en a rien à faire du chemin qu'on lui donne lors de la configuration pour l'installation des binaires, et essaie de toute manière d'installer dans /usr/bin.
----------------------------------
N'attendez pas qu'il n'y ait plus de miel : スススススススススススススススススススススススススス養蜂家スススススススススススススススススススススススススススススススススススス蜂家
Lephenixnoir
Hors ligne
Administrateur
Points: 13150
Défis: 136
Message
Citer : Posté le 17/07/2017 12:59 | #
C'est exact, un oubli de ma part : j'ai généré le fichier de configuration et correctement rendu l'installation dynamique, mais j'ai oublié d'inclure la config dans le Makefile principal, ce qui le ramenait toujours aux valeurs par défaut.

J'ai commit la correction après vérification, merci du signalement.
----------------------------------
Rise.
Ninestars
Hors ligne
Membre
Points: 2129
Défis: 22
Message
Citer : Posté le 17/07/2017 14:25 | #
Super sujet, ça commence vraiment à se concrétiser
----------------------------------
Lephenixnoir
Hors ligne
Administrateur
Points: 13150
Défis: 136
Message
Citer : Posté le 17/07/2017 14:30 | #
Merci !

Ces tutoriels me prennent pas mal de temps à écrire, mais en même temps je pense ça intéressant de ne pas simplement s'embêter avec une liste de fonctions. Quant aux topics, celui de gint est plus sympa à lire j'imagine, mais l'important c'est que les outils soient là et utilisables.
----------------------------------
Rise.
Theprog
Hors ligne
Membre
Points: 1447
Défis: 20
Message
Citer : Posté le 31/07/2017 00:30 | #
Salut !
J'ai une erreur au moment de la compilation de fxSDK:
L'erreur
Cliquer pour enrouler
    gcc fxos/asmtable.c
fxos/asmtable.c:4:18: fatal error: pcre.h: Aucun fichier ou dossier de ce type
compilation terminated.
Makefile:107 : la recette pour la cible « build/fxos_asmtable.c.o » a échouée
make: *** [build/fxos_asmtable.c.o] Erreur 1
user@PC-VIEUX:~/Documents/fxsdk$ ./configure
Configuration saved in Makefile.cfg.
user@PC-VIEUX:~/Documents/fxsdk$ make
    gcc fxos/asmtable.c
fxos/asmtable.c:4:18: fatal error: pcre.h: Aucun fichier ou dossier de ce type
compilation terminated.
Makefile:107 : la recette pour la cible « build/fxos_asmtable.c.o » a échouée
make: *** [build/fxos_asmtable.c.o] Erreur 1
user@PC-VIEUX:~/Documents/fxsdk$ make
    gcc fxos/asmtable.c
fxos/asmtable.c:4:18: fatal error: pcre.h: Aucun fichier ou dossier de ce type
compilation terminated.
Makefile:107 : la recette pour la cible « build/fxos_asmtable.c.o » a échouée
make: *** [build/fxos_asmtable.c.o] Erreur 1
----------------------------------
Lephenixnoir
Hors ligne
Administrateur
Points: 13150
Défis: 136
Message
Citer : Posté le 31/07/2017 00:31 | #
Installe le paquet libpcre-dev (un nom du type, il peut traîner un numéro de version en plus selon ton système).
----------------------------------
Rise.
Theprog
Hors ligne
Membre
Points: 1447
Défis: 20
Message
Citer : Posté le 31/07/2017 00:41 | #
Merci, si jamais ca interesse y'a les noms du paquet en fonction des distributions
----------------------------------
Critor
Hors ligne
Administrateur
Points: 975
Défis: 0
Message
Citer : Posté le 17/02/2018 08:54 | #
Bonjour.

J'ai compilé binutils 2.30, gcc 7.3.0, libgcc... en apparence tout avait marché.

Là, j'arrive donc à la compilation de fxsdk et ça ne marche pas :
Xavier@Xavier-X550C ~/opt/sh3eb-elf/add-in-wrapper
$ ls ../bin
g1a-wrapper.exe          sh3eb-elf-c++filt.exe  sh3eb-elf-gcc-7.3.0.exe
sh3eb-elf-gcov-dump.exe  sh3eb-elf-nm.exe       sh3eb-elf-size.exe
sh3eb-elf-addr2line.exe  sh3eb-elf-cpp.exe      sh3eb-elf-gcc-ar.exe
sh3eb-elf-gcov-tool.exe  sh3eb-elf-objcopy.exe  sh3eb-elf-strings.exe
sh3eb-elf-ar.exe         sh3eb-elf-elfedit.exe  sh3eb-elf-gcc-nm.exe
sh3eb-elf-gprof.exe      sh3eb-elf-objdump.exe  sh3eb-elf-strip.exe
sh3eb-elf-as.exe         sh3eb-elf-g++.exe      sh3eb-elf-gcc-ranlib.exe
sh3eb-elf-ld.bfd.exe     sh3eb-elf-ranlib.exe   sh3eb-elf-c++.exe
sh3eb-elf-gcc.exe       sh3eb-elf-gcov.exe      sh3eb-elf-ld.exe
sh3eb-elf-readelf.exe

Xavier@Xavier-X550C ~/opt/sh3eb-elf/add-in-wrapper
$ cd ..

Xavier@Xavier-X550C ~/opt/sh3eb-elf
$ ls
add-in-wrapper  binutils-2.30         build-binutils  gcc-7.3.0         include  libexec    share
bin             binutils-2.30.tar.gz  build-gcc       gcc-7.3.0.tar.gz  lib      sh3eb-elf

Xavier@Xavier-X550C ~/opt/sh3eb-elf
$ git clone --recursive "http://git.planet-casio.com/lephe/fxsdk"
Clonage dans 'fxsdk'...
remote: Counting objects: 180, done.
remote: Compressing objects: 100% (127/127), done.
remote: Total 180 (delta 70), reused 123 (delta 46)
Réception d'objets: 100% (180/180), 10.31 MiB | 517.00 KiB/s, fait.
Résolution des deltas: 100% (70/70), fait.
Vérification de la connectivité... fait.
Submodule 'gint' (http://git.planet-casio.com/lephe/gint) registered for path 'gint'
Clonage dans 'gint'...
remote: Counting objects: 1465, done.
remote: Compressing objects: 100% (775/775), done.
remote: Total 1465 (delta 967), reused 1152 (delta 654)
Réception d'objets: 100% (1465/1465), 975.65 KiB | 851.00 KiB/s, fait.
Résolution des deltas: 100% (967/967), fait.
Vérification de la connectivité... fait.
Submodule path 'gint': checked out '131b432cc97a75bd288b936cd8f1c461ebb7e893'

Xavier@Xavier-X550C ~/opt/sh3eb-elf
$ cd fxsdk/

Xavier@Xavier-X550C ~/opt/sh3eb-elf/fxsdk
$ ls
common        configure  fxconv  fxos  fxsdk  gint  icon.bmp  Makefile
Makefile.cfg  runtime

Xavier@Xavier-X550C ~/opt/sh3eb-elf/fxsdk
$ ./configure
Configuration saved in Makefile.cfg.

Xavier@Xavier-X550C ~/opt/sh3eb-elf/fxsdk
$ make
  mkdir build
  mkdir bin
    gcc common/bitmap.c
    gcc common/clargs.c
    gcc common/errors.c
     ar libfxsdk.a
    gcc fxsdk/main.c
     ld bin/fxsdk

» Successfully built fxsdk (142229 bytes)

    gcc fxconv/image.c
    gcc fxconv/fxconv.c
    gcc fxconv/font.c
fxconv/font.c: In function ‘readHeaderLine’:
fxconv/font.c:242:2: attention : array subscript has type ‘char’ [-Wchar-subscripts]
  if(isdigit(*header))
  ^
fxconv/font.c:246:3: attention : array subscript has type ‘char’ [-Wchar-subscripts]
   while(isdigit(*header) && header < token_end)
   ^
    gcc fxconv/system.c
fxconv/system.c: In function ‘mkobj’:
fxconv/system.c:147:3: attention : implicit declaration of function ‘waitid’ [-Wimplicit-function-declaration]
   waitid(P_PID, pid_sed, &info, WEXITED);
   ^
fxconv/system.c:147:10: erreur: ‘P_PID’ undeclared (first use in this function)
   waitid(P_PID, pid_sed, &info, WEXITED);
          ^
fxconv/system.c:147:10: note: each undeclared identifier is reported only once for each function it appears in
fxconv/system.c:147:33: erreur: ‘WEXITED’ undeclared (first use in this function)
   waitid(P_PID, pid_sed, &info, WEXITED);
                                 ^
Makefile:104 : la recette pour la cible « build/fxconv_system.c.o » a échouée
make: *** [build/fxconv_system.c.o] Erreur 1


Que me conseillez-vous ?
Merci.
Lephenixnoir
Hors ligne
Administrateur
Points: 13150
Défis: 136
Message
Citer : Posté le 17/02/2018 09:01 | #
Hmm, c'est un scénario que je n'ai pas étudié. Une partie de fxconv utilise l'API d'Unix (pour spawner des sous-processus) et n'est pas prévue pour tourner nativement sous Windows. Le fait que le compilateur n'ait pas craché plus tôt (inclusion des en-têtes) laisse entendre que ça doit être possible de s'adapter. Je peux savoir avec quoi tu as compilé (type version de Cygwin et/ou MinGW) pour chercher ce que je peux faire comme modifications ?
----------------------------------
Rise.
Critor
Hors ligne
Administrateur
Points: 975
Défis: 0
Message
Citer : Posté le 17/02/2018 09:03 | #
J'utilise Cygwin.
Lephenixnoir
Hors ligne
Administrateur
Points: 13150
Défis: 136
Message
Citer : Posté le 17/02/2018 09:12 | #
J'ai envoyé un commit, 3ebe66a sur la branche master, où j'ai remplacé l'usage de waitid(), une fonction un peu exotique, par un appel plus classique à wait().

Mes programmes sont un peu en bazar pour un certain nombre de raisons, donc je n'ai pu tester que rapidement, mais le programme fonctionne toujours. Je pense que pour la compatibilité Cygwin, ce sera meilleur.
----------------------------------
Rise.
Critor
Hors ligne
Administrateur
Points: 975
Défis: 0
Message
Citer : Posté le 17/02/2018 10:04 | #
Merci. Cela va un petit peu plus loin, mais une autre erreur surgit :
Xavier@Xavier-X550C ~/opt/sh3eb-elf
$ rm -rf fxsdk

Xavier@Xavier-X550C ~/opt/sh3eb-elf
$ git clone --recursive "http://git.planet-casio.com/lephe/fxsdk"
Clonage dans 'fxsdk'...
remote: Counting objects: 184, done.
remote: Compressing objects: 100% (131/131), done.
Réception d'objets:  83remote: Total 184 (delta 73), reused 123 (delta 46) (153/184
Réception d'objets: 100% (184/184), 10.31 MiB | 635.00 KiB/s, fait.
Résolution des deltas: 100% (73/73), fait.
Vérification de la connectivité... fait.
Submodule 'gint' (http://git.planet-casio.com/lephe/gint) registered for path 'gint'
Clonage dans 'gint'...
remote: Counting objects: 1465, done.
remote: Compressing objects: 100% (775/775), done.
remote: Total 1465 (delta 967), reused 1152 (delta 654)
Réception d'objets: 100% (1465/1465), 975.65 KiB | 596.00 KiB/s, fait.
Résolution des deltas: 100% (967/967), fait.
Vérification de la connectivité... fait.
Submodule path 'gint': checked out '131b432cc97a75bd288b936cd8f1c461ebb7e893'

Xavier@Xavier-X550C ~/opt/sh3eb-elf
$ cd fxsdk

Xavier@Xavier-X550C ~/opt/sh3eb-elf/fxsdk
$ ./configure
Configuration saved in Makefile.cfg.

Xavier@Xavier-X550C ~/opt/sh3eb-elf/fxsdk
$ make
  mkdir build
  mkdir bin
    gcc common/bitmap.c
    gcc common/clargs.c
    gcc common/errors.c
     ar libfxsdk.a
    gcc fxsdk/main.c
     ld bin/fxsdk

» Successfully built fxsdk (142229 bytes)

    gcc fxconv/image.c
    gcc fxconv/fxconv.c
    gcc fxconv/font.c
fxconv/font.c: In function ‘readHeaderLine’:
fxconv/font.c:242:2: attention : array subscript has type ‘char’ [-Wchar-subscripts]
  if(isdigit(*header))
  ^
fxconv/font.c:246:3: attention : array subscript has type ‘char’ [-Wchar-subscripts]
   while(isdigit(*header) && header < token_end)
   ^
    gcc fxconv/system.c
fxconv/system.c: In function ‘mkobj’:
fxconv/system.c:131:13: attention : unused variable ‘info’ [-Wunused-variable]
   siginfo_t info;
             ^
     ld bin/fxconv

» Successfully built fxconv (172203 bytes)

    gcc fxos/disasm.c
    gcc fxos/asmtable.c
fxos/asmtable.c:4:18: erreur fatale: pcre.h : No such file or directory
#include <pcre.h>
                  ^
compilation terminée.
Makefile:107 : la recette pour la cible « build/fxos_asmtable.c.o » a échouée
make: *** [build/fxos_asmtable.c.o] Erreur 1

Xavier@Xavier-X550C ~/opt/sh3eb-elf/fxsdk
Lephenixnoir
Hors ligne
Administrateur
Points: 13150
Défis: 136
Message
Citer : Posté le 17/02/2018 10:07 | #
Ah, c'est plus simple cette fois-ci (j'espère). fxos utilise des expressions régulières fournies par la libpcre. Je pourrai m'en débarrasser et je planifie de le faire.

D'ici là, tu peux tenter d'installer la lib (mais je ne sais pas du tout t'aider), ou simplement ne pas compiler fxos (qui n'est utilisé que pour inspecter des fichiers d'OS, désassembler des syscalls et faire du retro-engineering) et utiliser :

$ make fxsdk
$ make fxconv
$ sudo make install
----------------------------------
Rise.
Zezombye
Hors ligne
Rédacteur
Points: 1531
Défis: 12
Message
Citer : Posté le 21/08/2018 01:55 | #
Le fxsdk est-il à jour ou il faudrait l'updater un peu ?

J'aimerais l'utiliser notamment pour le getkey (celui de casio ne renvoie pas de valeur du tout pour certaines combinaisons de touches) et pour convertir des images avec fxconv.
----------------------------------
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE

Pages: Précédente | 1 ... , 7, 8, 9, 10, 11, 12, 13 | Suivante

Index du Forum > Projets de programmation > fxSDK, un outil de développement d'add-ins sous Linux

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

Planète Casio est un site communautaire indépendant, géré bénévolement et n'est donc pas affilié à Casio | Toute reproduction de Planète Casio, même partielle, est interdite
Les fichiers, programmes et autres publications présents sur Planète Casio restent la propriété de leurs auteurs respectifs et peuvent être soumis à des licences ou des copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd