LINUX.ORG.RU

Gentoo. Игнорируются LLVM_TARGETS

 , , , ,


2

3

Время обновлять LLVM, LLVM сам себя не обновит!

В portage стабилизировали четырнадцатую версию, решил обновиться. И был крайне удивлён набором архитектур, планирующихся к установке.

LLVM_TARGETS="(AArch64) (AMDGPU) (ARM) (AVR) (BPF) (Hexagon) (Lanai) (MSP430) (Mips) (NVPTX) (PowerPC) (RISCV) (Sparc) (SystemZ) (VE*) (WebAssembly) (X86) (XCore) (-ARC) (-CSKY) (-M68k)

Рядовому пользователю из этого многообразия чаще всего нужны llvm_targets_X86 и llvm_targets_AMDGPU либо llvm_targets_NVPTX. А остальное никак не используется, но неплохо так увеличивает время сборки.

Флаги прописаны в package.use, и не трогались уже очень давно. Задаём вручную, непосредственно как префикс для emerge — ноль реакции.

Ага! Если оно так себя ведёт — идём грепать профили (/usr/portage/profiles) на предмет наличия llvm_targets в use.force либо в package.use.force. Где и находим следующее непотребство:

/usr/portage/profiles/base/package.use.force

# Michał Górny <mgorny@gentoo.org> (2021-11-04)
# Enable all LLVM targets unconditionally.  Unfortunately, disabling
# targets tend to break reverse dependencies (e.g. Rust) and we are yet
# to find a clean way of resolving that.  Compared to the damage
# potential, the increase of build time is a minor problem.  Users who
# really insist of building a smaller system can un-force the flags
# at their own responsibility.
>=sys-devel/clang-13.0.1_rc llvm_targets_AArch64 llvm_targets_AMDGPU
>=sys-devel/clang-13.0.1_rc llvm_targets_ARM llvm_targets_AVR llvm_targets_BPF
>=sys-devel/clang-13.0.1_rc llvm_targets_Hexagon llvm_targets_Lanai
>=sys-devel/clang-13.0.1_rc llvm_targets_MSP430 llvm_targets_Mips
>=sys-devel/clang-13.0.1_rc llvm_targets_NVPTX llvm_targets_PowerPC
>=sys-devel/clang-13.0.1_rc llvm_targets_RISCV llvm_targets_Sparc
>=sys-devel/clang-13.0.1_rc llvm_targets_SystemZ llvm_targets_WebAssembly
>=sys-devel/clang-13.0.1_rc llvm_targets_X86 llvm_targets_XCore
>=sys-devel/clang-14 llvm_targets_VE
>=sys-devel/llvm-13.0.1_rc llvm_targets_AArch64 llvm_targets_AMDGPU
>=sys-devel/llvm-13.0.1_rc llvm_targets_ARM llvm_targets_AVR llvm_targets_BPF
>=sys-devel/llvm-13.0.1_rc llvm_targets_Hexagon llvm_targets_Lanai
>=sys-devel/llvm-13.0.1_rc llvm_targets_MSP430 llvm_targets_Mips
>=sys-devel/llvm-13.0.1_rc llvm_targets_NVPTX llvm_targets_PowerPC
>=sys-devel/llvm-13.0.1_rc llvm_targets_RISCV llvm_targets_Sparc
>=sys-devel/llvm-13.0.1_rc llvm_targets_SystemZ llvm_targets_WebAssembly
>=sys-devel/llvm-13.0.1_rc llvm_targets_X86 llvm_targets_XCore
>=sys-devel/llvm-14 llvm_targets_VE

Очень странное решение, честно говоря, учитывая что Rust по умолчанию тянет свою собственную LLVM. Первый раз, за всё время общения с Gentoo, приходится вообще трогать package.use.force.

Отключается просто: (НА СВОЙ СТРАХ И РИСК!) прописываем в /etc/portage/profile/package.use.force всё вышеупомянутое, но флаги предваряем знаком «минус».

