1

Voilà j'ai télécharger sur le site de Sun gcc2c. C'est un ensemble de patch à appliquer à GCC version 3.0.4 lors de la compilation de celui-ci pour pouvoir générer du code C à partir d'un code en C++.
J'ai télécharger les sources mais je ne sais pas comment procéder pour compiler GCC avec le patch sous Windows avec Mingw.

(Je sais c'est une vieille version de 2002 et le C++ c'est pas bien mais j'ai tout de même envie d'essayer).
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

2

Ça ne t'aidera pas pour TIGCC, le code converti aura toujours besoin de la librairie standard C++, il y fera juste référence à travers des symboles illisibles (les "mangled names").
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

3

TIGCC pour l'instant je m'en fiche. Je parle de GCC pour x86. L'idée de gcc2c est de "traduire" une source C++ en C par l'intermédiaire de GCC. Il n'est fait nulle part mention de la librairie standard du C++. Si on exclut les exceptions, les templates et les opérations de redirections standards (cout, cin...) il est tout à fait possible de produire du code C à partir du C++ de façon très portable.

Code C++
extern "C" { extern int printf (char *, ...); }
enum {
  ZERO, ONE, TEN = 10,
  HUNDRED = 100, THOUSAND = 1000
};

class Base {
  private:
    int B_private_Data;
  protected:
    int B_protected_Data;
  public:
    int B_public_Data;
    Base (int arg = ONE) : B_private_Data (arg + THOUSAND),
    B_protected_Data (arg + HUNDRED),
    B_public_Data (arg) {}
    ~Base (void) {}
    int B_getPrivate_Data (void) { return B_private_Data; }
    virtual int F1 (void) = 0;
    virtual int F2 (void) { return B_private_Data; }
};

class Derived : public Base {
  private:
    int D_private_Data;
  public:
    int D_public_Data;
    Derived (int arg = ZERO) : D_private_Data (arg),
    D_public_Data (arg),
    Base (arg) {}
    ~Derived (void) {}
    int D_getPrivate_Data (void) { return D_private_Data; }
    virtual int F1 (void) {
      return B_protected_Data;
    }
    virtual int F2 (void) {
    return B_protected_Data + TEN + ONE;
}
/*
Derived inherits:
  B_get_private_data, B_public_data, B_protected_data
*/
};

int main (void) {
  Base *bp = new Derived; // defaults to 0
  Derived d (2);
  printf ("%d\n", d.D_public_Data ); // 2
  d.D_public_Data = TEN;
  printf ("%d\n", d.D_public_Data); // 10
  printf ("%d\n", bp->B_getPrivate_Data ()); // 1000
  printf ("%d\n", d.D_getPrivate_Data ()); // 2
  /* Elide virtual function call! */
  printf ("%d\n", d.F1 ()); // 102
  /* Virtual function call! */
  printf ("%d\n", bp->F2 ()); // 111
  delete bp;
  /* Derived d destructor implicitly called. */
  return 0;
}


Donne en C:
/* Dynamic memory functions */
extern void *__vec_new (void *, int, int, void *);
extern void __vec_delete (void *, int, int, void *, int, int);
extern void *__nw__FUi (unsigned int);
extern void __dl__FPv (void *);
extern int printf (char *,...);
/* Type decls for multiple and single inheritance. */
typedef int (*__vptp) ();
struct __mptr {
  short d; short i; __vptp f;
};
extern struct __mptr *__ptbl_vec__c___src_C_[];
enum __E1 {
  ZERO = 0, ONE = 1, TEN = 10,
  HUNDRED = 100, THOUSAND = 1000
};

struct Base { /* sizeof Base == 16 */
int B_private_Data__4Base;
int B_protected_Data__4Base;
int B_public_Data__4Base;
struct __mptr *__vptr__4Base; /* Compiler generated. */
};
/* Base class constructor */
static struct Base *
__ct__4BaseFi (struct Base *__0this, int __0arg) {
  /* The following 5 lines are the compiler-generated preamble. */
  if (__0this ||
     (__0this =
       (struct Base *) __nw__FUi (sizeof (struct Base))))
         ((((__0this->__vptr__4Base =
         (struct __mptr *) __ptbl_vec__c___src_C_[0]),
         /* User constructor code starts here! */
        (__0this->B_private_Data__4Base =
        (__0arg + 1000))),
        (__0this->B_protected_Data__4Base =
        (__0arg + 100))),
        (__0this->B_public_Data__4Base =
         __0arg))
  ;
  return __0this;
}

