2016-03-31 5 views
0

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

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

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

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

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

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

+1

с бэкэнд и CPP бэкэнд очень разные; и в то время как первый был удален, последний по-прежнему поддерживается, а не построен по умолчанию. Я думаю, что этот вопрос является дубликатом [Generate LLVM C++ API code as backend] (http://stackoverflow.com/questions/14751403/generate-llvm-c-api-code-as-backend), который должен объяснить, как постройте LLVM, чтобы включить этот бэкэнд. – Oak

+0

@Oak Тогда, возможно, лучшим вопросом будет вопрос, как включить бэкэнд C++? Ответ на этот вопрос, похоже, просто указывает на общую страницу для создания LLVM и вне контекстной цитаты, которая не очень ясна IMO. Также, как я упомянул, я устанавливаю свои LLVM-файлы с помощью homebrew, подразумевается ли это, что я не могу включить бэкэнд C++ при использовании версии homebrew? –

+0

Я думаю, вам придется скомпилировать LLVM самостоятельно, вместо того, чтобы использовать существующие двоичные файлы, да. Извините, но у меня нет более подробного ответа, кроме ответа на этот вопрос. – Oak

ответ

0

Оказывается правильный способ включения СРР Бэкэнд скачать исходный LLVM и построить его самостоятельно, вот как этот процесс работал для меня:

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

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

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

Как уже упоминалось в Generate LLVM C++ API code as backend, эта функциональность (-march=cpp), как представляется, были удалены из LLVM примерно в мае 2016 года

+0

Этот вопрос до мая 2016 года и упоминает версию LLVM, используемую в вопросе. Я думаю, что это может быть лучше, чем комментарий? –