2011-12-28 21 views
5

¿Cómo se generan los binarios ejecutables desde el lado C++ de LLVM?generación binaria de LLVM

Actualmente estoy escribiendo un compilador de juguetes, y no estoy muy seguro de cómo hacer el último paso para crear un ejecutable desde el IR.

La única solución que veo actualmente es escribir el código de bit y luego llamar a llc usando system o similar. ¿Hay alguna manera de hacer esto desde la interfaz C++ en su lugar?

Parece que sería una pregunta común, pero no puedo encontrar nada en ella.

Respuesta

3

LLVM no envía el vinculador necesario para realizar esta tarea. Solo puede escribir como ensamblador y luego invocar el enlazador del sistema para manejarlo. Puede ver el código fuente de llvm-ld para ver cómo se hace.

+0

Gracias, el código llvm-ld es exactamente lo que necesitaba. – cobbal

+1

Si lee la documentación de llvm-ld, indica que su salida sigue siendo bytecode, no un binario nativo. El bytecode que produce está vinculado en el sentido de que todas las entradas están presentes en la salida. Para actuar como un reemplazo en reemplazo de ld, llvm-ld debe generar el archivo usual a.out, pero tampoco es un ejecutable nativo. Es un script de shell que invoca la utilidad lli de LLVM que luego ejecuta el bytecode (ya sea a través de su intérprete o a través de la compilación JIT). Si realmente quieres un ejecutable, finalmente tienes que compilar tu LLVM IR o bytecode en el ensamblado y ejecutarlo a través de gcc. – mgadda