Seuls les membres ayant 30 points peuvent parler sur le chat.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » fxSDK, un SDK alternatif pour écrire des add-ins
LephenixnoirHors ligneAdministrateurPoints: 16097 Défis: 140 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.

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


Pages : Précédente1 ... , 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, ... 21Suivante
LephenixnoirHors ligneAdministrateurPoints: 16097 Défis: 140 Message

Citer : Posté le 28/06/2019 19:43 | #


Ça c'est une différence entre Linux et Mac. Désolé, je n'aurais pas trop pu la prévoir.

J'ai poussé un fix, tu peux git pull et refaire make. Dis-moi si ça va mieux
Shadow15510Hors ligneAdministrateurPoints: 3946 Défis: 16 Message

Citer : Posté le 28/06/2019 19:45 | #


Merci !
Ah ! alors ça marche, mais j'ai une autre erreur…
fxg1a/icon.c:5:10: fatal error: 'png.h' file not found
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   95%
LephenixnoirHors ligneAdministrateurPoints: 16097 Défis: 140 Message

Citer : Posté le 28/06/2019 19:47 | #


Tu prends un peu les pots cassés dis donc.

Il te faut la libpng, que tu dois pouvoir installer avec la commande "brew install libpng". Je suis surpris de pas l'avoir noté. >_>
HackcellHors ligneMembrePoints: 1150 Défis: 10 Message

Citer : Posté le 28/06/2019 20:14 | #


Elle est dans les dépendances de g1a-wrapper ça doit être pour ça que personne n'a remarqué
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 ⭐
LephenixnoirHors ligneAdministrateurPoints: 16097 Défis: 140 Message

Citer : Posté le 28/06/2019 20:29 | #


J'étais persuadé que le g1a-wrapper ne lisait que du bmp, et ai donc été lire les sources pour vérifier.

Me connecter sur Bitbucket a failli me faire vomir.
Lire le code de l'outil m'a vraiment dégoûté. Dire que ça a moins de 4 ans...

J'envisage sérieusement de m'assurer que compiler le fxSDK avec uniquement fxg1a soit aussi facile que compiler le g1a-wrapper puis supprimer définitivement le g1a-wrapper des dépôts et du tutoriel. Berk berk...
HackcellHors ligneMembrePoints: 1150 Défis: 10 Message

Citer : Posté le 28/06/2019 20:35 | #


Et du coup, libpng ou pas ?
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 ⭐
LephenixnoirHors ligneAdministrateurPoints: 16097 Défis: 140 Message

Citer : Posté le 28/06/2019 20:35 | #


Non, pas libpng.
Shadow15510Hors ligneAdministrateurPoints: 3946 Défis: 16 Message

Citer : Posté le 29/06/2019 15:22 | #


Bon >_<' plus que les pots cassé, je suis en passe de devenir le plus grand recycleur de poterie de France ! Oui Môssieur

Sans blague, la libpng s'est installée sans problème mais toujours au niveau du make du fxsdk :
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1


Voila ! Mais je ne désespère pas de coder un jour sur gint !
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   95%
LephenixnoirHors ligneAdministrateurPoints: 16097 Défis: 140 Message

Citer : Posté le 29/06/2019 15:25 | #


Il me faudrait plus de contexte, peux-tu me montrer une plus grande partie du log de compilation ?
Shadow15510Hors ligneAdministrateurPoints: 3946 Défis: 16 Message

Citer : Posté le 29/06/2019 15:26 | #


Oky, tiens je te met tout ! du make au début jusqu'à la fin :

pc37:fxsdk antoine$ make
gcc -c fxg1a/icon.c -o build/fxg1a/icon.c.o -Wall -Wextra -std=c11 -g -I fxg1a/ -D_GNU_SOURCE -DFXSDK_PREFIX='"/Users/antoine/.local"'  -MT build/fxg1a/icon.c.o -MMD -MP -MF build/fxg1a/icon.c.d
gcc -c fxg1a/main.c -o build/fxg1a/main.c.o -Wall -Wextra -std=c11 -g -I fxg1a/ -D_GNU_SOURCE -DFXSDK_PREFIX='"/Users/antoine/.local"'  -MT build/fxg1a/main.c.o -MMD -MP -MF build/fxg1a/main.c.d
gcc -c fxg1a/util.c -o build/fxg1a/util.c.o -Wall -Wextra -std=c11 -g -I fxg1a/ -D_GNU_SOURCE -DFXSDK_PREFIX='"/Users/antoine/.local"'  -MT build/fxg1a/util.c.o -MMD -MP -MF build/fxg1a/util.c.d
fxg1a/util.c:22:36: warning: implicit declaration of function 'htobe16' is
      invalid in C99 [-Wimplicit-function-declaration]
        for(int i = 0; i < 8; i++) sum += htobe16(shorts[i]);
                                          ^
