2009-12-02 15 views
24

Ich verwalte derzeit einige C++ - Code, der auf mehreren Plattformen von einem einzigen Quellbaum (Win32, Linux, Verifone CC-Terminals, MBED und sogar der Nintendo GBA/DS) läuft. Ich muss jedoch eine App erstellen, die auf eine eingebettete Plattform ausgerichtet ist, für die es keinen C++ - Compiler gibt (nur C). Ich wiederhole, dass viele der frühen C++ - Compiler nur Frontends waren, die auf existierende C-Compiler (zB Glockenspiel, MSC) aufsetzten. Gibt es solche "Frontend" -C++ - Compiler, die heute C-Code generieren?C++ Frontend nur Compiler (C++ zu C konvertieren)

     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. 

Die letzten beiden Plattformen habe ich gute C-Compiler für aber kein C++.

Wie Sie sehen können, unterstütze ich eine große Vielfalt von Plattformen und ich teile eine große Bibliothekscode (und einige App-Code).

+2

Ein paar gute Dinge zu überprüfen, insbesondere LLVM als Mittel zur Generierung von C aus C++ plus Ich hatte nicht erkannt, dass GCC jetzt die Renesas M16/M32 unterstützt (die nur die Z8 ohne einen C++ - Compiler und zu Ehrlich gesagt, ich habe gerade ein billiges Dev-Board gekauft, um es zu überprüfen, Nostalgie für meine Z80 Herkunft, es ist ein netter Mikrocontroller obwohl). Ich möchte auch auf ältere Hypercom-Terminals zielen (ich habe ein gutes Stück Code für diese geschrieben, aber ich muss einen separaten Quellbaum haben. Ich weiß, dass die neuesten Hypercoms ARM-basiert sind, aber es gibt immer noch Millionen von diesen nervtötenden ICE-Terminals –

+0

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

Antwort

40

Wenn Sie LLVM verwenden, llvm-g++ Ihre C++ Code zu LLVM Bitcode kompilieren und llc hat ein Backend, die Bitcode zu C wandelt

Sie können Befehle wie folgt schreiben:

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

Ich mag das Aussehen von diesem, wird weiter zu erforschen, danke .... –

+0

Ihr zweiter Link ist kaputt. –

18

Comeau C++ tut dies.

+0

Ich würde sagen, das gleiche, aber Sie schlagen mich um 11 Sekunden – philsquared

+0

Ich denke, ich bin auf diesen Compiler schon einmal gestoßen.Die einzige Iussue ist das Problem Plattform sind nur für den Hobbygebrauch.Wenn ich mich erinnern kann, ist der Comeau-Compiler ein bisschen teuer. Ich benutze den ARM SDT für die Arbeit (teuer, aber der Job zahlt sich aus). Ich benutze auch Visual Studio 2008 bei der Arbeit (wieder von der Arbeit bezahlt). Ich habe Visual Studio Express zu Hause verwendet. –

+7

Wow, es ist "atemberaubend", "erstaunlich", "fabelhaft", und sie haben sogar einen blinkenden Javascript-Link, der über dem Text schwebt und Sie zum Kauf auffordert! –

1

Veraltet, aber vielleicht möchten Sie versuchen cfront?

Ich werde dies für Informationen verlassen - cfront hat keine Ausnahme Unterstützung.

+2

Zu alt, ein bisschen wie ich :) –

2

Comeau C++ generiert C als Ausgabe, und sie scheinen ziemlich glücklich zu sein, es zu portieren, um mit verschiedenen Back-End-Compilern zu arbeiten, obwohl ich mir über die genaue Preisfindung nicht sicher bin.

Wenn Sie ein bisschen mehr von einem "roll your own" -Ansatz wollen, können Sie eine Lizenz für den EDG C++ - Compiler kaufen. Normalerweise wird es als Front-End verwendet (z. B. von Comeau und Intel), aber ich glaube, es enthält einen Code-Generator, der C als Ausgabe produziert. Seine Lizenzierung ist jedoch mehr auf Compiler-Anbieter ausgerichtet, so dass eine Lizenz Ihnen viele Rechte gibt, aber ziemlich teuer ist.

5

Can‘ t mit dem Z8 zu helfen, aber die Renesas M16C/M32C-Familie hat GCC in diesen Tagen - siehe http://www.kpitgnutools.com/ für Prebuilt Cross Toolchain gehostet auf Windows. Ich habe es noch nicht selbst benutzt, aber es könnte eine bessere Option sein als ein C++ - Frontend von Drittanbietern, zumal dein Code bereits auf anderen Plattformen auf GCC abzielt.

+0

Danke, ich werde es überprüfen (ich verwende derzeit die Glyn-Entwicklungsboards für R8 und R32 von Elektor, einem europäischen Elektronikmagazin). Die Dev-Kits sind praktisch, da sie auf kleinen DIL-Boards liegen, sie können einfach auf Breadboards verwendet werden und sie können dann in SIL/DIL-Sockets auf selbstgebauten PCBs gesteckt werden. Die MBED I; m using hat einen ähnlichen Formfaktor. –

1

Von dem, was ich verstanden habe, ist die C++ - Unterstützung in gcc für r8c/m16c/r32c nicht ganz ausgereift und gut genug für den Produktionscode. Aber für r8c/m16c/m32c/r32c gibt es mindestens einen Compiler, der eingebettetes C++ unterstützt und das ist IAR, ich denke, Tasking unterstützt auch Embedded C++ auf m16c.

+0

Danke für Info, werde den IAR-Compiler nachverfolgen (früher auf H8) ... –