#clang #llvm #llvm-ir
#clang #llvm #llvm-ir
Вопрос:
Я хотел бы скомпилировать исходный файл в LLVM IR в моем демонстрационном приложении с помощью LLVM / Clang API без clang
вызова исполняемого файла. Кажется, что Driver
для выполнения все еще используется исполняемый Compilation
файл (я использовал слегка измененный пример)
string clangPath = "clang";
string inputPath = "../test/hello_world.cpp";
string outputPath = "hello_world.ll";
// "clang -S -emit-llvm ../test/hello_world.cpp -v"
vector<const char *> args;
args.push_back(clangPath.c_str());
args.push_back("-S");
args.push_back("-emit-llvm");
args.push_back(inputPath.c_str());
args.push_back("-v");
// ...
Как вы можете видеть, он печатает действия, и для компиляции, похоже, требуется clang
исполняемый путь:
MBA-Anton:build asmirnov$ ./clang_ir
Starting ----
making driver
making compilation
clang version 3.4 (branches/release_34 198679)
Target: x86_64-apple-darwin13.2.0
Thread model: posix
printing actions:
0: input, "../test/hello_world.cpp", c
1: preprocessor, {0}, c -cpp-output
2: compiler, {1}, ir
3: bind-arch, "x86_64", {2}, ir
Done ----
"clang" -cc1 -triple x86_64-apple-macosx10.9.0 -emit-llvm -disable-free -main-file-name hello_world.cpp -mrelocation-model pic -pic-level 2 -mdisable-fp-elim -masm-verbose -munwind-tables -target-cpu core2 -target-linker-version 224.1 -v -coverage-file /Users/asmirnov/Documents/dev/src/clang_jni/mac/build/hello_world.ll -resource-dir ../lib/clang/3.4 -stdlib=libc -fdeprecated-macro -fdebug-compilation-dir /Users/asmirnov/Documents/dev/src/clang_jni/mac/build -ferror-limit 19 -fmessage-length 100 -stack-protector 1 -mstackrealign -fblocks -fobjc-runtime=macosx-10.9.0 -fencode-extended-block-signature -fcxx-exceptions -fexceptions -fdiagnostics-show-option -fcolor-diagnostics -vectorize-slp -o hello_world.ll -x c ../test/hello_world.cpp
error: unable to execute command: Executable "clang" doesn't exist!
Действительно ли нужен путь clang и как я могу выполнить компиляцию в LLVM IR через LLVM / Clang API без вызова исполняемого файла? Если он недоступен в текущем API, как я могу изменить API, чтобы использовать статическую библиотеку вместо исполняемого файла?
Комментарии:
1. Возможно, вы захотите посмотреть на КОРНЕВОЙ проект «cling» для примера Clang с JIT-серверной частью.
2. Я обнаружил, что он действительно использует
clang
готовый исполняемый файл. Выполняет ли cling компиляцию в LLVM IR без вызова исполняемого файла?