Компиляция LLVM C ++

Привет, я написал простой код C ++ с LLVM Api

#include <stdio.h>
#include "llvm/IR/LLVMContext.h"#include "llvm/IR/Module.h"#include "llvm/IR/IRBuilder.h"

int main()
{
llvm::LLVMContext& context = llvm::getGlobalContext();
llvm::Module* module = new llvm::Module("top", context);
llvm::IRBuilder<> builder(context);

module->dump( );
}

Как мне скомпилировать это, чтобы получить файл LLVM IR?

Спасибо за любую помощь

0

Решение

Компиляция самой программы в двоичный код машинного кода проста. На платформе Unix:

$ clang++ <c++ file> `llvm-config --cppflags --ldflags --libs core`

llvm-config это инструмент, обеспечивающий необходимые флаги компиляции для включения определенных компонентов каркаса llvm. В вашем случае, кажется, вам нужен только основной компонент.

Добавление -v параметр в командной строке требует clang выводить все используемые команды. Добавление -S -emit-llvm (оба параметра должны использоваться вместе) заставит его выводить ИК-перевод источника в формате Ivvm

$ clang++ -v file.cpp `llvm-config --cppflags --ldflags --libs core` -S -emit-llvm

Результирующий file.s может быть затем непосредственно интерпретировано с lli или дополнительно скомпилирован в битовый код с помощью llvm-as, который оказывает .bc файл.

$ llvm-as file.s

Такой же lli также с удовольствием запустит этот файл:

$ lli file.s.bc

Запуск или интерпретация любого из этих результирующих файлов (llvm IR, битовый код или нативная программа), конечно же, даст тот же результат, сброс IR-кода llvm модуля top определено в вашей программе (которая пуста).

Документация:

0

Другие решения

Самое простое, что можно сделать, это переслать вывод в файл и затем обработать его примерно так (при условии, что скомпилированный код, приведенный выше, скомпилирован в исполняемое имя ‘parser’):

./parser >> test.ll
llvm-as test.ll
llc test.bc
clang -o test test.s

Надеюсь, это поможет!

Как примечание стороны, у меня есть мой парсер к этому через system() звонки и параметры командной строки, так что вы можете подумать об этом ^^

0

По вопросам рекламы [email protected]