Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

selftests: enable O and KBUILD_OUTPUT

Enable O and KBUILD_OUTPUT for kselftest. User could compile kselftest
to another directory by passing O or KBUILD_OUTPUT. And O is high
priority than KBUILD_OUTPUT.

Signed-off-by: Bamvor Jian Zhang <bamvor.zhangjian@linaro.org>
Signed-off-by: Shuah Khan <shuahkh@osg.samsung.com>

authored by

bamvor.zhangjian@huawei.com and committed by
Shuah Khan
a8ba798b 80d443e8

+122 -75
+27 -9
tools/testing/selftests/Makefile
··· 49 49 override MAKEFLAGS = 50 50 endif 51 51 52 + BUILD := $(O) 53 + ifndef BUILD 54 + BUILD := $(KBUILD_OUTPUT) 55 + endif 56 + ifndef BUILD 57 + BUILD := $(shell pwd) 58 + endif 59 + 60 + export BUILD 52 61 all: 53 - for TARGET in $(TARGETS); do \ 54 - make -C $$TARGET; \ 62 + for TARGET in $(TARGETS); do \ 63 + BUILD_TARGET=$$BUILD/$$TARGET; \ 64 + mkdir $$BUILD_TARGET -p; \ 65 + make OUTPUT=$$BUILD_TARGET -C $$TARGET;\ 55 66 done; 56 67 57 68 run_tests: all 58 69 for TARGET in $(TARGETS); do \ 59 - make -C $$TARGET run_tests; \ 70 + BUILD_TARGET=$$BUILD/$$TARGET; \ 71 + make OUTPUT=$$BUILD_TARGET -C $$TARGET run_tests;\ 60 72 done; 61 73 62 74 hotplug: 63 75 for TARGET in $(TARGETS_HOTPLUG); do \ 64 - make -C $$TARGET; \ 76 + BUILD_TARGET=$$BUILD/$$TARGET; \ 77 + make OUTPUT=$$BUILD_TARGET -C $$TARGET;\ 65 78 done; 66 79 67 80 run_hotplug: hotplug 68 81 for TARGET in $(TARGETS_HOTPLUG); do \ 69 - make -C $$TARGET run_full_test; \ 82 + BUILD_TARGET=$$BUILD/$$TARGET; \ 83 + make OUTPUT=$$BUILD_TARGET -C $$TARGET run_full_test;\ 70 84 done; 71 85 72 86 clean_hotplug: 73 87 for TARGET in $(TARGETS_HOTPLUG); do \ 74 - make -C $$TARGET clean; \ 88 + BUILD_TARGET=$$BUILD/$$TARGET; \ 89 + make OUTPUT=$$BUILD_TARGET -C $$TARGET clean;\ 75 90 done; 76 91 77 92 run_pstore_crash: ··· 101 86 @# Ask all targets to install their files 102 87 mkdir -p $(INSTALL_PATH) 103 88 for TARGET in $(TARGETS); do \ 104 - make -C $$TARGET INSTALL_PATH=$(INSTALL_PATH)/$$TARGET install; \ 89 + BUILD_TARGET=$$BUILD/$$TARGET; \ 90 + make OUTPUT=$$BUILD_TARGET -C $$TARGET INSTALL_PATH=$(INSTALL_PATH)/$$TARGET install; \ 105 91 done; 106 92 107 93 @# Ask all targets to emit their test scripts ··· 111 95 echo "ROOT=\$$PWD" >> $(ALL_SCRIPT) 112 96 113 97 for TARGET in $(TARGETS); do \ 98 + BUILD_TARGET=$$BUILD/$$TARGET; \ 114 99 echo "echo ; echo Running tests in $$TARGET" >> $(ALL_SCRIPT); \ 115 100 echo "echo ========================================" >> $(ALL_SCRIPT); \ 116 101 echo "cd $$TARGET" >> $(ALL_SCRIPT); \ 117 - make -s --no-print-directory -C $$TARGET emit_tests >> $(ALL_SCRIPT); \ 102 + make -s --no-print-directory OUTPUT=$$BUILD_TARGET -C $$TARGET emit_tests >> $(ALL_SCRIPT); \ 118 103 echo "cd \$$ROOT" >> $(ALL_SCRIPT); \ 119 104 done; 120 105 ··· 126 109 127 110 clean: 128 111 for TARGET in $(TARGETS); do \ 129 - make -C $$TARGET clean; \ 112 + BUILD_TARGET=$$BUILD/$$TARGET; \ 113 + make OUTPUT=$$BUILD_TARGET -C $$TARGET clean;\ 130 114 done; 131 115 132 116 .PHONY: install
+7 -6
tools/testing/selftests/exec/Makefile
··· 5 5 # Makefile is a run-time dependency, since it's accessed by the execveat test 6 6 TEST_FILES := Makefile 7 7 8 - EXTRA_CLEAN := subdir.moved execveat.moved xxxxx* 8 + EXTRA_CLEAN := $(OUTPUT)/subdir.moved $(OUTPUT)/execveat.moved $(OUTPUT)/xxxxx* 9 9 10 10 include ../lib.mk 11 11 12 - subdir: 12 + $(OUTPUT)/subdir: 13 13 mkdir -p $@ 14 - script: 14 + $(OUTPUT)/script: 15 15 echo '#!/bin/sh' > $@ 16 16 echo 'exit $$*' >> $@ 17 17 chmod +x $@ 18 - execveat.symlink: execveat 19 - ln -s -f $< $@ 20 - execveat.denatured: execveat 18 + $(OUTPUT)/execveat.symlink: $(OUTPUT)/execveat 19 + cd $(OUTPUT) && ln -s -f $(shell basename $<) $(shell basename $@) 20 + $(OUTPUT)/execveat.denatured: $(OUTPUT)/execveat 21 21 cp $< $@ 22 22 chmod -x $@ 23 +
+1 -1
tools/testing/selftests/ftrace/Makefile
··· 2 2 3 3 TEST_PROGS := ftracetest 4 4 TEST_FILES := test.d 5 - EXTRA_CLEAN := logs/* 5 + EXTRA_CLEAN := $(OUTPUT)/logs/* 6 6 7 7 include ../lib.mk
+16 -5
tools/testing/selftests/futex/Makefile
··· 3 3 TEST_PROGS := run.sh 4 4 5 5 .PHONY: all clean 6 - all: 7 - for DIR in $(SUBDIRS); do $(MAKE) -C $$DIR $@ ; done 8 6 9 7 include ../lib.mk 10 8 9 + all: 10 + for DIR in $(SUBDIRS); do \ 11 + BUILD_TARGET=$$OUTPUT/$$DIR; \ 12 + mkdir $$BUILD_TARGET -p; \ 13 + make OUTPUT=$$BUILD_TARGET -C $$DIR $@;\ 14 + done 15 + 11 16 override define RUN_TESTS 12 - ./run.sh 17 + @if [ `dirname $(OUTPUT)` = $(PWD) ]; then ./run.sh; fi 13 18 endef 14 19 15 20 override define INSTALL_RULE ··· 22 17 install -t $(INSTALL_PATH) $(TEST_PROGS) $(TEST_PROGS_EXTENDED) $(TEST_FILES) 23 18 24 19 @for SUBDIR in $(SUBDIRS); do \ 25 - $(MAKE) -C $$SUBDIR INSTALL_PATH=$(INSTALL_PATH)/$$SUBDIR install; \ 20 + BUILD_TARGET=$$OUTPUT/$$SUBDIR; \ 21 + mkdir $$BUILD_TARGET -p; \ 22 + $(MAKE) OUTPUT=$$BUILD_TARGET -C $$SUBDIR INSTALL_PATH=$(INSTALL_PATH)/$$SUBDIR install; \ 26 23 done; 27 24 endef 28 25 ··· 33 26 endef 34 27 35 28 clean: 36 - for DIR in $(SUBDIRS); do $(MAKE) -C $$DIR $@ ; done 29 + for DIR in $(SUBDIRS); do \ 30 + BUILD_TARGET=$$OUTPUT/$$DIR; \ 31 + mkdir $$BUILD_TARGET -p; \ 32 + make OUTPUT=$$BUILD_TARGET -C $$DIR $@;\ 33 + done
+1 -1
tools/testing/selftests/kcmp/Makefile
··· 2 2 3 3 TEST_GEN_PROGS := kcmp_test 4 4 5 - EXTRA_CLEAN := kcmp-test-file 5 + EXTRA_CLEAN := $(OUTPUT)/kcmp-test-file 6 6 7 7 include ../lib.mk 8 8
+15 -4
tools/testing/selftests/lib.mk
··· 4 4 5 5 define RUN_TESTS 6 6 @for TEST in $(TEST_GEN_PROGS) $(TEST_PROGS); do \ 7 - (./$$TEST && echo "selftests: $$TEST [PASS]") || echo "selftests: $$TEST [FAIL]"; \ 7 + BASENAME_TEST=`basename $$TEST`; \ 8 + cd `dirname $$TEST`; (./$$BASENAME_TEST && echo "selftests: $$BASENAME_TEST [PASS]") || echo "selftests: $$BASENAME_TEST [FAIL]"; cd -;\ 8 9 done; 9 10 endef 10 11 ··· 34 33 35 34 define EMIT_TESTS 36 35 @for TEST in $(TEST_GEN_PROGS) $(TEST_PROGS); do \ 37 - echo "(./$$TEST && echo \"selftests: $$TEST [PASS]\") || echo \"selftests: $$TEST [FAIL]\""; \ 36 + BASENAME_TEST=`basename $$TEST`; \ 37 + echo "(./$$BASENAME_TEST && echo \"selftests: $$BASENAME_TEST [PASS]\") || echo \"selftests: $$BASENAME_TEST [FAIL]\""; \ 38 38 done; 39 39 endef 40 40 41 41 emit_tests: 42 42 $(EMIT_TESTS) 43 43 44 + TEST_GEN_PROGS := $(patsubst %,$(OUTPUT)/%,$(TEST_GEN_PROGS)) 45 + TEST_GEN_FILES := $(patsubst %,$(OUTPUT)/%,$(TEST_GEN_FILES)) 46 + 44 47 all: $(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED) $(TEST_GEN_FILES) 45 48 46 49 clean: 47 50 $(RM) -r $(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED) $(TEST_GEN_FILES) $(EXTRA_CLEAN) 48 51 49 - %: %.c 50 - $(CC) $(CFLAGS) $(LDFLAGS) $(LDLIBS) -o $@ $^ 52 + $(OUTPUT)/%:%.c 53 + $(CC) $(CFLAGS) $(LDFLAGS) $(LDLIBS) $< -o $@ 54 + 55 + $(OUTPUT)/%.o:%.S 56 + $(CC) $(ASFLAGS) -c $< -o $@ 57 + 58 + $(OUTPUT)/%:%.S 59 + $(CC) $(ASFLAGS) $< -o $@ 51 60 52 61 .PHONY: run_tests all clean install emit_tests
+9 -6
tools/testing/selftests/powerpc/Makefile
··· 34 34 all: $(SUB_DIRS) 35 35 36 36 $(SUB_DIRS): 37 - $(MAKE) -k -C $@ all 37 + BUILD_TARGET=$$OUTPUT/$@; mkdir -p $$BUILD_TARGET; $(MAKE) OUTPUT=$$BUILD_TARGET -k -C $@ all 38 38 39 39 include ../lib.mk 40 40 41 41 override define RUN_TESTS 42 42 @for TARGET in $(SUB_DIRS); do \ 43 - $(MAKE) -C $$TARGET run_tests; \ 43 + BUILD_TARGET=$$OUTPUT/$$TARGET; \ 44 + $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET run_tests;\ 44 45 done; 45 46 endef 46 47 47 48 override define INSTALL_RULE 48 49 @for TARGET in $(SUB_DIRS); do \ 49 - $(MAKE) -C $$TARGET install; \ 50 + BUILD_TARGET=$$OUTPUT/$$TARGET; \ 51 + $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET install;\ 50 52 done; 51 53 endef 52 54 53 55 override define EMIT_TESTS 54 56 @for TARGET in $(SUB_DIRS); do \ 55 - $(MAKE) -s -C $$TARGET emit_tests; \ 57 + BUILD_TARGET=$$OUTPUT/$$TARGET; \ 58 + $(MAKE) OUTPUT=$$BUILD_TARGET -s -C $$TARGET emit_tests;\ 56 59 done; 57 60 endef 58 61 59 62 clean: 60 63 @for TARGET in $(SUB_DIRS); do \ 61 - $(MAKE) -C $$TARGET clean; \ 62 - done; 64 + BUILD_TARGET=$$OUTPUT/$$TARGET; \ 65 + $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET clean;\ done; 63 66 rm -f tags 64 67 65 68 tags:
+3 -3
tools/testing/selftests/powerpc/benchmarks/Makefile
··· 6 6 7 7 include ../../lib.mk 8 8 9 - context_switch: ../utils.c 10 - context_switch: CFLAGS += -maltivec -mvsx -mabi=altivec 11 - context_switch: LDLIBS += -lpthread 9 + $(OUTPUT)/context_switch: ../utils.c 10 + $(OUTPUT)/context_switch: CFLAGS += -maltivec -mvsx -mabi=altivec 11 + $(OUTPUT)/context_switch: LDLIBS += -lpthread
+4 -4
tools/testing/selftests/powerpc/copyloops/Makefile
··· 12 12 13 13 include ../../lib.mk 14 14 15 - copyuser_64: CPPFLAGS += -D COPY_LOOP=test___copy_tofrom_user_base 16 - copyuser_power7: CPPFLAGS += -D COPY_LOOP=test___copy_tofrom_user_power7 17 - memcpy_64: CPPFLAGS += -D COPY_LOOP=test_memcpy 18 - memcpy_power7: CPPFLAGS += -D COPY_LOOP=test_memcpy_power7 15 + $(OUTPUT)/copyuser_64: CPPFLAGS += -D COPY_LOOP=test___copy_tofrom_user_base 16 + $(OUTPUT)/copyuser_power7: CPPFLAGS += -D COPY_LOOP=test___copy_tofrom_user_power7 17 + $(OUTPUT)/memcpy_64: CPPFLAGS += -D COPY_LOOP=test_memcpy 18 + $(OUTPUT)/memcpy_power7: CPPFLAGS += -D COPY_LOOP=test_memcpy_power7 19 19 20 20 $(TEST_GEN_PROGS): $(EXTRA_SOURCES)
+1 -1
tools/testing/selftests/powerpc/dscr/Makefile
··· 4 4 5 5 include ../../lib.mk 6 6 7 - dscr_default_test: LDLIBS += -lpthread 7 + $(OUTPUT)/dscr_default_test: LDLIBS += -lpthread 8 8 9 9 $(TEST_GEN_PROGS): ../harness.c
+6 -6
tools/testing/selftests/powerpc/math/Makefile
··· 5 5 $(TEST_GEN_PROGS): ../harness.c 6 6 $(TEST_GEN_PROGS): CFLAGS += -O2 -g -pthread -m64 -maltivec 7 7 8 - fpu_syscall: fpu_asm.S 9 - fpu_preempt: fpu_asm.S 10 - fpu_signal: fpu_asm.S 8 + $(OUTPUT)/pu_syscall: fpu_asm.S 9 + $(OUTPUT)/pu_preempt: fpu_asm.S 10 + $(OUTPUT)/pu_signal: fpu_asm.S 11 11 12 - vmx_syscall: vmx_asm.S 13 - vmx_preempt: vmx_asm.S 14 - vmx_signal: vmx_asm.S 12 + $(OUTPUT)/mx_syscall: vmx_asm.S 13 + $(OUTPUT)/mx_preempt: vmx_asm.S 14 + $(OUTPUT)/mx_signal: vmx_asm.S 15 15 16 16 vsx_preempt: CFLAGS += -mvsx 17 17 vsx_preempt: vsx_asm.S
+3 -3
tools/testing/selftests/powerpc/mm/Makefile
··· 8 8 9 9 $(TEST_GEN_PROGS): ../harness.c 10 10 11 - prot_sao: ../utils.c 11 + $(OUTPUT)/prot_sao: ../utils.c 12 12 13 - tempfile: 14 - dd if=/dev/zero of=tempfile bs=64k count=1 13 + $(OUTPUT)/tempfile: 14 + dd if=/dev/zero of=$@ bs=64k count=1 15 15
+8 -8
tools/testing/selftests/powerpc/pmu/Makefile
··· 11 11 $(TEST_GEN_PROGS): $(EXTRA_SOURCES) 12 12 13 13 # loop.S can only be built 64-bit 14 - count_instructions: loop.S count_instructions.c $(EXTRA_SOURCES) 14 + $(OUTPUT)/count_instructions: loop.S count_instructions.c $(EXTRA_SOURCES) 15 15 $(CC) $(CFLAGS) -m64 -o $@ $^ 16 16 17 - per_event_excludes: ../utils.c 17 + $(OUTPUT)/per_event_excludes: ../utils.c 18 18 19 19 DEFAULT_RUN_TESTS := $(RUN_TESTS) 20 20 override define RUN_TESTS 21 21 $(DEFAULT_RUN_TESTS) 22 - $(MAKE) -C ebb run_tests 22 + TARGET=ebb; BUILD_TARGET=$$OUTPUT/$$TARGET; $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET run_tests 23 23 endef 24 24 25 25 DEFAULT_EMIT_TESTS := $(EMIT_TESTS) 26 26 override define EMIT_TESTS 27 27 $(DEFAULT_EMIT_TESTS) 28 - $(MAKE) -s -C ebb emit_tests 28 + TARGET=ebb; BUILD_TARGET=$$OUTPUT/$$TARGET; $(MAKE) OUTPUT=$$BUILD_TARGET -s -C $$TARGET emit_tests 29 29 endef 30 30 31 31 DEFAULT_INSTALL_RULE := $(INSTALL_RULE) 32 32 override define INSTALL_RULE 33 33 $(DEFAULT_INSTALL_RULE) 34 - $(MAKE) -C ebb install 34 + TARGET=ebb; BUILD_TARGET=$$OUTPUT/$$TARGET; $(MAKE) OUTPUT=$$BUILD_TARGET: -C $$TARGET install 35 35 endef 36 36 37 37 clean: 38 - $(RM) $(TEST_PROGS) loop.o 39 - $(MAKE) -C ebb clean 38 + $(RM) $(TEST_GEN_PROGS) $(OUTPUT)/loop.o 39 + TARGET=ebb; BUILD_TARGET=$$OUTPUT/$$TARGET; $(MAKE) OUTPUT=$$BUILD_TARGET: -C $$TARGET clean 40 40 41 41 ebb: 42 - $(MAKE) -k -C $@ all 42 + TARGET=$@; BUILD_TARGET=$$OUTPUT/$$TARGET; mkdir -p $$BUILD_TARGET; $(MAKE) OUTPUT=$$BUILD_TARGET -k -C $$TARGET all 43 43 44 44 .PHONY: all run_tests clean ebb
+2 -2
tools/testing/selftests/powerpc/pmu/ebb/Makefile
··· 21 21 $(TEST_GEN_PROGS): ../../harness.c ../../utils.c ../event.c ../lib.c \ 22 22 ebb.c ebb_handler.S trace.c busy_loop.S 23 23 24 - instruction_count_test: ../loop.S 24 + $(OUTPUT)/instruction_count_test: ../loop.S 25 25 26 - lost_exception_test: ../lib.c 26 + $(OUTPUT)/lost_exception_test: ../lib.c
+4 -4
tools/testing/selftests/powerpc/switch_endian/Makefile
··· 2 2 3 3 ASFLAGS += -O2 -Wall -g -nostdlib -m64 4 4 5 - EXTRA_CLEAN = *.o check-reversed.S 5 + EXTRA_CLEAN = $(OUTPUT)/*.o $(OUTPUT)/check-reversed.S 6 6 7 7 include ../../lib.mk 8 8 9 - switch_endian_test: check-reversed.S 9 + $(OUTPUT)/switch_endian_test: $(OUTPUT)/check-reversed.S 10 10 11 - check-reversed.o: check.o 11 + $(OUTPUT)/check-reversed.o: $(OUTPUT)/check.o 12 12 $(CROSS_COMPILE)objcopy -j .text --reverse-bytes=4 -O binary $< $@ 13 13 14 - check-reversed.S: check-reversed.o 14 + $(OUTPUT)/check-reversed.S: $(OUTPUT)/check-reversed.o 15 15 hexdump -v -e '/1 ".byte 0x%02X\n"' $< > $@
+3 -3
tools/testing/selftests/powerpc/tm/Makefile
··· 10 10 11 11 CFLAGS += -mhtm 12 12 13 - tm-syscall: tm-syscall-asm.S 14 - tm-syscall: CFLAGS += -I../../../../../usr/include 15 - tm-tmspr: CFLAGS += -pthread 13 + $(OUTPUT)/tm-syscall: tm-syscall-asm.S 14 + $(OUTPUT)/tm-syscall: CFLAGS += -I../../../../../usr/include 15 + $(OUTPUT)/tm-tmspr: CFLAGS += -pthread 16 16 17 17 $(SIGNAL_CONTEXT_CHK_TESTS): tm-signal.S 18 18 $(SIGNAL_CONTEXT_CHK_TESTS): CFLAGS += -mhtm -m64 -mvsx
+2 -2
tools/testing/selftests/vm/Makefile
··· 17 17 18 18 include ../lib.mk 19 19 20 - userfaultfd: LDLIBS += -lpthread ../../../../usr/include/linux/kernel.h 21 - mlock-random-test: LDLIBS += -lcap 20 + $(OUTPUT)/userfaultfd: LDLIBS += -lpthread ../../../../usr/include/linux/kernel.h 21 + $(OUTPUT)/mlock-random-test: LDLIBS += -lcap 22 22 23 23 ../../../../usr/include/linux/kernel.h: 24 24 make -C ../../../.. headers_install
+10 -7
tools/testing/selftests/x86/Makefile
··· 17 17 BINARIES_32 := $(TARGETS_C_32BIT_ALL:%=%_32) 18 18 BINARIES_64 := $(TARGETS_C_64BIT_ALL:%=%_64) 19 19 20 + BINARIES_32 := $(patsubst %,$(OUTPUT)/%,$(BINARIES_32)) 21 + BINARIES_64 := $(patsubst %,$(OUTPUT)/%,$(BINARIES_64)) 22 + 20 23 CFLAGS := -O2 -g -std=gnu99 -pthread -Wall 21 24 22 25 UNAME_M := $(shell uname -m) ··· 43 40 clean: 44 41 $(RM) $(BINARIES_32) $(BINARIES_64) 45 42 46 - $(TARGETS_C_32BIT_ALL:%=%_32): %_32: %.c 43 + $(BINARIES_32): $(OUTPUT)/%_32: %.c 47 44 $(CC) -m32 -o $@ $(CFLAGS) $(EXTRA_CFLAGS) $^ -lrt -ldl -lm 48 45 49 - $(TARGETS_C_64BIT_ALL:%=%_64): %_64: %.c 46 + $(BINARIES_64): $(OUTPUT)/%_64: %.c 50 47 $(CC) -m64 -o $@ $(CFLAGS) $(EXTRA_CFLAGS) $^ -lrt -ldl 51 48 52 49 # x86_64 users should be encouraged to install 32-bit libraries ··· 68 65 endif 69 66 70 67 # Some tests have additional dependencies. 71 - sysret_ss_attrs_64: thunks.S 72 - ptrace_syscall_32: raw_syscall_helper_32.S 73 - test_syscall_vdso_32: thunks_32.S 68 + $(OUTPUT)/sysret_ss_attrs_64: thunks.S 69 + $(OUTPUT)/ptrace_syscall_32: raw_syscall_helper_32.S 70 + $(OUTPUT)/test_syscall_vdso_32: thunks_32.S 74 71 75 72 # check_initial_reg_state is special: it needs a custom entry, and it 76 73 # needs to be static so that its interpreter doesn't destroy its initial 77 74 # state. 78 - check_initial_reg_state_32: CFLAGS += -Wl,-ereal_start -static 79 - check_initial_reg_state_64: CFLAGS += -Wl,-ereal_start -static 75 + $(OUTPUT)/check_initial_reg_state_32: CFLAGS += -Wl,-ereal_start -static 76 + $(OUTPUT)/check_initial_reg_state_64: CFLAGS += -Wl,-ereal_start -static