Я хочу написать С++-функцию, которая принимает llvm::Module
, которая уже связана, и выводит ее в исполняемый файл. Он должен использовать API llvm/clang вместо того, чтобы развернуть процесс и вызвать clang командной строки.
Просматривая исходный код llvm/clang, ближайшая вещь, которую я нашел, это вывод Module
в файл .o. Например, инструмент llc (tools/llc/llc.cpp) выполняет это, вызывая TargetMachine::addPassesToEmitFile(...)
.
Альтернативой было бы записать Module
в .bc файл, затем создать CompilerInstance
и вызвать ExecuteCompilerInvocation
(как в tools/clang/tools/driver/cc1_main.cpp). Но тогда накладные расходы на ввод/вывод файлов.
Итак, я прошу чего-то по возможности, или я должен вернуться к альтернативе?
Изменить: (Конечно, это возможно. Это происходит где-то в исходном коде clang, я просто не могу его найти.)