LLVM: различия между версиями
LAKostis (обсуждение | вклад) |
(Актуализирунг) |
||
(не показано 10 промежуточных версий 5 участников) | |||
Строка 1: | Строка 1: | ||
== Особенности сборки пакетов проекта LLVM в | == Особенности сборки пакетов проекта LLVM в ALT Linux Sisyphus == | ||
=== Введение === | === Введение === | ||
Несмотря на то, что проект LLVM является довольно зрелым и вполне сформировавшимся, в | Несмотря на то, что проект LLVM является довольно зрелым и вполне сформировавшимся, в ALT Linux он появился и стал активно использоваться совсем недавно, в 2016 году. Поэтому существует целый ряд проблем, которые будут решены в будущем или будут считаться отличительными особенностями. | ||
=== Особенности сборки === | === Особенности сборки === | ||
В настоящий момент в Сизифе существуют след. компоненты: | В настоящий момент в Сизифе существуют след. компоненты LLVM project: | ||
* llvm libs - пакет с библиотеками, реализующими генерацию оптимизированного кода для различных процессоров и архитектур. | * llvm libs - пакет с библиотеками, реализующими генерацию оптимизированного кода для различных процессоров и архитектур. | ||
* clang - "LLVM native" C/C++/Objective-C компилятор, собирает код [http://clang.llvm.org/ | * 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 ряд интересных особенностей]. | * 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] | Все компоненты собраны с помощью самих себя с использованием технологии [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) | * firefox (полностью, использует ThinLTO и LLD) (В версии 60.x поддержка thinLTO была сломана, но есть шанс что ее починят, поскольку Mozilla планирует переходить на сборку c использованием clang/LTO для всех поддерживаемых платформ). | ||
* rust (частично, использует собственный boostrap код) | * rust (частично, использует собственный boostrap код) | ||
* 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 (в виде пакета {{pkg|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]] | * Опции сборки несовместимы с binutils [[altbug:34801]] и gcc [[altbug:34685]] | ||
=== Планы на будущее === | === Планы на будущее === | ||
* Дособрать libcxx (аналог libstdc++; пока ценность данного пакета сомнительна, поскольку потребность в этой библиотеке есть только на *BSD системах) | |||
* Дособрать libcxx (аналог libstdc++) | * Дособрать flang — проспонсированный NVIDIA фронтенд Фортрана, существенно развившийся к 14 версии. | ||
* Привести в порядок флаги сборки (retpoline?) | * Привести в порядок флаги сборки (retpoline?) | ||
Строка 32: | Строка 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?)