/* Base class destructor */
static char
__dt__4BaseFv (struct Base *__0this, int __0__free) {
  if (__0this) {
    __0this->__vptr__4Base =
      (struct __mptr *) __ptbl_vec__c___src_C_[0];
   /* User destructor code would go here. */
   if (__0this)
     if (__0__free & 1)
       __dl__FPv ((char *) __0this);
  }
}

static int
B_getPrivate_Data__4BaseFv (struct Base *__0this) {
  return __0this->B_private_Data__4Base;
}

static int
F2__4BaseFv (struct Base *__0this) {
  return __0this->B_private_Data__4Base;
}

struct Derived { /* sizeof Derived == 24 */
  int B_private_Data__4Base;
  int B_protected_Data__4Base;
  int B_public_Data__4Base;
  struct __mptr *__vptr__4Base;
  int D_private_Data__7Derived;
  int D_public_Data__7Derived;
};

/* Derived class constructor */
static struct Derived *
__ct__7DerivedFi (struct Derived *__0this, int __0arg) {
  /* The following 7 lines are the compiler-generated preamble. */
  if (__0this ||
     (__0this = (struct Derived *)
      __nw__FUi (sizeof (struct Derived))))
      ((((__0this = (struct Derived *)
      __ct__4BaseFi (((struct Base *) __0this), __0arg)),
      (__0this->__vptr__4Base =
        (struct __mptr *) __ptbl_vec__c___src_C_[1])),
      /* User constructor code goes here. */
      (__0this->D_private_Data__7Derived = __0arg)),
      (__0this->D_public_Data__7Derived = __0arg))
  ;
  return __0this;
}

/* Derived class destructor */
static char
__dt__7DerivedFv (struct Derived *__0this, int __0__free) {
  if (__0this) {
     __0this->__vptr__4Base =
       (struct __mptr *) __ptbl_vec__c___src_C_[1];
     /* User destructor code goes here. */
     if (__0this) {
       __dt__4BaseFv (((struct Base *) __0this), (int) 0);
       if (__0__free & 1)
         __dl__FPv ((char *) __0this);
     }
  }
}

static int
D_getPrivate_Data__7DerivedFv (struct Derived *__0this) {
  return __0this->D_private_Data__7Derived;
}

static int
F1__7DerivedFv (struct Derived *__0this) {
  return __0this->B_protected_Data__4Base;
}

static int
F2__7DerivedFv (struct Derived *__0this) {
  return ((__0this->B_protected_Data__4Base + 10) + 1);
}

