From patchwork Wed Jul 8 02:28:54 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "mark.yang" X-Patchwork-Id: 91948 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 56DDBC43602 for ; Wed, 8 Jul 2026 02:30:11 +0000 (UTC) Received: from lgeamrelo13.lge.com (lgeamrelo13.lge.com [156.147.23.53]) by mx.groups.io with SMTP id smtpd.msgproc02-g2.261.1783477805539997134 for ; Tue, 07 Jul 2026 19:30:06 -0700 Authentication-Results: mx.groups.io; dkim=none (message not signed); spf=pass (domain: lge.com, ip: 156.147.23.53, mailfrom: mark.yang@lge.com) Received: from unknown (HELO lgeamrelo02.lge.com) (156.147.1.126) by 156.147.23.53 with ESMTP; 8 Jul 2026 11:30:03 +0900 X-Original-SENDERIP: 156.147.1.126 X-Original-MAILFROM: mark.yang@lge.com Received: from unknown (HELO jenkins-X670-AORUS-ELITE-AX..) (10.177.121.125) by 156.147.1.126 with ESMTP; 8 Jul 2026 11:30:03 +0900 X-Original-SENDERIP: 10.177.121.125 X-Original-MAILFROM: mark.yang@lge.com From: mark.yang@lge.com To: openembedded-core@lists.openembedded.org Cc: "mark.yang" Subject: [OE-core][PATCH 1/3] module.bbclass/make-mod-scripts: inhibit default dependencies Date: Wed, 8 Jul 2026 11:28:54 +0900 Message-Id: <20260708022856.2087339-2-mark.yang@lge.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260708022856.2087339-1-mark.yang@lge.com> References: <20260708022856.2087339-1-mark.yang@lge.com> MIME-Version: 1.0 List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Wed, 08 Jul 2026 02:30:11 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/240414 From: "mark.yang" Modules and make-mod-scripts build against the shared kernel build tree with the kernel toolchain, so the default virtual/libc and virtual/compilerlibs dependencies are unused. Inhibit them and add the cross toolchain explicitly like kernel.bbclass does. This also avoids dragging compiler-rt and libcxx into every module build when TOOLCHAIN is set to clang. Signed-off-by: mark.yang --- meta/classes-recipe/module.bbclass | 5 +++++ meta/recipes-kernel/make-mod-scripts/make-mod-scripts_1.0.bb | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/meta/classes-recipe/module.bbclass b/meta/classes-recipe/module.bbclass index 6b2c09f441..a65744d33e 100644 --- a/meta/classes-recipe/module.bbclass +++ b/meta/classes-recipe/module.bbclass @@ -6,6 +6,11 @@ inherit module-base kernel-module-split pkgconfig +# Modules build with the kernel toolchain against the shared kernel build tree +# and do not need the default userspace toolchain/libc dependencies. +INHIBIT_DEFAULT_DEPS = "1" +DEPENDS += "virtual/cross-cc virtual/cross-binutils" + EXTRA_OEMAKE += "KERNEL_SRC=${STAGING_KERNEL_DIR}" MODULES_INSTALL_TARGET ?= "modules_install" diff --git a/meta/recipes-kernel/make-mod-scripts/make-mod-scripts_1.0.bb b/meta/recipes-kernel/make-mod-scripts/make-mod-scripts_1.0.bb index 4b0630313f..97521c89e9 100644 --- a/meta/recipes-kernel/make-mod-scripts/make-mod-scripts_1.0.bb +++ b/meta/recipes-kernel/make-mod-scripts/make-mod-scripts_1.0.bb @@ -18,6 +18,11 @@ DEV_PKG_DEPENDENCY = "" DEPENDS += "bc-native bison-native" DEPENDS += "gmp-native" +# The scripts build uses the kernel toolchain against the shared kernel build +# tree and does not need the default userspace toolchain/libc dependencies. +INHIBIT_DEFAULT_DEPS = "1" +DEPENDS += "virtual/cross-cc virtual/cross-binutils" + EXTRA_OEMAKE = " HOSTCC="${BUILD_CC}" HOSTCFLAGS="${BUILD_CFLAGS}" HOSTLDFLAGS="${BUILD_LDFLAGS}" HOSTCPP="${BUILD_CPP}"" EXTRA_OEMAKE += " HOSTCXX="${BUILD_CXX} ${BUILD_CXXFLAGS} ${BUILD_LDFLAGS}" CROSS_COMPILE=${TARGET_PREFIX}" From patchwork Wed Jul 8 02:28:55 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "mark.yang" X-Patchwork-Id: 91947 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 34CB6C43458 for ; Wed, 8 Jul 2026 02:30:11 +0000 (UTC) Received: from lgeamrelo12.lge.com (lgeamrelo12.lge.com [156.147.23.52]) by mx.groups.io with SMTP id smtpd.msgproc02-g2.260.1783477805531471772 for ; Tue, 07 Jul 2026 19:30:06 -0700 Authentication-Results: mx.groups.io; dkim=none (message not signed); spf=pass (domain: lge.com, ip: 156.147.23.52, mailfrom: mark.yang@lge.com) Received: from unknown (HELO lgeamrelo02.lge.com) (156.147.1.126) by 156.147.23.52 with ESMTP; 8 Jul 2026 11:30:03 +0900 X-Original-SENDERIP: 156.147.1.126 X-Original-MAILFROM: mark.yang@lge.com Received: from unknown (HELO jenkins-X670-AORUS-ELITE-AX..) (10.177.121.125) by 156.147.1.126 with ESMTP; 8 Jul 2026 11:30:03 +0900 X-Original-SENDERIP: 10.177.121.125 X-Original-MAILFROM: mark.yang@lge.com From: mark.yang@lge.com To: openembedded-core@lists.openembedded.org Cc: "mark.yang" Subject: [OE-core][PATCH 2/3] kernel-yocto: export CLANG_FLAGS for the kconfiglib config audit Date: Wed, 8 Jul 2026 11:28:55 +0900 Message-Id: <20260708022856.2087339-3-mark.yang@lge.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260708022856.2087339-1-mark.yang@lge.com> References: <20260708022856.2087339-1-mark.yang@lge.com> MIME-Version: 1.0 List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Wed, 08 Jul 2026 02:30:11 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/240412 From: "mark.yang" do_kernel_configcheck evaluates Kconfig with kconfiglib instead of kbuild make, so scripts/Makefile.clang never sets CLANG_FLAGS and the compiler checks in scripts/Kconfig.include pick it up from the environment. With TOOLCHAIN = "clang" the audit fails: Sorry, this assembler is not supported. as-version.sh needs -fintegrated-as in the arguments to recognize the integrated assembler. Export the flags kbuild would use, with gcc this expands to nothing. Signed-off-by: mark.yang --- meta/classes-recipe/kernel-yocto.bbclass | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/meta/classes-recipe/kernel-yocto.bbclass b/meta/classes-recipe/kernel-yocto.bbclass index e7fdeb5d4b..46ccc69e75 100644 --- a/meta/classes-recipe/kernel-yocto.bbclass +++ b/meta/classes-recipe/kernel-yocto.bbclass @@ -578,6 +578,13 @@ python do_config_analysis() { bb.warn( analysis ) } +# The kconfiglib audit evaluates Kconfig's compiler checks outside kbuild make, +# where scripts/Makefile.clang would normally set CLANG_FLAGS, so provide it +# via the environment. +CLANG_FLAGS ?= "" +CLANG_FLAGS:toolchain-clang = "--target=${HOST_SYS} -fintegrated-as" +export CLANG_FLAGS + python do_kernel_configcheck() { import re, string, sys, subprocess From patchwork Wed Jul 8 02:28:56 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "mark.yang" X-Patchwork-Id: 91946 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3C80AC44501 for ; Wed, 8 Jul 2026 02:30:11 +0000 (UTC) Received: from lgeamrelo13.lge.com (lgeamrelo13.lge.com [156.147.23.53]) by mx.groups.io with SMTP id smtpd.msgproc02-g2.259.1783477805453913114 for ; Tue, 07 Jul 2026 19:30:06 -0700 Authentication-Results: mx.groups.io; dkim=none (message not signed); spf=pass (domain: lge.com, ip: 156.147.23.53, mailfrom: mark.yang@lge.com) Received: from unknown (HELO lgeamrelo02.lge.com) (156.147.1.126) by 156.147.23.53 with ESMTP; 8 Jul 2026 11:30:03 +0900 X-Original-SENDERIP: 156.147.1.126 X-Original-MAILFROM: mark.yang@lge.com Received: from unknown (HELO jenkins-X670-AORUS-ELITE-AX..) (10.177.121.125) by 156.147.1.126 with ESMTP; 8 Jul 2026 11:30:03 +0900 X-Original-SENDERIP: 10.177.121.125 X-Original-MAILFROM: mark.yang@lge.com From: mark.yang@lge.com To: openembedded-core@lists.openembedded.org Cc: "mark.yang" Subject: [OE-core][PATCH 3/3] kernel-arch: add KERNEL_TOOLCHAIN for building the kernel with clang Date: Wed, 8 Jul 2026 11:28:56 +0900 Message-Id: <20260708022856.2087339-4-mark.yang@lge.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260708022856.2087339-1-mark.yang@lge.com> References: <20260708022856.2087339-1-mark.yang@lge.com> MIME-Version: 1.0 List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Wed, 08 Jul 2026 02:30:11 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/240413 From: "mark.yang" kernel-arch pins TOOLCHAIN to gcc, so a clang kernel needs TOOLCHAIN and the KERNEL_* variables overridden per recipe. Modules and make-mod-scripts then keep the gcc defaults and run make against the shared kernel build tree with a different compiler: kbuild detects the CC_VERSION_TEXT mismatch, re-runs syncconfig and silently drops compiler-dependent options such as CONFIG_CFI_CLANG. Add toolchain-clang variants of KERNEL_CC, KERNEL_LD and KERNEL_AR and a KERNEL_TOOLCHAIN switch covering all kernel-arch recipes, so the kernel, modules and make-mod-scripts change toolchain together. The default stays gcc. -fuse-ld is left out of KERNEL_CC because the kernel links with KERNEL_LD directly and kbuild's -Werror=unused-command-line-argument rejects the unused option. KERNEL_LD uses ld.lld when the distro has ld-is-lld (clang-cross only installs the symlink then), GNU ld.bfd otherwise. Signed-off-by: mark.yang --- meta/classes-recipe/kernel-arch.bbclass | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/meta/classes-recipe/kernel-arch.bbclass b/meta/classes-recipe/kernel-arch.bbclass index 7aea9cd3e8..7e83a09b1c 100644 --- a/meta/classes-recipe/kernel-arch.bbclass +++ b/meta/classes-recipe/kernel-arch.bbclass @@ -76,9 +76,20 @@ KERNEL_CC = "${CCACHE}${HOST_PREFIX}gcc ${HOST_CC_KERNEL_ARCH} \ -ffile-prefix-map=${STAGING_KERNEL_DIR}=${KERNEL_SRC_PATH} \ -ffile-prefix-map=${STAGING_KERNEL_BUILDDIR}=${KERNEL_SRC_PATH} \ " +KERNEL_CC:toolchain-clang = "${CCACHE}${HOST_PREFIX}clang ${HOST_CC_KERNEL_ARCH} \ + ${DEBUG_PREFIX_MAP} \ + -ffile-prefix-map=${STAGING_KERNEL_DIR}=${KERNEL_SRC_PATH} \ + -ffile-prefix-map=${STAGING_KERNEL_BUILDDIR}=${KERNEL_SRC_PATH} \ +" KERNEL_LD = "${HOST_PREFIX}ld.bfd ${HOST_LD_KERNEL_ARCH}" +KERNEL_LD:toolchain-clang = "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-lld', '${HOST_PREFIX}ld.lld', '${HOST_PREFIX}ld.bfd', d)} ${HOST_LD_KERNEL_ARCH}" KERNEL_AR = "${HOST_PREFIX}ar ${HOST_AR_KERNEL_ARCH}" +KERNEL_AR:toolchain-clang = "${HOST_PREFIX}llvm-ar ${HOST_AR_KERNEL_ARCH}" KERNEL_OBJCOPY = "${HOST_PREFIX}objcopy ${HOST_OBJCOPY_KERNEL_ARCH}" # Code in package.py can't handle options on KERNEL_STRIP KERNEL_STRIP = "${HOST_PREFIX}strip" -TOOLCHAIN = "gcc" +# The kernel, out-of-tree modules and make-mod-scripts share one kernel build +# tree and must agree on the toolchain, so switch it with KERNEL_TOOLCHAIN +# rather than setting TOOLCHAIN on individual recipes. +KERNEL_TOOLCHAIN ?= "gcc" +TOOLCHAIN = "${KERNEL_TOOLCHAIN}"