mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-16 17:12:50 -04:00
Several selftests Makefiles (e.g. prctl, breakpoints, etc) attempt to normalize the ARCH variable by converting x86_64 and i.86 to x86. However, it uses the conditional assignment operator '?='. When ARCH is passed as a command-line argument (e.g., during an rpmbuild process), the '?=' operator ignores the shell command and the sed transformation. This leads to an incorrect ARCH value being used, which causes build failures # make -C tools/testing/selftests TARGETS=prctl ARCH=x86_64 make: Entering directory '/build/tools/testing/selftests' make[1]: Entering directory '/build/tools/testing/selftests/prctl' make[1]: *** No targets. Stop. make[1]: Leaving directory '/build/tools/testing/selftests/prctl' make: *** [Makefile:197: all] Error 2 Change the assignment to use 'override' and ':=' to ensure the normalization logic is applied regardless of how the ARCH variable was initially defined. Link: https://lkml.kernel.org/r/20260309205145.572778-1-aleksey.oladko@virtuozzo.com Signed-off-by: Aleksei Oladko <aleksey.oladko@virtuozzo.com> Cc: Shuah Khan <shuah@kernel.org> Cc: Wei Yang <richard.weiyang@gmail.com> Cc: Bala-Vignesh-Reddy <reddybalavignesh9979@gmail.com> Cc: Chelsy Ratnawat <chelsyratnawat2001@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
51 lines
1.1 KiB
Makefile
51 lines
1.1 KiB
Makefile
# SPDX-License-Identifier: GPL-2.0
|
|
ARCH ?= $(shell uname -m 2>/dev/null || echo not)
|
|
override ARCH := $(shell echo $(ARCH) | sed -e s/x86_64/x86/)
|
|
|
|
ifneq ($(ARCH),sparc64)
|
|
nothing:
|
|
.PHONY: all clean run_tests install
|
|
.SILENT:
|
|
else
|
|
|
|
SUBDIRS := drivers
|
|
|
|
TEST_PROGS := run.sh
|
|
|
|
|
|
.PHONY: all clean
|
|
|
|
include ../lib.mk
|
|
|
|
all:
|
|
@for DIR in $(SUBDIRS); do \
|
|
BUILD_TARGET=$(OUTPUT)/$$DIR; \
|
|
mkdir $$BUILD_TARGET -p; \
|
|
make OUTPUT=$$BUILD_TARGET -C $$DIR $@;\
|
|
#SUBDIR test prog name should be in the form: SUBDIR_test.sh \
|
|
TEST=$$DIR"_test.sh"; \
|
|
if [ -e $$DIR/$$TEST ]; then \
|
|
rsync -a $$DIR/$$TEST $$BUILD_TARGET/; \
|
|
fi \
|
|
done
|
|
|
|
override define INSTALL_RULE
|
|
mkdir -p $(INSTALL_PATH)
|
|
install -t $(INSTALL_PATH) $(TEST_PROGS) $(TEST_PROGS_EXTENDED) $(TEST_FILES)
|
|
|
|
@for SUBDIR in $(SUBDIRS); do \
|
|
BUILD_TARGET=$(OUTPUT)/$$SUBDIR; \
|
|
mkdir $$BUILD_TARGET -p; \
|
|
$(MAKE) OUTPUT=$$BUILD_TARGET -C $$SUBDIR INSTALL_PATH=$(INSTALL_PATH)/$$SUBDIR install; \
|
|
done;
|
|
endef
|
|
|
|
override define CLEAN
|
|
@for DIR in $(SUBDIRS); do \
|
|
BUILD_TARGET=$(OUTPUT)/$$DIR; \
|
|
mkdir $$BUILD_TARGET -p; \
|
|
make OUTPUT=$$BUILD_TARGET -C $$DIR $@;\
|
|
done
|
|
endef
|
|
endif
|