LLVM: различия между версиями

Материал из ALT Linux Wiki
(Актуализирунг)
 
(не показана 1 промежуточная версия 1 участника)
Строка 2: Строка 2:


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


=== Особенности сборки ===
=== Особенности сборки ===
В настоящий момент в Сизифе существуют след. компоненты:
В настоящий момент в Сизифе существуют след. компоненты LLVM project:
* llvm libs - пакет с библиотеками, реализующими генерацию оптимизированного кода для различных процессоров и архитектур.
* llvm libs - пакет с библиотеками, реализующими генерацию оптимизированного кода для различных процессоров и архитектур.
* clang/clang-libs - "LLVM native" C/C++/Objective-C компилятор, собирает код [http://clang.llvm.org/ в 3 раза быстрее, чем gcc], также имеет развитые средства для диагностики и анализа кода.
* clang/clang-libs + clang-tools - "LLVM native" C/C++/Objective-C компилятор, собирает код [http://clang.llvm.org/ до 3 раз быстрее, чем gcc], также имеет развитые средства для диагностики и анализа кода.
* lld - линковщик кода, который может заменить стандартный ld/gold из binutils, при этом поддерживает все стандартные команды и возможности, работает быстрее и имеет [https://archive.fosdem.org/2017/schedule/event/lld/attachments/slides/1446/export/events/attachments/lld/slides/1446/FosdemLLD2017.pdf ряд интересных особенностей]. Поддерживается генерация кода для [https://llvm.org/svn/llvm-project/llvm/trunk/lib/Target/WebAssembly/README.txt WebAssembly].
* lld - линковщик кода, который может заменить стандартный ld/gold из binutils, при этом поддерживает все стандартные команды и возможности, работает быстрее и имеет [https://archive.fosdem.org/2017/schedule/event/lld/attachments/slides/1446/export/events/attachments/lld/slides/1446/FosdemLLD2017.pdf ряд интересных особенностей]. Поддерживается генерация кода для [https://llvm.org/svn/llvm-project/llvm/trunk/lib/Target/WebAssembly/README.txt WebAssembly].
* lldb — отладчик, переиспользующий код LLVM.
* polly — [https://polly.llvm.org оптимизатор] вложенных циклов по политопной модели.


Все компоненты собраны с помощью самих себя с использованием технологии [http://blog.llvm.org/2016/06/thinlto-scalable-and-incremental-lto.html ThinLTO], позволяющей получить значительный выигрыш в оптимизации C++ кода и как следствие работает быстрее, чем предыдущие версии собранные gcc.
Все компоненты собраны с помощью самих себя с использованием технологии [http://blog.llvm.org/2016/06/thinlto-scalable-and-incremental-lto.html ThinLTO]. Она позволяет получить значительный выигрыш в оптимизации C++ кода, и, как следствие, такой код работает быстрее, чем версии, собранные gcc.


=== Проекты в ALT Linux которые перешли на LLVM либо используют libLLVM ===
=== Проекты в ALT Linux, которые перешли на LLVM либо используют libLLVM ===
* chromium (полностью, использует ThinLTO и LLD)
* chromium (полностью, использует ThinLTO и LLD)
* firefox (полностью, использует ThinLTO и LLD) (В версии 60.x поддержка thinLTO была сломана, но есть шанс что ее починят, поскольку Mozilla планирует переходить на сборку c использованием clang/LTO для всех поддерживаемых платформ).
* firefox (полностью, использует ThinLTO и LLD) (В версии 60.x поддержка thinLTO была сломана, но есть шанс что ее починят, поскольку Mozilla планирует переходить на сборку c использованием clang/LTO для всех поддерживаемых платформ).
Строка 18: Строка 20:
* castxml (частично, использует clang и статическую линковку clang-libs и LLVM)
* castxml (частично, использует clang и статическую линковку clang-libs и LLVM)
* Mesalib (частично, статически линкует свой libLLVM, есть [http://git.altlinux.org/people/lakostis/packages/?p=mesa.git;a=shortlog;h=refs/heads/mesa-megadrivers вариант] с динамической линковкой)
* Mesalib (частично, статически линкует свой libLLVM, есть [http://git.altlinux.org/people/lakostis/packages/?p=mesa.git;a=shortlog;h=refs/heads/mesa-megadrivers вариант] с динамической линковкой)
* AMDVLK (в виде пакета vulkan-amdgpu), использует свою версию LLVM, которую линкует статически во время сборки.
* AMDVLK (в виде пакета {{pkg|vulkan-amdgpu}}), использует свою версию LLVM, которую линкует статически во время сборки.
* RPCS3 (использует свою версию LLVM, которую линкует статически во время сборки)
* RPCS3 (использует свою версию LLVM, которую линкует статически во время сборки)
* Dolphin (эмулятор GameCube и Wii) (динамически линкует libLLVM)


=== Известные проблемы ===
=== Известные проблемы ===
* Хаотическая поддержка пакета.
* Нет стратегии развития экосистемы LLVM в ALT Linux. Если вы работаете с LLVM на ALT — пишите нам!
* Нет стратегии развития экосистемы LLVM в ALT Linux.
* Хаотическая поддержка пакета: LLVM project слишком большой для вдумчивого сопровождения одним человеком part-time.
* Нельзя использовать несколько версий LLVM одновременно как GCC
* Пакеты собраны с минимальной отладочной информацией (LTO потребляет очень много памяти в случае сборки с -g, что упирается в архитектурно-аппаратные особенности сборочницы)
* Пакеты собраны с минимальной отладочной информацией (LTO потребляет очень много памяти в случае сборки с -g, что упирается в архитектурно-аппартные особенности сборочницы)
* Опции сборки несовместимы с binutils [[altbug:34801]] и gcc [[altbug:34685]]
* Опции сборки несовместимы с binutils [[altbug:34801]] и gcc [[altbug:34685]]
* Нельзя линковать clang-libs динамически (см. [https://bugzilla.redhat.com/show_bug.cgi?id=1211943 ошибку в RH bugzilla])


=== Планы на будущее ===
=== Планы на будущее ===
* Дособрать lldb (LLVM debugger) [[altbug:33411]]
* Дособрать libcxx (аналог libstdc++; пока ценность данного пакета сомнительна, поскольку потребность в этой библиотеке есть только на *BSD системах)
* Дособрать libcxx (аналог libstdc++, пока ценность данного пакета сомнительна, поскольку потребность в этой библиотеке есть только на *BSD системах)
* Дособрать flang — проспонсированный NVIDIA фронтенд Фортрана, существенно развившийся к 14 версии.
* Привести в порядок флаги сборки (retpoline?)
* Привести в порядок флаги сборки (retpoline?)


Строка 37: Строка 38:
[[Категория:Clang]]
[[Категория:Clang]]
[[Категория:Devel]]
[[Категория:Devel]]
[[Категория:Руководства]]

Текущая версия от 16:28, 12 апреля 2022

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

Введение

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

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

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

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

Все компоненты собраны с помощью самих себя с использованием технологии 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, которую линкует статически во время сборки)
  • Dolphin (эмулятор GameCube и Wii) (динамически линкует libLLVM)

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

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

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

  • Дособрать libcxx (аналог libstdc++; пока ценность данного пакета сомнительна, поскольку потребность в этой библиотеке есть только на *BSD системах)
  • Дособрать flang — проспонсированный NVIDIA фронтенд Фортрана, существенно развившийся к 14 версии.
  • Привести в порядок флаги сборки (retpoline?)