Cómo hacer que clang compile en llvm IR

 C Programming >> Programación C >  >> Tags >> Clang
Cómo hacer que clang compile en llvm IR

Dado algún archivo C/C++ foo.c :

> clang -S -emit-llvm foo.c

Produce foo.ll que es un archivo LLVM IR.

El -emit-llvm La opción también se puede pasar directamente al front-end del compilador, y no al controlador por medio de -cc1 :

> clang -cc1 foo.c -emit-llvm

Produce foo.ll con su. -cc1 agrega algunas opciones geniales como -ast-print . Echa un vistazo a -cc1 --help para más detalles.

Para compilar LLVM IR más allá del ensamblaje, use el llc herramienta:

> llc foo.ll

Produce foo.s con ensamblaje (predeterminado a la arquitectura de la máquina en la que lo ejecuta). llc es una de las herramientas LLVM - aquí está su documentación.


Usar

clang -emit-llvm -o foo.bc -c foo.c
clang -o foo foo.bc

Si tiene varios archivos de origen, probablemente desee utilizar la optimización del tiempo de enlace para generar un archivo de código de bits para todo el programa. Las otras respuestas dadas harán que termine con un archivo de código de bits para cada archivo fuente.

En su lugar, desea compilar con optimización de tiempo de enlace

clang -flto -c program1.c -o program1.o
clang -flto -c program2.c -o program2.o

y para el paso final de vinculación, agregue el argumento -Wl,-plugin-opt=also-emit-llvm

clang -flto -Wl,-plugin-opt=also-emit-llvm program1.o program2.o -o program

Esto le da ambos un programa compilado y el bitcode correspondiente (program.bc). Luego puede modificar program.bc de la forma que desee y volver a compilar el programa modificado en cualquier momento haciendo

clang program.bc -o program

aunque tenga en cuenta que debe incluir las banderas de vinculación necesarias (para bibliotecas externas, etc.) en este paso nuevamente.

Tenga en cuenta que debe usar el enlazador dorado para que esto funcione. Si desea forzar a clang a usar un enlazador específico, cree un enlace simbólico a ese enlazador llamado "ld" en un directorio especial llamado "fakebin" en algún lugar de su computadora y agregue la opción

-B/home/jeremy/fakebin

a cualquiera de los pasos de vinculación anteriores.