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
Niveau: Confirmé
Points: 10036
Défis: 130
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

La sagesse est la prunelle de tes yeux, et la gloire l’enveloppe de ton cœur.


Dark storm
Hors ligne
Administrateur
Niveau: Aucun
Points: 9597
Défis: 170
Message
Dernier message de la page précédente :Posté le 10/07/2015 22:45 |
Ah, chouette
faut que je me compile un petit GCC
----------------------------------
Finir est souvent bien plus difficile que commencer. — Jack Beauregard



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

Intelligide
Hors ligne
Banni de la Shoutbox
Niveau: Aucun
Points: 21
Défis: 5
Message
Citer : Posté le 12/07/2015 10:47 | #
Lephenixnoir a écrit :
Ça me donne des fichiers comme ça :
[b]cpp.lang:[/b]
##
#    fxSDK syntax definition file.
#    Warning: this file follows a strict syntax. Please do not edit.
##



[Meta]

lang:    C/C++



[SingleRules]



name:    types.native
regex:    \b(?:void|char|short|int|long|float|double|enum|union [i][...][/i]
color:    #55afff

name:    types.extra
regex:    \b(?:ushort|u?int(?:8|16|32)_t|s?size_t|template|class [i][...][/i]
color:    #55afff

name:    types.qualifiers
regex:    \b(?:register|extern|const|static|volatile|inline [i][...][/i]
color:    #ff2e4c



name:    constants.define
regex:    \b(?:true|false|NULL|nullptr)\b
color:    #ae6deb

name:    constants.numeric
regex:    \b\d+\b|\b0x[\dA-Fa-f]\b
color:    #ae6deb



name:    functions.call
regex:    \b[A-Za-z_]\w*(?=\()
color:    #55afff

name:    functions.def
regex:    \b[A-Za-z_]\w*\s+([A-Za-z_]\w*)(?=\()
color:    #80d435



name:    statements
regex:    \b(?:if|else|for|do|while|switch|case|default|continue [i][...][/i]
color:    #ff2e4c

name:    statements.cpp
regex:    \b(?:try|catch|throw|new|delete|operator|namespace)\b
color:    #ff2e4c



name:    preprocessor
regex:    ^\s*#\s*(if|else||elif|ifdef|ifndef|endif|undef|include|define|pragma|not [i][...][/i]
color:    #ff2e4c

name:    iso646
regex:    \b(?:and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq [i][...][/i]
color:    #ff2e4c

name:    comment.single
regex:    //[^\n]*
color:    #464646



[MultiRules]



name:    comment.multi
open:    /\*
close:    \*/
color:    #464646



Au fait, Je trouve que c'est pas très super de faire des trucs comme ça pour le parsage par regex, c'est carrèment galère (et pour le parsage par ligne, ça passe mais j'aime pas trop) je pense que le mieux serait de mettre les règles dans des conteneurs pour bien différencier les attributs de chaque règle. Par exemple:

<Rule>
name:    iso646
regex:    \b(?:and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq [i][...][/i]
color:    #ff2e4c
</Rule>

<Rule>
name:    comment.single
regex:    //[^\n]*
color:    #464646
</Rule>


Ainsi il suffit de parser récupérer toutes les <Rule>text</Rule> avec un regex puis de parser les attributs dans chaque règle, ça évite les erreurs et c'est plus joli
----------------------------------
┌∩┐(ಠ_ಠ)┌∩┐
Lephenixnoir
Hors ligne
Administrateur
Niveau: Confirmé
Points: 10036
Défis: 130
Message
Citer : Posté le 12/07/2015 11:10 | #
Moi je vois deux problèmes à ça.

D'une part ça alourdit vachement la syntaxe. Ce fichier est fait pour être simple et compréhensible par tout le monde.
Tu pourrais au moins mettre ça :
<comment.single>
regex:  //[^\n]*
color:  #464646
</comment.single>

même sans vérifier la balise fermante.

Mais franchement, je trouve ça moche. Ça mélange la syntaxe originelle avec du HTML (oui, c'est aussi ce que fais mon style parser, mais c'est aussi pour ça que je veux le modifier), c'est moins intuitif à éditer (il est fait pour être léger et compréhensible) et c'et pas franchement utile.

Ben oui, pourquoi ne pas ajouter des guillemets aussi pour que ce soit plus représentatif ?
name:   "comment.single"
regex:  "//[^\n]*"
color:  "#464646"


En plus ta syntaxe a le défaut que contrairement à la mienne, elle ne permet pas du tout de faire ça :
name:   rule1
regex:  [i]regex[/i]
color:  #ff0000

name:   rule2
regex:  [i]regex[/i]

Où implicitement, la règle deux prend la même couleur que la une.

Tu fais comme tu veux, mais moi je trouve ça vraiment inutile et superficiel. Une ligne vide sépare deux règles, ça suffit largement.
----------------------------------
La sagesse est la prunelle de tes yeux, et la gloire l’enveloppe de ton cœur.
Dark storm
Hors ligne
Administrateur
Niveau: Aucun
Points: 9597
Défis: 170
Message
Citer : Posté le 12/07/2015 13:44 | #
J'ai un gros bug : lorsque je lance la compil' depuis le fxSDK, il me dit que GCC n'a pas été trouvé.
Si je lance à la main le Makefile généré, tout va bien…
----------------------------------
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir
Hors ligne
Administrateur
Niveau: Confirmé
Points: 10036
Défis: 130
Message
Citer : Posté le 12/07/2015 15:52 | #
C'est pas vraiment un gros bug, mais plus probablement de ta faute : tu as du ajouter le dossier de ton gcc au path dans le .bashrc, qui est lancé quand on ouvre un terminal (ce qui explique que ça fonctionne manuellement), mais pas dans le .profile, qui est exécuté au lancement de la session (ce qui explique que ça ne fonctionne pas automatiquement) !
----------------------------------
La sagesse est la prunelle de tes yeux, et la gloire l’enveloppe de ton cœur.
Dark storm
Hors ligne
Administrateur
Niveau: Aucun
Points: 9597
Défis: 170
Message
Citer : Posté le 12/07/2015 15:56 | #
Ah, c'est donc ça.

Ajouté le 13/07/2015 à 19:28 :
Idées de trucs à ajouter :

Raccourcis clavier :
→ Ctrl (+ Shift) + Tab pour changer d'onglet, dans un sens et dans l'autre
→ Ctrl + Lettre pour ajouter le fichier ouvert au projet (ce qui permet de faire Ctrl + N > Ctrl + touche pour ajouter rapidement un nouveau fichier)

Éventuellement la coloration du log d'erreur de GCC (orange le mot "warning" rouge "error", pas besoin de plus je pense) histoire de rapidement trouver la ligne qui pose problème dans le log.

Ajouté le 13/07/2015 à 21:02 :
Ah si, aussi : une petite icone à coté du nom de l'onglet pour savoir si un fichier est enregistré ou non
----------------------------------
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir
Hors ligne
Administrateur
Niveau: Confirmé
Points: 10036
Défis: 130
Message
Citer : Posté le 13/07/2015 22:47 | #
Dark storm a écrit :
→ Ctrl (+ Shift) + Tab pour changer d'onglet, dans un sens et dans l'autre
→ Ctrl + Lettre pour ajouter le fichier ouvert au projet (ce qui permet de faire Ctrl + N > Ctrl + touche pour ajouter rapidement un nouveau fichier)

Bonne idée ! Je m'en occuperai.

Dark Storm a écrit :
Éventuellement la coloration du log d'erreur de GCC (orange le mot "warning" rouge "error", pas besoin de plus je pense) histoire de rapidement trouver la ligne qui pose problème dans le log.

C'est que je commence à être calé niveau coloration !
Ok, ça aussi c'est facilement faisable.

Dark Storm a écrit :
Ah si, aussi : une petite icone à coté du nom de l'onglet pour savoir si un fichier est enregistré ou non

Ah oui, y'a ça aussi... va pas falloir que ça encombre trop l'interface
----------------------------------
La sagesse est la prunelle de tes yeux, et la gloire l’enveloppe de ton cœur.
Dark storm
Hors ligne
Administrateur
Niveau: Aucun
Points: 9597
Défis: 170
Message
Citer : Posté le 13/07/2015 23:51 | #
Un petit cercle (caractère unicode ça doit se faire non ?) qui est vide lorsque le fichier est enregistré, plein sinon. En se démerdant bien ça peut même être ton trigger pour fermer le fichier (comme dans ST quoi )

Je me suis dit que pour tester, y'a qu'un test grandeur nature qui peut fonctionner, du coup je me fais le moteur de MS4 dans la soirée

MS4 parce que je saute MS3 (comme MS1) parce qu'il ne me convient pas…
----------------------------------
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir
Hors ligne
Administrateur
Niveau: Confirmé
Points: 10036
Défis: 130
Message
Citer : Posté le 14/07/2015 09:22 | #
Dark storm a écrit :
Un petit cercle (caractère unicode ça doit se faire non ?) qui est vide lorsque le fichier est enregistré, plein sinon. En se démerdant bien ça peut même être ton trigger pour fermer le fichier (comme dans ST quoi )

Ben oui Excellent !

Dark Storm a écrit :
Je me suis dit que pour tester, y'a qu'un test grandeur nature qui peut fonctionner, du coup je me fais le moteur de MS4 dans la soirée

Hey oh, brutalise pas mon SDK hein ! X)

Dark Storm a écrit :
MS4 parce que je saute MS3 (comme MS1) parce qu'il ne me convient pas…

Impossible pour moi de trouver le 3 ou le 4.
Mais faut dire aussi que le nom de MS3 a quelques restes peu propices à un développement efficace...
----------------------------------
La sagesse est la prunelle de tes yeux, et la gloire l’enveloppe de ton cœur.
Dark storm
Hors ligne
Administrateur
Niveau: Aucun
Points: 9597
Défis: 170
Message
Citer : Posté le 14/07/2015 09:40 | #
Le 4 c'est normal, le 3 est là : http://www.planet-casio.com/Fr/programmes/voir_un_programme_casio.php?showid=2024

Bref, [/HS]
----------------------------------
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir
Hors ligne
Administrateur
Niveau: Confirmé
Points: 10036
Défis: 130
Message
Citer : Posté le 14/07/2015 10:22 | #
Sur insistance prononcée de Dark Storm (j'ai failli me faire passer à tabac), j'ai créé un repo pour le fxSDK.

Je pense que je vais suivre un modèle de mise à jour semblable à la rolling release, comme ça vous pourrez mettre le logiciel à jour quand vous le voulez à partir du repo.

Pour cloner la version actuelle :
$ git clone ht[color=auto]t[/color]ps:/[color=auto]/[/color]Lephenixnoir[color=auto]@[/color]bitbucket.org/Lephenixnoir/fxsdk.git

Ensuite, pour la compiler et l'utiliser :
$ make
$ ./fxSDK

Pour l'instant, vous devez lancer le fxSDK depuis son dossier. Évitez le raccourci bureau.

Ajouté le 14/07/2015 à 12:12 :
J'ai mis à jour le repo avec différentes améliorations et corrections signalées par Dark Storm :
→ Oublis sur le colorateur syntaxique
→ Options de compilation et de linkage
→ Numéros de ligne et polices dans l'éditeur de code
→ Quelques améliorations mineures dans le code
----------------------------------
La sagesse est la prunelle de tes yeux, et la gloire l’enveloppe de ton cœur.
Dark storm
Hors ligne
Administrateur
Niveau: Aucun
Points: 9597
Défis: 170
Message
Citer : Posté le 14/07/2015 12:14 | #
Cool, je màj

Ajouté le 14/07/2015 à 12:22 :
Rapidement, quelques question :
→ Les options de compilation sont pas sauvegardées ?
→ C'est quoi la police de l'éditeur ? Chez moi elle est pas monospacée. Peut être l'inclure dans les fichiers source si elle n'est pas courante.
→ Manque aussi l'option "Rebuild all" (si tu peux la rendre automatique lorsque les options du compilo ont changé, ça serai top )

Bref, c'est pas si évident que ça de faire un truc 100% fxSDK à l'heure actuelle
----------------------------------
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir
Hors ligne
Administrateur
Niveau: Confirmé
Points: 10036
Défis: 130
Message
Citer : Posté le 14/07/2015 12:25 | #
Dark storm a écrit :
→ Les options de compilation sont pas sauvegardées ?

Aah m*rde !

Dark Storm a écrit :
→ C'est quoi la police de l'éditeur ? Chez moi elle est pas monospacée. Peut être l'inclure dans les fichiers source si elle n'est pas courante.

« font-family: 'Droid Sans Mono', 'Free Mono', 'Liberation Mono', 'Inconsolata', 'Consolas'; »
Faudrait peut-être que j'en rajoute encore derrière... peut-être avec 'monospace' ?

Dark Storm a écrit :
→ Manque aussi l'option "Rebuild all" (si tu peux la rendre automatique lorsque les options du compilo ont changé, ça serai top )

Hmm, pas facile : comme le Makefile change à chaque fois... enfin, je vais m'en occuper.

Dark Storm a écrit :
Bref, c'est pas si évident que ça de faire un truc 100% fxSDK à l'heure actuelle

Qui a jamais prétendu le contraire ?
----------------------------------
La sagesse est la prunelle de tes yeux, et la gloire l’enveloppe de ton cœur.
Dark storm
Hors ligne
Administrateur
Niveau: Aucun
Points: 9597
Défis: 170
Message
Citer : Posté le 14/07/2015 12:39 | #
Rebuild all == make clean > génération du makefile > make

Ajouté le 14/07/2015 à 12:49 :
J'ai l'impression que t'as pas commit la nouvelle feuille de style… J'ai changé manuellement, j'ai bien Droid Sans M.
----------------------------------
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir
Hors ligne
Administrateur
Niveau: Confirmé
Points: 10036
Défis: 130
Message
Citer : Posté le 14/07/2015 13:21 | #
Dark storm a écrit :
Rebuild all == make clean > génération du makefile > make

Je sais, c'est bien ce que je vais faire.

Dark Storm a écrit :
J'ai l'impression que t'as pas commit la nouvelle feuille de style… J'ai changé manuellement, j'ai bien Droid Sans M.

Non, je ne commit pas chaque modification unique.

Ajouté le 14/07/2015 à 13:47 :
Dark storm a écrit :
→ Les options de compilation sont pas sauvegardées ?
→ C'est quoi la police de l'éditeur ? Chez moi elle est pas monospacée. Peut être l'inclure dans les fichiers source si elle n'est pas courante.
→ Manque aussi l'option "Rebuild all" (si tu peux la rendre automatique lorsque les options du compilo ont changé, ça serai top )

Les trois sont faites. Je rajoute l'automatisation lorsqu'on modifie les options.
----------------------------------
La sagesse est la prunelle de tes yeux, et la gloire l’enveloppe de ton cœur.
Dark storm
Hors ligne
Administrateur
Niveau: Aucun
Points: 9597
Défis: 170
Message
Citer : Posté le 14/07/2015 13:57 | #
Parfait, merci
----------------------------------
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir
Hors ligne
Administrateur
Niveau: Confirmé
Points: 10036
Défis: 130
Message
Citer : Posté le 15/07/2015 15:06 | #
J'ai envoyé quelques commits sur le repo du wrapper.

Au programme, beaucoup de modifications et nettoyage interne, plus notablement des changements dans la gestion des erreurs et un support bien plus évolué des bitmaps (supporte le 32 bits, 24 bits, monochrome et partiellement le 16 bits).

Ajouté le 15/07/2015 à 16:51 :
Hop, j'ai également ajouté une option appelée « dump » (-d) qui fait l'exact inverse du wrapper : elle affiche le contenu du header d'un fichier g1a

Une option bien pratique pour moi. Ajoutez à cela du nettoyage, encore et toujours (oui c'est incessant, mon dieu ce que je programmais mal il y a... euh... oups).

J'avance bien, une fois que le wrapper sera vraiment fonctionnel il pourra accompagner le fxSDK sans causer des problèmes toutes les deux minutes
----------------------------------
La sagesse est la prunelle de tes yeux, et la gloire l’enveloppe de ton cœur.
Dark storm
Hors ligne
Administrateur
Niveau: Aucun
Points: 9597
Défis: 170
Message
Citer : Posté le 15/07/2015 17:29 | #
Ah, chouette. Une idée supplémentaire, dans le Make, ajouter un install: sudo cp g1a-wrapper /usr/local/cross/bin
Comme ça il se retrouve dans le path avec les autres utilitaires de compilation
----------------------------------
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir
Hors ligne
Administrateur
Niveau: Confirmé
Points: 10036
Défis: 130
Message
Citer : Posté le 15/07/2015 17:32 | #
Dark storm a écrit :
Ah, chouette. Une idée supplémentaire, dans le Make, ajouter un install: sudo cp g1a-wrapper /usr/local/cross/bin
Comme ça il se retrouve dans le path avec les autres utilitaires de compilation

Hmm, j'ai déjà un make install qui le fout dans le $HOME/bin, je peux éventuellement le mettre dans /usr/bin pour plus de convenance, mais /usr/local/cross/bin ça m'emmerde vraiment puisque personne n'est vraiment supposé l'avoir installé là.

Ajouté le 15/07/2015 à 17:33 :
Je peux toujours m'arranger pour le foutre à côté du sh3eb-elf mais bon, c'est pas terrible.
----------------------------------
La sagesse est la prunelle de tes yeux, et la gloire l’enveloppe de ton cœur.
Dark storm
Hors ligne
Administrateur
Niveau: Aucun
Points: 9597
Défis: 170
Message
Citer : Posté le 15/07/2015 17:33 | #
Bah, comme c'est ça ira quand même.
----------------------------------
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir
Hors ligne
Administrateur
Niveau: Confirmé
Points: 10036
Défis: 130
Message
Citer : Posté le 15/07/2015 17:36 | #
Je pense quand même le mettre dans /usr/bin parce que c'est plus commode... t'en penses quoi ?
----------------------------------
La sagesse est la prunelle de tes yeux, et la gloire l’enveloppe de ton cœur.

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

Index du Forum | Projets de programmation | fxSDK, un outil de développement d'add-ins sous Linux
Publicité et partenaires
Casio Education
Casio éducation

TI-Planet
Casiopeia
Casiopeia
CasioFan, la communauté ClassPad
CasioFan
CodeWalrus
CodeWalrus

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2015 | Il y a 53 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements
Rugby Manager | Jeu de basket | Jeu de handball | Construction maison Carcassonne

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