Сгенерировать код API LLVM C ++ в качестве бэкэнд

На странице Online LLVM demo появилась возможность генерировать код LLVM C ++ API в качестве исходного кода из исходного кода. Однако эта демонстрационная страница теперь отключена. Мне было интересно, как мы можем сделать это сами, используя доступные инструменты LLVM.

Я попробовал следующее

clang++ -c -emit-llvm input.cpp -o input.ll
llc -march=cpp -o input.ll.cpp input.ll

который дает следующую ошибку

llc: error: invalid target 'cpp'.

Я использую LLVM/Clang версии 3.2.

13
llc -version не показывает cpp в списке. Требуется ли какая-либо регистрация или что-то включить cpp, или что?
добавлено автор MetallicPriest, источник
Если вы все еще заинтересованы, моя демо-страница в ellcc.org/demo может сгенерировать код C ++ API.
добавлено автор Richard Pennington, источник
@MetallicPriest Я предполагаю, что они просто не включили его для онлайн-демонстрации (на самом деле это не то, чего интересуют люди). Почему бы вам не установить LLVM в вашей системе локально?
добавлено автор us2012, источник
Здесь мой llc (llvm-3.1-12.fc18.x86_64, Fedora 18) показывает cpp как бэкэнд.
добавлено автор vonbrand, источник
ли llc -version list cpp как действительная целевая база?
добавлено автор Necrolis, источник
Если его нет в списке, то его удаляли как бэкэнд, IMO, вы получили бы большую помощь от списков рассылки LLVM/CFE.
добавлено автор Necrolis, источник
Как вы собрали LLVM? Если я правильно помню, база данных cpp отключена по умолчанию в системах на основе cmake. Поэтому убедитесь, что он включен во время настройки.
добавлено автор Anton Korobeynikov, источник

2 ответы

The LLVM C++ backend has to be enabled during configuration when building LLVM. It's enabled by default in the configure (autotools) build, but not in the CMake build when you build on Windows. You can enable it by setting the appropriate flags while configuring with CMake. See this page for more information.

Цитата:

<сильный> LLVM_TARGETS_TO_BUILD: STRING       Разделительные таблицы, разделенные точкой с запятой, или все для построения всех целей. Деликатный случай. Для Visual C ++ по умолчанию используется X86. На   другие случаи по умолчанию для всех. Пример:   -DLLVM_TARGETS_TO_BUILD = "X86, PowerPC" .

<Сильный> UPDATE

Поскольку version 3.9 , CppBackend больше не является допустимой мишенью. Они удалили из своего кода, поскольку сгенерированный код представлял несколько проблем.

Отметьте эту фиксацию

Remove bit-rotten CppBackend.

This backend was supposed to generate C++ code which will re-construct
the LLVM IR passed as input. This seems to me to have very marginal
usefulness in the first place.

However, the code has never been updated to use IRBuilder, which makes
its current value negative -- people who look at the output may be
steered to use the *wrong* C++ APIs to construct IR.

Furthermore, it's generated code that doesn't compile since at least
2013.

Differential Revision: http://reviews.llvm.org/D19942

git-svn-id: https://llvm.org/svn/llvm-project/llvm/[email protected] 91177308-0d34-0410-b5e6-96231b3b80d8
6
добавлено

К сожалению, это, похоже, больше не возможно в более поздних версиях LLVM. Соответствующее сообщение коммита объясняет это довольно хорошо.

Как вы можете видеть в следующем фиксации, Удалить бит-гнилую CppBackend , сгенерированный код будет показывать проблемы.

commit 257fabb18605265a79397d35dd79a3973760ffaf
Author: ---
Date:   Thu May 5 14:35:40 2016 +0000

Remove bit-rotten CppBackend.

This backend was supposed to generate C++ code which will re-construct
the LLVM IR passed as input. This seems to me to have very marginal
usefulness in the first place.

However, the code has never been updated to use IRBuilder, which makes
its current value negative -- people who look at the output may be
steered to use the *wrong* C++ APIs to construct IR.

Furthermore, it's generated code that doesn't compile since at least
2013.

Differential Revision: http://reviews.llvm.org/D19942

git-svn-id: https://llvm.org/svn/llvm-project/llvm/[email protected] 91177308-0d34-0410-b5e6-96231b3b80d8
1
добавлено
pro.cxx
pro.cxx
3 049 участник(ов)

C/C++ chat 0. Простые вопросы, лабы и о IDE — в чат новичков @supapro 1. Не хамим, не переходим на личности, не вбрасываем утверждения без доказательств 2. No Ads, offtop, flood Объявления о вакансиях и евенты - в лс @AlexFails https://t.me/ProCxx/259155

Linux Help
Linux Help
2 686 участник(ов)

Правила: https://telegra.ph/Pravila-Linux-Help-10-15

supapro.cxx
supapro.cxx
1 925 участник(ов)

Чат для тех, кто немного знает C++, простые вопросы по реализации, синтаксису и ide – сюда, а для другого есть: /Главный чат по серьезным вопросам — @ProCxx /Чат по обсуждению всего — @fludpac

Linux Security
Linux Security
652 участник(ов)

Данная группа принципиально про безопасность и в частности про безопасность Linux. Прочие темы просим обсуждать в профильных чатах.

C++ Russia
C++ Russia
384 участник(ов)

Сообщество разработчиков C++ в Telegram.

cxx.Дискуссионная
cxx.Дискуссионная
298 участник(ов)

это не двач, общайтесь вежливо; разговор на почти любые темы; Не согласны с баном? В лс @AlexFails, @ivario

C++ для маленьких и тупых
C++ для маленьких и тупых
105 участник(ов)

Лоу левел (по среднему IQ участников) чатик ExtremeCode @extremecode Флудилка @extremecode_rest

Linux Gaming RUS
Linux Gaming RUS
28 участник(ов)

Русскоязычный чатик, посвящённый играм на различных дистрибутивах Linux, а также wine, proton Arch Linux RU @ArchLinuxChatRU Gnome RU @gnome_ru