Compilador apenas para interface C++ (Converter C++ para C)

estou actualmente a gerir um código C++ que funciona em várias plataformas a partir de uma única árvore de código (Win32, Linux, Verificone de terminais CC, MBED e até mesmo o Nintendo GBA/DS). No entanto, eu preciso construir um aplicativo alvo em uma plataforma embutida para a qual não há nenhum compilador C++ (Apenas C). Lembro-me que muitos dos primeiros compiladores C++ eram apenas costuras frontais em compiladores C existentes (Glockenspiel por exemplo usado MSC). Existem alguns compiladores de C++' frontend ' em uso hoje que irão gerar código 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.

as duas últimas plataformas eu tenho bons compiladores C para mas não C++.

Como podem ver, estou a apoiar uma grande variedade de plataformas e partilho um grande corpo de código de biblioteca (e algum código app).

Author: Tim Ring, 2009-12-02

7 answers

Se você usar LLVM, llvm-g++ irá compilar o código C++ para o LLVM bitcode, e llc tem um back-end que converte bitcode para C.

Você poderia escrever comandos como este:

llvm-g++ -emit-llvm -c foo.cpp -o foo.o
llc -march=c <foo.o >foo.c
 40
Author: Jay Conrod, 2015-12-08 18:37:54

O Comeau C++ Faz isto.

 18
Author: Michael Burr, 2009-12-02 15:15:06

Não posso ajudar com o Z8, mas a família Renesas M16C/M32C tem GCC hoje em dia-ver http://www.kpitgnutools.com/ para a barra de ferramentas pré-construída no Windows. Ainda não o usei, mas pode ser uma opção melhor do que uma interface C++ de terceiros, especialmente porque o seu código já tem como alvo o GCC noutras plataformas.

 5
Author: quietbob, 2009-12-02 21:16:39

Comeau C++ gera C como sua saída, e eles parecem estar muito felizes em portá-lo para trabalhar com diferentes compiladores back-end, embora eu não tenho certeza sobre o preço exato para isso.

Se você quiser um pouco mais de uma abordagem" role your own", você poderia comprar uma licença para o compilador de C++ EDG. É normalmente usado como um front-end (por exemplo, pelo Comeau e Intel), mas eu acredito que como é enviado, ele inclui um gerador de código que produz C como sua saída. O seu licenciamento é mais orientado para vendedores de compiladores, no entanto, uma licença lhe dá muitos direitos, mas é muito caro.

 2
Author: Jerry Coffin, 2009-12-02 15:18:35
Desactualizado,mas talvez queiras experimentar o cfront? Vou deixar isto para informação. o cfront não tem excepção.
 1
Author: plinth, 2009-12-02 15:16:27

Do que eu entendi, o Suporte de c++ no gcc para r8c/m16c/r32c não é muito maduro e bom o suficiente para o código de produção. Mas para r8c / m16c / m32c / r32c há pelo menos um compilador que suporta C++ incorporado e que é IAR, eu acho que a tarefa também suporta C++ incorporado no m16c.

 1
Author: henkebenke, 2009-12-16 15:46:43

Notice that the valid solution is for llvm 1.3 a última versão da llvm foi 6.0.0 então não funcionaria. (Eu postei isso porque eu tentei a solução deste post, mas ele não funciona mais) (Talvez eu fiz algo ruim)

Nos meus testes O llc já não aceita a opção -march=C. E voltar para o 1.3 ainda não é possível para mim. Então tente cuidar da versão.

 0
Author: Fabian le Maux, 2018-04-11 15:53:41