]> Gentwo Git Trees - linux/.git/commitdiff
kbuild: allow architectures to override CC_CAN_LINK
authorThomas Weißschuh <thomas.weissschuh@linutronix.de>
Fri, 14 Nov 2025 13:43:58 +0000 (14:43 +0100)
committerNicolas Schier <nsc@kernel.org>
Fri, 14 Nov 2025 19:20:35 +0000 (20:20 +0100)
The generic test for CC_CAN_LINK assumes that all architectures use -m32
and -m64 to switch between 32-bit and 64-bit compilation. This is overly
simplistic. Architectures may use other flags (-mabi, -m31, etc.) or may
also require byte order handling (-mlittle-endian, -EL). Expressing all
of the different possibilities will be very complicated and brittle.
Instead allow architectures to supply their own logic which will be
easy to understand and evolve.

Both the boolean ARCH_HAS_CC_CAN_LINK and the string ARCH_USERFLAGS need
to be implemented as kconfig does not allow the reuse of string options.

Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de>
Reviewed-by: Nicolas Schier <nsc@kernel.org>
Reviewed-by: Nathan Chancellor <nathan@kernel.org>
Link: https://patch.msgid.link/20251114-kbuild-userprogs-bits-v3-3-4dee0d74d439@linutronix.de
Signed-off-by: Nicolas Schier <nsc@kernel.org>
Makefile
init/Kconfig

index 96ca0f17d158a0a2e0c800f7f988eac8a0cfa796..63f16b16066801b8f03f69b929aa167baf36d005 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1137,8 +1137,17 @@ ifneq ($(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS),)
 LDFLAGS_vmlinux        += --emit-relocs --discard-none
 endif
 
-# Align the bit size of userspace programs with the kernel
-USERFLAGS_FROM_KERNEL := -m32 -m64 --target=%
+# Align the architecture of userspace programs with the kernel
+USERFLAGS_FROM_KERNEL := --target=%
+
+ifdef CONFIG_ARCH_USERFLAGS
+KBUILD_USERCFLAGS += $(CONFIG_ARCH_USERFLAGS)
+KBUILD_USERLDFLAGS += $(CONFIG_ARCH_USERFLAGS)
+else
+# If not overridden also inherit the bit size
+USERFLAGS_FROM_KERNEL += -m32 -m64
+endif
+
 KBUILD_USERCFLAGS  += $(filter $(USERFLAGS_FROM_KERNEL), $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS))
 KBUILD_USERLDFLAGS += $(filter $(USERFLAGS_FROM_KERNEL), $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS))
 
index 7b722e714d5c5a0580467914b226dc0700ec0797..4a2ae3cfbf26525a60936d9b29a74ef4319ba3a5 100644 (file)
@@ -82,8 +82,12 @@ config RUSTC_LLVM_VERSION
        int
        default $(rustc-llvm-version)
 
+config ARCH_HAS_CC_CAN_LINK
+       bool
+
 config CC_CAN_LINK
        bool
+       default ARCH_CC_CAN_LINK if ARCH_HAS_CC_CAN_LINK
        default $(cc_can_link_user,$(m64-flag)) if 64BIT
        default $(cc_can_link_user,$(m32-flag))