]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
kbuild: Use ld.lld for linking host programs when LLVM is set
authorNathan Chancellor <nathan@kernel.org>
Wed, 10 Jun 2026 19:55:25 +0000 (12:55 -0700)
committerNathan Chancellor <nathan@kernel.org>
Wed, 10 Jun 2026 19:59:06 +0000 (12:59 -0700)
Currently, host programs are linked with HOSTCC using the toolchain's
default linker. This can result in confusing behavior when using the
LLVM Kbuild variable (which states that the user would like to build
with the LLVM toolchain instead of the GNU one), as clang's default
linker is ld for most platforms, not ld.lld. The documentation mentions
HOSTLD=ld.lld is set but this variable is not used by Kbuild proper,
only within some tools/ projects. Kbuild provides the HOSTLDFLAGS
variable, which allow users to provide the '-fuse-ld' or '--ld-path'
flags to customize what linker is used, but this is not super obvious to
folks not familiar with Kbuild.

If the user has not customized the linker already using one of these
flags, default to ld.lld when using the LLVM variable, which is more in
line with user expectations when using that variable.

Closes: https://github.com/ClangBuiltLinux/linux/issues/2167
Link: https://patch.msgid.link/20260610-kbuild-use-lld-for-linking-hostprogs-v1-1-70396fe42ee3@kernel.org
Signed-off-by: Nathan Chancellor <nathan@kernel.org>
Makefile

index 37fdb454b6371a45bbb2b9d30ca1c03f82eb1dda..ae263f964e8225b480930c7b7929aa4192b6488e 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -525,6 +525,9 @@ OBJCOPY             = $(LLVM_PREFIX)llvm-objcopy$(LLVM_SUFFIX)
 OBJDUMP                = $(LLVM_PREFIX)llvm-objdump$(LLVM_SUFFIX)
 READELF                = $(LLVM_PREFIX)llvm-readelf$(LLVM_SUFFIX)
 STRIP          = $(LLVM_PREFIX)llvm-strip$(LLVM_SUFFIX)
+ifeq ($(filter -fuse-ld=% --ld-path=%,$(KBUILD_HOSTLDFLAGS)),)
+KBUILD_HOSTLDFLAGS += -fuse-ld=lld
+endif
 else
 CC             = $(CROSS_COMPILE)gcc
 LD             = $(CROSS_COMPILE)ld