int main (void) {
  _main ();
{
  struct Base *__1bp; struct Derived __1d;
  __1bp = (struct Base *)
  __ct__7DerivedFi ((struct Derived *) 0, (int) 0);
  __ct__7DerivedFi (&__1d, 2);
  printf ((char *) "%d\n", __1d.D_public_Data__7Derived);
  __1d.D_public_Data__7Derived = 10;
  printf ("%d\n", __1d.D_public_Data__7Derived);
  printf ("%d\n", B_getPrivate_Data__4BaseFv (__1bp));
  printf ("%d\n", D_getPrivate_Data__7DerivedFv (&__1d));
  printf ("%d\n", F1__7DerivedFv (&__1d));
  /* Virtual function call */
  printf ((char *) "%d\n",
    ((*(((int (*) ()) (__1bp->__vptr__4Base[2]).f))))
    (((struct Base *) ((((char *) __1bp))
      + (__1bp->__vptr__4Base[2]).d))));
      __dt__4BaseFv (__1bp, 3);
  __dt__7DerivedFv (&__1d, 2);
  return 0;
}
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

4

Je l'accorde la traduction en C est indigeste.
Bref comment compiler GCC sur x86 sous Windows en appliquant un patch?
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

5

Et l'intérêt par rapport à utiliser g++ serait?
Et si ça n'a pas de rapport avec les TIs, alors qu'est-ce que ça fait dans "Prog C TI"?
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

6

A pouvoir coder en C++ sous des machines qui ne supportent que le C (exemple TI68K).
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

7

Bah, on en revient à ce que j'ai dit, tu auras besoin d'un portage de la libstdc++, et c'est bien le travail principal qui serait nécessaire pour gérer le C++ dans TIGCC. Là, tu utilises printf, ce n'est pas vraiment du C++. gni En plus, tu as déclaré printf à la main. Je te signale que les headers de TIGCCLIB ne sont pas compatibles C++.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

8

Hum on va recentrer le problème.
Le C++ pure je m'en fout. Je me fiche de suivre la norme au bout des doigts. L'idée est d'avoir si tu préfères du C orienté objet avec des classes, polymorphisme de fonctions et surcharge d'opérateurs. Le reste on s'en fiche. Ca fera du C++ "crade" et alors c'est pas grave.
Avant de faire du portage de libstdc++ faut déjà arriver à compiler 2 classes toutes pourries (c'est ce que je demande). ^^
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

9

N'écoute pas trop Kevin wink J'espère que tu arriveras à faire ce que tu veux.
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

10

Il existe l'EmbeddedC++ qui sert à resoudre les pbm de l'embarquée, dont les pbm de librairies c++
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

11

Thibaut (./9) :
N'écoute pas trop Kevin wink

Bah, manque de bol, je suis le seul à connaître les réponses à ses questions ici. gni
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

12

Je n'en mettrais pas ma main a couper...
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

13

Quelle prétention !
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

14

-c'est de l'humour
-de toute façon c'est vrai ^^

15

geogeo (./1) :
J'ai télécharger les sources mais je ne sais pas comment procéder pour compiler GCC avec le patch sous Windows avec Mingw.


Passe sous linux. ca serra plus simple et (beaucoup) plus rapide. J'oserai jamais compilé gcc sous mingw. Ca serait vraiment trop long.

16

Environ 1 heure (ordre de grandeur, maintenant si c'est 1/4 d'heure ou 2 heures, je ne sais pas, ça dépend de la machine, et aussi de la version du système d'exploitation).
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

17

x10 si on compile sous windows par rapport à linux. Expérience vécue sad

18

Linux j'aimerai bien mais vu la connexion internet que j'ai hyper sécurisée avec une clef wifi qui n'est pas reconnue. Impossible d'installer le driver... (trop de dépendances).
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

19

Je suis bloqué dans la compilation à cause de ce message d'erreur:
c:\MinGW\bin\ar.exe: libiberty.a: File truncated


En regardant de plus près celui-ci fait 9 octets, je pige pas trop pourquoi ar.exe échoue.

[Edit] Bon il aime pas ma version de GCC. cheeky
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

20

PpHd (./17) :
x10 si on compile sous windows par rapport à linux. Expérience vécue sad

Je confirme. smile
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

21

22

AMHA, c'est plutôt un Binutils plus récent qu'il lui faut.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

23

avec un gcc 3.0.x ?

bref, un autre binutils grin

(et si le code C généré est celui qui est traduit en asm par un compilo c++ normal, alors ça confirme ce que je pense du c++) tongue

24

nan, mais ds ts les cas, compiler gcc sous mingw c'est une grosse merde, jamais pris le temps d'aller au bout vu tous les problemes que j'avais recontre a l'epoque :/

25

Pas très lisible par des humains, ce code C traduisant la sémantique C++ grin
Je connais une surcouche type "programmation à composants" de C pour laquelle la toolchain génère du code qui ressemble (d'assez loin quand même grin) à ça. Notamment l'utilisation de tables de méthodes requises et fournies par les composants.
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

26

Bon alors. J'ai réussi il y a deux jours à compiler GCC avec MinGW en utilisant une version ancienne de Binutils et gcc. Par contre j'ai merdé dans ma compilation, ce qui fait que le résultat C de la conversion va de GCC à GCC donc aucun moyen de l'afficher. Faut que je recompile (la compilation dure 15 mins (faut dire j'ai viré tout les trucs inutiles)).
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

27

donc aucun moyen de l'afficher

Il n'y a pas d'option de debug qui donne le dump intermédiaire qui va bien ?
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

28

sinon je vois pas l'intéret par rapport à g++ ##trilangue##

29

Quelqu'un pourrait essayer de compiler "gram.y" avec YACC sous Linux et me donner le résultat du fichier y.tab.c.
http://www.tigen.org/download/Divers/gram.y


[Edit] Inutile je viens de réussir à trouver une version de YACC pour Windows. Merci quand même. smile
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

30

$ yacc --version
bison (GNU Bison) 2.3
Écrit par Robert Corbett et Richard Stallman.

Copyright © 2006 Free Software Foundation, Inc.
Ce logiciel est libre; voir les sources pour les conditions de
reproduction. AUCUNE garantie n'est donnée; tant pour des raisons
COMMERCIALES que pour RÉPONDRE À UN BESOIN PARTICULIER.


mirari/BA59 (valable une semaine)
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.