LINUX.ORG.RU

Проблемы со сборкой 32-х битного LLVM

 , , ,


0

1

Приветствую. Для локальной сборки LLVM в Debian использую pbuilder. Вариант для amd64 собирается без проблем, но во время сборки clang-tools на i386, он в упор не видит заголовочные файлы libffi, хотя они устанавливаются. Пробовал принудильно их установить в базовый образ pbuilder'а, но бестолку. Может кто сталкивался с подобным?

CMake Error at cmake/config-ix.cmake:309 (message):
  libffi includes are not found.
Call Stack (most recent call first):
  CMakeLists.txt:590 (include)


-- Configuring incomplete, errors occurred!
See also "/build/llvm-toolchain-8-8.0.1/build-llvm/tools/clang/stage2-bins/CMakeFiles/CMakeOutput.log".
See also "/build/llvm-toolchain-8-8.0.1/build-llvm/tools/clang/stage2-bins/CMakeFiles/CMakeError.log".
make[5]: *** [tools/clang/CMakeFiles/stage2.dir/build.make:109: tools/clang/stage2-stamps/stage2-configure] Error 1
make[5]: Leaving directory '/build/llvm-toolchain-8-8.0.1/build-llvm'
make[4]: *** [CMakeFiles/Makefile2:42872: tools/clang/CMakeFiles/stage2.dir/all] Error 2
make[4]: Leaving directory '/build/llvm-toolchain-8-8.0.1/build-llvm'
make[3]: *** [CMakeFiles/Makefile2:42879: tools/clang/CMakeFiles/stage2.dir/rule] Error 2
make[3]: Leaving directory '/build/llvm-toolchain-8-8.0.1/build-llvm'
make[2]: *** [Makefile:13059: stage2] Error 2
make[2]: Leaving directory '/build/llvm-toolchain-8-8.0.1/build-llvm'
make[1]: *** [debian/rules:417: debian-full-build] Error 2
make[1]: Leaving directory '/build/llvm-toolchain-8-8.0.1'
make: *** [debian/rules:266: binary] Error 2
dpkg-buildpackage: error: debian/rules binary subprocess returned exit status 2
I: copying local configuration
E: Failed autobuilding of package
Debian 10, LLVM 8, хотя с 10 та же самая фигня.

Что ещё за pbuilder? Кучу раз собирал LLVM на дебиане, просто обычным cmake.

$ mkdir b
$ cd $_
$ cmake .. -G Ninja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER_=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_INSTALL_PREFIX=/ya/ebal/vseh/v/rot/llvm-debug
$ ninja -j4
$ ninja install
Urechis_Unicinctus
()
Ответ на: комментарий от Urechis_Unicinctus

pbuilder это chroot-окружение с минимальным набором библиотек для сборки. Типа контейнера. Используется для сборки deb-пакетов

Sunderland93 ★★★★★
() автор топика
Ответ на: комментарий от Sunderland93

А, ну я таким не пользовался, я тупо в хомяк всё ставил, то есть у меня было:

/home/del/llvm-6-rel
/home/del/llvm-6-dbg
/home/del/llvm-7-rel
/home/del/llvm-7-dbg
....
и так далее

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

Urechis_Unicinctus
()
Ответ на: комментарий от Sunderland93

Вот же извращенец! Подключай официальный репозиторий и пользуйся. Там за тебя уже все проблемы решили, да и сборка стандартная.

anonymous
()

Точно ли libffi-dev 32-битный?

Нужно читать CMakeLists.txt и далее find-module этого ffi, чтобы смотреть по каким путям оно ищет и почему хедеры и либы не находит.

EXL ★★★★★
()
Ответ на: комментарий от Urechis_Unicinctus

Он включается через make VERBOSE=1, если бы разработчики CMake были адекваты, они бы сделали make V=1 как в Linux или куче всего на Makefile.

EXL ★★★★★
()
Ответ на: комментарий от Urechis_Unicinctus
  1. https://stackoverflow.com/a/2673355
  2. А внимательнее лог посмотреть не судьба?
make: *** [debian/rules:266: binary] Error 2
  1. Тоже мимо, раз ошибка на stage2 вылетает. Скорее всего там на этапе сборки что-то ещё конфигурируется.

Мда.

EXL ★★★★★
()
Ответ на: комментарий от EXL

А головой подумать? Ошибка выскакивает сначала от cmake и он явно пишет, что configuring incomplete. А то, что dpkg-buildpackage это игнорирует и продолжает собирать, это его половые трудности.

Про то, что может он не использует make - это я был не прав, признаю.

Urechis_Unicinctus
()
Ответ на: комментарий от Urechis_Unicinctus

А головой подумать? Ошибка выскакивает сначала от cmake и он явно пишет, что configuring incomplete. А то, что dpkg-buildpackage это игнорирует и продолжает собирать, это его половые трудности.

А я и подумал и внимательно прочитал тред прежде чем отписаться. Даже заглянул по ссылке, которую оставил anonymous.

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=942229

И увидел там явное:

