Unverified Commit deab487e authored by Thomas Weißschuh's avatar Thomas Weißschuh Committed by Nicolas Schier
Browse files

kbuild: allow architectures to override CC_CAN_LINK



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: default avatarThomas Weißschuh <thomas.weissschuh@linutronix.de>
Reviewed-by: default avatarNicolas Schier <nsc@kernel.org>
Reviewed-by: default avatarNathan Chancellor <nathan@kernel.org>
Link: https://patch.msgid.link/20251114-kbuild-userprogs-bits-v3-3-4dee0d74d439@linutronix.de


Signed-off-by: default avatarNicolas Schier <nsc@kernel.org>
parent 80623f2c
Loading
Loading
Loading
Loading
+11 −2
Original line number Diff line number Diff line
@@ -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))

+4 −0
Original line number Diff line number Diff line
@@ -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))