On 2025-04-30 03:47 PM, David Matlack wrote: > Use $(SRCARCH) in Makefile.kvm instead of $(ARCH). The former may have > been set on the command line and thus make will ignore the variable > assignment to convert x86_64 to x86. > > Introduce $(SRCARCH) rather than just reverting commit 9af04539d474 > ("KVM: selftests: Override ARCH for x86_64 instead of using ARCH_DIR") > to keep KVM selftests consistent with the top-level kernel Makefile, > which uses $(SRCARCH) for the exact same purpose. > > While here, drop the comment about the top-level selftests allowing > ARCH=x86_64. The kernel itself allows/expects ARCH=x86_64 so it's > reasonable to expect the KVM selftests to handle it as well. > > Fixes: 9af04539d474 ("KVM: selftests: Override ARCH for x86_64 instead of using ARCH_DIR") > Signed-off-by: David Matlack <dmatlack@xxxxxxxxxx> If this approach seems reasonable I can also send another patch to share the definitions of $(ARCH) and $(SRCARCH) with the top-level Makefile so that we don't need any custom Makefile code in KVM selftests for this. e.g. From: David Matlack <dmatlack@xxxxxxxxxx> Date: Thu, 1 May 2025 10:30:26 -0700 Subject: [PATCH v2] kbuild: Share $(ARCH) and $(SRCARCH) with tools/ Pull out the definitions for $(ARCH), $(SRCARCH), and $(SUBARCH) into a scripts/arch.include and use it to reduce duplication in Makefiles under tools/. Signed-off-by: David Matlack <dmatlack@xxxxxxxxxx> --- Makefile | 28 +++-------------------- scripts/{subarch.include => arch.include} | 24 +++++++++++++++++++ tools/include/nolibc/Makefile | 5 +--- tools/testing/selftests/Makefile | 3 +-- tools/testing/selftests/kvm/Makefile | 8 +------ tools/testing/selftests/nolibc/Makefile | 5 +--- 6 files changed, 31 insertions(+), 42 deletions(-) rename scripts/{subarch.include => arch.include} (61%) diff --git a/Makefile b/Makefile index c91afd55099e..7a10252ddbe1 100644 --- a/Makefile +++ b/Makefile @@ -380,8 +380,6 @@ KERNELRELEASE = $(call read-file, $(objtree)/include/config/kernel.release) KERNELVERSION = $(VERSION)$(if $(PATCHLEVEL),.$(PATCHLEVEL)$(if $(SUBLEVEL),.$(SUBLEVEL)))$(EXTRAVERSION) export VERSION PATCHLEVEL SUBLEVEL KERNELRELEASE KERNELVERSION -include $(srctree)/scripts/subarch.include - # Cross compiling and selecting different set of gcc/bin-utils # --------------------------------------------------------------------------- # @@ -400,32 +398,12 @@ include $(srctree)/scripts/subarch.include # Alternatively CROSS_COMPILE can be set in the environment. # Default value for CROSS_COMPILE is not to prefix executables # Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile -ARCH ?= $(SUBARCH) + +# Import definitions for SUBARCH, ARCH, and SRCARCH. +include $(srctree)/scripts/arch.include # Architecture as present in compile.h UTS_MACHINE := $(ARCH) -SRCARCH := $(ARCH) - -# Additional ARCH settings for x86 -ifeq ($(ARCH),i386) - SRCARCH := x86 -endif -ifeq ($(ARCH),x86_64) - SRCARCH := x86 -endif - -# Additional ARCH settings for sparc -ifeq ($(ARCH),sparc32) - SRCARCH := sparc -endif -ifeq ($(ARCH),sparc64) - SRCARCH := sparc -endif - -# Additional ARCH settings for parisc -ifeq ($(ARCH),parisc64) - SRCARCH := parisc -endif export cross_compiling := ifneq ($(SRCARCH),$(SUBARCH)) diff --git a/scripts/subarch.include b/scripts/arch.include similarity index 61% rename from scripts/subarch.include rename to scripts/arch.include index c4592d59d69b..545f731140df 100644 --- a/scripts/subarch.include +++ b/scripts/arch.include @@ -11,3 +11,27 @@ SUBARCH := $(shell uname -m | sed -e s/i.86/x86/ -e s/x86_64/x86/ \ -e s/ppc.*/powerpc/ -e s/mips.*/mips/ \ -e s/sh[234].*/sh/ -e s/aarch64.*/arm64/ \ -e s/riscv.*/riscv/ -e s/loongarch.*/loongarch/) + +ARCH ?= $(SUBARCH) +SRCARCH := $(ARCH) + +# Additional ARCH settings for x86 +ifeq ($(ARCH),i386) + SRCARCH := x86 +endif +ifeq ($(ARCH),x86_64) + SRCARCH := x86 +endif + +# Additional ARCH settings for sparc +ifeq ($(ARCH),sparc32) + SRCARCH := sparc +endif +ifeq ($(ARCH),sparc64) + SRCARCH := sparc +endif + +# Additional ARCH settings for parisc +ifeq ($(ARCH),parisc64) + SRCARCH := parisc +endif diff --git a/tools/include/nolibc/Makefile b/tools/include/nolibc/Makefile index f9702877ac21..9a78fe77205f 100644 --- a/tools/include/nolibc/Makefile +++ b/tools/include/nolibc/Makefile @@ -8,10 +8,7 @@ srctree := $(patsubst %/tools/include/,%,$(dir $(CURDIR))) endif # when run as make -C tools/ nolibc_<foo> the arch is not set -ifeq ($(ARCH),) -include $(srctree)/scripts/subarch.include -ARCH = $(SUBARCH) -endif +include $(srctree)/scripts/arch.include # OUTPUT is only set when run from the main makefile, otherwise # it defaults to this nolibc directory. diff --git a/tools/testing/selftests/Makefile b/tools/testing/selftests/Makefile index c77c8c8e3d9b..827ce9bf3e50 100644 --- a/tools/testing/selftests/Makefile +++ b/tools/testing/selftests/Makefile @@ -190,8 +190,7 @@ else endif # Prepare for headers install -include $(top_srcdir)/scripts/subarch.include -ARCH ?= $(SUBARCH) +include $(top_srcdir)/scripts/arch.include export BUILD export KHDR_INCLUDES diff --git a/tools/testing/selftests/kvm/Makefile b/tools/testing/selftests/kvm/Makefile index 02bf061c51f8..503530d671e9 100644 --- a/tools/testing/selftests/kvm/Makefile +++ b/tools/testing/selftests/kvm/Makefile @@ -1,13 +1,7 @@ # SPDX-License-Identifier: GPL-2.0-only top_srcdir = ../../../.. -include $(top_srcdir)/scripts/subarch.include -ARCH ?= $(SUBARCH) -SRCARCH := $(ARCH) - -ifeq ($(ARCH),x86_64) - SRCARCH := x86 -endif +include $(top_srcdir)/scripts/arch.include ifeq ($(SRCARCH),$(filter $(SRCARCH),arm64 s390 riscv x86)) include Makefile.kvm diff --git a/tools/testing/selftests/nolibc/Makefile b/tools/testing/selftests/nolibc/Makefile index 58bcbbd029bc..13555d418c78 100644 --- a/tools/testing/selftests/nolibc/Makefile +++ b/tools/testing/selftests/nolibc/Makefile @@ -18,10 +18,7 @@ else objtree ?= $(srctree) endif -ifeq ($(ARCH),) -include $(srctree)/scripts/subarch.include -ARCH = $(SUBARCH) -endif +include $(srctree)/scripts/arch.include cc-option = $(call __cc-option, $(CC),$(CLANG_CROSS_FLAGS),$(1),$(2)) base-commit: 45eb29140e68ffe8e93a5471006858a018480a45 prerequisite-patch-id: 3bae97c9e1093148763235f47a84fa040b512d04 -- 2.49.0.906.g1f30a19c02-goog