Как сгенерировать код API LLVM с помощью ИК-кода в текущих версиях?

Я пытаюсь сгенерировать код API LLVM, который может регенерировать код IR, который подается в него. Как я обнаружил с помощью различных вопросов, таких как этот вопрос, в какой-то момент можно было сделать следующее для достижения этой цели:

clang++ -S -O0 -emit-llvm MyFile.cpp -o MyIR.ll
llc -march=cpp MyIR.ll -o MyIR_Maker.cpp

Однако я получаю следующую ошибку: llc: ошибка: недопустимая цель 'cpp'. Дальнейшие исследования говорят мне, что та же проблема возникла в более ранних версиях LLVM, когда бэкэнд c был удален в версии 3.1. Однако я использую cpp, это заставляет меня поверить, что по какой-то причине бэкэнд cpp не существует в моей версии llvm.

Поэтому на самом деле я хочу узнать следующее: если мой анализ пока верен, как мне включить бэкенд cpp или каким-либо другим образом привести мой llc в состояние, в котором я могу использовать его по своему желанию? Конечно, если я ошибаюсь или если есть другой путь, я буду открыт для этого.

Версия, которую мы выбрали для работы - LLVM 3.6, она была установлена ​​с помощью brew на OS X. Заранее спасибо.

Изменить: этот вопрос был указан как возможно похожий вопрос. Однако этот вопрос был задан в конкретном контексте LLVM 3.2, где, как у меня, речь идет о текущей ситуации в версии 3.6, поскольку в настоящее время может быть реальное решение. Единственный ответ на этот вопрос указывает на общий внешний ресурс и не очень подробно объясняет, каково реальное решение.

2 ответа

Решение

Похоже, что правильный способ включить серверную часть cpp - это загрузить исходный код LLVM и собрать его самостоятельно, вот как этот процесс работал для меня:

  • Перейдите на эту страницу и найдите версию, которую вы хотели бы использовать, загрузите соответствующую ссылку под названием "Исходный код LLVM".
  • Распакуйте файл
  • Откройте командную строку
  • cd в папку, которую вы только что извлекли, она должна иметь формат "llvm-xxxsrc", где xxx - номер вашей версии
  • mkdir build
  • cd build
  • brew install cmake (если у вас еще нет cmake)
  • cmake -G Xcode .. (Это генерирует проект Xcode, который может построить LLVM)
  • open LLVM.xcodeproj
  • Если предложено, когда Xcode открывается, нажмите "автоматически создавать схемы"
  • Подождите, пока Xcode завершит индексацию, это займет некоторое время.
  • Запустите проект Xcode для компиляции LLVM, это также займет некоторое время.
  • Как только это будет сделано, все сгенерированные инструменты CLI llvm будут находиться в вашей папке "build", в каталоге с именем Debug/bin.
  • Разместите эту папку там, где вы хотите, и экспортируйте ее по своему пути.

Теперь вы должны быть в состоянии, чтобы следующие команды работали должным образом, предполагая, что вы используете подходящую версию clang, и ваш путь не включает другой набор двоичных файлов llvm:

clang++ -S -O0 -emit-llvm MyFile.cpp -o MyIR.ll
llc -march=cpp MyIR.ll -o MyIR_Maker.cpp

Как уже упоминалось в разделе "Создание кода API LLVM C++ в качестве бэкенда", эта функциональность (-march=cpp), похоже, был удален из LLVM в мае 2016 года.

Другие вопросы по тегам