2013-02-07 16 views
13

La pagina Online LLVM demo aveva un'opzione per generare codice API LLVM C++ come back-end da un codice sorgente. Tuttavia, quella pagina demo è ora disabilitata. Mi stavo chiedendo come possiamo farlo noi stessi usando gli strumenti LLVM disponibili.Genera codice API LLVM C++ come backend

ho provato la seguente

clang++ -c -emit-llvm input.cpp -o input.ll 
llc -march=cpp -o input.ll.cpp input.ll 

che dà il seguente errore

llc: error: invalid target 'cpp'. 

sto utilizzando LLVM/Clang versione 3.2.

+3

la lista 'llc -version'' cpp' è un obiettivo valido per il backend? – Necrolis

+0

-version non mostra neanche cpp nella lista. Richiede alcuna registrazione o qualcosa da includere cpp, o cosa? – MetallicPriest

+0

@MetallicPriest Suppongo che semplicemente non lo abilitino per la demo online (non è proprio quello a cui le persone sono interessate, suppongo) Perché non installate LLVM sul vostro sistema localmente? – us2012

risposta

6

Il backend LLVM C++ deve essere abilitato durante la configurazione durante la creazione di LLVM. È abilitato per impostazione predefinita nella build configure (autotools), ma non nella build di CMake quando si crea su Windows. Puoi abilitarlo impostando i flag appropriati durante la configurazione con CMake. Vedere this page per ulteriori informazioni.

Citazione:

LLVM_TARGETS_TO_BUILD: STRING lista virgola-separato di obiettivi per costruire, o tutti per la costruzione di tutti gli obiettivi. Che tiene conto del maiuscolo o minuscolo. Per i valori predefiniti di Visual C++ su X86. Sugli , tutti gli altri casi sono impostati su default. Esempio: -DLLVM_TARGETS_TO_BUILD = "X86; PowerPC".

UPDATE

Dal version 3.9 il CppBackend non è più un bersaglio valido. Hanno rimosso dal loro codice in quanto il codice generato presentava alcuni problemi.

Check this commit

Remove bit-rotten CppBackend. 

This backend was supposed to generate C++ code which will re-construct 
the LLVM IR passed as input. This seems to me to have very marginal 
usefulness in the first place. 

However, the code has never been updated to use IRBuilder, which makes 
its current value negative -- people who look at the output may be 
steered to use the *wrong* C++ APIs to construct IR. 

Furthermore, it's generated code that doesn't compile since at least 
2013. 

Differential Revision: http://reviews.llvm.org/D19942 

git-svn-id: https://llvm.org/svn/llvm-project/llvm/[email protected] 91177308-0d34-0410-b5e6-96231b3b80d8 
1

Purtroppo, questo sembra non essere più possibile nelle versioni più recenti di LLVM. Il messaggio di commit associato lo spiega abbastanza bene.

Come si può vedere nel seguente commit, Remove bit-rotten CppBackend, il codice generato mostrerebbe problemi.

commit 257fabb18605265a79397d35dd79a3973760ffaf 
Author: --- 
Date: Thu May 5 14:35:40 2016 +0000 

Remove bit-rotten CppBackend. 

This backend was supposed to generate C++ code which will re-construct 
the LLVM IR passed as input. This seems to me to have very marginal 
usefulness in the first place. 

However, the code has never been updated to use IRBuilder, which makes 
its current value negative -- people who look at the output may be 
steered to use the *wrong* C++ APIs to construct IR. 

Furthermore, it's generated code that doesn't compile since at least 
2013. 

Differential Revision: http://reviews.llvm.org/D19942 

git-svn-id: https://llvm.org/svn/llvm-project/llvm/[email protected] 91177308-0d34-0410-b5e6-96231b3b80d8