Есть ли способ заставить Clang выводить LLVM IR вместе с исполняемым файлом? - PullRequest
0 голосов
/ 15 января 2019

Я знаю, что вы можете сделать вывод clang LLVM IR, используя опцию -emit-llvm, однако это делает его единственным выходом.

Мне было интересно, есть ли какая-то комбинация опций компилятора, которая бы заставляла clang функционировать точно так же, как и раньше, но также создавала .ll файлы как побочный продукт?

Проблема, с которой я сталкиваюсь сейчас, - это проект с очень сложной сборкой на основе cmake, для которой я могу изменить только параметры компиляции clang. Я хочу сгенерировать для него IR-файлы llvm, но, к сожалению, если я просто передам -emit-llvm, CMake завершится неудачно, поскольку его тесты компилятора / проверки работоспособности не пройдут (поскольку вместо действительного исполняемого файла создается файл .ll).

Есть ли способ заставить clang генерировать файлы exe / object и .ll? Или как-то обойти эту проблему другими способами?

1 Ответ

0 голосов
/ 16 января 2019

Для этого есть как минимум два способа:

  1. -flto: вместо каждого объектного файла вы получите файл битового кода LLVM (кроме файлов, скомпилированных из сборки, они по-прежнему будутбыть объектными файлами).
  2. -fembed-bitcode: clang добавит еще один раздел в конечный исполняемый файл, который содержит все файлы битовых кодов LLVM (опять же, за исключением файлов сборки, они по-прежнему будут объектными файлами).Затем вы можете использовать LibEBC для извлечения всех этих файлов.

Независимо от того, какой подход вы выберете, вам придется использовать инструмент llvm-dis для преобразования файлов битового кода LLVM в LLVMIR-файлы.

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

...