2011-12-28 21 views
5

Come si generano i binari eseguibili dal lato C++ di LLVM?generazione binaria da LLVM

Attualmente sto scrivendo un compilatore di giocattoli e non sono abbastanza sicuro di come eseguire l'ultimo passaggio della creazione di un eseguibile dall'IR.

L'unica soluzione che attualmente vedo è scrivere il codice bit e quindi chiamare llc utilizzando system o simile. C'è un modo per farlo dall'interfaccia C++?

Sembra che sarebbe una domanda comune, ma non riesco a trovare nulla su di esso.

risposta

3

LLVM non invia il linker necessario per eseguire questa attività. Può solo scrivere come assemblatore e quindi richiamare il linker del sistema per gestirlo. Puoi vedere il codice sorgente di llvm-ld per vedere come è fatto.

+0

Grazie, il codice llvm-ld è esattamente ciò di cui avevo bisogno. – cobbal

+1

Se leggi la documentazione di llvm-ld, dice che il suo output è ancora bytecode, non un binario nativo. Il bytecode che emette è effettivamente collegato nel senso che tutti gli input sono presenti nell'output. Per poter funzionare come una sostituzione in sostituzione di ld, llvm-ld deve generare il solito file a.out, ma non è nemmeno un eseguibile nativo. È uno script di shell che richiama l'utilità lli di LLVM che esegue il bytecode (tramite il suo interprete o tramite la compilazione JIT). Se vuoi davvero un eseguibile, devi compilare il tuo LLVM IR o bytecode in assembly ed eseguirlo tramite gcc. – mgadda