2009-12-02 21 views
24

Actualmente estoy administrando código C++ que se ejecuta en múltiples plataformas desde un único árbol fuente (Win32, Linux, terminales Verifone CC, MBED e incluso Nintendo GBA/DS). Sin embargo, debo compilar una aplicación destinada a una plataforma incrustada para la cual no existe un compilador de C++ (sólo C). Recuerdo que muchos de los primeros compiladores de C++ eran solo front-ends en los compiladores existentes de C (Glockenspiel, por ejemplo, usaba MSC). ¿Hay algún compilador C++ 'frontend' en uso hoy en día que genere código C?Compilador de frontend C++ (convertir 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. 

Las dos últimas plataformas tengo buenos compiladores C pero no C++.

Como puede ver, apoyo una gran variedad de plataformas y comparto una gran cantidad de código de biblioteca (y algunos códigos de aplicación).

+2

Un par de cosas buenas que ver, en particular LLVM como medio para generar C de C++ plus No me había dado cuenta de que GCC ahora es compatible con Renesas M16/M32 (que solo deja el Z8 sin un compilador C++ y se honesto, acabo de comprar una placa de desarrollo barata para comprobarlo, nostalgia de mis orígenes Z80, aunque es un buen microcontrolador). También me gustaría apuntar a los terminales Hypercom más antiguos (he escrito un buen código para estos, pero tengo que tener un árbol fuente separado. Sé que los últimos hipercomandos están basados ​​en ARM, pero todavía hay millones de esos molestos terminales ICE por ahí –

+0

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

Respuesta

40

Si utiliza LLVM, llvm-g++ compilará el código C++ para LLVM código binario, y llc tiene un motor que convierte el código binario a C.

Se puede escribir comandos de la siguiente manera:

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

Me gusta el aspecto de esto, exploraré más, gracias ... –

+0

Su segundo enlace está roto. –

18

Comeau C++ hace esto.

+0

Iba a decir lo mismo pero me ganaste por 11 segundos – philsquared

+0

Creo que he encontrado este compilador antes. El único problema es que el problema la plataforma es solo para uso hobby. Por lo que puedo recordar, el compilador de Comeau es un poco caro. Estoy usando ARM SDT para el trabajo (costoso pero el trabajo paga). También uso Visual Studio 2008 en el trabajo (nuevamente pagado por el trabajo). Utilicé Visual Studio Express en casa. –

+7

Guau, es "impresionante", "increíble", "fabuloso", e incluso tienen un enlace javascript parpadeante que flota sobre el texto que lo impulsa a comprarlo. –

1

Sin actualizar, pero quizás quieras probar cfront?

Dejaré esto para información - cfront no tiene soporte de excepción.

+2

Para los viejos, un poco como yo :) –

2

Comeau C++ genera C como salida, y parecen estar contentos de portarlo para trabajar con diferentes compiladores back-end, aunque no estoy seguro de los precios exactos para eso.

Si desea un enfoque un poco más "roll the own", podría comprar una licencia para el compilador EDG C++. Normalmente se usa como front-end (por ejemplo, Comeau e Intel), pero creo que, a medida que se envía, incluye un generador de código que produce C como salida. Sin embargo, su licencia está más orientada a los proveedores de compiladores, por lo que una licencia le otorga muchos derechos, pero es bastante costosa.

5

Pueden' Ayuda con el Z8, pero la familia Renesas M16C/M32C tiene GCC en estos días; consulte http://www.kpitgnutools.com/ para la cadena de herramientas cruzadas preinstalada alojada en Windows. Aún no lo he usado, pero puede ser una mejor opción que una interfaz de C++ de terceros, especialmente porque su código ya se dirige a GCC en otras plataformas.

+0

Gracias, lo comprobaré (actualmente estoy usando los paneles de desarrollo de Glyn para R8 y R32, de Elektor, una revista electrónica europea). Los kits de desarrollo son prácticos ya que están en tableros DIL pequeños, lo hace fácil de usar en placas de prueba y luego pueden conectarse a enchufes SIL/DIL en PCB caseros. El uso de MBED I; m tiene un factor de forma similar. –

1

De lo que he entendido, el soporte de C++ en gcc para r8c/m16c/r32c no es bastante maduro y lo suficientemente bueno para el código de producción. Pero para r8c/m16c/m32c/r32c hay al menos un compilador que soporta C++ incrustado y que es IAR, creo que Tasking también admite C++ incrustado en m16c.

+0

Gracias por su información, hará un seguimiento en el compilador IAR (lo usó antes en H8) ... –