LLVM3.8 Makefile.config, Makefile.common и Makefile.rule отсутствуют в папке сборки

Итак, я изучаю llvm и решил собрать версию 3.8 из tar-файлов, которые я скачал с сайта LLVM.

Все работает нормально, и мне удалось собрать исходники в отдельной папке сборки.

(After downloading all the sources)
$cd llvm3.8/build
$cmake -G "Unix Makefiles" ../llvm
$make -j 4
$make install

поэтому мой каталог выглядит примерно так:

llvm3.8/ 
llvm3.8/build 
llvm3.8/llvm

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

  • Makefile.config
  • Makefile.common
  • Makefile.rule

который я использую в Makefile, который я написал для прохода, который я реализовал.

Я знаю, что в источнике есть эти файлы:

$cd llvm3.8/llvm
$ls:
CMakeLists.txt      README.txt      llvm.spec.in
CODE_OWNERS.TXT     autoconf        projects
CREDITS.TXT         bindings        resources
LICENSE.TXT         cmake           test
LLVMBuild.txt       configure       tools
Makefile            docs            unittests
Makefile.common     examples        utils
Makefile.config.in  include
Makefile.rules      lib

в то время как моя папка сборки - нет.

$ cd llvm3.8/build
$ ls 
CMakeCache.txt          cmake                   libexec
CMakeFiles              cmake_install.cmake     projects
CPackConfig.cmake       compile_commands.json   share
CPackSourceConfig.cmake docs                    test
DummyConfigureOutput    examples                tools
LLVMBuild.cmake         include                 unittests
Makefile                install_manifest.txt    utils
bin                     lib

Содержит ли моя папка сборки то, что она должна содержать? Может быть, в исходниках должен быть прописан пасс llvm3.8/llvm?

Спасибо за помощь.


person Carlinho89    schedule 24.05.2016    source источник
comment
Мой ответ решил проблему?   -  person khrm    schedule 24.05.2016
comment
Вероятно, вы используете устаревший учебник, в котором все еще используются файлы Makefile, хотя все они недавно были удалены. Я могу порекомендовать вам взглянуть на эту презентацию: Создание, тестирование и отладка простого абонемент LLVM из дерева   -  person AlexDenisov    schedule 25.05.2016


Ответы (1)


Вы должны написать свой пропуск в llvm/lib/Transforms/YourPassName

Создайте каталог в сборке:

mkdir -p llvm3.8/build/lib/Transforms/YourPassName

Я бы порекомендовал вам использовать cmake. Поскольку autoconf будет объявлен устаревшим в llvm3.9. Для этого:

Добавить запись в llvm/lib/Transforms/CMakeLists.txt

add_subdirectory(YourPassName)

После ввода записи создайте CMakeLists.Txt в llvm/lib/Transforms/YourPassName, как и другие проходы llvm.

Теперь используйте

cmake ../llvm3.8

Изнутри каталога pass:

make

Также, если вы установили llvm и хотите работать автономно, используйте подход, указанный в этом ответе: https://stackoverflow.com/a/37308946/4946286

person khrm    schedule 24.05.2016
comment
Просто чтобы завершить свой ответ, так как он помог мне понять, в чем были мои ошибки: 1) Добавьте свой Pass в llvm/lib/Transforms/MyPass --> MyPass.cpp + CMakeList.txt 2) Добавьте запись в llvm/lib/Transforms/CMakeList.txt --› add_subdirectory(MyPass) 3) Из корня папки build запустите make. Это создает папку в build/lib/Transforms с именем MyPass и библиотеку LLMMMyPass.so, которую затем можно загрузить с помощью opt -load build/lib/LLVMMyPass.so. Просто чтобы было понятно, запуск make в сборке не будет перекомпилировать все, а только добавленный вами проход. - person Carlinho89; 30.05.2016