mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
synced 2025-08-31 22:23:05 +00:00

The sources for the powerpc selftests are arranged into sub-directories. However when the tests are built and installed, the sub-directories are squashed, losing the structure. For example, with the current code the result of installing the selftests is: $ tree tools/testing/selftests/kselftest_install tools/testing/selftests/kselftest_install ├── kselftest │ ├── ktap_helpers.sh │ ├── module.sh │ ├── prefix.pl │ └── runner.sh ├── kselftest-list.txt ├── powerpc │ ├── alignment_handler │ ├── attr_test │ ├── back_to_back_ebbs_test │ ├── bad_accesses │ ├── bhrb_filter_map_test │ ├── bhrb_no_crash_wo_pmu_test │ ├── blacklisted_events_test │ ├── cache_shape │ ├── close_clears_pmcc_test │ ├── context_switch │ ├── copy_first_unaligned ... │ ├── settings ... │ └── wild_bctr └── run_kselftest.sh All the powerpc tests are squashed into the single powerpc directory. In particular, note that there is a single `settings` file, even though there are multiple settings files in the powerpc selftest sources. One of the settings files ends up installed, depending on install order, even if they have different contents. Similarly if there were two tests with the same name in different sub-directories they would clobber each other. Fix it by replicating the directory structure of the source tree into the install directory. The result being for example: $ tree tools/testing/selftests/kselftest_install tools/testing/selftests/kselftest_install ├── kselftest │ ├── ktap_helpers.sh │ ├── module.sh │ ├── prefix.pl │ └── runner.sh ├── kselftest-list.txt ├── powerpc │ ├── alignment │ │ ├── alignment_handler │ │ └── copy_first_unaligned │ ├── benchmarks │ │ ├── context_switch │ │ ├── exec_target │ │ ├── fork │ │ ├── futex_bench │ │ ├── gettimeofday │ │ ├── mmap_bench │ │ ├── null_syscall │ │ └── settings ... │ ├── eeh │ │ ├── eeh-basic.sh │ │ ├── eeh-functions.sh │ │ └── settings ... │ └── vphn │ └── test-vphn └── run_kselftest.sh Note multiple settings files in different sub-directories. This change also has the effect of changing the names of the tests from the point of view of the kselftest runner. Before the tests are named eg: powerpc:copy_first_unaligned powerpc:cache_shape powerpc:reg_access_test After, the test collection names include the sub-directory: powerpc/alignment:copy_first_unaligned powerpc/cache_shape:cache_shape powerpc/pmu/ebb:reg_access_test That means whereas previously all powerpc tests could be run with: $ ./run_kselftest.sh -c powerpc After the change it's necessary to pass a regex that matches all powerpc entries, eg: $ ./run_kselftest.sh -c "powerpc.*" The latter form also works before and after the change. Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://msgid.link/20240422133453.1793988-2-mpe@ellerman.id.au
71 lines
1.9 KiB
Makefile
71 lines
1.9 KiB
Makefile
# SPDX-License-Identifier: GPL-2.0
|
|
noarg:
|
|
$(MAKE) -C ../
|
|
|
|
TEST_GEN_PROGS := count_instructions count_stcx_fail l3_bank_test per_event_excludes
|
|
EXTRA_SOURCES := ../harness.c event.c lib.c ../utils.c
|
|
|
|
top_srcdir = ../../../../..
|
|
include ../../lib.mk
|
|
include ../flags.mk
|
|
|
|
SUB_DIRS := ebb sampling_tests event_code_tests
|
|
|
|
all: $(TEST_GEN_PROGS) $(SUB_DIRS)
|
|
|
|
$(TEST_GEN_PROGS): $(EXTRA_SOURCES)
|
|
|
|
# loop.S can only be built 64-bit
|
|
$(OUTPUT)/count_instructions: CFLAGS += -m64
|
|
$(OUTPUT)/count_instructions: loop.S count_instructions.c $(EXTRA_SOURCES)
|
|
|
|
$(OUTPUT)/count_stcx_fail: CFLAGS += -m64
|
|
$(OUTPUT)/count_stcx_fail: loop.S $(EXTRA_SOURCES)
|
|
|
|
|
|
$(OUTPUT)/per_event_excludes: ../utils.c
|
|
|
|
$(SUB_DIRS):
|
|
BUILD_TARGET=$(OUTPUT)/$@; mkdir -p $$BUILD_TARGET; $(MAKE) OUTPUT=$$BUILD_TARGET -k -C $@ all
|
|
|
|
DEFAULT_RUN_TESTS := $(RUN_TESTS)
|
|
override define RUN_TESTS
|
|
$(DEFAULT_RUN_TESTS)
|
|
+@for TARGET in $(SUB_DIRS); do \
|
|
BUILD_TARGET=$(OUTPUT)/$$TARGET; \
|
|
$(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET run_tests; \
|
|
done;
|
|
endef
|
|
|
|
emit_tests:
|
|
for TEST in $(TEST_GEN_PROGS); do \
|
|
BASENAME_TEST=`basename $$TEST`; \
|
|
echo "$(COLLECTION):$$BASENAME_TEST"; \
|
|
done
|
|
+@for TARGET in $(SUB_DIRS); do \
|
|
BUILD_TARGET=$(OUTPUT)/$$TARGET; \
|
|
$(MAKE) OUTPUT=$$BUILD_TARGET COLLECTION=$(COLLECTION)/$$TARGET -s -C $$TARGET emit_tests; \
|
|
done;
|
|
|
|
DEFAULT_INSTALL_RULE := $(INSTALL_RULE)
|
|
override define INSTALL_RULE
|
|
$(DEFAULT_INSTALL_RULE)
|
|
+@for TARGET in $(SUB_DIRS); do \
|
|
BUILD_TARGET=$(OUTPUT)/$$TARGET; \
|
|
$(MAKE) OUTPUT=$$BUILD_TARGET INSTALL_PATH=$$INSTALL_PATH/$$TARGET -C $$TARGET install; \
|
|
done;
|
|
endef
|
|
|
|
DEFAULT_CLEAN := $(CLEAN)
|
|
override define CLEAN
|
|
$(DEFAULT_CLEAN)
|
|
$(RM) $(TEST_GEN_PROGS) $(OUTPUT)/loop.o
|
|
+@for TARGET in $(SUB_DIRS); do \
|
|
BUILD_TARGET=$(OUTPUT)/$$TARGET; \
|
|
$(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET clean; \
|
|
done;
|
|
endef
|
|
|
|
|
|
.PHONY: all run_tests ebb sampling_tests event_code_tests emit_tests
|