LLVM

Материал из ALT Linux Wiki

Особенности сборки пакетов проекта LLVM в ALT Linux Sisyphus

Введение

Несмотря на то, что проект LLVM является довольно зрелым и вполне сформировавшимся, в ALT Linux он появился и стал активно использоваться совсем недавно. Поэтому существует целый ряд проблем, которые будут решены в будущем или будут считаться отличительными особенностями.

Особенности сборки

В настоящий момент в Сизифе существуют след. компоненты:

  • llvm libs - пакет с библиотеками, реализующими генерацию оптимизированного кода для различных процессоров и архитектур.
  • clang/clang-libs - "LLVM native" C/C++/Objective-C компилятор, собирает код в 3 раза быстрее, чем gcc, также имеет развитые средства для диагностики и анализа кода.
  • lld - линковщик кода, который может заменить стандартный ld/gold из binutils, при этом поддерживает все стандартные команды и возможности, работает быстрее и имеет ряд интересных особенностей. Поддерживается генерация кода для WebAssembly.

Все компоненты собраны с помощью самих себя с использованием технологии ThinLTO, позволяющей получить значительный выигрыш в оптимизации C++ кода и как следствие работает быстрее, чем предыдущие версии собранные gcc.

Проекты в ALT Linux которые перешли на LLVM либо используют libLLVM

  • chromium (полностью, использует ThinLTO и LLD)
  • firefox (полностью, использует ThinLTO и LLD) (В версии 60.x поддержка thinLTO была сломана, но есть шанс что ее починят, поскольку Mozilla планирует переходить на сборку c использованием clang/LTO для всех поддерживаемых платформ).
  • rust (частично, использует собственный boostrap код)
  • castxml (частично, использует clang и статическую линковку clang-libs и LLVM)
  • Mesalib (частично, статически линкует свой libLLVM, есть вариант с динамической линковкой)
  • AMDVLK (в виде пакета vulkan-amdgpu), использует свою версию LLVM, которую линкует статически во время сборки.
  • RPCS3 (использует свою версию LLVM, которую линкует статически во время сборки)

Известные проблемы

  • Хаотическая поддержка пакета.
  • Нет стратегии развития экосистемы LLVM в ALT Linux.
  • Нельзя использовать несколько версий LLVM одновременно как GCC
  • Пакеты собраны с минимальной отладочной информацией (LTO потребляет очень много памяти в случае сборки с -g, что упирается в архитектурно-аппартные особенности сборочницы)
  • Опции сборки несовместимы с binutils altbug:34801 и gcc altbug:34685
  • Нельзя линковать clang-libs динамически (см. ошибку в RH bugzilla)

Планы на будущее

  • Дособрать lldb (LLVM debugger) altbug:33411
  • Дособрать libcxx (аналог libstdc++, пока ценность данного пакета сомнительна, поскольку потребность в этой библиотеке есть только на *BSD системах)
  • Привести в порядок флаги сборки (retpoline?)