All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/3] kernel: make the kernel toolchain switchable to clang
@ 2026-07-14 13:26 mark.yang
  2026-07-14 13:26 ` [PATCH v2 1/3] kernel-arch: fall back to GNU ld unless ld-is-lld is in DISTRO_FEATURES mark.yang
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: mark.yang @ 2026-07-14 13:26 UTC (permalink / raw)
  To: openembedded-core; +Cc: mark.yang

From: "mark.yang" <mark.yang@lge.com>

Since v1, clang kernel toolchain support has been merged to master
with 928d81916f ("kernel-arch: Add clang toolchain support") and
e88ee794a3 ("kernel-yocto: Set CLANG_FLAGS for kernel config checks
when using clang"), superseding two of the three v1 patches. As
discussed on the v1 thread, this rework contains what remains on top
of current master.

On current master a clang kernel only builds when ld-is-lld happens to
be in DISTRO_FEATURES, since nothing else stages a bare ld.lld:

  scripts/Kconfig.include:41: linker 'ld.lld ' not found

Full log: https://errors.yoctoproject.org/Errors/Build/242422/

Patch 1 falls back to GNU ld in that case.

kbuild wants the same toolchain for every make invocation against a
build tree (Documentation/kbuild/llvm.rst: "The same value used for
LLVM= should be set for each invocation of make"), and the out-of-tree
module and make-mod-scripts builds run make against that same tree.
Setting TOOLCHAIN on the kernel recipe alone leaves them on the gcc
defaults: kbuild spots the CC_VERSION_TEXT mismatch and silently
regenerates .config. On current master, building cryptodev-module
after a clang kernel succeeds without a warning, produces a gcc .ko
and flips the shared .config back to CONFIG_CC_IS_GCC.

The toolchain has to be known at parse time to set up the cross
toolchain dependencies, so this needs to be a configuration variable.
Patch 2 moves modules and make-mod-scripts onto explicit cross
toolchain dependencies and patch 3 adds a KERNEL_TOOLCHAIN switch
covering all kernel-arch recipes.

Tested on qemux86-64 (master c2bd43b373, clang 22.1.8, gcc 16.1.0):
with KERNEL_TOOLCHAIN unset, core-image-minimal and cryptodev-module
build with gcc as before. With KERNEL_TOOLCHAIN = "clang" the kernel,
make-mod-scripts and cryptodev-module all build with clang, the shared
.config keeps CONFIG_CC_IS_CLANG after the module build, and linking
uses GNU ld, or LLD with ld-is-lld in DISTRO_FEATURES.

mark.yang (3):
  kernel-arch: fall back to GNU ld unless ld-is-lld is in
    DISTRO_FEATURES
  module.bbclass/make-mod-scripts: inhibit default dependencies
  kernel-arch: add KERNEL_TOOLCHAIN to switch the whole kernel toolchain

 meta/classes-recipe/kernel-arch.bbclass                      | 5 +++--
 meta/classes-recipe/module.bbclass                           | 3 +++
 meta/recipes-kernel/make-mod-scripts/make-mod-scripts_1.0.bb | 3 +++
 3 files changed, 9 insertions(+), 2 deletions(-)



^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2026-07-16  6:40 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-14 13:26 [PATCH v2 0/3] kernel: make the kernel toolchain switchable to clang mark.yang
2026-07-14 13:26 ` [PATCH v2 1/3] kernel-arch: fall back to GNU ld unless ld-is-lld is in DISTRO_FEATURES mark.yang
2026-07-14 13:26 ` [PATCH v2 2/3] module.bbclass/make-mod-scripts: inhibit default dependencies mark.yang
2026-07-15 11:34   ` [OE-core] " Mathieu Dubois-Briand
2026-07-15 13:48     ` Mathieu Dubois-Briand
2026-07-16  6:40       ` mark.yang
2026-07-14 13:26 ` [PATCH v2 3/3] kernel-arch: add KERNEL_TOOLCHAIN to switch the whole kernel toolchain mark.yang

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.