Наслаждаемся ощущением отстреленной ноги, несобирающегося Rust (не проверял) и сократившимся временем сборки LLVM и Clang.


Ничего себе. Какие удивительные открытия. Благодарю автора за находку, а то так бы и не замечал наверное, куда время на сборку уходит…

BattleCoder ★★★★★
()

Кажется, нашёл причину.

https://bugs.gentoo.org/show_bug.cgi?id=735154#c3

Georgy Yakovlev [archtester] [gentoo-dev] 2021-06-01 22:03:24 UTC

Another point just happened on gentoo-dev:

  1. rust, built with system-llvm, where llvm had NVPTX target enabled.
  2. Later, user disables NVPTX and rebuilds llvm.
  3. llvm abi breaks and rust can no longer be launched.
    rustc --print sysroot
    rustc: symbol lookup error: /usr/lib/rust/lib/librustc_driver-f8cd10506120c696.so: undefined symbol: LLVMInitializeNVPTXTargetInfo, version LLVM_12
    
  4. User can rebuild llvm again with NVPTX, but will not be able to get rid of abi breakage in rust, if using system-bootstrap. Because as soon as abi breaks rust stops working, and no longer able to rebuild itself.

One of the ways to break the cycle is:

emerge rust without system-llvm, re-emerge llvm without NVPTX, re-emerge rust with system-llvm.

Такие дела. Тем кто собирает rust из исходников выгодно включить system-llvm, потому что это сокращает время сборки. Но если потом собрать llvm с другим набором флагов, rust сломается и повторно пересобрать себя уже не сможет. Дальше только всё сносить и начинать как с чистого листа — с бинарным bootstrap и без system-llvm, с уже последующей повторной пересборкой на системный.

И чтобы поменять флаги llvm, не сломав при этом rust — предлагается пересобрать растишку без system-llvm, затем собрать llvm с новыми флагами, затем снова пересобрать rust с system-llvm.

Сносить и собирать с бутстрапа, или не сносить — дилемма Эскобара и много часов компиляния.

Quote
() автор топика

можно сделать проще

создаём /etc/portage/profile/use.force и в него напихиваем

-llvm_targets_AArch64
-llvm_targets_AMDGPU
-llvm_targets_ARM
-llvm_targets_AVR
-llvm_targets_BPF
-llvm_targets_Hexagon
-llvm_targets_Lanai
-llvm_targets_MSP430
-llvm_targets_Mips
-llvm_targets_NVPTX
-llvm_targets_PowerPC
-llvm_targets_RISCV
-llvm_targets_Sparc
-llvm_targets_SystemZ
-llvm_targets_WebAssembly
-llvm_targets_XCore
-llvm_targets_ARC
-llvm_targets_CSKY
-llvm_targets_M68k
-llvm_targets_VE

Если какие флаги всё равно подхватываются, то их дублируем в /etc/profile/package.use и для llvm и для clang.
Компилировать на 40% меньше

Oldboy
()
Последнее исправление: Oldboy (всего исправлений: 1)
27 августа 2022 г.
Ответ на: комментарий от fancat

https://i.imgur.com/sQlDIOR.png

Или есть ещё способы узнать с какими таргетами собран кланг? И кстати да, конкретно кланг игнорирует llvm_targets, т. к. amdgpu для него у меня отключен.

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

Сейчас это уже не выяснить, в портаже только 13. В принципе нет причин по которым это невозможно. Я не так давно вернулся на генту, могу точно сказать что 14-й собирается 13-м, а тот в свою очередь 12-м.

thorus_dv
()
18 июня 2023 г.

Отключил все llvm_targets кроме x86 и amdgpu. LLVM 16.0.5 (включил ccache для следующих ревизий) собрался за 2 часа, а 15.0.7 до выключения лишних llvm_targets собирался 2 часа 20 минут. В обоих случаях собирался для multilib (64 32).