1 warning generated.
mkdir -p bin
gcc build/fxg1a/dump.c.o build/fxg1a/edit.c.o build/fxg1a/file.c.o build/fxg1a/icon.c.o build/fxg1a/main.c.o build/fxg1a/util.c.o -o bin/fxg1a -lpng
Undefined symbols for architecture x86_64:
  "_be16toh", referenced from:
      _check in dump.c.o
  "_be32toh", referenced from:
      _check in dump.c.o
  "_htobe16", referenced from:
      _sign in edit.c.o
      _checksum in util.c.o
  "_htobe32", referenced from:
      _sign in edit.c.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [bin/fxg1a] Error 1

"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   95%
LephenixnoirHors ligneAdministrateurPoints: 16097 Défis: 140 Message

Citer : Posté le 29/06/2019 15:45 | #


Mais mais. Aah. C'est encore le endian.h qui vient me hanter vu que Mac OS appelle pas ses fonctions pareil. Sérieux quoi.

Bon, j'ai tenté un autre fix. J'ai pas pu tester sous Mac donc ça va être à toi de le faire. J'ai modifié le passé de Git donc tu ne peux pas git pull, tu dois faire comme ça (en supposant que tu n'a pas modifié les fichiers du dépôt) :

% git fetch
% git reset --hard origin/master

Cela télécharge les modifications sans essayer de les appliquer, puis te téléporte à la dernière version.
Shadow15510Hors ligneAdministrateurPoints: 3946 Défis: 16 Message

Citer : Posté le 29/06/2019 15:48 | #


J'ai une autre erreur, mais je pense qu'il s'agit d'une erreur de syntaxe… Je te met tous le rapport ici :

pc37:fxsdk antoine$ make
gcc -c fxg1a/dump.c -o build/fxg1a/dump.c.o -Wall -Wextra -std=c11 -g -I fxg1a/ -D_GNU_SOURCE -DFXSDK_PREFIX='"/Users/antoine/.local"'  -MT build/fxg1a/dump.c.o -MMD -MP -MF build/fxg1a/dump.c.d
gcc -c fxg1a/edit.c -o build/fxg1a/edit.c.o -Wall -Wextra -std=c11 -g -I fxg1a/ -D_GNU_SOURCE -DFXSDK_PREFIX='"/Users/antoine/.local"'  -MT build/fxg1a/edit.c.o -MMD -MP -MF build/fxg1a/edit.c.d
gcc -c fxg1a/util.c -o build/fxg1a/util.c.o -Wall -Wextra -std=c11 -g -I fxg1a/ -D_GNU_SOURCE -DFXSDK_PREFIX='"/Users/antoine/.local"'  -MT build/fxg1a/util.c.o -MMD -MP -MF build/fxg1a/util.c.d
gcc build/fxg1a/dump.c.o build/fxg1a/edit.c.o build/fxg1a/file.c.o build/fxg1a/icon.c.o build/fxg1a/main.c.o build/fxg1a/util.c.o -o bin/fxg1a -lpng
gcc -c fxos/analysis.c -o build/fxos/analysis.c.o -Wall -Wextra -std=c11 -g -I fxos/ -D_GNU_SOURCE -DFXSDK_PREFIX='"/Users/antoine/.local"'  -MT build/fxos/analysis.c.o -MMD -MP -MF build/fxos/analysis.c.d
gcc -c fxos/asm.c -o build/fxos/asm.c.o -Wall -Wextra -std=c11 -g -I fxos/ -D_GNU_SOURCE -DFXSDK_PREFIX='"/Users/antoine/.local"'  -MT build/fxos/asm.c.o -MMD -MP -MF build/fxos/asm.c.d
fxos/asm.c:21:3: error: expected ')'
                err("too many tables, skipping");
                ^
fxos/errors.h:61:35: note: expanded from macro 'err'
#define err(str, ...) errf(0, str __VA_OPT__(,) __VA_ARGS__)
                                  ^
fxos/asm.c:21:3: note: to match this '('
fxos/errors.h:61:27: note: expanded from macro 'err'
#define err(str, ...) errf(0, str __VA_OPT__(,) __VA_ARGS__)
                          ^
1 error generated.
make: *** [build/fxos/asm.c.o] Error 1

"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   95%
LephenixnoirHors ligneAdministrateurPoints: 16097 Défis: 140 Message

Citer : Posté le 29/06/2019 15:58 | #


