LLVM: различия между версиями
Нет описания правки |
Sb (обсуждение | вклад) м (источник неправильного написания названия дистрибутива, в т.ч. и в википедии) |
||
Строка 1: | Строка 1: | ||
== Особенности сборки пакетов проекта LLVM в | == Особенности сборки пакетов проекта LLVM в ALT Linux Sisyphus == | ||
=== Введение === | === Введение === | ||
Несмотря на то, что проект LLVM является довольно зрелым и вполне сформировавшимся, в | Несмотря на то, что проект LLVM является довольно зрелым и вполне сформировавшимся, в ALT Linux он появился и стал активно использоваться совсем недавно. Поэтому существует целый ряд проблем, которые будут решены в будущем или будут считаться отличительными особенностями. | ||
=== Особенности сборки === | === Особенности сборки === | ||
Строка 12: | Строка 12: | ||
Все компоненты собраны с помощью самих себя с использованием технологии [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 === | ||
* 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 для всех поддерживаемых платформ). | ||
Строка 22: | Строка 22: | ||
=== Известные проблемы === | === Известные проблемы === | ||
* Хаотическая поддержка пакета. | * Хаотическая поддержка пакета. | ||
* Нет стратегии развития экосистемы LLVM в | * Нет стратегии развития экосистемы LLVM в ALT Linux. | ||
* Нельзя использовать несколько версий LLVM одновременно как GCC | * Нельзя использовать несколько версий LLVM одновременно как GCC | ||
* Пакеты собраны с минимальной отладочной информацией (LTO потребляет очень много памяти в случае сборки с -g, что упирается в архитектурно-аппартные особенности сборочницы) | * Пакеты собраны с минимальной отладочной информацией (LTO потребляет очень много памяти в случае сборки с -g, что упирается в архитектурно-аппартные особенности сборочницы) |
Версия от 10:55, 31 мая 2019
Особенности сборки пакетов проекта 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, которую линкует статически во время сборки.
Известные проблемы
- Хаотическая поддержка пакета.
- Нет стратегии развития экосистемы 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?)