2009-12-02 5 views
24

Attualmente sto gestendo un codice C++ che gira su piattaforme multiple da un singolo albero di sorgenti (Win32, Linux, terminali Verifone CC, MBED e persino il Nintendo GBA/DS). Tuttavia ho bisogno di costruire un'app mirata su una piattaforma embedded per la quale non esiste un compilatore C++ (solo C). Ricordo che molti dei primi compilatori C++ erano solo front-end che si bloccavano su compilatori C esistenti (Glockenspiel ad esempio MSC usato). Ci sono attualmente dei compilatori C++ di questo tipo 'frontend' in uso che genereranno il codice C.C++ frontend solo compilatore (convertito da C++ a C)

     Tools   Platform 
         -----------  ------------ 

       ______Visual C++ _____ WIN32 
      /
       /_______MBED (ARM)_______MBED (ARM dev board). 
      /
      /_________GCC (x86)________Linux 
     /
Source____/___________GCC (ARM)________GBA/DS 
      \ 
      \__________SDA______________Verifone Verix CC Terminals 
      \ 
      \________ARM SDT__________Verifine VerixV CC terminals 
       \ 
       \______????_____________Renases M8/16/32. 
       \ 
       \____????_____________Z8 family. 

Le ultime due piattaforme ho buoni compilatori C ma non C++.

Come potete vedere, sto supportando una grande varietà di piattaforme e condivido un grande numero di codice libreria (e qualche codice app).

+2

Un paio di cose buone da verificare, in particolare LLVM come mezzo per generare C da C++ plus non avevo capito che GCC ora supporta Renesas M16/M32 (che lascia solo lo Z8 senza un compilatore C++ e Sinceramente ho appena comprato una scheda di sviluppo economica per verificarlo, nostalgia delle mie origini Z80, è comunque un microcontrollore bello). Vorrei anche prendere di mira i vecchi terminali Hypercom (ho scritto un bel po 'di codice per questi, ma devo avere un albero sorgente separato. So che gli ultimi Hypercom sono basati su ARM ma ci sono ancora milioni di quei fastidiosi terminali ICE là fuori –

+0

Correlati: http://stackoverflow.com/q/737257 –

risposta

40

Se si utilizza LLVM, llvm-g++ sarà compilare il codice C++ per LLVM codice binario che e llc ha un back-end che converte codice binario che a C.

Si potrebbe scrivere i comandi in questo modo:

llvm-g++ -emit-llvm -c foo.cpp -o foo.o 
llc -march=c <foo.o >foo.c 
+0

Mi piace l'aspetto di questo, esplorerò ulteriormente, grazie .... –

+0

Il tuo secondo link è rotto. –

18

Comeau C++ fa questo.

+0

Stavo per dire lo stesso, ma mi hai battuto per 11 secondi – philsquared

+0

Penso di aver incontrato questo compilatore prima. L'unico problema è che il problema la piattaforma è solo per uso hobbistico. Per quanto posso ricordare, il compilatore Comeau è un po 'costoso. Sto usando ARM SDT per lavoro (costoso ma il lavoro paga). Uso anche Visual Studio 2008 al lavoro (di nuovo pagato per lavoro). Ho usato Visual Studio Express a casa. –

+7

Wow, è "mozzafiato", "incredibile", "favoloso" e hanno anche un link javascript lampeggiante che galleggia sopra il testo che ti spinge ad acquistarlo! –

1

Non aggiornato, ma forse si desidera provare cfront?

Lascerò questo per informazioni - cfront non ha supporto di eccezione.

+2

A vecchio, un po 'come me :) –

2

Comeau C++ genera C come output e sembra che sia felice di portarlo a funzionare con diversi compilatori di back-end, anche se non sono sicuro del prezzo esatto per quello.

Se si desidera un approccio più "roll your own", è possibile acquistare una licenza per il compilatore EDG C++. Normalmente viene utilizzato come front-end (ad esempio da Comeau e Intel) ma credo che dato che è stato spedito, include un generatore di codice che produce C come output. La sua licenza è orientata più verso i produttori di compilatori, tuttavia, quindi una licenza ti dà molti diritti, ma è piuttosto costosa.

5

Can' t aiutare con la Z8, ma la famiglia M16C/M32C di Renesas ha GCC in questi giorni - vedi http://www.kpitgnutools.com/ per toolchain cross precaricato ospitato su Windows. Non l'ho ancora utilizzato, ma potrebbe essere un'opzione migliore rispetto a un frontend C++ di terze parti, soprattutto perché il tuo codice già si rivolge a GCC su altre piattaforme.

+0

Grazie, verificherò (sto già utilizzando le schede di sviluppo Glyn per R8 e R32, da Elektor, una rivista elettronica europea). I kit di sviluppo sono pratici in quanto sono su piccole schede DIL, lo rendono facile da usare su breadboard e possono quindi essere inseriti in prese SIL/DIL su PCB fatti in casa. L'MBED I; m using ha un fattore di forma simile. –

1

Di quello che ho capito, il supporto C++ in gcc per r8c/m16c/r32c non è abbastanza maturo e abbastanza buono per il codice di produzione. Ma per r8c/m16c/m32c/r32c c'è almeno un compilatore che supporta il C++ embedded e questo è IAR, penso che Tasking supporti anche C++ embedded su m16c.

+0

Grazie per le informazioni, seguirà il compilatore IAR (usato prima su H8) ... –