Как сгенерировать код 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 года.