Clang 16.0.5 даже с отключенными llvm_targets уже собирается дольше 15.0.7. Сколько ж он собирается, если всё включить?

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

Тем кто собирает rust из исходников выгодно включить system-llvm, потому что это сокращает время сборки.

Те, кому важно время сборки, не собирают rust из исходников.

annulen ★★★★★
()

Есть такое. Но и добавление этих опций тоже не всегда помогает. Кто бы мог сомневаться, что в генте такой ахтунг с их политикой управления и разработки

  1. сначала ты игнорируешь комьюнити
  2. потом комьюнити начинает потихоньку убегать
  3. ты такой: «что-то не устраивает? Идите в другой дистрибутив»
  4. комьюнити начинает убегать толпами
  5. следом начинают разбегаться мейнтейнеры
  6. новые юзеры: «у вас тут бага, там бага». Ты такой: «у нас не хватает мейнтейнеров и не хватает финансирования. И вообще мы это делаем как волонтёры!»
  7. дистрибутив потихоньку обрастает багами т.к нет комьюнити
  8. ты такой: «делаю вид, что всё в порядке и ничего не замечаю» <– сейчас генту тут
  9. смерть дистрибутива
serg002 ★★★
()
Последнее исправление: serg002 (всего исправлений: 3)
Ответ на: комментарий от grem

Это для отключённых/включённых флагов? Ты 6 июня его собирал уже?

да. Про 6 июня не догнал.

[ebuild   R    ] sys-devel/clang-16.0.6:16::pg_overlay  USE="extra (pie) -debug -doc (-ieee-long-double) -static-analyzer -test -verify-sig -xml" LLVM_TARGETS="(X86) -AArch64 -AMDGPU (-ARC) -ARM -AVR -BPF (-CSKY) (-DirectX) -Hexagon -Lanai -LoongArch (-M68k) -MSP430 -Mips -NVPTX -PowerPC -RISCV (-SPIRV) -Sparc -SystemZ -VE -WebAssembly -XCore (-Xtensa)" PYTHON_SINGLE_TARGET="python3_11 -python3_10 -python3_12" 0 KiB
[ebuild   R    ]  sys-devel/llvm-16.0.6:16::gentoo  USE="libffi ncurses zstd -binutils-plugin -debug -doc -exegesis -libedit -test -verify-sig -xar -xml -z3" LLVM_TARGETS="(X86) -AArch64 -AMDGPU (-ARC) -ARM -AVR -BPF (-CSKY) (-DirectX) -Hexagon -Lanai -LoongArch (-M68k) -MSP430 -Mips -NVPTX -PowerPC -RISCV (-SPIRV) -Sparc -SystemZ -VE -WebAssembly -XCore (-Xtensa)" 0 KiB

i7-4770K

Ololo_Trololo
()
Последнее исправление: Ololo_Trololo (всего исправлений: 2)
Ответ на: комментарий от grem
2023-05-03 23:47:22  12:07 sys-devel/llvm-16.0.3
2023-05-18 13:59:50  12:11 sys-devel/llvm-16.0.4
2023-06-04 06:05:19  12:15 sys-devel/llvm-16.0.5
2023-06-15 03:23:20  12:11 sys-devel/llvm-16.0.6

2023-05-03 23:56:53  9:31 sys-devel/clang-16.0.3
2023-05-18 14:09:46  9:32 sys-devel/clang-16.0.4
2023-06-04 06:14:56  9:37 sys-devel/clang-16.0.5
2023-06-15 03:32:49  9:29 sys-devel/clang-16.0.6

Логов от 15 версии к сожалению нет.

LLVM_TARGETS="(AMDGPU) X86

no-multilib

i7-10700F (16) @ 4.8 GHz

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

Ну вот, все причитания про долгую сборку на новых процах вообще бессмысленны.

Даже на проце 2013 года вон за 40 минут собирается. У меня 2009 года проц на 4 ядра и multilib используется.

grem ★★★★★
()