Page 1 of 12

iostream et STL

Unread postPosted: 16 Mar 2014, 19:35
by parisse
Y-a-t-il du support pour les flux I/O et la standard template library C++?

Re: iostream et STL

Unread postPosted: 16 Mar 2014, 21:49
by Lionel Debroux
Une partie de la STL est en effet cross-compilable pour l'OS standard des Nspire et Ndless 3.1/3.6. Je suis moins sûr pour iostream: il se peut qu'il manque des syscalls, auquel cas il faudra faire davantage de reverse-engineering et/ou ajouter des choses comme newlib.
Attention au fait que le code de startup du SDK Ndless 3.1/3.6 ne contient pas les appels pour certains constructeurs, le bug est connu et on peut imaginer qu'il sera bientôt corrigé.
Je dirais qu'il faut essayer, et voir où ça coince.

Si Prof. Bernard Parisse pose ce genre de questions, c'est peut-être que vous avez une idée particulière de portage derrière la tête ? ;)

Re: iostream et STL

Unread postPosted: 16 Mar 2014, 21:58
by Excale
Lionel Debroux wrote:Si Prof. Bernard Parisse pose ce genre de questions, c'est peut-être que vous avez une idée particulière de portage derrière la tête ? ;)


voir l'autre topic: http://tiplanet.org/forum/viewtopic.php ... 86#p159196 :)

Re: iostream et STL

Unread postPosted: 17 Mar 2014, 09:59
by parisse
En fait c'est un eleve de terminale S qui m'a contacte il y a 3 semaines pour me poser la question du portage de giac sur nspire. Je n'ai pas eu trop le temps de regarder, j'etais assez reserve sur les chances de succes et l'interet. Et puis en y reflechissant, je me dis que ce serait une bonne idee (en particulier pour les possesseurs de nspire non CAS, ca pourrait etre une piste pour democratiser l'acces au calcul formel sur calculatrices en tout cas). Je vais avoir un peu plus de temps a partir d'avril (parce que ca m'etonnerait que ca soit completement evident).

Re: iostream et STL

Unread postPosted: 17 Mar 2014, 10:26
by Adriweb
Avoir un moteur CAS alternatif sur les Nspire (CX) CAS serait aussi une chose intéressante :D
(en fait, dans une moindre mesure, ça ne gênerait pas TI contrairement aux nspire non-CAS :P)

(Sinon, il a été question de NspireIO pour l'interface, mais Excale a déjà quelque peu réussi à interfacer (c'était un peu du hack, certes...) les lignes de saisies standards...
Autre solution probablement plus pratique/simple : rendre accessible le moteur depuis un module Lua - une interface de calcul en Lua existe déjà (cf SuperSpire de Critor). Des exemples d’interfaçage avec le Lua sont fournis avec le SDK Ndless.

Re: iostream et STL

Unread postPosted: 17 Mar 2014, 15:57
by parisse
Alors, voila une 1ere etape de franchie: on n'a pas les iostream, mais quelque chose de suffisamment ressemblant je pense la:
https://github.com/compujuckel/nspire-io
J'ai du corriger un petit bug dans console.cpp, au lieu de faire using namespace nio; il faut faire namespace nio { ... } en fermant l'accolade a la fin du fichier. J'ai du aussi toucher au script de link qui n'accepte pas les chemins a la Unix sous windows. Et le programme demo fonctionne.
Reste a adapter le source de giac pour utiliser cette classe.
Et ensuite voir comment faire pour la STL.

Re: iostream et STL

Unread postPosted: 17 Mar 2014, 19:05
by Adriweb
Nous te souhaitons une très bonne chance (et le courage et temps qui va avec :) )

Tiens nous au courant du projet :D
(Il est même possible d'ouvrir un topic d'avancement dédié, si besoin est)

Re: iostream et STL

Unread postPosted: 17 Mar 2014, 20:30
by Lionel Debroux
Je viens de refaire l'exercice: la toolchain compilée par le script listé à http://hackspire.unsads.com/wiki/index. ... n_on_Linux (crosstool-ng permettait également d'en créer une) est C++, et je peux construire le programme suivant:
Code: Select all
#include "os.h"
#include < string>
#include <iostream>

int main(int argc, char * argv[]) {
    std::string str(argv[0]);
    std::cout << str << std::endl;
    return 0;
}

de la façon suivante:
Code: Select all
nspire-g++ -Wall -W -g3 testcxx.cpp -ffreestanding -ffunction-sections -fdata-sections -Wl,--gc-sections -o testcxx -lndls

(certaines options superflues, bien sûr)

Les templates et iostreams sont donc supportables.

Après la construction, que le binaire produit fonctionne sur Nspire (nspire_emu ou machine réelle) en utilisant Ndless 3.6 est une toute autre histoire. La toolchain, et donc les binaires qu'elle produit, ne sont évidemment pas construits vis à vis des syscalls Ndless, même après ajout de -lndls.

Il faudrait refaire la manip avec une vraie toolchain bare metal, sans utiliser, par exemple, newlib.

Ce sera tout pour moi ce soir :)


EDIT: pas tout à fait, en réalité. Les toolchains bare metal sont faites principalement pour le C, et la compilation automatique de la toolchain par crosstool-ng sans newlib échoue lamentablement dans libstdc++, faute de pouvoir trouver stdio.h.
Il faut donc rester à un processus plus manuel, où on peut injecter l'environnement Ndless (qui sera certainement à étendre, c'est le cas général quand on porte un soft portable vers une plate-forme non standard dont on fait progressivement les headers; par exemple j'avais amélioré GCC4TI pour pouvoir patcher moins lourdement Lua et p14p pour fonctionner sur TI-68k/AMS) à la place de newlib, puis déclencher le build final...

Re: iostream et STL

Unread postPosted: 18 Mar 2014, 13:19
by parisse
Bon, je viens d'essayer de compiler libtommath (support entiers en precision arbitraire, ecrit en C). Ca compile bien, j'arrive a linker un programme tout simple mais une fois transfere sur la TI, ca fait tout planter (reset ne marche pas, je suis oblige d'oter les piles pour relancer la TI).
Est-ce parce qu'il faut faire preceder tout include de header standard de #include<os.h>? Peut-on utiliser les header standard ou pas? Ca risque d'etre tres (trop) complique de faire un portage si on n'a aucune indication au moment de la compilation ou du link qu'on utilise quelque chose qu'il ne faut pas utiliser. Du coup je suis assez pessimiste contrairement a hier (d'autant que je me suis apercu que nspireio n'avait pas de support pour les double en C++ en tout cas...)
Edit: Bon en ajoutant #include<os.h> dans tommath.h, ca ne plante plus. Donc l'espoir revient!

Re: iostream et STL

Unread postPosted: 18 Mar 2014, 13:39
by Adriweb
Je me permets une remarque quand j'ai vu "les piles" : tu as donc une ClickPad ou TouchPad ?
En fonction des besoins du programme et de l'état de la calculatrice, des "problèmes" de RAM pourraient survenir...

Sur CX, ca passerait probablement mieux si seule la RAM est un problème, au final.

Je suppose que tester sur émulateur devrait déjà alléger la tâche de débug pendant le développement, surtout côté ram.
(apres, l'émulation n'est pas 100% fiable non plus -pour certains trucs précis, dont les timers de l'arm (d'autres pourront détailler :P)-, mais c'est déjà ca...)