The current logic prepends $(OUTPUT) only to the first member of $(TEST_PROGS). Use $(addprefix) to prepend it to each member.
Also, $(OUTPUT) is assumed to end with a / almost everywhere else in the kernel, make this the case for kselftest as well.
Fixes: 1a940687e424 ("selftests: lib.mk: copy test scripts and test files for make O=dir run") Signed-off-by: Ilya Leoshkevich iii@linux.ibm.com ---
v1->v2: - Append / to $(OUTPUT). - Use $(addprefix) instead of $(foreach).
tools/testing/selftests/Makefile | 16 ++++++++-------- tools/testing/selftests/lib.mk | 3 ++- 2 files changed, 10 insertions(+), 9 deletions(-)
diff --git a/tools/testing/selftests/Makefile b/tools/testing/selftests/Makefile index c3feccb99ff5..49bcd066907e 100644 --- a/tools/testing/selftests/Makefile +++ b/tools/testing/selftests/Makefile @@ -136,31 +136,31 @@ all: khdr @for TARGET in $(TARGETS); do \ BUILD_TARGET=$$BUILD/$$TARGET; \ mkdir $$BUILD_TARGET -p; \ - $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET;\ + $(MAKE) OUTPUT=$$BUILD_TARGET/ -C $$TARGET;\ done;
run_tests: all @for TARGET in $(TARGETS); do \ BUILD_TARGET=$$BUILD/$$TARGET; \ - $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET run_tests;\ + $(MAKE) OUTPUT=$$BUILD_TARGET/ -C $$TARGET run_tests;\ done;
hotplug: @for TARGET in $(TARGETS_HOTPLUG); do \ BUILD_TARGET=$$BUILD/$$TARGET; \ - $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET;\ + $(MAKE) OUTPUT=$$BUILD_TARGET/ -C $$TARGET;\ done;
run_hotplug: hotplug @for TARGET in $(TARGETS_HOTPLUG); do \ BUILD_TARGET=$$BUILD/$$TARGET; \ - $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET run_full_test;\ + $(MAKE) OUTPUT=$$BUILD_TARGET/ -C $$TARGET run_full_test;\ done;
clean_hotplug: @for TARGET in $(TARGETS_HOTPLUG); do \ BUILD_TARGET=$$BUILD/$$TARGET; \ - $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET clean;\ + $(MAKE) OUTPUT=$$BUILD_TARGET/ -C $$TARGET clean;\ done;
run_pstore_crash: @@ -184,7 +184,7 @@ ifdef INSTALL_PATH install -m 744 kselftest/prefix.pl $(INSTALL_PATH)/kselftest/ @for TARGET in $(TARGETS); do \ BUILD_TARGET=$$BUILD/$$TARGET; \ - $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET INSTALL_PATH=$(INSTALL_PATH)/$$TARGET install; \ + $(MAKE) OUTPUT=$$BUILD_TARGET/ -C $$TARGET INSTALL_PATH=$(INSTALL_PATH)/$$TARGET install; \ done;
@# Ask all targets to emit their test scripts @@ -203,7 +203,7 @@ ifdef INSTALL_PATH echo "[ -w /dev/kmsg ] && echo "kselftest: Running tests in $$TARGET" >> /dev/kmsg" >> $(ALL_SCRIPT); \ echo "cd $$TARGET" >> $(ALL_SCRIPT); \ echo -n "run_many" >> $(ALL_SCRIPT); \ - $(MAKE) -s --no-print-directory OUTPUT=$$BUILD_TARGET -C $$TARGET emit_tests >> $(ALL_SCRIPT); \ + $(MAKE) -s --no-print-directory OUTPUT=$$BUILD_TARGET/ -C $$TARGET emit_tests >> $(ALL_SCRIPT); \ echo "" >> $(ALL_SCRIPT); \ echo "cd $$ROOT" >> $(ALL_SCRIPT); \ done; @@ -216,7 +216,7 @@ endif clean: @for TARGET in $(TARGETS); do \ BUILD_TARGET=$$BUILD/$$TARGET; \ - $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET clean;\ + $(MAKE) OUTPUT=$$BUILD_TARGET/ -C $$TARGET clean;\ done;
.PHONY: khdr all run_tests hotplug run_hotplug clean_hotplug run_pstore_crash install clean diff --git a/tools/testing/selftests/lib.mk b/tools/testing/selftests/lib.mk index 1c8a1963d03f..27a97a1b4e9e 100644 --- a/tools/testing/selftests/lib.mk +++ b/tools/testing/selftests/lib.mk @@ -75,7 +75,8 @@ ifdef building_out_of_srctree @rsync -aq $(TEST_PROGS) $(TEST_PROGS_EXTENDED) $(TEST_FILES) $(OUTPUT) fi @if [ "X$(TEST_PROGS)" != "X" ]; then - $(call RUN_TESTS, $(TEST_GEN_PROGS) $(TEST_CUSTOM_PROGS) $(OUTPUT)/$(TEST_PROGS)) + $(call RUN_TESTS, $(TEST_GEN_PROGS) $(TEST_CUSTOM_PROGS) \ + $(addprefix $(OUTPUT),$(TEST_PROGS))) else $(call RUN_TESTS, $(TEST_GEN_PROGS) $(TEST_CUSTOM_PROGS)) fi
On 9/10/19 6:18 AM, Ilya Leoshkevich wrote:
The current logic prepends $(OUTPUT) only to the first member of $(TEST_PROGS). Use $(addprefix) to prepend it to each member.
Can you please send me the error messages you are seeing so I can see what is being fixed.
Also, $(OUTPUT) is assumed to end with a / almost everywhere else in the kernel, make this the case for kselftest as well.
Why are these two changes in one patch? Does this fix 1a940687e424? If so how?
Fixes: 1a940687e424 ("selftests: lib.mk: copy test scripts and test files for make O=dir run") Signed-off-by: Ilya Leoshkevich iii@linux.ibm.com
thanks, -- shuah
Am 16.09.2019 um 18:18 schrieb shuah shuah@kernel.org:
On 9/10/19 6:18 AM, Ilya Leoshkevich wrote:
The current logic prepends $(OUTPUT) only to the first member of $(TEST_PROGS). Use $(addprefix) to prepend it to each member.
Can you please send me the error messages you are seeing so I can see what is being fixed.
linux# make kselftest TARGETS=bpf O=/mnt/linux-build
Without the patch: # selftests: bpf: test_libbpf.sh # ./test_libbpf.sh: line 23: ./test_libbpf_open: No such file or directory # test_libbpf: failed at file test_l4lb.o # selftests: test_libbpf [FAILED]
With the patch: # selftests: bpf: test_libbpf.sh # selftests: test_libbpf [PASS]
What happens is that run_one() does
cd `dirname $TEST`
dirname is . without the patch, so the test cannot access the files generated in $(OUTPUT).
Also, $(OUTPUT) is assumed to end with a / almost everywhere else in the kernel, make this the case for kselftest as well.
Why are these two changes in one patch? Does this fix 1a940687e424? If so how?
I will split the patch in two and resend. Adding / does not fix anything, it just makes the code more uniform w.r.t. the rest of the tree.
linux-kselftest-mirror@lists.linaro.org