Я хочу написать С++-функцию, которая принимает 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, я просто не могу его найти.)