make[5]: Leaving directory '/usr/local/src/test/stage/llvm-toolchain-9-9/build-llvm'
make -f tools/clang/CMakeFiles/stage2.dir/build.make tools/clang/CMakeFiles/stage2.dir/build
make[5]: Entering directory '/usr/local/src/test/stage/llvm-toolchain-9-9/build-llvm'
[100%] Performing configure step for 'stage2'
...
CMake Error at cmake/config-ix.cmake:320 (message):
  libffi includes are not found.
Call Stack (most recent call first):
  CMakeLists.txt:618 (include)

Ошибка возникает в середине сборки на stage2.

это я был не прав, признаю.

Ты был неправ во всех трёх тобой же перечисленных случаях, молодец.

EXL ★★★★★
()
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от Urechis_Unicinctus

Тут:

у него ошибка не на этапе сборки

EXL ★★★★★
()
Ответ на: комментарий от EXL

Точно ли libffi-dev 32-битный?

В логе все пакеты строго i386

Sunderland93 ★★★★★
() автор топика
Ответ на: комментарий от EXL

А Could NOT find Z3 у тебя тоже пишет?

Нет, только сабж. Я уже запарился, думаю уже может собрать с -DLLVM_ENABLE_FFI=OFF? На что вообще этот libffi влияет?

Sunderland93 ★★★★★
() автор топика
Ответ на: комментарий от Sunderland93

А с -DLLVM_LIBDIR_SUFFIX=/path/ не игрался? С -DFFI_INCLUDE_DIR=/path/ и -DFFI_LIBRARY_DIR=/path/? Логи курить надо CMake’а и его FindModule’ей, смотреть по какому пути он ищет эту либу и её файлы.

На что вообще этот libffi влияет?

LLVM_ENABLE_FFI:BOOL Indicates whether the LLVM Interpreter will be linked with the Foreign Function Interface library (libffi) in order to enable calling external functions. If the library or its headers are installed in a custom location, you can also set the variables FFI_INCLUDE_DIR and FFI_LIBRARY_DIR to the directories where ffi.h and libffi.so can be found, respectively. Defaults to OFF.

По умолчанию оно оффнуто, кстати.

Я бы нашёл где валяется ffi.h и libffi.so и явно вызывал CMake с этим путями, типа:

$ cmake -DFFI_INCLUDE_DIR=/usr/include/ -DFFI_LIBRARY_DIR=/usr/lib/i386 ...
EXL ★★★★★
()

Ненавижу е$#@! libffi. Не интерфейсы, нет, а конкретную реализацию родом из 90-х на башеговне. Идея ведь была в том, что libffi будет универсальной конфигурялкой, а тебе в твоем язычке нужно будет только сделать поддержку libffi, и автоматически получить поддержку всех платформ. А в итоге получилось, что на четверти платформ libffi нихрена не собирается. Тот же PyPy в итоге уезжает от этого засохшего говна мамонта на собственный cffi.

Она начала создавать проблемы еще раньше: https://github.com/rust-lang/rust/issues/9397

Потому юзай LLVM_ENABLE_FFI=OFF, и забывай про проблемы.

byko3y ★★★★
()
Последнее исправление: byko3y (всего исправлений: 1)
Ответ на: комментарий от EXL

Почему спросил. Я собираю LLVM исключительно потому что того требует более свежая Mesa. Если этот libffi не используется в Mesa, то он не нужен и мне проще его вырубить чем сидеть долбиться с cmake. Я кажется начинаю понимать почему многие его ненавидят.

Sunderland93 ★★★★★
() автор топика
13 декабря 2021 г.

Привет. Тема актуальна ещё?

У меня та же проблема. Только не в Debian 10, а в Debian 7.

Я обновил системные компоненты для запуска современного ПО. Теперь осталось собрать 32-битные библиотеки для 32-битных игр. И вот я спотыкнулся на сборке LLVM 7.0.1. Ошибка та же, что и у тебя.

В результате исследований, я понял, что LLVM 6.0 собирается. LLVM 7.0 не собирается, упав на 63% при сборке openmp. Версия 7.0.1 выдаёт ту же ошибку, что и у тебя.

То есть, сломалось где-то между 6.0 и 7.0.1. Но определить, где именно, затруднительно, потому что, при сборке промежуточных версий с лаунчпада, возникает другая ошибка.

Подозреваю, что проблема в SPEC-файле. (или как это называется в Debian? DEB-SRC?). Потому что точно такая же ошибка у меня была при сборке GCC 4.9. Оказалось, что где-то между релизами Debian 7 и 8, решили поднять цель сборки с i486 до i586. И где-то накосячили. Либо же мне нужно где-то в системе что-то прописывать. Короче, я просто откатил коммит.

Кароч, там, я так понимаю, сборка валится во время сборки 64-битных компонентов в 32-битной системе. Так что по-идее можно дропнуть эту поддержку, ведь ты же всё равно не будешь ими пользоваться!

Вот только как разрешить сборку с FFI для 32-битных библиотек, но запретить для 64-битных? Строка cmake для них - одна и та же...

Кстати, следующей ошибкой, после отключения поддержки FFI, будет отсутствие ncurses.

ZenitharChampion ★★★★★
()
Последнее исправление: ZenitharChampion (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.