Quelque chose que tu as une version de clang (le compilateur, qui n'est en réalité pas gcc) tellement vieille qu'elle ne supporte pas __VA_OPT__. Tu peux essayer en tapant gcc --version. T'as regardé s'il y a des mises à jour pour ça ?
Shadow15510Hors ligneAdministrateurPoints: 3946 Défis: 16 Message

Citer : Posté le 29/06/2019 16:02 | #


J'ai pas trop trouvé où est indiqué la version… Donc je te met tout…

pc37:~ antoine$ gcc --version
Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/include/c++/4.2.1
Apple LLVM version 10.0.1 (clang-1001.0.46.4)
Target: x86_64-apple-darwin18.6.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin

"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   95%
LephenixnoirHors ligneAdministrateurPoints: 16097 Défis: 140 Message

Citer : Posté le 29/06/2019 16:12 | #


Wtf, ça correspond même pas aux numéros de version de clang.

Voici un test : dans fxos/errors.h, à la ligne 61 (tout à la fin), remplace :

#define err(str, ...) errf(0, str __VA_OPT__(,) __VA_ARGS__)

par :

#define err(str, ...) errf(0, str , ##__VA_ARGS__)

puis recompile. Si ça ne marche toujours pas, essaie :

#define err(...) errf(0, __VA_ARGS__)
Shadow15510Hors ligneAdministrateurPoints: 3946 Défis: 16 Message

Citer : Posté le 29/06/2019 16:17 | #


Ça marche avec la première solution !

Edit : Ah, euh j'ai une autre erreur avec sudo make install >_<' :

pc37:fxsdk antoine$ sudo make install
Password:
install -d /Users/antoine/.local/bin
install -d /Users/antoine/.local/share/fxsdk
install bin/fxg1a bin/fxos -m 755 /Users/antoine/.local/bin
install: -m: No such file or directory
make: *** [install] Error 71

"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   95%
LephenixnoirHors ligneAdministrateurPoints: 16097 Défis: 140 Message

Citer : Posté le 29/06/2019 17:48 | #


D'abord tu n'es pas obligé de mettre sudo ici, et je te conseille de ne pas le faire.

Ensuite la prochaine fois qu'on me dit que Mac c'est un genre de Linux, juste non. è_é

Tu peux git pull et continuer.
Shadow15510Hors ligneAdministrateurPoints: 3946 Défis: 16 Message

Citer : Posté le 29/06/2019 17:52 | #


Alors… sans le sudo ça me renvoie : Permission denied (à la limite c'est logique et pas de ta faute… ) et avec ça me renvoie une autre erreur :

sed -i '/^PREFIX=\\$/ a /Users/antoine/.local' /Users/antoine/.local/bin/fxsdk
sed: 1: "/Users/antoine/.local/b ...": command a expects \ followed by text

"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   95%
LephenixnoirHors ligneAdministrateurPoints: 16097 Défis: 140 Message

Citer : Posté le 29/06/2019 17:58 | #


Zut, ça c'est une erreur de ma part qui est passée inaperçue parce que GNU sed est gentil.

J'ai réécrit un bout de l'histoire, utilise git fetch puis git reset --hard origin/master, comme tout à l'heure, pour continuer.

Et merci de ta patience ! Les bugs qu'on corrige là ne devraient plus se présenter pour les prochaines compilations sous Mac. Ils sont résolus pour de bon !
Shadow15510Hors ligneAdministrateurPoints: 3946 Défis: 16 Message

Citer : Posté le 29/06/2019 18:01 | #


Mais c'est moi qui te remercie !

Bon, par contre j'ai encore une erreur, au premier make cette fois-ci :

pc37:fxsdk antoine$ make
gcc -c fxos/asm.c -o build/fxos/asm.c.o -Wall -Wextra -std=c11 -g -I fxos/ -D_GNU_SOURCE -DFXSDK_PREFIX='"/Users/antoine/.local"'  -MT build/fxos/asm.c.o -MMD -MP -MF build/fxos/asm.c.d
fxos/asm.c:21:3: error: expected ')'
                err("too many tables, skipping");
                ^
fxos/errors.h:61:35: note: expanded from macro 'err'
#define err(str, ...) errf(0, str __VA_OPT__(,) __VA_ARGS__)
                                  ^
fxos/asm.c:21:3: note: to match this '('
fxos/errors.h:61:27: note: expanded from macro 'err'
#define err(str, ...) errf(0, str __VA_OPT__(,) __VA_ARGS__)
                          ^
1 error generated.
make: *** [build/fxos/asm.c.o] Error 1

"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   95%
LephenixnoirHors ligneAdministrateurPoints: 16097 Défis: 140 Message

Citer : Posté le 29/06/2019 18:02 | #


Yup, l'un des bugs était resté sur ta copie et du coup je l'ai poussé. git pull te mettra sur les rails.
Pages : Précédente1 ... , 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, ... 21Suivante

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2019 | Il y a 87 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