Bug 59222 - Поддержка сборки ядра с помощью LLVM/clang
Summary: Поддержка сборки ядра с помощью LLVM/clang
Status: NEW
Alias: None
Product: Sisyphus
Classification: Development
Component: kernel-build-tools (show other bugs)
Version: unstable
Hardware: x86_64 Linux
: P5 normal
Assignee: Anton V. Boyarshinov
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on: 59221
Blocks:
  Show dependency tree
 
Reported: 2026-05-16 12:50 MSK by Konstantin A Lepikhov (L.A. Kostis)
Modified: 2026-05-16 12:50 MSK (History)
13 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Konstantin A Lepikhov (L.A. Kostis) 2026-05-16 12:50:17 MSK
В общем и целом ядро собирается с минимальными правками исходного .spec:

- необходимо указать версию llvm, если используется отличная от версии по-умолчанию
- необходимо выставить переменную ALTWRAP_LLVM_VERSION=%{llvm_version} в %build если используется версия llvm, отличная от версии по умолчанию
- необходимо выставить переменную LLVM=1 в %build перед сборкой ядра
- в сборочные зависимости требуется clang, llvm-devel и lld + обновленные elfutils (см. https://bugzilla.altlinux.org/59221).

Для сборки модулей как минимум нужны следующие действия

- сборочные зависимости должны автоматически подтянуть clang, llvm-devel и lld нужных версий.
- в %build должны быть определены переменные LLVM или CC/LD/OBJDUMP (заметил при  сборке модулей nvidia).

Как это делать вопрос открытый, для сборочных зависимостей можно просто расширить макрос setup_kernel_module() добавив туда проверку на включение clang'а:

@@ -172,7 +173,8 @@ done \
     %{?!kepoch: %global kepoch %nil} \
     %{?!kversion: %global kversion %nil} \
     %{?!krelease: %global krelease %nil} \
-    %setup_kernel_module_from_globals
+    %setup_kernel_module_from_globals \
+    %setup_llvm_packages
 %setup_kernel_module_from_globals() \
     %global kbuildrelease %( a="%{krelease}"; echo "${a#alt}") \
     %global kcode %_kernel_version_code %kversion \
@@ -183,6 +185,19 @@ BuildRequires: kernel-headers-modules-%kflavour = %{?kepoch}%kversion-%krelease
 # For writing Requires in modules:
 %requires_kimage %{?kimage:Requires(pre,postun): %kimage}
 
+%setup_llvm_packages() \
+%{?!_with_clang: %global _with_clang %nil} \
+%{?!llvm_version: %global llvm_version %nil} \
+%{?_with_clang:BuildRequires: llvm%{llvm_version} lld%{llvm_version}}

(версия llvm_version может выставлена где-то глобально)

для %build сложнее, тут либо нужно переопределить %make_build либо сделать отдельный макрос где выставляются все нужные переменные:

+%setup_llvm_env() \
+%{?_with_clang:\
+export ALTWRAP_LLVM_VERSION=%{llvm_version} \
+export LLVM=1 \
+export CC=clang \
+export LD=ld.lld \
+export OBJDUMP=llvm-objdump}