Mailing List Archive

[PATCH v2 6/6] selftests: enable O and KBUILD_OUTPUT
From: Bamvor Jian Zhang <bamvor.zhangjian@linaro.org>

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>
---
tools/testing/selftests/Makefile | 36 ++++++++++++++++------
tools/testing/selftests/exec/Makefile | 13 ++++----
tools/testing/selftests/ftrace/Makefile | 2 +-
tools/testing/selftests/futex/Makefile | 21 ++++++++++---
tools/testing/selftests/kcmp/Makefile | 2 +-
tools/testing/selftests/lib.mk | 19 +++++++++---
tools/testing/selftests/powerpc/Makefile | 15 +++++----
.../testing/selftests/powerpc/benchmarks/Makefile | 6 ++--
tools/testing/selftests/powerpc/copyloops/Makefile | 8 ++---
tools/testing/selftests/powerpc/dscr/Makefile | 2 +-
tools/testing/selftests/powerpc/math/Makefile | 12 ++++----
tools/testing/selftests/powerpc/mm/Makefile | 6 ++--
tools/testing/selftests/powerpc/pmu/Makefile | 16 +++++-----
tools/testing/selftests/powerpc/pmu/ebb/Makefile | 4 +--
.../selftests/powerpc/switch_endian/Makefile | 8 ++---
tools/testing/selftests/powerpc/tm/Makefile | 6 ++--
tools/testing/selftests/vm/Makefile | 4 +--
tools/testing/selftests/x86/Makefile | 17 +++++-----
18 files changed, 122 insertions(+), 75 deletions(-)

diff --git a/tools/testing/selftests/Makefile b/tools/testing/selftests/Makefile
index a3144a3..848af7c 100644
--- a/tools/testing/selftests/Makefile
+++ b/tools/testing/selftests/Makefile
@@ -47,29 +47,44 @@ override LDFLAGS =
override MAKEFLAGS =
endif

+BUILD := $(O)
+ifndef BUILD
+ BUILD := $(KBUILD_OUTPUT)
+endif
+ifndef BUILD
+ BUILD := $(shell pwd)
+endif
+
+export BUILD
all:
- for TARGET in $(TARGETS); do \
- make -C $$TARGET; \
+ for TARGET in $(TARGETS); do \
+ BUILD_TARGET=$$BUILD/$$TARGET; \
+ mkdir $$BUILD_TARGET -p; \
+ make OUTPUT=$$BUILD_TARGET -C $$TARGET;\
done;

run_tests: all
for TARGET in $(TARGETS); do \
- make -C $$TARGET run_tests; \
+ BUILD_TARGET=$$BUILD/$$TARGET; \
+ make OUTPUT=$$BUILD_TARGET -C $$TARGET run_tests;\
done;

hotplug:
for TARGET in $(TARGETS_HOTPLUG); do \
- make -C $$TARGET; \
+ BUILD_TARGET=$$BUILD/$$TARGET; \
+ make OUTPUT=$$BUILD_TARGET -C $$TARGET;\
done;

run_hotplug: hotplug
for TARGET in $(TARGETS_HOTPLUG); do \
- make -C $$TARGET run_full_test; \
+ BUILD_TARGET=$$BUILD/$$TARGET; \
+ make OUTPUT=$$BUILD_TARGET -C $$TARGET run_full_test;\
done;

clean_hotplug:
for TARGET in $(TARGETS_HOTPLUG); do \
- make -C $$TARGET clean; \
+ BUILD_TARGET=$$BUILD/$$TARGET; \
+ make OUTPUT=$$BUILD_TARGET -C $$TARGET clean;\
done;

run_pstore_crash:
@@ -84,7 +99,8 @@ ifdef INSTALL_PATH
@# Ask all targets to install their files
mkdir -p $(INSTALL_PATH)
for TARGET in $(TARGETS); do \
- make -C $$TARGET INSTALL_PATH=$(INSTALL_PATH)/$$TARGET install; \
+ BUILD_TARGET=$$BUILD/$$TARGET; \
+ make OUTPUT=$$BUILD_TARGET -C $$TARGET INSTALL_PATH=$(INSTALL_PATH)/$$TARGET install; \
done;

@# Ask all targets to emit their test scripts
@@ -93,10 +109,11 @@ ifdef INSTALL_PATH
echo "ROOT=\$$PWD" >> $(ALL_SCRIPT)

for TARGET in $(TARGETS); do \
+ BUILD_TARGET=$$BUILD/$$TARGET; \
echo "echo ; echo Running tests in $$TARGET" >> $(ALL_SCRIPT); \
echo "echo ========================================" >> $(ALL_SCRIPT); \
echo "cd $$TARGET" >> $(ALL_SCRIPT); \
- make -s --no-print-directory -C $$TARGET emit_tests >> $(ALL_SCRIPT); \
+ make -s --no-print-directory OUTPUT=$$BUILD_TARGET -C $$TARGET emit_tests >> $(ALL_SCRIPT); \
echo "cd \$$ROOT" >> $(ALL_SCRIPT); \
done;

@@ -107,7 +124,8 @@ endif

clean:
for TARGET in $(TARGETS); do \
- make -C $$TARGET clean; \
+ BUILD_TARGET=$$BUILD/$$TARGET; \
+ make OUTPUT=$$BUILD_TARGET -C $$TARGET clean;\
done;

.PHONY: install
diff --git a/tools/testing/selftests/exec/Makefile b/tools/testing/selftests/exec/Makefile
index 48d1f86..2e13035 100644
--- a/tools/testing/selftests/exec/Makefile
+++ b/tools/testing/selftests/exec/Makefile
@@ -5,18 +5,19 @@ TEST_GEN_FILES := execveat.symlink execveat.denatured script subdir
# Makefile is a run-time dependency, since it's accessed by the execveat test
TEST_FILES := Makefile

-EXTRA_CLEAN := subdir.moved execveat.moved xxxxx*
+EXTRA_CLEAN := $(OUTPUT)/subdir.moved $(OUTPUT)/execveat.moved $(OUTPUT)/xxxxx*

include ../lib.mk

-subdir:
+$(OUTPUT)/subdir:
mkdir -p $@
-script:
+$(OUTPUT)/script:
echo '#!/bin/sh' > $@
echo 'exit $$*' >> $@
chmod +x $@
-execveat.symlink: execveat
- ln -s -f $< $@
-execveat.denatured: execveat
+$(OUTPUT)/execveat.symlink: $(OUTPUT)/execveat
+ cd $(OUTPUT) && ln -s -f $(shell basename $<) $(shell basename $@)
+$(OUTPUT)/execveat.denatured: $(OUTPUT)/execveat
cp $< $@
chmod -x $@
+
diff --git a/tools/testing/selftests/ftrace/Makefile b/tools/testing/selftests/ftrace/Makefile
index 6c64b42..a8a5e21 100644
--- a/tools/testing/selftests/ftrace/Makefile
+++ b/tools/testing/selftests/ftrace/Makefile
@@ -2,6 +2,6 @@ all:

TEST_PROGS := ftracetest
TEST_FILES := test.d
-EXTRA_CLEAN := logs/*
+EXTRA_CLEAN := $(OUTPUT)/logs/*

include ../lib.mk
diff --git a/tools/testing/selftests/futex/Makefile b/tools/testing/selftests/futex/Makefile
index 6a17529..653c5cd 100644
--- a/tools/testing/selftests/futex/Makefile
+++ b/tools/testing/selftests/futex/Makefile
@@ -3,13 +3,18 @@ SUBDIRS := functional
TEST_PROGS := run.sh

.PHONY: all clean
-all:
- for DIR in $(SUBDIRS); do $(MAKE) -C $$DIR $@ ; done

include ../lib.mk

+all:
+ for DIR in $(SUBDIRS); do \
+ BUILD_TARGET=$$OUTPUT/$$DIR; \
+ mkdir $$BUILD_TARGET -p; \
+ make OUTPUT=$$BUILD_TARGET -C $$DIR $@;\
+ done
+
override define RUN_TESTS
- ./run.sh
+ @if [ `dirname $(OUTPUT)` = $(PWD) ]; then ./run.sh; fi
endef

override define INSTALL_RULE
@@ -17,7 +22,9 @@ override define INSTALL_RULE
install -t $(INSTALL_PATH) $(TEST_PROGS) $(TEST_PROGS_EXTENDED) $(TEST_FILES)

@for SUBDIR in $(SUBDIRS); do \
- $(MAKE) -C $$SUBDIR INSTALL_PATH=$(INSTALL_PATH)/$$SUBDIR install; \
+ BUILD_TARGET=$$OUTPUT/$$SUBDIR; \
+ mkdir $$BUILD_TARGET -p; \
+ $(MAKE) OUTPUT=$$BUILD_TARGET -C $$SUBDIR INSTALL_PATH=$(INSTALL_PATH)/$$SUBDIR install; \
done;
endef

@@ -26,4 +33,8 @@ override define EMIT_TESTS
endef

clean:
- for DIR in $(SUBDIRS); do $(MAKE) -C $$DIR $@ ; done
+ for DIR in $(SUBDIRS); do \
+ BUILD_TARGET=$$OUTPUT/$$DIR; \
+ mkdir $$BUILD_TARGET -p; \
+ make OUTPUT=$$BUILD_TARGET -C $$DIR $@;\
+ done
diff --git a/tools/testing/selftests/kcmp/Makefile b/tools/testing/selftests/kcmp/Makefile
index 74a8add..47aa988 100644
--- a/tools/testing/selftests/kcmp/Makefile
+++ b/tools/testing/selftests/kcmp/Makefile
@@ -2,7 +2,7 @@ CFLAGS += -I../../../../usr/include/

TEST_GEN_PROGS := kcmp_test

-EXTRA_CLEAN := kcmp-test-file
+EXTRA_CLEAN := $(OUTPUT)/kcmp-test-file

include ../lib.mk

diff --git a/tools/testing/selftests/lib.mk b/tools/testing/selftests/lib.mk
index 0f7a371..01bb778 100644
--- a/tools/testing/selftests/lib.mk
+++ b/tools/testing/selftests/lib.mk
@@ -4,7 +4,8 @@ CC := $(CROSS_COMPILE)gcc

define RUN_TESTS
@for TEST in $(TEST_GEN_PROGS) $(TEST_PROGS); do \
- (./$$TEST && echo "selftests: $$TEST [PASS]") || echo "selftests: $$TEST [FAIL]"; \
+ BASENAME_TEST=`basename $$TEST`; \
+ cd `dirname $$TEST`; (./$$BASENAME_TEST && echo "selftests: $$BASENAME_TEST [PASS]") || echo "selftests: $$BASENAME_TEST [FAIL]"; cd -;\
done;
endef

@@ -33,19 +34,29 @@ endif

define EMIT_TESTS
@for TEST in $(TEST_GEN_PROGS) $(TEST_PROGS); do \
- echo "(./$$TEST && echo \"selftests: $$TEST [PASS]\") || echo \"selftests: $$TEST [FAIL]\""; \
+ BASENAME_TEST=`basename $$TEST`; \
+ echo "(./$$BASENAME_TEST && echo \"selftests: $$BASENAME_TEST [PASS]\") || echo \"selftests: $$BASENAME_TEST [FAIL]\""; \
done;
endef

emit_tests:
$(EMIT_TESTS)

+TEST_GEN_PROGS := $(patsubst %,$(OUTPUT)/%,$(TEST_GEN_PROGS))
+TEST_GEN_FILES := $(patsubst %,$(OUTPUT)/%,$(TEST_GEN_FILES))
+
all: $(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED) $(TEST_GEN_FILES)

clean:
$(RM) -r $(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED) $(TEST_GEN_FILES) $(EXTRA_CLEAN)

-%: %.c
- $(CC) $(CFLAGS) $(LDFLAGS) $(LDLIBS) -o $@ $^
+$(OUTPUT)/%:%.c
+ $(CC) $(CFLAGS) $(LDFLAGS) $(LDLIBS) $< -o $@
+
+$(OUTPUT)/%.o:%.S
+ $(CC) $(ASFLAGS) -c $< -o $@
+
+$(OUTPUT)/%:%.S
+ $(CC) $(ASFLAGS) $< -o $@

.PHONY: run_tests all clean install emit_tests
diff --git a/tools/testing/selftests/powerpc/Makefile b/tools/testing/selftests/powerpc/Makefile
index c2c4211..1d48c0c 100644
--- a/tools/testing/selftests/powerpc/Makefile
+++ b/tools/testing/selftests/powerpc/Makefile
@@ -34,32 +34,35 @@ endif
all: $(SUB_DIRS)

$(SUB_DIRS):
- $(MAKE) -k -C $@ all
+ BUILD_TARGET=$$OUTPUT/$@; mkdir -p $$BUILD_TARGET; $(MAKE) OUTPUT=$$BUILD_TARGET -k -C $@ all

include ../lib.mk

override define RUN_TESTS
@for TARGET in $(SUB_DIRS); do \
- $(MAKE) -C $$TARGET run_tests; \
+ BUILD_TARGET=$$OUTPUT/$$TARGET; \
+ $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET run_tests;\
done;
endef

override define INSTALL_RULE
@for TARGET in $(SUB_DIRS); do \
- $(MAKE) -C $$TARGET install; \
+ BUILD_TARGET=$$OUTPUT/$$TARGET; \
+ $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET install;\
done;
endef

override define EMIT_TESTS
@for TARGET in $(SUB_DIRS); do \
- $(MAKE) -s -C $$TARGET emit_tests; \
+ BUILD_TARGET=$$OUTPUT/$$TARGET; \
+ $(MAKE) OUTPUT=$$BUILD_TARGET -s -C $$TARGET emit_tests;\
done;
endef

clean:
@for TARGET in $(SUB_DIRS); do \
- $(MAKE) -C $$TARGET clean; \
- done;
+ BUILD_TARGET=$$OUTPUT/$$TARGET; \
+ $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET clean;\ done;
rm -f tags

tags:
diff --git a/tools/testing/selftests/powerpc/benchmarks/Makefile b/tools/testing/selftests/powerpc/benchmarks/Makefile
index 08a55bd..286c6ed 100644
--- a/tools/testing/selftests/powerpc/benchmarks/Makefile
+++ b/tools/testing/selftests/powerpc/benchmarks/Makefile
@@ -6,6 +6,6 @@ $(TEST_GEN_PROGS): ../harness.c

include ../../lib.mk

-context_switch: ../utils.c
-context_switch: CFLAGS += -maltivec -mvsx -mabi=altivec
-context_switch: LDLIBS += -lpthread
+$(OUTPUT)/context_switch: ../utils.c
+$(OUTPUT)/context_switch: CFLAGS += -maltivec -mvsx -mabi=altivec
+$(OUTPUT)/context_switch: LDLIBS += -lpthread
diff --git a/tools/testing/selftests/powerpc/copyloops/Makefile b/tools/testing/selftests/powerpc/copyloops/Makefile
index 9ad1558..681ab19 100644
--- a/tools/testing/selftests/powerpc/copyloops/Makefile
+++ b/tools/testing/selftests/powerpc/copyloops/Makefile
@@ -12,9 +12,9 @@ EXTRA_SOURCES := validate.c ../harness.c

include ../../lib.mk

-copyuser_64: CPPFLAGS += -D COPY_LOOP=test___copy_tofrom_user_base
-copyuser_power7: CPPFLAGS += -D COPY_LOOP=test___copy_tofrom_user_power7
-memcpy_64: CPPFLAGS += -D COPY_LOOP=test_memcpy
-memcpy_power7: CPPFLAGS += -D COPY_LOOP=test_memcpy_power7
+$(OUTPUT)/copyuser_64: CPPFLAGS += -D COPY_LOOP=test___copy_tofrom_user_base
+$(OUTPUT)/copyuser_power7: CPPFLAGS += -D COPY_LOOP=test___copy_tofrom_user_power7
+$(OUTPUT)/memcpy_64: CPPFLAGS += -D COPY_LOOP=test_memcpy
+$(OUTPUT)/memcpy_power7: CPPFLAGS += -D COPY_LOOP=test_memcpy_power7

$(TEST_GEN_PROGS): $(EXTRA_SOURCES)
diff --git a/tools/testing/selftests/powerpc/dscr/Makefile b/tools/testing/selftests/powerpc/dscr/Makefile
index 4262de4..c5639de 100644
--- a/tools/testing/selftests/powerpc/dscr/Makefile
+++ b/tools/testing/selftests/powerpc/dscr/Makefile
@@ -4,6 +4,6 @@ TEST_GEN_PROGS := dscr_default_test dscr_explicit_test dscr_user_test \

include ../../lib.mk

-dscr_default_test: LDLIBS += -lpthread
+$(OUTPUT)/dscr_default_test: LDLIBS += -lpthread

$(TEST_GEN_PROGS): ../harness.c
diff --git a/tools/testing/selftests/powerpc/math/Makefile b/tools/testing/selftests/powerpc/math/Makefile
index 814c385..da9f42f 100644
--- a/tools/testing/selftests/powerpc/math/Makefile
+++ b/tools/testing/selftests/powerpc/math/Makefile
@@ -5,13 +5,13 @@ include ../../lib.mk
$(TEST_GEN_PROGS): ../harness.c
$(TEST_GEN_PROGS): CFLAGS += -O2 -g -pthread -m64 -maltivec

-fpu_syscall: fpu_asm.S
-fpu_preempt: fpu_asm.S
-fpu_signal: fpu_asm.S
+$(OUTPUT)/pu_syscall: fpu_asm.S
+$(OUTPUT)/pu_preempt: fpu_asm.S
+$(OUTPUT)/pu_signal: fpu_asm.S

-vmx_syscall: vmx_asm.S
-vmx_preempt: vmx_asm.S
-vmx_signal: vmx_asm.S
+$(OUTPUT)/mx_syscall: vmx_asm.S
+$(OUTPUT)/mx_preempt: vmx_asm.S
+$(OUTPUT)/mx_signal: vmx_asm.S

vsx_preempt: CFLAGS += -mvsx
vsx_preempt: vsx_asm.S
diff --git a/tools/testing/selftests/powerpc/mm/Makefile b/tools/testing/selftests/powerpc/mm/Makefile
index d563378..1cffe54 100644
--- a/tools/testing/selftests/powerpc/mm/Makefile
+++ b/tools/testing/selftests/powerpc/mm/Makefile
@@ -8,8 +8,8 @@ include ../../lib.mk

$(TEST_GEN_PROGS): ../harness.c

-prot_sao: ../utils.c
+$(OUTPUT)/prot_sao: ../utils.c

-tempfile:
- dd if=/dev/zero of=tempfile bs=64k count=1
+$(OUTPUT)/tempfile:
+ dd if=/dev/zero of=$@ bs=64k count=1

diff --git a/tools/testing/selftests/powerpc/pmu/Makefile b/tools/testing/selftests/powerpc/pmu/Makefile
index ab0f902..097b08a 100644
--- a/tools/testing/selftests/powerpc/pmu/Makefile
+++ b/tools/testing/selftests/powerpc/pmu/Makefile
@@ -11,34 +11,34 @@ all: $(TEST_GEN_PROGS) ebb
$(TEST_GEN_PROGS): $(EXTRA_SOURCES)

# loop.S can only be built 64-bit
-count_instructions: loop.S count_instructions.c $(EXTRA_SOURCES)
+$(OUTPUT)/count_instructions: loop.S count_instructions.c $(EXTRA_SOURCES)
$(CC) $(CFLAGS) -m64 -o $@ $^

-per_event_excludes: ../utils.c
+$(OUTPUT)/per_event_excludes: ../utils.c

DEFAULT_RUN_TESTS := $(RUN_TESTS)
override define RUN_TESTS
$(DEFAULT_RUN_TESTS)
- $(MAKE) -C ebb run_tests
+ TARGET=ebb; BUILD_TARGET=$$OUTPUT/$$TARGET; $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET run_tests
endef

DEFAULT_EMIT_TESTS := $(EMIT_TESTS)
override define EMIT_TESTS
$(DEFAULT_EMIT_TESTS)
- $(MAKE) -s -C ebb emit_tests
+ TARGET=ebb; BUILD_TARGET=$$OUTPUT/$$TARGET; $(MAKE) OUTPUT=$$BUILD_TARGET -s -C $$TARGET emit_tests
endef

DEFAULT_INSTALL_RULE := $(INSTALL_RULE)
override define INSTALL_RULE
$(DEFAULT_INSTALL_RULE)
- $(MAKE) -C ebb install
+ TARGET=ebb; BUILD_TARGET=$$OUTPUT/$$TARGET; $(MAKE) OUTPUT=$$BUILD_TARGET: -C $$TARGET install
endef

clean:
- $(RM) $(TEST_PROGS) loop.o
- $(MAKE) -C ebb clean
+ $(RM) $(TEST_GEN_PROGS) $(OUTPUT)/loop.o
+ TARGET=ebb; BUILD_TARGET=$$OUTPUT/$$TARGET; $(MAKE) OUTPUT=$$BUILD_TARGET: -C $$TARGET clean

ebb:
- $(MAKE) -k -C $@ all
+ TARGET=$@; BUILD_TARGET=$$OUTPUT/$$TARGET; mkdir -p $$BUILD_TARGET; $(MAKE) OUTPUT=$$BUILD_TARGET -k -C $$TARGET all

.PHONY: all run_tests clean ebb
diff --git a/tools/testing/selftests/powerpc/pmu/ebb/Makefile b/tools/testing/selftests/powerpc/pmu/ebb/Makefile
index 0bc2bd6..6001fb0 100644
--- a/tools/testing/selftests/powerpc/pmu/ebb/Makefile
+++ b/tools/testing/selftests/powerpc/pmu/ebb/Makefile
@@ -21,6 +21,6 @@ include ../../../lib.mk
$(TEST_GEN_PROGS): ../../harness.c ../../utils.c ../event.c ../lib.c \
ebb.c ebb_handler.S trace.c busy_loop.S

-instruction_count_test: ../loop.S
+$(OUTPUT)/instruction_count_test: ../loop.S

-lost_exception_test: ../lib.c
+$(OUTPUT)/lost_exception_test: ../lib.c
diff --git a/tools/testing/selftests/powerpc/switch_endian/Makefile b/tools/testing/selftests/powerpc/switch_endian/Makefile
index dbd05ac..b92c2a1 100644
--- a/tools/testing/selftests/powerpc/switch_endian/Makefile
+++ b/tools/testing/selftests/powerpc/switch_endian/Makefile
@@ -2,14 +2,14 @@ TEST_GEN_PROGS := switch_endian_test

ASFLAGS += -O2 -Wall -g -nostdlib -m64

-EXTRA_CLEAN = *.o check-reversed.S
+EXTRA_CLEAN = $(OUTPUT)/*.o $(OUTPUT)/check-reversed.S

include ../../lib.mk

-switch_endian_test: check-reversed.S
+$(OUTPUT)/switch_endian_test: $(OUTPUT)/check-reversed.S

-check-reversed.o: check.o
+$(OUTPUT)/check-reversed.o: $(OUTPUT)/check.o
$(CROSS_COMPILE)objcopy -j .text --reverse-bytes=4 -O binary $< $@

-check-reversed.S: check-reversed.o
+$(OUTPUT)/check-reversed.S: $(OUTPUT)/check-reversed.o
hexdump -v -e '/1 ".byte 0x%02X\n"' $< > $@
diff --git a/tools/testing/selftests/powerpc/tm/Makefile b/tools/testing/selftests/powerpc/tm/Makefile
index 117c624..07da217 100644
--- a/tools/testing/selftests/powerpc/tm/Makefile
+++ b/tools/testing/selftests/powerpc/tm/Makefile
@@ -10,9 +10,9 @@ $(TEST_GEN_PROGS): ../harness.c ../utils.c

CFLAGS += -mhtm

-tm-syscall: tm-syscall-asm.S
-tm-syscall: CFLAGS += -I../../../../../usr/include
-tm-tmspr: CFLAGS += -pthread
+$(OUTPUT)/tm-syscall: tm-syscall-asm.S
+$(OUTPUT)/tm-syscall: CFLAGS += -I../../../../../usr/include
+$(OUTPUT)/tm-tmspr: CFLAGS += -pthread

$(SIGNAL_CONTEXT_CHK_TESTS): tm-signal.S
$(SIGNAL_CONTEXT_CHK_TESTS): CFLAGS += -mhtm -m64 -mvsx
diff --git a/tools/testing/selftests/vm/Makefile b/tools/testing/selftests/vm/Makefile
index 8141d51..983140e 100644
--- a/tools/testing/selftests/vm/Makefile
+++ b/tools/testing/selftests/vm/Makefile
@@ -17,8 +17,8 @@ TEST_PROGS := run_vmtests

include ../lib.mk

-userfaultfd: LDLIBS += -lpthread ../../../../usr/include/linux/kernel.h
-mlock-random-test: LDLIBS += -lcap
+$(OUTPUT)/userfaultfd: LDLIBS += -lpthread ../../../../usr/include/linux/kernel.h
+$(OUTPUT)/mlock-random-test: LDLIBS += -lcap

../../../../usr/include/linux/kernel.h:
make -C ../../../.. headers_install
diff --git a/tools/testing/selftests/x86/Makefile b/tools/testing/selftests/x86/Makefile
index 8c1cb42..f251cf9 100644
--- a/tools/testing/selftests/x86/Makefile
+++ b/tools/testing/selftests/x86/Makefile
@@ -17,6 +17,9 @@ TARGETS_C_64BIT_ALL := $(TARGETS_C_BOTHBITS) $(TARGETS_C_64BIT_ONLY)
BINARIES_32 := $(TARGETS_C_32BIT_ALL:%=%_32)
BINARIES_64 := $(TARGETS_C_64BIT_ALL:%=%_64)

+BINARIES_32 := $(patsubst %,$(OUTPUT)/%,$(BINARIES_32))
+BINARIES_64 := $(patsubst %,$(OUTPUT)/%,$(BINARIES_64))
+
CFLAGS := -O2 -g -std=gnu99 -pthread -Wall

UNAME_M := $(shell uname -m)
@@ -40,10 +43,10 @@ all_64: $(BINARIES_64)
clean:
$(RM) $(BINARIES_32) $(BINARIES_64)

-$(TARGETS_C_32BIT_ALL:%=%_32): %_32: %.c
+$(BINARIES_32): $(OUTPUT)/%_32: %.c
$(CC) -m32 -o $@ $(CFLAGS) $(EXTRA_CFLAGS) $^ -lrt -ldl -lm

-$(TARGETS_C_64BIT_ALL:%=%_64): %_64: %.c
+$(BINARIES_64): $(OUTPUT)/%_64: %.c
$(CC) -m64 -o $@ $(CFLAGS) $(EXTRA_CFLAGS) $^ -lrt -ldl

# x86_64 users should be encouraged to install 32-bit libraries
@@ -65,12 +68,12 @@ warn_32bit_failure:
endif

# Some tests have additional dependencies.
-sysret_ss_attrs_64: thunks.S
-ptrace_syscall_32: raw_syscall_helper_32.S
-test_syscall_vdso_32: thunks_32.S
+$(OUTPUT)/sysret_ss_attrs_64: thunks.S
+$(OUTPUT)/ptrace_syscall_32: raw_syscall_helper_32.S
+$(OUTPUT)/test_syscall_vdso_32: thunks_32.S

# check_initial_reg_state is special: it needs a custom entry, and it
# needs to be static so that its interpreter doesn't destroy its initial
# state.
-check_initial_reg_state_32: CFLAGS += -Wl,-ereal_start -static
-check_initial_reg_state_64: CFLAGS += -Wl,-ereal_start -static
+$(OUTPUT)/check_initial_reg_state_32: CFLAGS += -Wl,-ereal_start -static
+$(OUTPUT)/check_initial_reg_state_64: CFLAGS += -Wl,-ereal_start -static
--
2.10.0
Re: [PATCH v2 6/6] selftests: enable O and KBUILD_OUTPUT [ In reply to ]
On Tue, Nov 29, 2016 at 3:55 AM, <bamvor.zhangjian@huawei.com> wrote:
> From: Bamvor Jian Zhang <bamvor.zhangjian@linaro.org>
>
> 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.

Sorry for noticing this late, but this patch
(a8ba798bc8ec663cf02e80b0dd770324de9bafd9) is really annoying for
people who *don't* use these fancy options:

$ make -C tools/testing/selftests/x86 ldt_gdt_32
make: Entering directory '/home/luto/apps/linux/tools/testing/selftests/x86'
Makefile:44: warning: overriding recipe for target 'clean'
../lib.mk:55: warning: ignoring old recipe for target 'clean'
make: *** No rule to make target 'ldt_gdt_32'. Stop.
make: Leaving directory '/home/luto/apps/linux/tools/testing/selftests/x86'

Is there any way that you can make this work again?

--Andy
Re: [PATCH v2 6/6] selftests: enable O and KBUILD_OUTPUT [ In reply to ]
Andy Lutomirski <luto@amacapital.net> writes:

> On Tue, Nov 29, 2016 at 3:55 AM, <bamvor.zhangjian@huawei.com> wrote:
>> From: Bamvor Jian Zhang <bamvor.zhangjian@linaro.org>
>>
>> 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.
>
> Sorry for noticing this late, but this patch
> (a8ba798bc8ec663cf02e80b0dd770324de9bafd9) is really annoying for
> people who *don't* use these fancy options:

Yeah sorry, it wasn't quite ready to go in.

> $ make -C tools/testing/selftests/x86 ldt_gdt_32
> make: Entering directory '/home/luto/apps/linux/tools/testing/selftests/x86'
> Makefile:44: warning: overriding recipe for target 'clean'
> ../lib.mk:55: warning: ignoring old recipe for target 'clean'
> make: *** No rule to make target 'ldt_gdt_32'. Stop.
> make: Leaving directory '/home/luto/apps/linux/tools/testing/selftests/x86'
>
> Is there any way that you can make this work again?

There obviously is *a* way, but I'm not sure there's a simple and
obviously correct way that is an easy fix for 4.11.

I see at least 18 Makefile's in tools/testing/selftests that use
$(OUTPUT)/, which would all need to be updated at least to use $(OUTPUT)
(no trailing slash), and then some other changes to not propagate OUTPUT
when the user didn't specify it. But hopefully someone will prove me
wrong.

As a (poor) alternative you can do:

$ cd tools/testing/selftests/x86; make $PWD/ldt_gdt_32

or just:

$ make -C tools/testing/selftests/x86

cheers
Re: [PATCH v2 6/6] selftests: enable O and KBUILD_OUTPUT [ In reply to ]
Hi,

On 21 March 2017 at 16:35, Michael Ellerman <mpe@ellerman.id.au> wrote:
> Andy Lutomirski <luto@amacapital.net> writes:
>
>> On Tue, Nov 29, 2016 at 3:55 AM, <bamvor.zhangjian@huawei.com> wrote:
>>> From: Bamvor Jian Zhang <bamvor.zhangjian@linaro.org>
>>>
>>> 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.
>>
>> Sorry for noticing this late, but this patch
>> (a8ba798bc8ec663cf02e80b0dd770324de9bafd9) is really annoying for
>> people who *don't* use these fancy options:
>
> Yeah sorry, it wasn't quite ready to go in.
>
>> $ make -C tools/testing/selftests/x86 ldt_gdt_32
>> make: Entering directory '/home/luto/apps/linux/tools/testing/selftests/x86'
>> Makefile:44: warning: overriding recipe for target 'clean'
>> ../lib.mk:55: warning: ignoring old recipe for target 'clean'
>> make: *** No rule to make target 'ldt_gdt_32'. Stop.
>> make: Leaving directory '/home/luto/apps/linux/tools/testing/selftests/x86'
>>
>> Is there any way that you can make this work again?
>
> There obviously is *a* way, but I'm not sure there's a simple and
> obviously correct way that is an easy fix for 4.11.
>
> I see at least 18 Makefile's in tools/testing/selftests that use
> $(OUTPUT)/, which would all need to be updated at least to use $(OUTPUT)
> (no trailing slash), and then some other changes to not propagate OUTPUT
> when the user didn't specify it. But hopefully someone will prove me
> wrong.
I also look at this issue. Originally, I use OUTPUT without slash in my
patch. People argue that it is not very clear. So, I add slash in curent
version.
>
> As a (poor) alternative you can do:
>
> $ cd tools/testing/selftests/x86; make $PWD/ldt_gdt_32
>
> or just:
>
> $ make -C tools/testing/selftests/x86
>
> cheers
Do we really need "make -C tools/testing/selftests/x86 ldt_gdt_32"?
It is useful but it will skip the top level Makefile of selftests.

Regards

Bamvor
> --
> To unsubscribe from this list: send the line "unsubscribe linux-api" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v2 6/6] selftests: enable O and KBUILD_OUTPUT [ In reply to ]
On 03/21/2017 03:00 AM, Bamvor Zhang Jian wrote:
> Hi,
>
> On 21 March 2017 at 16:35, Michael Ellerman <mpe@ellerman.id.au> wrote:
>> Andy Lutomirski <luto@amacapital.net> writes:
>>
>>> On Tue, Nov 29, 2016 at 3:55 AM, <bamvor.zhangjian@huawei.com> wrote:
>>>> From: Bamvor Jian Zhang <bamvor.zhangjian@linaro.org>
>>>>
>>>> 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.
>>>
>>> Sorry for noticing this late, but this patch
>>> (a8ba798bc8ec663cf02e80b0dd770324de9bafd9) is really annoying for
>>> people who *don't* use these fancy options:
>>
>> Yeah sorry, it wasn't quite ready to go in.

Bamovar,

Please give me heads up and ask me to not commit the patch,
if you think it isn't ready.

>>
>>> $ make -C tools/testing/selftests/x86 ldt_gdt_32
>>> make: Entering directory '/home/luto/apps/linux/tools/testing/selftests/x86'
>>> Makefile:44: warning: overriding recipe for target 'clean'
>>> ../lib.mk:55: warning: ignoring old recipe for target 'clean'
>>> make: *** No rule to make target 'ldt_gdt_32'. Stop.
>>> make: Leaving directory '/home/luto/apps/linux/tools/testing/selftests/x86'
>>>
>>> Is there any way that you can make this work again?
>>
>> There obviously is *a* way, but I'm not sure there's a simple and
>> obviously correct way that is an easy fix for 4.11.
>>
>> I see at least 18 Makefile's in tools/testing/selftests that use
>> $(OUTPUT)/, which would all need to be updated at least to use $(OUTPUT)
>> (no trailing slash), and then some other changes to not propagate OUTPUT
>> when the user didn't specify it. But hopefully someone will prove me
>> wrong.
> I also look at this issue. Originally, I use OUTPUT without slash in my
> patch. People argue that it is not very clear. So, I add slash in curent
> version.
>>
>> As a (poor) alternative you can do:
>>
>> $ cd tools/testing/selftests/x86; make $PWD/ldt_gdt_32
>>
>> or just:
>>
>> $ make -C tools/testing/selftests/x86
>>
>> cheers
> Do we really need "make -C tools/testing/selftests/x86 ldt_gdt_32"?
> It is useful but it will skip the top level Makefile of selftests.

Being able to build individual tests is an important use-case. Please
see kselftest.txt under Documentation directory for all the use-cases
and new patches shouldn't break these use-cases.

Breaking these use-cases is a regression and we have to fix it.

thanks,
-- Shuah

>
> Regards
>
> Bamvor
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-api" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v2 6/6] selftests: enable O and KBUILD_OUTPUT [ In reply to ]
Hi, Shuah

On 21 March 2017 at 21:54, Shuah Khan <shuahkh@osg.samsung.com> wrote:
> On 03/21/2017 03:00 AM, Bamvor Zhang Jian wrote:
>> Hi,
>>
>> On 21 March 2017 at 16:35, Michael Ellerman <mpe@ellerman.id.au> wrote:
>>> Andy Lutomirski <luto@amacapital.net> writes:
>>>
>>>> On Tue, Nov 29, 2016 at 3:55 AM, <bamvor.zhangjian@huawei.com> wrote:
>>>>> From: Bamvor Jian Zhang <bamvor.zhangjian@linaro.org>
>>>>>
>>>>> 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.
>>>>
>>>> Sorry for noticing this late, but this patch
>>>> (a8ba798bc8ec663cf02e80b0dd770324de9bafd9) is really annoying for
>>>> people who *don't* use these fancy options:
>>>
>>> Yeah sorry, it wasn't quite ready to go in.
>
> Bamovar,
>
> Please give me heads up and ask me to not commit the patch,
> if you think it isn't ready.
>
>>>
>>>> $ make -C tools/testing/selftests/x86 ldt_gdt_32
>>>> make: Entering directory '/home/luto/apps/linux/tools/testing/selftests/x86'
>>>> Makefile:44: warning: overriding recipe for target 'clean'
>>>> ../lib.mk:55: warning: ignoring old recipe for target 'clean'
>>>> make: *** No rule to make target 'ldt_gdt_32'. Stop.
>>>> make: Leaving directory '/home/luto/apps/linux/tools/testing/selftests/x86'
>>>>
>>>> Is there any way that you can make this work again?
>>>
>>> There obviously is *a* way, but I'm not sure there's a simple and
>>> obviously correct way that is an easy fix for 4.11.
>>>
>>> I see at least 18 Makefile's in tools/testing/selftests that use
>>> $(OUTPUT)/, which would all need to be updated at least to use $(OUTPUT)
>>> (no trailing slash), and then some other changes to not propagate OUTPUT
>>> when the user didn't specify it. But hopefully someone will prove me
>>> wrong.
>> I also look at this issue. Originally, I use OUTPUT without slash in my
>> patch. People argue that it is not very clear. So, I add slash in curent
>> version.
>>>
>>> As a (poor) alternative you can do:
>>>
>>> $ cd tools/testing/selftests/x86; make $PWD/ldt_gdt_32
>>>
>>> or just:
>>>
>>> $ make -C tools/testing/selftests/x86
>>>
>>> cheers
>> Do we really need "make -C tools/testing/selftests/x86 ldt_gdt_32"?
>> It is useful but it will skip the top level Makefile of selftests.
>
> Being able to build individual tests is an important use-case. Please
> see kselftest.txt under Documentation directory for all the use-cases
> and new patches shouldn't break these use-cases.
Understand. I am sorry I do not know this use case before. And I read
kselftest.txt again, I do not find this use case is mentioned. So,
I add a few lines in kselftest.txt to avoid break this use case in future.
Is there any other use cases I should test?
>
> Breaking these use-cases is a regression and we have to fix it
Here is a fix. I could build individual test case in x86 and build the whole
x86 test cases successful respectively. And I do a quick test for all the
subsets. Please review the patch if it is make sense to you and Michael.
At the same time, I am buildind and testing all the testcases.

Michael: could you please do me a favor to test the powerpc part? Thanks.

From 21b17710d23783c5148303e5628b52d281e6f62b Mon Sep 17 00:00:00 2001
From: Bamvor Jian Zhang <bamvor.zhangjian@linaro.org>
Date: Tue, 21 Mar 2017 22:38:01 +0800
Subject: [PATCH] selftests: fix the broken individual test for x86

Andy Lutomirski report that build individual testcase in x86 is broken:

$ make -C tools/testing/selftests/x86 ldt_gdt_32
make: Entering directory '/home/luto/apps/linux/tools/testing/selftests/x86'
Makefile:44: warning: overriding recipe for target 'clean'
../lib.mk:55: warning: ignoring old recipe for target 'clean'
make: *** No rule to make target 'ldt_gdt_32'. Stop.
make: Leaving directory '/home/luto/apps/linux/tools/testing/selftests/x86'

This patch fix this issue by removing the slash after OUTPUT.
And also mention this use case in Documentation/kselftests.txt

Reported-by: Andy Lutomirski <luto@amacapital.net>
Suggested-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Bamvor Jian Zhang <bamvor.zhangjian@linaro.org>
---
Documentation/kselftest.txt | 5 +++++
tools/testing/selftests/Makefile | 16 ++++++++--------
tools/testing/selftests/exec/Makefile | 10 +++++-----
tools/testing/selftests/ftrace/Makefile | 2 +-
tools/testing/selftests/futex/Makefile | 12 ++++++------
tools/testing/selftests/kcmp/Makefile | 2 +-
tools/testing/selftests/lib.mk | 10 +++++-----
tools/testing/selftests/powerpc/Makefile | 18 +++++++++---------
tools/testing/selftests/powerpc/benchmarks/Makefile | 6 +++---
tools/testing/selftests/powerpc/copyloops/Makefile | 8 ++++----
tools/testing/selftests/powerpc/dscr/Makefile | 2 +-
tools/testing/selftests/powerpc/math/Makefile | 16 ++++++++--------
tools/testing/selftests/powerpc/mm/Makefile | 4 ++--
tools/testing/selftests/powerpc/pmu/Makefile | 16 ++++++++--------
tools/testing/selftests/powerpc/pmu/ebb/Makefile | 4 ++--
tools/testing/selftests/powerpc/switch_endian/Makefile | 8 ++++----
tools/testing/selftests/powerpc/tm/Makefile | 8 ++++----
tools/testing/selftests/vm/Makefile | 8 ++++----
tools/testing/selftests/x86/Makefile | 18 +++++++++---------
19 files changed, 89 insertions(+), 84 deletions(-)

diff --git a/Documentation/kselftest.txt b/Documentation/kselftest.txt
index 5bd5903..6197e94 100644
--- a/Documentation/kselftest.txt
+++ b/Documentation/kselftest.txt
@@ -42,6 +42,11 @@ You can specify multiple tests to build and run:
See the top-level tools/testing/selftests/Makefile for the list of all
possible targets.

+Building individual test case of a subset
+=========================================
+You could build the individual test case in subset if subset supported:
+ $ make -C tools/testing/selftests/x86 ldt_gdt_32
+

Running the full range hotplug selftests
========================================
diff --git a/tools/testing/selftests/Makefile b/tools/testing/selftests/Makefile
index e8b79a7..6cc93c1 100644
--- a/tools/testing/selftests/Makefile
+++ b/tools/testing/selftests/Makefile
@@ -64,31 +64,31 @@ all:
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:
@@ -104,7 +104,7 @@ ifdef INSTALL_PATH
mkdir -p $(INSTALL_PATH)
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
@@ -117,7 +117,7 @@ ifdef INSTALL_PATH
echo "echo ; echo Running tests in $$TARGET" >> $(ALL_SCRIPT); \
echo "echo ========================================" >> $(ALL_SCRIPT); \
echo "cd $$TARGET" >> $(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 "cd \$$ROOT" >> $(ALL_SCRIPT); \
done;

@@ -129,7 +129,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: install
diff --git a/tools/testing/selftests/exec/Makefile
b/tools/testing/selftests/exec/Makefile
index 2e13035..2f3b200 100644
--- a/tools/testing/selftests/exec/Makefile
+++ b/tools/testing/selftests/exec/Makefile
@@ -5,19 +5,19 @@ TEST_GEN_FILES := execveat.symlink
execveat.denatured script subdir
# Makefile is a run-time dependency, since it's accessed by the execveat test
TEST_FILES := Makefile

-EXTRA_CLEAN := $(OUTPUT)/subdir.moved $(OUTPUT)/execveat.moved $(OUTPUT)/xxxxx*
+EXTRA_CLEAN := $(OUTPUT)subdir.moved $(OUTPUT)execveat.moved $(OUTPUT)xxxxx*

include ../lib.mk

-$(OUTPUT)/subdir:
+$(OUTPUT)subdir:
mkdir -p $@
-$(OUTPUT)/script:
+$(OUTPUT)script:
echo '#!/bin/sh' > $@
echo 'exit $$*' >> $@
chmod +x $@
-$(OUTPUT)/execveat.symlink: $(OUTPUT)/execveat
+$(OUTPUT)execveat.symlink: $(OUTPUT)execveat
cd $(OUTPUT) && ln -s -f $(shell basename $<) $(shell basename $@)
-$(OUTPUT)/execveat.denatured: $(OUTPUT)/execveat
+$(OUTPUT)execveat.denatured: $(OUTPUT)execveat
cp $< $@
chmod -x $@

diff --git a/tools/testing/selftests/ftrace/Makefile
b/tools/testing/selftests/ftrace/Makefile
index a8a5e21..33bb29b 100644
--- a/tools/testing/selftests/ftrace/Makefile
+++ b/tools/testing/selftests/ftrace/Makefile
@@ -2,6 +2,6 @@ all:

TEST_PROGS := ftracetest
TEST_FILES := test.d
-EXTRA_CLEAN := $(OUTPUT)/logs/*
+EXTRA_CLEAN := $(OUTPUT)logs/*

include ../lib.mk
diff --git a/tools/testing/selftests/futex/Makefile
b/tools/testing/selftests/futex/Makefile
index 653c5cd..11c6c49 100644
--- a/tools/testing/selftests/futex/Makefile
+++ b/tools/testing/selftests/futex/Makefile
@@ -8,9 +8,9 @@ include ../lib.mk

all:
for DIR in $(SUBDIRS); do \
- BUILD_TARGET=$$OUTPUT/$$DIR; \
+ BUILD_TARGET=$$OUTPUT$$DIR; \
mkdir $$BUILD_TARGET -p; \
- make OUTPUT=$$BUILD_TARGET -C $$DIR $@;\
+ make OUTPUT=$$BUILD_TARGET/ -C $$DIR $@;\
done

override define RUN_TESTS
@@ -22,9 +22,9 @@ override define INSTALL_RULE
install -t $(INSTALL_PATH) $(TEST_PROGS) $(TEST_PROGS_EXTENDED) $(TEST_FILES)

@for SUBDIR in $(SUBDIRS); do \
- BUILD_TARGET=$$OUTPUT/$$SUBDIR; \
+ BUILD_TARGET=$$OUTPUT$$SUBDIR; \
mkdir $$BUILD_TARGET -p; \
- $(MAKE) OUTPUT=$$BUILD_TARGET -C $$SUBDIR
INSTALL_PATH=$(INSTALL_PATH)/$$SUBDIR install; \
+ $(MAKE) OUTPUT=$$BUILD_TARGET/ -C $$SUBDIR
INSTALL_PATH=$(INSTALL_PATH)/$$SUBDIR install; \
done;
endef

@@ -34,7 +34,7 @@ endef

clean:
for DIR in $(SUBDIRS); do \
- BUILD_TARGET=$$OUTPUT/$$DIR; \
+ BUILD_TARGET=$$OUTPUT$$DIR; \
mkdir $$BUILD_TARGET -p; \
- make OUTPUT=$$BUILD_TARGET -C $$DIR $@;\
+ make OUTPUT=$$BUILD_TARGET/ -C $$DIR $@;\
done
diff --git a/tools/testing/selftests/kcmp/Makefile
b/tools/testing/selftests/kcmp/Makefile
index 47aa988..0fb599e 100644
--- a/tools/testing/selftests/kcmp/Makefile
+++ b/tools/testing/selftests/kcmp/Makefile
@@ -2,7 +2,7 @@ CFLAGS += -I../../../../usr/include/

TEST_GEN_PROGS := kcmp_test

-EXTRA_CLEAN := $(OUTPUT)/kcmp-test-file
+EXTRA_CLEAN := $(OUTPUT)kcmp-test-file

include ../lib.mk

diff --git a/tools/testing/selftests/lib.mk b/tools/testing/selftests/lib.mk
index ce96d80..716e920 100644
--- a/tools/testing/selftests/lib.mk
+++ b/tools/testing/selftests/lib.mk
@@ -2,8 +2,8 @@
# Makefile can operate with or without the kbuild infrastructure.
CC := $(CROSS_COMPILE)gcc

-TEST_GEN_PROGS := $(patsubst %,$(OUTPUT)/%,$(TEST_GEN_PROGS))
-TEST_GEN_FILES := $(patsubst %,$(OUTPUT)/%,$(TEST_GEN_FILES))
+TEST_GEN_PROGS := $(patsubst %,$(OUTPUT)%,$(TEST_GEN_PROGS))
+TEST_GEN_FILES := $(patsubst %,$(OUTPUT)%,$(TEST_GEN_FILES))

all: $(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED) $(TEST_GEN_FILES)

@@ -50,13 +50,13 @@ emit_tests:
clean:
$(RM) -r $(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED)
$(TEST_GEN_FILES) $(EXTRA_CLEAN)

-$(OUTPUT)/%:%.c
+$(OUTPUT)%:%.c
$(LINK.c) $^ $(LDLIBS) -o $@

-$(OUTPUT)/%.o:%.S
+$(OUTPUT)%.o:%.S
$(COMPILE.S) $^ -o $@

-$(OUTPUT)/%:%.S
+$(OUTPUT)%:%.S
$(LINK.S) $^ $(LDLIBS) -o $@

.PHONY: run_tests all clean install emit_tests
diff --git a/tools/testing/selftests/powerpc/Makefile
b/tools/testing/selftests/powerpc/Makefile
index 1c5d057..1a1a33c 100644
--- a/tools/testing/selftests/powerpc/Makefile
+++ b/tools/testing/selftests/powerpc/Makefile
@@ -34,35 +34,35 @@ endif
all: $(SUB_DIRS)

$(SUB_DIRS):
- BUILD_TARGET=$$OUTPUT/$@; mkdir -p $$BUILD_TARGET; $(MAKE)
OUTPUT=$$BUILD_TARGET -k -C $@ all
+ BUILD_TARGET=$$OUTPUT$@; mkdir -p $$BUILD_TARGET; $(MAKE)
OUTPUT=$$BUILD_TARGET/ -k -C $@ all

include ../lib.mk

override define RUN_TESTS
@for TARGET in $(SUB_DIRS); do \
- BUILD_TARGET=$$OUTPUT/$$TARGET; \
- $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET run_tests;\
+ BUILD_TARGET=$$OUTPUT$$TARGET; \
+ $(MAKE) OUTPUT=$$BUILD_TARGET/ -C $$TARGET run_tests;\
done;
endef

override define INSTALL_RULE
@for TARGET in $(SUB_DIRS); do \
- BUILD_TARGET=$$OUTPUT/$$TARGET; \
- $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET install;\
+ BUILD_TARGET=$$OUTPUT$$TARGET; \
+ $(MAKE) OUTPUT=$$BUILD_TARGET/ -C $$TARGET install;\
done;
endef

override define EMIT_TESTS
@for TARGET in $(SUB_DIRS); do \
- BUILD_TARGET=$$OUTPUT/$$TARGET; \
- $(MAKE) OUTPUT=$$BUILD_TARGET -s -C $$TARGET emit_tests;\
+ BUILD_TARGET=$$OUTPUT$$TARGET; \
+ $(MAKE) OUTPUT=$$BUILD_TARGET/ -s -C $$TARGET emit_tests;\
done;
endef

clean:
@for TARGET in $(SUB_DIRS); do \
- BUILD_TARGET=$$OUTPUT/$$TARGET; \
- $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET clean; \
+ BUILD_TARGET=$$OUTPUT$$TARGET; \
+ $(MAKE) OUTPUT=$$BUILD_TARGET/ -C $$TARGET clean; \
done;
rm -f tags

diff --git a/tools/testing/selftests/powerpc/benchmarks/Makefile
b/tools/testing/selftests/powerpc/benchmarks/Makefile
index fb96a89..c720780 100644
--- a/tools/testing/selftests/powerpc/benchmarks/Makefile
+++ b/tools/testing/selftests/powerpc/benchmarks/Makefile
@@ -6,6 +6,6 @@ include ../../lib.mk

$(TEST_GEN_PROGS): ../harness.c

-$(OUTPUT)/context_switch: ../utils.c
-$(OUTPUT)/context_switch: CFLAGS += -maltivec -mvsx -mabi=altivec
-$(OUTPUT)/context_switch: LDLIBS += -lpthread
+$(OUTPUT)context_switch: ../utils.c
+$(OUTPUT)context_switch: CFLAGS += -maltivec -mvsx -mabi=altivec
+$(OUTPUT)context_switch: LDLIBS += -lpthread
diff --git a/tools/testing/selftests/powerpc/copyloops/Makefile
b/tools/testing/selftests/powerpc/copyloops/Makefile
index 681ab19..60e195a 100644
--- a/tools/testing/selftests/powerpc/copyloops/Makefile
+++ b/tools/testing/selftests/powerpc/copyloops/Makefile
@@ -12,9 +12,9 @@ EXTRA_SOURCES := validate.c ../harness.c

include ../../lib.mk

-$(OUTPUT)/copyuser_64: CPPFLAGS += -D
COPY_LOOP=test___copy_tofrom_user_base
-$(OUTPUT)/copyuser_power7: CPPFLAGS += -D
COPY_LOOP=test___copy_tofrom_user_power7
-$(OUTPUT)/memcpy_64: CPPFLAGS += -D COPY_LOOP=test_memcpy
-$(OUTPUT)/memcpy_power7: CPPFLAGS += -D COPY_LOOP=test_memcpy_power7
+$(OUTPUT)copyuser_64: CPPFLAGS += -D COPY_LOOP=test___copy_tofrom_user_base
+$(OUTPUT)copyuser_power7: CPPFLAGS += -D
COPY_LOOP=test___copy_tofrom_user_power7
+$(OUTPUT)memcpy_64: CPPFLAGS += -D COPY_LOOP=test_memcpy
+$(OUTPUT)memcpy_power7: CPPFLAGS += -D COPY_LOOP=test_memcpy_power7

$(TEST_GEN_PROGS): $(EXTRA_SOURCES)
diff --git a/tools/testing/selftests/powerpc/dscr/Makefile
b/tools/testing/selftests/powerpc/dscr/Makefile
index c5639de..378f825 100644
--- a/tools/testing/selftests/powerpc/dscr/Makefile
+++ b/tools/testing/selftests/powerpc/dscr/Makefile
@@ -4,6 +4,6 @@ TEST_GEN_PROGS := dscr_default_test dscr_explicit_test
dscr_user_test \

include ../../lib.mk

-$(OUTPUT)/dscr_default_test: LDLIBS += -lpthread
+$(OUTPUT)dscr_default_test: LDLIBS += -lpthread

$(TEST_GEN_PROGS): ../harness.c
diff --git a/tools/testing/selftests/powerpc/math/Makefile
b/tools/testing/selftests/powerpc/math/Makefile
index fa8bae9..73d6f52 100644
--- a/tools/testing/selftests/powerpc/math/Makefile
+++ b/tools/testing/selftests/powerpc/math/Makefile
@@ -5,13 +5,13 @@ include ../../lib.mk
$(TEST_GEN_PROGS): ../harness.c
$(TEST_GEN_PROGS): CFLAGS += -O2 -g -pthread -m64 -maltivec

-$(OUTPUT)/fpu_syscall: fpu_asm.S
-$(OUTPUT)/fpu_preempt: fpu_asm.S
-$(OUTPUT)/fpu_signal: fpu_asm.S
+$(OUTPUT)fpu_syscall: fpu_asm.S
+$(OUTPUT)fpu_preempt: fpu_asm.S
+$(OUTPUT)fpu_signal: fpu_asm.S

-$(OUTPUT)/vmx_syscall: vmx_asm.S
-$(OUTPUT)/vmx_preempt: vmx_asm.S
-$(OUTPUT)/vmx_signal: vmx_asm.S
+$(OUTPUT)vmx_syscall: vmx_asm.S
+$(OUTPUT)vmx_preempt: vmx_asm.S
+$(OUTPUT)vmx_signal: vmx_asm.S

-$(OUTPUT)/vsx_preempt: CFLAGS += -mvsx
-$(OUTPUT)/vsx_preempt: vsx_asm.S
+$(OUTPUT)vsx_preempt: CFLAGS += -mvsx
+$(OUTPUT)vsx_preempt: vsx_asm.S
diff --git a/tools/testing/selftests/powerpc/mm/Makefile
b/tools/testing/selftests/powerpc/mm/Makefile
index 1cffe54..d4d2e68 100644
--- a/tools/testing/selftests/powerpc/mm/Makefile
+++ b/tools/testing/selftests/powerpc/mm/Makefile
@@ -8,8 +8,8 @@ include ../../lib.mk

$(TEST_GEN_PROGS): ../harness.c

-$(OUTPUT)/prot_sao: ../utils.c
+$(OUTPUT)prot_sao: ../utils.c

-$(OUTPUT)/tempfile:
+$(OUTPUT)tempfile:
dd if=/dev/zero of=$@ bs=64k count=1

diff --git a/tools/testing/selftests/powerpc/pmu/Makefile
b/tools/testing/selftests/powerpc/pmu/Makefile
index e4e55d1..17a9be7 100644
--- a/tools/testing/selftests/powerpc/pmu/Makefile
+++ b/tools/testing/selftests/powerpc/pmu/Makefile
@@ -11,34 +11,34 @@ all: $(TEST_GEN_PROGS) ebb
$(TEST_GEN_PROGS): $(EXTRA_SOURCES)

# loop.S can only be built 64-bit
-$(OUTPUT)/count_instructions: loop.S count_instructions.c $(EXTRA_SOURCES)
+$(OUTPUT)count_instructions: loop.S count_instructions.c $(EXTRA_SOURCES)
$(CC) $(CFLAGS) -m64 -o $@ $^

-$(OUTPUT)/per_event_excludes: ../utils.c
+$(OUTPUT)per_event_excludes: ../utils.c

DEFAULT_RUN_TESTS := $(RUN_TESTS)
override define RUN_TESTS
$(DEFAULT_RUN_TESTS)
- TARGET=ebb; BUILD_TARGET=$$OUTPUT/$$TARGET; $(MAKE)
OUTPUT=$$BUILD_TARGET -C $$TARGET run_tests
+ TARGET=ebb; BUILD_TARGET=$$OUTPUT$$TARGET; $(MAKE)
OUTPUT=$$BUILD_TARGET/ -C $$TARGET run_tests
endef

DEFAULT_EMIT_TESTS := $(EMIT_TESTS)
override define EMIT_TESTS
$(DEFAULT_EMIT_TESTS)
- TARGET=ebb; BUILD_TARGET=$$OUTPUT/$$TARGET; $(MAKE)
OUTPUT=$$BUILD_TARGET -s -C $$TARGET emit_tests
+ TARGET=ebb; BUILD_TARGET=$$OUTPUT$$TARGET; $(MAKE)
OUTPUT=$$BUILD_TARGET/ -s -C $$TARGET emit_tests
endef

DEFAULT_INSTALL_RULE := $(INSTALL_RULE)
override define INSTALL_RULE
$(DEFAULT_INSTALL_RULE)
- TARGET=ebb; BUILD_TARGET=$$OUTPUT/$$TARGET; $(MAKE)
OUTPUT=$$BUILD_TARGET -C $$TARGET install
+ TARGET=ebb; BUILD_TARGET=$$OUTPUT$$TARGET; $(MAKE)
OUTPUT=$$BUILD_TARGET/ -C $$TARGET install
endef

clean:
- $(RM) $(TEST_GEN_PROGS) $(OUTPUT)/loop.o
- TARGET=ebb; BUILD_TARGET=$$OUTPUT/$$TARGET; $(MAKE)
OUTPUT=$$BUILD_TARGET -C $$TARGET clean
+ $(RM) $(TEST_GEN_PROGS) $(OUTPUT)loop.o
+ TARGET=ebb; BUILD_TARGET=$$OUTPUT$$TARGET; $(MAKE)
OUTPUT=$$BUILD_TARGET/ -C $$TARGET clean

ebb:
- TARGET=$@; BUILD_TARGET=$$OUTPUT/$$TARGET; mkdir -p $$BUILD_TARGET;
$(MAKE) OUTPUT=$$BUILD_TARGET -k -C $$TARGET all
+ TARGET=$@; BUILD_TARGET=$$OUTPUT$$TARGET; mkdir -p $$BUILD_TARGET;
$(MAKE) OUTPUT=$$BUILD_TARGET/ -k -C $$TARGET all

.PHONY: all run_tests clean ebb
diff --git a/tools/testing/selftests/powerpc/pmu/ebb/Makefile
b/tools/testing/selftests/powerpc/pmu/ebb/Makefile
index 6001fb0..1512260 100644
--- a/tools/testing/selftests/powerpc/pmu/ebb/Makefile
+++ b/tools/testing/selftests/powerpc/pmu/ebb/Makefile
@@ -21,6 +21,6 @@ include ../../../lib.mk
$(TEST_GEN_PROGS): ../../harness.c ../../utils.c ../event.c ../lib.c \
ebb.c ebb_handler.S trace.c busy_loop.S

-$(OUTPUT)/instruction_count_test: ../loop.S
+$(OUTPUT)instruction_count_test: ../loop.S

-$(OUTPUT)/lost_exception_test: ../lib.c
+$(OUTPUT)lost_exception_test: ../lib.c
diff --git a/tools/testing/selftests/powerpc/switch_endian/Makefile
b/tools/testing/selftests/powerpc/switch_endian/Makefile
index b92c2a1..4d0bbf7 100644
--- a/tools/testing/selftests/powerpc/switch_endian/Makefile
+++ b/tools/testing/selftests/powerpc/switch_endian/Makefile
@@ -2,14 +2,14 @@ TEST_GEN_PROGS := switch_endian_test

ASFLAGS += -O2 -Wall -g -nostdlib -m64

-EXTRA_CLEAN = $(OUTPUT)/*.o $(OUTPUT)/check-reversed.S
+EXTRA_CLEAN = $(OUTPUT)*.o $(OUTPUT)check-reversed.S

include ../../lib.mk

-$(OUTPUT)/switch_endian_test: $(OUTPUT)/check-reversed.S
+$(OUTPUT)switch_endian_test: $(OUTPUT)check-reversed.S

-$(OUTPUT)/check-reversed.o: $(OUTPUT)/check.o
+$(OUTPUT)check-reversed.o: $(OUTPUT)check.o
$(CROSS_COMPILE)objcopy -j .text --reverse-bytes=4 -O binary $< $@

-$(OUTPUT)/check-reversed.S: $(OUTPUT)/check-reversed.o
+$(OUTPUT)check-reversed.S: $(OUTPUT)check-reversed.o
hexdump -v -e '/1 ".byte 0x%02X\n"' $< > $@
diff --git a/tools/testing/selftests/powerpc/tm/Makefile
b/tools/testing/selftests/powerpc/tm/Makefile
index 5576ee6..9c76e25 100644
--- a/tools/testing/selftests/powerpc/tm/Makefile
+++ b/tools/testing/selftests/powerpc/tm/Makefile
@@ -10,10 +10,10 @@ $(TEST_GEN_PROGS): ../harness.c ../utils.c

CFLAGS += -mhtm

-$(OUTPUT)/tm-syscall: tm-syscall-asm.S
-$(OUTPUT)/tm-syscall: CFLAGS += -I../../../../../usr/include
-$(OUTPUT)/tm-tmspr: CFLAGS += -pthread
+$(OUTPUT)tm-syscall: tm-syscall-asm.S
+$(OUTPUT)tm-syscall: CFLAGS += -I../../../../../usr/include
+$(OUTPUT)tm-tmspr: CFLAGS += -pthread

-SIGNAL_CONTEXT_CHK_TESTS := $(patsubst
%,$(OUTPUT)/%,$(SIGNAL_CONTEXT_CHK_TESTS))
+SIGNAL_CONTEXT_CHK_TESTS := $(patsubst
%,$(OUTPUT)%,$(SIGNAL_CONTEXT_CHK_TESTS))
$(SIGNAL_CONTEXT_CHK_TESTS): tm-signal.S
$(SIGNAL_CONTEXT_CHK_TESTS): CFLAGS += -mhtm -m64 -mvsx
diff --git a/tools/testing/selftests/vm/Makefile
b/tools/testing/selftests/vm/Makefile
index 222ee45..1e7c02c 100644
--- a/tools/testing/selftests/vm/Makefile
+++ b/tools/testing/selftests/vm/Makefile
@@ -19,10 +19,10 @@ TEST_PROGS := run_vmtests

include ../lib.mk

-$(OUTPUT)/userfaultfd: LDLIBS += -lpthread
../../../../usr/include/linux/kernel.h
-$(OUTPUT)/userfaultfd_hugetlb: LDLIBS += -lpthread
../../../../usr/include/linux/kernel.h
-$(OUTPUT)/userfaultfd_shmem: LDLIBS += -lpthread
../../../../usr/include/linux/kernel.h
-$(OUTPUT)/mlock-random-test: LDLIBS += -lcap
+$(OUTPUT)userfaultfd: LDLIBS += -lpthread
../../../../usr/include/linux/kernel.h
+$(OUTPUT)userfaultfd_hugetlb: LDLIBS += -lpthread
../../../../usr/include/linux/kernel.h
+$(OUTPUT)userfaultfd_shmem: LDLIBS += -lpthread
../../../../usr/include/linux/kernel.h
+$(OUTPUT)mlock-random-test: LDLIBS += -lcap

../../../../usr/include/linux/kernel.h:
make -C ../../../.. headers_install
diff --git a/tools/testing/selftests/x86/Makefile
b/tools/testing/selftests/x86/Makefile
index 3a5ebae..42db9f4 100644
--- a/tools/testing/selftests/x86/Makefile
+++ b/tools/testing/selftests/x86/Makefile
@@ -17,8 +17,8 @@ TARGETS_C_64BIT_ALL := $(TARGETS_C_BOTHBITS)
$(TARGETS_C_64BIT_ONLY)
BINARIES_32 := $(TARGETS_C_32BIT_ALL:%=%_32)
BINARIES_64 := $(TARGETS_C_64BIT_ALL:%=%_64)

-BINARIES_32 := $(patsubst %,$(OUTPUT)/%,$(BINARIES_32))
-BINARIES_64 := $(patsubst %,$(OUTPUT)/%,$(BINARIES_64))
+BINARIES_32 := $(patsubst %,$(OUTPUT)%,$(BINARIES_32))
+BINARIES_64 := $(patsubst %,$(OUTPUT)%,$(BINARIES_64))

CFLAGS := -O2 -g -std=gnu99 -pthread -Wall

@@ -43,10 +43,10 @@ all_64: $(BINARIES_64)
clean:
$(RM) $(BINARIES_32) $(BINARIES_64)

-$(BINARIES_32): $(OUTPUT)/%_32: %.c
+$(BINARIES_32): $(OUTPUT)%_32: %.c
$(CC) -m32 -o $@ $(CFLAGS) $(EXTRA_CFLAGS) $^ -lrt -ldl -lm

-$(BINARIES_64): $(OUTPUT)/%_64: %.c
+$(BINARIES_64): $(OUTPUT)%_64: %.c
$(CC) -m64 -o $@ $(CFLAGS) $(EXTRA_CFLAGS) $^ -lrt -ldl

# x86_64 users should be encouraged to install 32-bit libraries
@@ -68,12 +68,12 @@ warn_32bit_failure:
endif

# Some tests have additional dependencies.
-$(OUTPUT)/sysret_ss_attrs_64: thunks.S
-$(OUTPUT)/ptrace_syscall_32: raw_syscall_helper_32.S
-$(OUTPUT)/test_syscall_vdso_32: thunks_32.S
+$(OUTPUT)sysret_ss_attrs_64: thunks.S
+$(OUTPUT)ptrace_syscall_32: raw_syscall_helper_32.S
+$(OUTPUT)test_syscall_vdso_32: thunks_32.S

# check_initial_reg_state is special: it needs a custom entry, and it
# needs to be static so that its interpreter doesn't destroy its initial
# state.
-$(OUTPUT)/check_initial_reg_state_32: CFLAGS += -Wl,-ereal_start -static
-$(OUTPUT)/check_initial_reg_state_64: CFLAGS += -Wl,-ereal_start -static
+$(OUTPUT)check_initial_reg_state_32: CFLAGS += -Wl,-ereal_start -static
+$(OUTPUT)check_initial_reg_state_64: CFLAGS += -Wl,-ereal_start -static
--
1.9.1

Regards

Bamvor

>
> thanks,
> -- Shuah
>
>>
>> Regards
>>
>> Bamvor
>>> --
>>> To unsubscribe from this list: send the line "unsubscribe linux-api" in
>>> the body of a message to majordomo@vger.kernel.org
>>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
Re: [PATCH v2 6/6] selftests: enable O and KBUILD_OUTPUT [ In reply to ]
On 03/21/2017 10:09 AM, Bamvor Zhang Jian wrote:
> Hi, Shuah
>
> On 21 March 2017 at 21:54, Shuah Khan <shuahkh@osg.samsung.com> wrote:
>> On 03/21/2017 03:00 AM, Bamvor Zhang Jian wrote:
>>> Hi,
>>>
>>> On 21 March 2017 at 16:35, Michael Ellerman <mpe@ellerman.id.au> wrote:
>>>> Andy Lutomirski <luto@amacapital.net> writes:
>>>>
>>>>> On Tue, Nov 29, 2016 at 3:55 AM, <bamvor.zhangjian@huawei.com> wrote:
>>>>>> From: Bamvor Jian Zhang <bamvor.zhangjian@linaro.org>
>>>>>>
>>>>>> 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.
>>>>>
>>>>> Sorry for noticing this late, but this patch
>>>>> (a8ba798bc8ec663cf02e80b0dd770324de9bafd9) is really annoying for
>>>>> people who *don't* use these fancy options:
>>>>
>>>> Yeah sorry, it wasn't quite ready to go in.
>>
>> Bamovar,
>>
>> Please give me heads up and ask me to not commit the patch,
>> if you think it isn't ready.
>>
>>>>
>>>>> $ make -C tools/testing/selftests/x86 ldt_gdt_32
>>>>> make: Entering directory '/home/luto/apps/linux/tools/testing/selftests/x86'
>>>>> Makefile:44: warning: overriding recipe for target 'clean'
>>>>> ../lib.mk:55: warning: ignoring old recipe for target 'clean'
>>>>> make: *** No rule to make target 'ldt_gdt_32'. Stop.
>>>>> make: Leaving directory '/home/luto/apps/linux/tools/testing/selftests/x86'
>>>>>
>>>>> Is there any way that you can make this work again?
>>>>
>>>> There obviously is *a* way, but I'm not sure there's a simple and
>>>> obviously correct way that is an easy fix for 4.11.
>>>>
>>>> I see at least 18 Makefile's in tools/testing/selftests that use
>>>> $(OUTPUT)/, which would all need to be updated at least to use $(OUTPUT)
>>>> (no trailing slash), and then some other changes to not propagate OUTPUT
>>>> when the user didn't specify it. But hopefully someone will prove me
>>>> wrong.
>>> I also look at this issue. Originally, I use OUTPUT without slash in my
>>> patch. People argue that it is not very clear. So, I add slash in curent
>>> version.
>>>>
>>>> As a (poor) alternative you can do:
>>>>
>>>> $ cd tools/testing/selftests/x86; make $PWD/ldt_gdt_32
>>>>
>>>> or just:
>>>>
>>>> $ make -C tools/testing/selftests/x86
>>>>
>>>> cheers
>>> Do we really need "make -C tools/testing/selftests/x86 ldt_gdt_32"?
>>> It is useful but it will skip the top level Makefile of selftests.
>>
>> Being able to build individual tests is an important use-case. Please
>> see kselftest.txt under Documentation directory for all the use-cases
>> and new patches shouldn't break these use-cases.
> Understand. I am sorry I do not know this use case before. And I read
> kselftest.txt again, I do not find this use case is mentioned. So,
> I add a few lines in kselftest.txt to avoid break this use case in future.
> Is there any other use cases I should test?

Running an individual test as in the example below should be allowed.
make -C tools/testing/selftests hotplug

Also individual tests are often run from the test director. For example,

cd tools/testing/selftests/x86; make

thanks,
-- Shuah

>>
>> Breaking these use-cases is a regression and we have to fix it
> Here is a fix. I could build individual test case in x86 and build the whole
> x86 test cases successful respectively. And I do a quick test for all the
> subsets. Please review the patch if it is make sense to you and Michael.
> At the same time, I am buildind and testing all the testcases.
>
> Michael: could you please do me a favor to test the powerpc part? Thanks.
>
> From 21b17710d23783c5148303e5628b52d281e6f62b Mon Sep 17 00:00:00 2001
> From: Bamvor Jian Zhang <bamvor.zhangjian@linaro.org>
> Date: Tue, 21 Mar 2017 22:38:01 +0800
> Subject: [PATCH] selftests: fix the broken individual test for x86
>
> Andy Lutomirski report that build individual testcase in x86 is broken:
>
> $ make -C tools/testing/selftests/x86 ldt_gdt_32
> make: Entering directory '/home/luto/apps/linux/tools/testing/selftests/x86'
> Makefile:44: warning: overriding recipe for target 'clean'
> ../lib.mk:55: warning: ignoring old recipe for target 'clean'
> make: *** No rule to make target 'ldt_gdt_32'. Stop.
> make: Leaving directory '/home/luto/apps/linux/tools/testing/selftests/x86'
>
> This patch fix this issue by removing the slash after OUTPUT.
> And also mention this use case in Documentation/kselftests.txt
>
> Reported-by: Andy Lutomirski <luto@amacapital.net>
> Suggested-by: Michael Ellerman <mpe@ellerman.id.au>
> Signed-off-by: Bamvor Jian Zhang <bamvor.zhangjian@linaro.org>
> ---
> Documentation/kselftest.txt | 5 +++++
> tools/testing/selftests/Makefile | 16 ++++++++--------
> tools/testing/selftests/exec/Makefile | 10 +++++-----
> tools/testing/selftests/ftrace/Makefile | 2 +-
> tools/testing/selftests/futex/Makefile | 12 ++++++------
> tools/testing/selftests/kcmp/Makefile | 2 +-
> tools/testing/selftests/lib.mk | 10 +++++-----
> tools/testing/selftests/powerpc/Makefile | 18 +++++++++---------
> tools/testing/selftests/powerpc/benchmarks/Makefile | 6 +++---
> tools/testing/selftests/powerpc/copyloops/Makefile | 8 ++++----
> tools/testing/selftests/powerpc/dscr/Makefile | 2 +-
> tools/testing/selftests/powerpc/math/Makefile | 16 ++++++++--------
> tools/testing/selftests/powerpc/mm/Makefile | 4 ++--
> tools/testing/selftests/powerpc/pmu/Makefile | 16 ++++++++--------
> tools/testing/selftests/powerpc/pmu/ebb/Makefile | 4 ++--
> tools/testing/selftests/powerpc/switch_endian/Makefile | 8 ++++----
> tools/testing/selftests/powerpc/tm/Makefile | 8 ++++----
> tools/testing/selftests/vm/Makefile | 8 ++++----
> tools/testing/selftests/x86/Makefile | 18 +++++++++---------
> 19 files changed, 89 insertions(+), 84 deletions(-)
>
> diff --git a/Documentation/kselftest.txt b/Documentation/kselftest.txt
> index 5bd5903..6197e94 100644
> --- a/Documentation/kselftest.txt
> +++ b/Documentation/kselftest.txt
> @@ -42,6 +42,11 @@ You can specify multiple tests to build and run:
> See the top-level tools/testing/selftests/Makefile for the list of all
> possible targets.
>
> +Building individual test case of a subset
> +=========================================
> +You could build the individual test case in subset if subset supported:
> + $ make -C tools/testing/selftests/x86 ldt_gdt_32
> +
>
> Running the full range hotplug selftests
> ========================================
> diff --git a/tools/testing/selftests/Makefile b/tools/testing/selftests/Makefile
> index e8b79a7..6cc93c1 100644
> --- a/tools/testing/selftests/Makefile
> +++ b/tools/testing/selftests/Makefile
> @@ -64,31 +64,31 @@ all:
> 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:
> @@ -104,7 +104,7 @@ ifdef INSTALL_PATH
> mkdir -p $(INSTALL_PATH)
> 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
> @@ -117,7 +117,7 @@ ifdef INSTALL_PATH
> echo "echo ; echo Running tests in $$TARGET" >> $(ALL_SCRIPT); \
> echo "echo ========================================" >> $(ALL_SCRIPT); \
> echo "cd $$TARGET" >> $(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 "cd \$$ROOT" >> $(ALL_SCRIPT); \
> done;
>
> @@ -129,7 +129,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: install
> diff --git a/tools/testing/selftests/exec/Makefile
> b/tools/testing/selftests/exec/Makefile
> index 2e13035..2f3b200 100644
> --- a/tools/testing/selftests/exec/Makefile
> +++ b/tools/testing/selftests/exec/Makefile
> @@ -5,19 +5,19 @@ TEST_GEN_FILES := execveat.symlink
> execveat.denatured script subdir
> # Makefile is a run-time dependency, since it's accessed by the execveat test
> TEST_FILES := Makefile
>
> -EXTRA_CLEAN := $(OUTPUT)/subdir.moved $(OUTPUT)/execveat.moved $(OUTPUT)/xxxxx*
> +EXTRA_CLEAN := $(OUTPUT)subdir.moved $(OUTPUT)execveat.moved $(OUTPUT)xxxxx*
>
> include ../lib.mk
>
> -$(OUTPUT)/subdir:
> +$(OUTPUT)subdir:
> mkdir -p $@
> -$(OUTPUT)/script:
> +$(OUTPUT)script:
> echo '#!/bin/sh' > $@
> echo 'exit $$*' >> $@
> chmod +x $@
> -$(OUTPUT)/execveat.symlink: $(OUTPUT)/execveat
> +$(OUTPUT)execveat.symlink: $(OUTPUT)execveat
> cd $(OUTPUT) && ln -s -f $(shell basename $<) $(shell basename $@)
> -$(OUTPUT)/execveat.denatured: $(OUTPUT)/execveat
> +$(OUTPUT)execveat.denatured: $(OUTPUT)execveat
> cp $< $@
> chmod -x $@
>
> diff --git a/tools/testing/selftests/ftrace/Makefile
> b/tools/testing/selftests/ftrace/Makefile
> index a8a5e21..33bb29b 100644
> --- a/tools/testing/selftests/ftrace/Makefile
> +++ b/tools/testing/selftests/ftrace/Makefile
> @@ -2,6 +2,6 @@ all:
>
> TEST_PROGS := ftracetest
> TEST_FILES := test.d
> -EXTRA_CLEAN := $(OUTPUT)/logs/*
> +EXTRA_CLEAN := $(OUTPUT)logs/*
>
> include ../lib.mk
> diff --git a/tools/testing/selftests/futex/Makefile
> b/tools/testing/selftests/futex/Makefile
> index 653c5cd..11c6c49 100644
> --- a/tools/testing/selftests/futex/Makefile
> +++ b/tools/testing/selftests/futex/Makefile
> @@ -8,9 +8,9 @@ include ../lib.mk
>
> all:
> for DIR in $(SUBDIRS); do \
> - BUILD_TARGET=$$OUTPUT/$$DIR; \
> + BUILD_TARGET=$$OUTPUT$$DIR; \
> mkdir $$BUILD_TARGET -p; \
> - make OUTPUT=$$BUILD_TARGET -C $$DIR $@;\
> + make OUTPUT=$$BUILD_TARGET/ -C $$DIR $@;\
> done
>
> override define RUN_TESTS
> @@ -22,9 +22,9 @@ override define INSTALL_RULE
> install -t $(INSTALL_PATH) $(TEST_PROGS) $(TEST_PROGS_EXTENDED) $(TEST_FILES)
>
> @for SUBDIR in $(SUBDIRS); do \
> - BUILD_TARGET=$$OUTPUT/$$SUBDIR; \
> + BUILD_TARGET=$$OUTPUT$$SUBDIR; \
> mkdir $$BUILD_TARGET -p; \
> - $(MAKE) OUTPUT=$$BUILD_TARGET -C $$SUBDIR
> INSTALL_PATH=$(INSTALL_PATH)/$$SUBDIR install; \
> + $(MAKE) OUTPUT=$$BUILD_TARGET/ -C $$SUBDIR
> INSTALL_PATH=$(INSTALL_PATH)/$$SUBDIR install; \
> done;
> endef
>
> @@ -34,7 +34,7 @@ endef
>
> clean:
> for DIR in $(SUBDIRS); do \
> - BUILD_TARGET=$$OUTPUT/$$DIR; \
> + BUILD_TARGET=$$OUTPUT$$DIR; \
> mkdir $$BUILD_TARGET -p; \
> - make OUTPUT=$$BUILD_TARGET -C $$DIR $@;\
> + make OUTPUT=$$BUILD_TARGET/ -C $$DIR $@;\
> done
> diff --git a/tools/testing/selftests/kcmp/Makefile
> b/tools/testing/selftests/kcmp/Makefile
> index 47aa988..0fb599e 100644
> --- a/tools/testing/selftests/kcmp/Makefile
> +++ b/tools/testing/selftests/kcmp/Makefile
> @@ -2,7 +2,7 @@ CFLAGS += -I../../../../usr/include/
>
> TEST_GEN_PROGS := kcmp_test
>
> -EXTRA_CLEAN := $(OUTPUT)/kcmp-test-file
> +EXTRA_CLEAN := $(OUTPUT)kcmp-test-file
>
> include ../lib.mk
>
> diff --git a/tools/testing/selftests/lib.mk b/tools/testing/selftests/lib.mk
> index ce96d80..716e920 100644
> --- a/tools/testing/selftests/lib.mk
> +++ b/tools/testing/selftests/lib.mk
> @@ -2,8 +2,8 @@
> # Makefile can operate with or without the kbuild infrastructure.
> CC := $(CROSS_COMPILE)gcc
>
> -TEST_GEN_PROGS := $(patsubst %,$(OUTPUT)/%,$(TEST_GEN_PROGS))
> -TEST_GEN_FILES := $(patsubst %,$(OUTPUT)/%,$(TEST_GEN_FILES))
> +TEST_GEN_PROGS := $(patsubst %,$(OUTPUT)%,$(TEST_GEN_PROGS))
> +TEST_GEN_FILES := $(patsubst %,$(OUTPUT)%,$(TEST_GEN_FILES))
>
> all: $(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED) $(TEST_GEN_FILES)
>
> @@ -50,13 +50,13 @@ emit_tests:
> clean:
> $(RM) -r $(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED)
> $(TEST_GEN_FILES) $(EXTRA_CLEAN)
>
> -$(OUTPUT)/%:%.c
> +$(OUTPUT)%:%.c
> $(LINK.c) $^ $(LDLIBS) -o $@
>
> -$(OUTPUT)/%.o:%.S
> +$(OUTPUT)%.o:%.S
> $(COMPILE.S) $^ -o $@
>
> -$(OUTPUT)/%:%.S
> +$(OUTPUT)%:%.S
> $(LINK.S) $^ $(LDLIBS) -o $@
>
> .PHONY: run_tests all clean install emit_tests
> diff --git a/tools/testing/selftests/powerpc/Makefile
> b/tools/testing/selftests/powerpc/Makefile
> index 1c5d057..1a1a33c 100644
> --- a/tools/testing/selftests/powerpc/Makefile
> +++ b/tools/testing/selftests/powerpc/Makefile
> @@ -34,35 +34,35 @@ endif
> all: $(SUB_DIRS)
>
> $(SUB_DIRS):
> - BUILD_TARGET=$$OUTPUT/$@; mkdir -p $$BUILD_TARGET; $(MAKE)
> OUTPUT=$$BUILD_TARGET -k -C $@ all
> + BUILD_TARGET=$$OUTPUT$@; mkdir -p $$BUILD_TARGET; $(MAKE)
> OUTPUT=$$BUILD_TARGET/ -k -C $@ all
>
> include ../lib.mk
>
> override define RUN_TESTS
> @for TARGET in $(SUB_DIRS); do \
> - BUILD_TARGET=$$OUTPUT/$$TARGET; \
> - $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET run_tests;\
> + BUILD_TARGET=$$OUTPUT$$TARGET; \
> + $(MAKE) OUTPUT=$$BUILD_TARGET/ -C $$TARGET run_tests;\
> done;
> endef
>
> override define INSTALL_RULE
> @for TARGET in $(SUB_DIRS); do \
> - BUILD_TARGET=$$OUTPUT/$$TARGET; \
> - $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET install;\
> + BUILD_TARGET=$$OUTPUT$$TARGET; \
> + $(MAKE) OUTPUT=$$BUILD_TARGET/ -C $$TARGET install;\
> done;
> endef
>
> override define EMIT_TESTS
> @for TARGET in $(SUB_DIRS); do \
> - BUILD_TARGET=$$OUTPUT/$$TARGET; \
> - $(MAKE) OUTPUT=$$BUILD_TARGET -s -C $$TARGET emit_tests;\
> + BUILD_TARGET=$$OUTPUT$$TARGET; \
> + $(MAKE) OUTPUT=$$BUILD_TARGET/ -s -C $$TARGET emit_tests;\
> done;
> endef
>
> clean:
> @for TARGET in $(SUB_DIRS); do \
> - BUILD_TARGET=$$OUTPUT/$$TARGET; \
> - $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET clean; \
> + BUILD_TARGET=$$OUTPUT$$TARGET; \
> + $(MAKE) OUTPUT=$$BUILD_TARGET/ -C $$TARGET clean; \
> done;
> rm -f tags
>
> diff --git a/tools/testing/selftests/powerpc/benchmarks/Makefile
> b/tools/testing/selftests/powerpc/benchmarks/Makefile
> index fb96a89..c720780 100644
> --- a/tools/testing/selftests/powerpc/benchmarks/Makefile
> +++ b/tools/testing/selftests/powerpc/benchmarks/Makefile
> @@ -6,6 +6,6 @@ include ../../lib.mk
>
> $(TEST_GEN_PROGS): ../harness.c
>
> -$(OUTPUT)/context_switch: ../utils.c
> -$(OUTPUT)/context_switch: CFLAGS += -maltivec -mvsx -mabi=altivec
> -$(OUTPUT)/context_switch: LDLIBS += -lpthread
> +$(OUTPUT)context_switch: ../utils.c
> +$(OUTPUT)context_switch: CFLAGS += -maltivec -mvsx -mabi=altivec
> +$(OUTPUT)context_switch: LDLIBS += -lpthread
> diff --git a/tools/testing/selftests/powerpc/copyloops/Makefile
> b/tools/testing/selftests/powerpc/copyloops/Makefile
> index 681ab19..60e195a 100644
> --- a/tools/testing/selftests/powerpc/copyloops/Makefile
> +++ b/tools/testing/selftests/powerpc/copyloops/Makefile
> @@ -12,9 +12,9 @@ EXTRA_SOURCES := validate.c ../harness.c
>
> include ../../lib.mk
>
> -$(OUTPUT)/copyuser_64: CPPFLAGS += -D
> COPY_LOOP=test___copy_tofrom_user_base
> -$(OUTPUT)/copyuser_power7: CPPFLAGS += -D
> COPY_LOOP=test___copy_tofrom_user_power7
> -$(OUTPUT)/memcpy_64: CPPFLAGS += -D COPY_LOOP=test_memcpy
> -$(OUTPUT)/memcpy_power7: CPPFLAGS += -D COPY_LOOP=test_memcpy_power7
> +$(OUTPUT)copyuser_64: CPPFLAGS += -D COPY_LOOP=test___copy_tofrom_user_base
> +$(OUTPUT)copyuser_power7: CPPFLAGS += -D
> COPY_LOOP=test___copy_tofrom_user_power7
> +$(OUTPUT)memcpy_64: CPPFLAGS += -D COPY_LOOP=test_memcpy
> +$(OUTPUT)memcpy_power7: CPPFLAGS += -D COPY_LOOP=test_memcpy_power7
>
> $(TEST_GEN_PROGS): $(EXTRA_SOURCES)
> diff --git a/tools/testing/selftests/powerpc/dscr/Makefile
> b/tools/testing/selftests/powerpc/dscr/Makefile
> index c5639de..378f825 100644
> --- a/tools/testing/selftests/powerpc/dscr/Makefile
> +++ b/tools/testing/selftests/powerpc/dscr/Makefile
> @@ -4,6 +4,6 @@ TEST_GEN_PROGS := dscr_default_test dscr_explicit_test
> dscr_user_test \
>
> include ../../lib.mk
>
> -$(OUTPUT)/dscr_default_test: LDLIBS += -lpthread
> +$(OUTPUT)dscr_default_test: LDLIBS += -lpthread
>
> $(TEST_GEN_PROGS): ../harness.c
> diff --git a/tools/testing/selftests/powerpc/math/Makefile
> b/tools/testing/selftests/powerpc/math/Makefile
> index fa8bae9..73d6f52 100644
> --- a/tools/testing/selftests/powerpc/math/Makefile
> +++ b/tools/testing/selftests/powerpc/math/Makefile
> @@ -5,13 +5,13 @@ include ../../lib.mk
> $(TEST_GEN_PROGS): ../harness.c
> $(TEST_GEN_PROGS): CFLAGS += -O2 -g -pthread -m64 -maltivec
>
> -$(OUTPUT)/fpu_syscall: fpu_asm.S
> -$(OUTPUT)/fpu_preempt: fpu_asm.S
> -$(OUTPUT)/fpu_signal: fpu_asm.S
> +$(OUTPUT)fpu_syscall: fpu_asm.S
> +$(OUTPUT)fpu_preempt: fpu_asm.S
> +$(OUTPUT)fpu_signal: fpu_asm.S
>
> -$(OUTPUT)/vmx_syscall: vmx_asm.S
> -$(OUTPUT)/vmx_preempt: vmx_asm.S
> -$(OUTPUT)/vmx_signal: vmx_asm.S
> +$(OUTPUT)vmx_syscall: vmx_asm.S
> +$(OUTPUT)vmx_preempt: vmx_asm.S
> +$(OUTPUT)vmx_signal: vmx_asm.S
>
> -$(OUTPUT)/vsx_preempt: CFLAGS += -mvsx
> -$(OUTPUT)/vsx_preempt: vsx_asm.S
> +$(OUTPUT)vsx_preempt: CFLAGS += -mvsx
> +$(OUTPUT)vsx_preempt: vsx_asm.S
> diff --git a/tools/testing/selftests/powerpc/mm/Makefile
> b/tools/testing/selftests/powerpc/mm/Makefile
> index 1cffe54..d4d2e68 100644
> --- a/tools/testing/selftests/powerpc/mm/Makefile
> +++ b/tools/testing/selftests/powerpc/mm/Makefile
> @@ -8,8 +8,8 @@ include ../../lib.mk
>
> $(TEST_GEN_PROGS): ../harness.c
>
> -$(OUTPUT)/prot_sao: ../utils.c
> +$(OUTPUT)prot_sao: ../utils.c
>
> -$(OUTPUT)/tempfile:
> +$(OUTPUT)tempfile:
> dd if=/dev/zero of=$@ bs=64k count=1
>
> diff --git a/tools/testing/selftests/powerpc/pmu/Makefile
> b/tools/testing/selftests/powerpc/pmu/Makefile
> index e4e55d1..17a9be7 100644
> --- a/tools/testing/selftests/powerpc/pmu/Makefile
> +++ b/tools/testing/selftests/powerpc/pmu/Makefile
> @@ -11,34 +11,34 @@ all: $(TEST_GEN_PROGS) ebb
> $(TEST_GEN_PROGS): $(EXTRA_SOURCES)
>
> # loop.S can only be built 64-bit
> -$(OUTPUT)/count_instructions: loop.S count_instructions.c $(EXTRA_SOURCES)
> +$(OUTPUT)count_instructions: loop.S count_instructions.c $(EXTRA_SOURCES)
> $(CC) $(CFLAGS) -m64 -o $@ $^
>
> -$(OUTPUT)/per_event_excludes: ../utils.c
> +$(OUTPUT)per_event_excludes: ../utils.c
>
> DEFAULT_RUN_TESTS := $(RUN_TESTS)
> override define RUN_TESTS
> $(DEFAULT_RUN_TESTS)
> - TARGET=ebb; BUILD_TARGET=$$OUTPUT/$$TARGET; $(MAKE)
> OUTPUT=$$BUILD_TARGET -C $$TARGET run_tests
> + TARGET=ebb; BUILD_TARGET=$$OUTPUT$$TARGET; $(MAKE)
> OUTPUT=$$BUILD_TARGET/ -C $$TARGET run_tests
> endef
>
> DEFAULT_EMIT_TESTS := $(EMIT_TESTS)
> override define EMIT_TESTS
> $(DEFAULT_EMIT_TESTS)
> - TARGET=ebb; BUILD_TARGET=$$OUTPUT/$$TARGET; $(MAKE)
> OUTPUT=$$BUILD_TARGET -s -C $$TARGET emit_tests
> + TARGET=ebb; BUILD_TARGET=$$OUTPUT$$TARGET; $(MAKE)
> OUTPUT=$$BUILD_TARGET/ -s -C $$TARGET emit_tests
> endef
>
> DEFAULT_INSTALL_RULE := $(INSTALL_RULE)
> override define INSTALL_RULE
> $(DEFAULT_INSTALL_RULE)
> - TARGET=ebb; BUILD_TARGET=$$OUTPUT/$$TARGET; $(MAKE)
> OUTPUT=$$BUILD_TARGET -C $$TARGET install
> + TARGET=ebb; BUILD_TARGET=$$OUTPUT$$TARGET; $(MAKE)
> OUTPUT=$$BUILD_TARGET/ -C $$TARGET install
> endef
>
> clean:
> - $(RM) $(TEST_GEN_PROGS) $(OUTPUT)/loop.o
> - TARGET=ebb; BUILD_TARGET=$$OUTPUT/$$TARGET; $(MAKE)
> OUTPUT=$$BUILD_TARGET -C $$TARGET clean
> + $(RM) $(TEST_GEN_PROGS) $(OUTPUT)loop.o
> + TARGET=ebb; BUILD_TARGET=$$OUTPUT$$TARGET; $(MAKE)
> OUTPUT=$$BUILD_TARGET/ -C $$TARGET clean
>
> ebb:
> - TARGET=$@; BUILD_TARGET=$$OUTPUT/$$TARGET; mkdir -p $$BUILD_TARGET;
> $(MAKE) OUTPUT=$$BUILD_TARGET -k -C $$TARGET all
> + TARGET=$@; BUILD_TARGET=$$OUTPUT$$TARGET; mkdir -p $$BUILD_TARGET;
> $(MAKE) OUTPUT=$$BUILD_TARGET/ -k -C $$TARGET all
>
> .PHONY: all run_tests clean ebb
> diff --git a/tools/testing/selftests/powerpc/pmu/ebb/Makefile
> b/tools/testing/selftests/powerpc/pmu/ebb/Makefile
> index 6001fb0..1512260 100644
> --- a/tools/testing/selftests/powerpc/pmu/ebb/Makefile
> +++ b/tools/testing/selftests/powerpc/pmu/ebb/Makefile
> @@ -21,6 +21,6 @@ include ../../../lib.mk
> $(TEST_GEN_PROGS): ../../harness.c ../../utils.c ../event.c ../lib.c \
> ebb.c ebb_handler.S trace.c busy_loop.S
>
> -$(OUTPUT)/instruction_count_test: ../loop.S
> +$(OUTPUT)instruction_count_test: ../loop.S
>
> -$(OUTPUT)/lost_exception_test: ../lib.c
> +$(OUTPUT)lost_exception_test: ../lib.c
> diff --git a/tools/testing/selftests/powerpc/switch_endian/Makefile
> b/tools/testing/selftests/powerpc/switch_endian/Makefile
> index b92c2a1..4d0bbf7 100644
> --- a/tools/testing/selftests/powerpc/switch_endian/Makefile
> +++ b/tools/testing/selftests/powerpc/switch_endian/Makefile
> @@ -2,14 +2,14 @@ TEST_GEN_PROGS := switch_endian_test
>
> ASFLAGS += -O2 -Wall -g -nostdlib -m64
>
> -EXTRA_CLEAN = $(OUTPUT)/*.o $(OUTPUT)/check-reversed.S
> +EXTRA_CLEAN = $(OUTPUT)*.o $(OUTPUT)check-reversed.S
>
> include ../../lib.mk
>
> -$(OUTPUT)/switch_endian_test: $(OUTPUT)/check-reversed.S
> +$(OUTPUT)switch_endian_test: $(OUTPUT)check-reversed.S
>
> -$(OUTPUT)/check-reversed.o: $(OUTPUT)/check.o
> +$(OUTPUT)check-reversed.o: $(OUTPUT)check.o
> $(CROSS_COMPILE)objcopy -j .text --reverse-bytes=4 -O binary $< $@
>
> -$(OUTPUT)/check-reversed.S: $(OUTPUT)/check-reversed.o
> +$(OUTPUT)check-reversed.S: $(OUTPUT)check-reversed.o
> hexdump -v -e '/1 ".byte 0x%02X\n"' $< > $@
> diff --git a/tools/testing/selftests/powerpc/tm/Makefile
> b/tools/testing/selftests/powerpc/tm/Makefile
> index 5576ee6..9c76e25 100644
> --- a/tools/testing/selftests/powerpc/tm/Makefile
> +++ b/tools/testing/selftests/powerpc/tm/Makefile
> @@ -10,10 +10,10 @@ $(TEST_GEN_PROGS): ../harness.c ../utils.c
>
> CFLAGS += -mhtm
>
> -$(OUTPUT)/tm-syscall: tm-syscall-asm.S
> -$(OUTPUT)/tm-syscall: CFLAGS += -I../../../../../usr/include
> -$(OUTPUT)/tm-tmspr: CFLAGS += -pthread
> +$(OUTPUT)tm-syscall: tm-syscall-asm.S
> +$(OUTPUT)tm-syscall: CFLAGS += -I../../../../../usr/include
> +$(OUTPUT)tm-tmspr: CFLAGS += -pthread
>
> -SIGNAL_CONTEXT_CHK_TESTS := $(patsubst
> %,$(OUTPUT)/%,$(SIGNAL_CONTEXT_CHK_TESTS))
> +SIGNAL_CONTEXT_CHK_TESTS := $(patsubst
> %,$(OUTPUT)%,$(SIGNAL_CONTEXT_CHK_TESTS))
> $(SIGNAL_CONTEXT_CHK_TESTS): tm-signal.S
> $(SIGNAL_CONTEXT_CHK_TESTS): CFLAGS += -mhtm -m64 -mvsx
> diff --git a/tools/testing/selftests/vm/Makefile
> b/tools/testing/selftests/vm/Makefile
> index 222ee45..1e7c02c 100644
> --- a/tools/testing/selftests/vm/Makefile
> +++ b/tools/testing/selftests/vm/Makefile
> @@ -19,10 +19,10 @@ TEST_PROGS := run_vmtests
>
> include ../lib.mk
>
> -$(OUTPUT)/userfaultfd: LDLIBS += -lpthread
> ../../../../usr/include/linux/kernel.h
> -$(OUTPUT)/userfaultfd_hugetlb: LDLIBS += -lpthread
> ../../../../usr/include/linux/kernel.h
> -$(OUTPUT)/userfaultfd_shmem: LDLIBS += -lpthread
> ../../../../usr/include/linux/kernel.h
> -$(OUTPUT)/mlock-random-test: LDLIBS += -lcap
> +$(OUTPUT)userfaultfd: LDLIBS += -lpthread
> ../../../../usr/include/linux/kernel.h
> +$(OUTPUT)userfaultfd_hugetlb: LDLIBS += -lpthread
> ../../../../usr/include/linux/kernel.h
> +$(OUTPUT)userfaultfd_shmem: LDLIBS += -lpthread
> ../../../../usr/include/linux/kernel.h
> +$(OUTPUT)mlock-random-test: LDLIBS += -lcap
>
> ../../../../usr/include/linux/kernel.h:
> make -C ../../../.. headers_install
> diff --git a/tools/testing/selftests/x86/Makefile
> b/tools/testing/selftests/x86/Makefile
> index 3a5ebae..42db9f4 100644
> --- a/tools/testing/selftests/x86/Makefile
> +++ b/tools/testing/selftests/x86/Makefile
> @@ -17,8 +17,8 @@ TARGETS_C_64BIT_ALL := $(TARGETS_C_BOTHBITS)
> $(TARGETS_C_64BIT_ONLY)
> BINARIES_32 := $(TARGETS_C_32BIT_ALL:%=%_32)
> BINARIES_64 := $(TARGETS_C_64BIT_ALL:%=%_64)
>
> -BINARIES_32 := $(patsubst %,$(OUTPUT)/%,$(BINARIES_32))
> -BINARIES_64 := $(patsubst %,$(OUTPUT)/%,$(BINARIES_64))
> +BINARIES_32 := $(patsubst %,$(OUTPUT)%,$(BINARIES_32))
> +BINARIES_64 := $(patsubst %,$(OUTPUT)%,$(BINARIES_64))
>
> CFLAGS := -O2 -g -std=gnu99 -pthread -Wall
>
> @@ -43,10 +43,10 @@ all_64: $(BINARIES_64)
> clean:
> $(RM) $(BINARIES_32) $(BINARIES_64)
>
> -$(BINARIES_32): $(OUTPUT)/%_32: %.c
> +$(BINARIES_32): $(OUTPUT)%_32: %.c
> $(CC) -m32 -o $@ $(CFLAGS) $(EXTRA_CFLAGS) $^ -lrt -ldl -lm
>
> -$(BINARIES_64): $(OUTPUT)/%_64: %.c
> +$(BINARIES_64): $(OUTPUT)%_64: %.c
> $(CC) -m64 -o $@ $(CFLAGS) $(EXTRA_CFLAGS) $^ -lrt -ldl
>
> # x86_64 users should be encouraged to install 32-bit libraries
> @@ -68,12 +68,12 @@ warn_32bit_failure:
> endif
>
> # Some tests have additional dependencies.
> -$(OUTPUT)/sysret_ss_attrs_64: thunks.S
> -$(OUTPUT)/ptrace_syscall_32: raw_syscall_helper_32.S
> -$(OUTPUT)/test_syscall_vdso_32: thunks_32.S
> +$(OUTPUT)sysret_ss_attrs_64: thunks.S
> +$(OUTPUT)ptrace_syscall_32: raw_syscall_helper_32.S
> +$(OUTPUT)test_syscall_vdso_32: thunks_32.S
>
> # check_initial_reg_state is special: it needs a custom entry, and it
> # needs to be static so that its interpreter doesn't destroy its initial
> # state.
> -$(OUTPUT)/check_initial_reg_state_32: CFLAGS += -Wl,-ereal_start -static
> -$(OUTPUT)/check_initial_reg_state_64: CFLAGS += -Wl,-ereal_start -static
> +$(OUTPUT)check_initial_reg_state_32: CFLAGS += -Wl,-ereal_start -static
> +$(OUTPUT)check_initial_reg_state_64: CFLAGS += -Wl,-ereal_start -static
>
Re: [PATCH v2 6/6] selftests: enable O and KBUILD_OUTPUT [ In reply to ]
Bamvor Zhang Jian <bamvor.zhangjian@linaro.org> writes:
> Here is a fix. I could build individual test case in x86 and build the whole
> x86 test cases successful respectively. And I do a quick test for all the
> subsets. Please review the patch if it is make sense to you and Michael.
> At the same time, I am buildind and testing all the testcases.
>
> Michael: could you please do me a favor to test the powerpc part? Thanks.

I would but the patch is white spaced damaged, can you resend it?

You can also test powerpc yourself, if you just install a cross compiler:

Fedora $ sudo dnf install gcc-c++-powerpc64-linux-gnu binutils-powerpc64-linux-gnu gcc-powerpc64-linux-gnu
Ubuntu $ sudo apt-get install gcc-powerpc64le-linux-gnu gcc-powerpc-linux-gnu libc-dev-powerpc-cross libc-dev-ppc64el-cross

$ make ARCH=powerpc headers_install
$ make ARCH=powerpc CROSS_COMPILE=powerpc64le-linux-gnu- -C tools/testing/selftests


cheers
Re: [PATCH v2 6/6] selftests: enable O and KBUILD_OUTPUT [ In reply to ]
Shuah Khan <shuahkh@osg.samsung.com> writes:

> On 03/21/2017 03:00 AM, Bamvor Zhang Jian wrote:
>> On 21 March 2017 at 16:35, Michael Ellerman <mpe@ellerman.id.au> wrote:
>>> Andy Lutomirski <luto@amacapital.net> writes:
>>>> On Tue, Nov 29, 2016 at 3:55 AM, <bamvor.zhangjian@huawei.com> wrote:
>>>>> From: Bamvor Jian Zhang <bamvor.zhangjian@linaro.org>
>>>>>
>>>>> 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.
>>>>
>>>> Sorry for noticing this late, but this patch
>>>> (a8ba798bc8ec663cf02e80b0dd770324de9bafd9) is really annoying for
>>>> people who *don't* use these fancy options:
>>>
>>> Yeah sorry, it wasn't quite ready to go in.
>
> Bamovar,
>
> Please give me heads up and ask me to not commit the patch,
> if you think it isn't ready.

That was me who wrote that above.

>> Do we really need "make -C tools/testing/selftests/x86 ldt_gdt_32"?
>> It is useful but it will skip the top level Makefile of selftests.
>
> Being able to build individual tests is an important use-case.

Then it needs to be tested before changes are merged.

cheers
Re: [PATCH v2 6/6] selftests: enable O and KBUILD_OUTPUT [ In reply to ]
Bamvor Zhang Jian <bamvor.zhangjian@linaro.org> writes:
> On 21 March 2017 at 16:35, Michael Ellerman <mpe@ellerman.id.au> wrote:
>> I see at least 18 Makefile's in tools/testing/selftests that use
>> $(OUTPUT)/, which would all need to be updated at least to use $(OUTPUT)
>> (no trailing slash), and then some other changes to not propagate OUTPUT
>> when the user didn't specify it. But hopefully someone will prove me
>> wrong.
> I also look at this issue. Originally, I use OUTPUT without slash in my
> patch. People argue that it is not very clear. So, I add slash in curent
> version.

That was me, you can say so.

I wasn't thinking at the time of OUTPUT being empty, but with hindsight
obviously I should have.

cheers
Re: [PATCH v2 6/6] selftests: enable O and KBUILD_OUTPUT [ In reply to ]
Hi, Michael, Shuah

On 22 March 2017 at 12:38, Michael Ellerman <mpe@ellerman.id.au> wrote:
> Bamvor Zhang Jian <bamvor.zhangjian@linaro.org> writes:
>> On 21 March 2017 at 16:35, Michael Ellerman <mpe@ellerman.id.au> wrote:
>>> I see at least 18 Makefile's in tools/testing/selftests that use
>>> $(OUTPUT)/, which would all need to be updated at least to use $(OUTPUT)
>>> (no trailing slash), and then some other changes to not propagate OUTPUT
>>> when the user didn't specify it. But hopefully someone will prove me
>>> wrong.
>> I also look at this issue. Originally, I use OUTPUT without slash in my
>> patch. People argue that it is not very clear. So, I add slash in curent
>> version.
>
> That was me, you can say so.
>
> I wasn't thinking at the time of OUTPUT being empty, but with hindsight
> obviously I should have.
After think about it. I find a way to keep OUTPUT with out slash. Could
you please take a look?

I have already test the x86 with the following method:
make -C tools/testing/selftests TAREGTS=x86
make -C tools/testing/selftests/x86
make -C tools/testing/selftests/x86 xxx

The build flag and dependency is correct.
Build all the testcase succesful. I am running the test and try difference build
method. Hope I could solve the regression soon.

Regards

Bamvor

From ae092145868def26665b588d718d1a7ab28b5c15 Mon Sep 17 00:00:00 2001
From: Bamvor Jian Zhang <bamvor.zhangjian@linaro.org>
Date: Wed, 22 Mar 2017 20:34:25 +0800
Subject: [PATCH] selftests: fix the broken individual test for x86

Andy Lutomirski report that build individual testcase in x86 is broken:

$ make -C tools/testing/selftests/x86 ldt_gdt_32
make: Entering directory '/home/luto/apps/linux/tools/testing/selftests/x86'
Makefile:44: warning: overriding recipe for target 'clean'
../lib.mk:55: warning: ignoring old recipe for target 'clean'
make: *** No rule to make target 'ldt_gdt_32'. Stop.
make: Leaving directory '/home/luto/apps/linux/tools/testing/selftests/x86'

This patch fix this issue by adding default OUTPUT and convert
target in Makefile of x86.

And also mention this use case in Documentation/kselftests.txt

Reported-by: Andy Lutomirski <luto@amacapital.net>
Signed-off-by: Bamvor Jian Zhang <bamvor.zhangjian@linaro.org>
---
Documentation/kselftest.txt | 6 ++++++
tools/testing/selftests/lib.mk | 2 +-
tools/testing/selftests/x86/Makefile | 23 ++++++++++++++---------
3 files changed, 21 insertions(+), 10 deletions(-)

diff --git a/Documentation/kselftest.txt b/Documentation/kselftest.txt
index 5bd5903..3dfca71 100644
--- a/Documentation/kselftest.txt
+++ b/Documentation/kselftest.txt
@@ -43,6 +43,12 @@ See the top-level tools/testing/selftests/Makefile
for the list of all
possible targets.


+Building individual test case of a subset
+=========================================
+You could build the individual test case in subset if subset supported:
+ $ make -C tools/testing/selftests/x86 ldt_gdt_32
+
+
Running the full range hotplug selftests
========================================

diff --git a/tools/testing/selftests/lib.mk b/tools/testing/selftests/lib.mk
index 069a1c9..df2fbfb 100644
--- a/tools/testing/selftests/lib.mk
+++ b/tools/testing/selftests/lib.mk
@@ -2,7 +2,7 @@
# Makefile can operate with or without the kbuild infrastructure.
CC := $(CROSS_COMPILE)gcc

-OUTPUT ?= $(shell pwd)/
+OUTPUT ?= $(shell pwd)

TEST_GEN_PROGS := $(patsubst %,$(OUTPUT)/%,$(TEST_GEN_PROGS))
TEST_GEN_FILES := $(patsubst %,$(OUTPUT)/%,$(TEST_GEN_FILES))
diff --git a/tools/testing/selftests/x86/Makefile
b/tools/testing/selftests/x86/Makefile
index 3a5ebae..f8ea3bb 100644
--- a/tools/testing/selftests/x86/Makefile
+++ b/tools/testing/selftests/x86/Makefile
@@ -17,8 +17,8 @@ TARGETS_C_64BIT_ALL := $(TARGETS_C_BOTHBITS)
$(TARGETS_C_64BIT_ONLY)
BINARIES_32 := $(TARGETS_C_32BIT_ALL:%=%_32)
BINARIES_64 := $(TARGETS_C_64BIT_ALL:%=%_64)

-BINARIES_32 := $(patsubst %,$(OUTPUT)/%,$(BINARIES_32))
-BINARIES_64 := $(patsubst %,$(OUTPUT)/%,$(BINARIES_64))
+BINARIES_32_FULL_PATH := $(patsubst %,$(OUTPUT)/%,$(BINARIES_32))
+BINARIES_64_FULL_PATH := $(patsubst %,$(OUTPUT)/%,$(BINARIES_64))

CFLAGS := -O2 -g -std=gnu99 -pthread -Wall

@@ -28,25 +28,29 @@ CAN_BUILD_X86_64 := $(shell ./check_cc.sh $(CC)
trivial_64bit_program.c)

ifeq ($(CAN_BUILD_I386),1)
all: all_32
-TEST_PROGS += $(BINARIES_32)
+TEST_PROGS += $(BINARIES_32_FULL_PATH)
endif

ifeq ($(CAN_BUILD_X86_64),1)
all: all_64
-TEST_PROGS += $(BINARIES_64)
+TEST_PROGS += $(BINARIES_64_FULL_PATH)
endif

-all_32: $(BINARIES_32)
+all_32: $(BINARIES_32_FULL_PATH)

-all_64: $(BINARIES_64)
+all_64: $(BINARIES_64_FULL_PATH)

clean:
- $(RM) $(BINARIES_32) $(BINARIES_64)
+ $(RM) $(BINARIES_32_FULL_PATH) $(BINARIES_64_FULL_PATH)

-$(BINARIES_32): $(OUTPUT)/%_32: %.c
+$(BINARIES_32): %_32: $(OUTPUT)/%_32
+
+$(BINARIES_64): %_64: $(OUTPUT)/%_64
+
+$(BINARIES_32_FULL_PATH): $(OUTPUT)/%_32: %.c
$(CC) -m32 -o $@ $(CFLAGS) $(EXTRA_CFLAGS) $^ -lrt -ldl -lm

-$(BINARIES_64): $(OUTPUT)/%_64: %.c
+$(BINARIES_64_FULL_PATH): $(OUTPUT)/%_64: %.c
$(CC) -m64 -o $@ $(CFLAGS) $(EXTRA_CFLAGS) $^ -lrt -ldl

# x86_64 users should be encouraged to install 32-bit libraries
@@ -77,3 +81,4 @@ $(OUTPUT)/test_syscall_vdso_32: thunks_32.S
# state.
$(OUTPUT)/check_initial_reg_state_32: CFLAGS += -Wl,-ereal_start -static
$(OUTPUT)/check_initial_reg_state_64: CFLAGS += -Wl,-ereal_start -static
+
--
1.9.1

> cheers
Re: [PATCH v2 6/6] selftests: enable O and KBUILD_OUTPUT [ In reply to ]
Hi, Shuah

On 21 March 2017 at 19:02, Shuah Khan <shuahkh@osg.samsung.com> wrote:
> On 03/21/2017 10:09 AM, Bamvor Zhang Jian wrote:
>> Hi, Shuah
>>
>> On 21 March 2017 at 21:54, Shuah Khan <shuahkh@osg.samsung.com> wrote:
>>> On 03/21/2017 03:00 AM, Bamvor Zhang Jian wrote:
>>>> Hi,
>>>>
>>>> On 21 March 2017 at 16:35, Michael Ellerman <mpe@ellerman.id.au> wrote:
>>>>> Andy Lutomirski <luto@amacapital.net> writes:
>>>>>
>>>>>> On Tue, Nov 29, 2016 at 3:55 AM, <bamvor.zhangjian@huawei.com> wrote:
>>>>>>> From: Bamvor Jian Zhang <bamvor.zhangjian@linaro.org>
>>>>>>>
>>>>>>> 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.
>>>>>>
>>>>>> Sorry for noticing this late, but this patch
>>>>>> (a8ba798bc8ec663cf02e80b0dd770324de9bafd9) is really annoying for
>>>>>> people who *don't* use these fancy options:
>>>>>
>>>>> Yeah sorry, it wasn't quite ready to go in.
>>>
>>> Bamovar,
>>>
>>> Please give me heads up and ask me to not commit the patch,
>>> if you think it isn't ready.
>>>
>>>>>
>>>>>> $ make -C tools/testing/selftests/x86 ldt_gdt_32
>>>>>> make: Entering directory '/home/luto/apps/linux/tools/testing/selftests/x86'
>>>>>> Makefile:44: warning: overriding recipe for target 'clean'
>>>>>> ../lib.mk:55: warning: ignoring old recipe for target 'clean'
>>>>>> make: *** No rule to make target 'ldt_gdt_32'. Stop.
>>>>>> make: Leaving directory '/home/luto/apps/linux/tools/testing/selftests/x86'
>>>>>>
>>>>>> Is there any way that you can make this work again?
>>>>>
>>>>> There obviously is *a* way, but I'm not sure there's a simple and
>>>>> obviously correct way that is an easy fix for 4.11.
>>>>>
>>>>> I see at least 18 Makefile's in tools/testing/selftests that use
>>>>> $(OUTPUT)/, which would all need to be updated at least to use $(OUTPUT)
>>>>> (no trailing slash), and then some other changes to not propagate OUTPUT
>>>>> when the user didn't specify it. But hopefully someone will prove me
>>>>> wrong.
>>>> I also look at this issue. Originally, I use OUTPUT without slash in my
>>>> patch. People argue that it is not very clear. So, I add slash in curent
>>>> version.
>>>>>
>>>>> As a (poor) alternative you can do:
>>>>>
>>>>> $ cd tools/testing/selftests/x86; make $PWD/ldt_gdt_32
>>>>>
>>>>> or just:
>>>>>
>>>>> $ make -C tools/testing/selftests/x86
>>>>>
>>>>> cheers
>>>> Do we really need "make -C tools/testing/selftests/x86 ldt_gdt_32"?
>>>> It is useful but it will skip the top level Makefile of selftests.
>>>
>>> Being able to build individual tests is an important use-case. Please
>>> see kselftest.txt under Documentation directory for all the use-cases
>>> and new patches shouldn't break these use-cases.
>> Understand. I am sorry I do not know this use case before. And I read
>> kselftest.txt again, I do not find this use case is mentioned. So,
>> I add a few lines in kselftest.txt to avoid break this use case in future.
>> Is there any other use cases I should test?
>
> Running an individual test as in the example below should be allowed.
> make -C tools/testing/selftests hotplug
Yes. This is what I test for the previous patches. I test all the subset of
testcases,
>
> Also individual tests are often run from the test director. For example,
>
> cd tools/testing/selftests/x86; make
This is what I am missing. I think we should also mention that
do not break the things if user bypass the toplevel Makefile of kselftests.

Glad to know all the senarios. I just send a new patch. Please take a
look.

Regards

Bamvor

> thanks,
> -- Shuah
>
>>>
>>> Breaking these use-cases is a regression and we have to fix it
>> Here is a fix. I could build individual test case in x86 and build the whole
>> x86 test cases successful respectively. And I do a quick test for all the
>> subsets. Please review the patch if it is make sense to you and Michael.
>> At the same time, I am buildind and testing all the testcases.
>>
>> Michael: could you please do me a favor to test the powerpc part? Thanks.
>>
>> From 21b17710d23783c5148303e5628b52d281e6f62b Mon Sep 17 00:00:00 2001
>> From: Bamvor Jian Zhang <bamvor.zhangjian@linaro.org>
>> Date: Tue, 21 Mar 2017 22:38:01 +0800
>> Subject: [PATCH] selftests: fix the broken individual test for x86
>>
>> Andy Lutomirski report that build individual testcase in x86 is broken:
>>
>> $ make -C tools/testing/selftests/x86 ldt_gdt_32
>> make: Entering directory '/home/luto/apps/linux/tools/testing/selftests/x86'
>> Makefile:44: warning: overriding recipe for target 'clean'
>> ../lib.mk:55: warning: ignoring old recipe for target 'clean'
>> make: *** No rule to make target 'ldt_gdt_32'. Stop.
>> make: Leaving directory '/home/luto/apps/linux/tools/testing/selftests/x86'
>>
>> This patch fix this issue by removing the slash after OUTPUT.
>> And also mention this use case in Documentation/kselftests.txt
>>
>> Reported-by: Andy Lutomirski <luto@amacapital.net>
>> Suggested-by: Michael Ellerman <mpe@ellerman.id.au>
>> Signed-off-by: Bamvor Jian Zhang <bamvor.zhangjian@linaro.org>
>> ---
>> Documentation/kselftest.txt | 5 +++++
>> tools/testing/selftests/Makefile | 16 ++++++++--------
>> tools/testing/selftests/exec/Makefile | 10 +++++-----
>> tools/testing/selftests/ftrace/Makefile | 2 +-
>> tools/testing/selftests/futex/Makefile | 12 ++++++------
>> tools/testing/selftests/kcmp/Makefile | 2 +-
>> tools/testing/selftests/lib.mk | 10 +++++-----
>> tools/testing/selftests/powerpc/Makefile | 18 +++++++++---------
>> tools/testing/selftests/powerpc/benchmarks/Makefile | 6 +++---
>> tools/testing/selftests/powerpc/copyloops/Makefile | 8 ++++----
>> tools/testing/selftests/powerpc/dscr/Makefile | 2 +-
>> tools/testing/selftests/powerpc/math/Makefile | 16 ++++++++--------
>> tools/testing/selftests/powerpc/mm/Makefile | 4 ++--
>> tools/testing/selftests/powerpc/pmu/Makefile | 16 ++++++++--------
>> tools/testing/selftests/powerpc/pmu/ebb/Makefile | 4 ++--
>> tools/testing/selftests/powerpc/switch_endian/Makefile | 8 ++++----
>> tools/testing/selftests/powerpc/tm/Makefile | 8 ++++----
>> tools/testing/selftests/vm/Makefile | 8 ++++----
>> tools/testing/selftests/x86/Makefile | 18 +++++++++---------
>> 19 files changed, 89 insertions(+), 84 deletions(-)
>>
>> diff --git a/Documentation/kselftest.txt b/Documentation/kselftest.txt
>> index 5bd5903..6197e94 100644
>> --- a/Documentation/kselftest.txt
>> +++ b/Documentation/kselftest.txt
>> @@ -42,6 +42,11 @@ You can specify multiple tests to build and run:
>> See the top-level tools/testing/selftests/Makefile for the list of all
>> possible targets.
>>
>> +Building individual test case of a subset
>> +=========================================
>> +You could build the individual test case in subset if subset supported:
>> + $ make -C tools/testing/selftests/x86 ldt_gdt_32
>> +
>>
>> Running the full range hotplug selftests
>> ========================================
>> diff --git a/tools/testing/selftests/Makefile b/tools/testing/selftests/Makefile
>> index e8b79a7..6cc93c1 100644
>> --- a/tools/testing/selftests/Makefile
>> +++ b/tools/testing/selftests/Makefile
>> @@ -64,31 +64,31 @@ all:
>> 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:
>> @@ -104,7 +104,7 @@ ifdef INSTALL_PATH
>> mkdir -p $(INSTALL_PATH)
>> 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
>> @@ -117,7 +117,7 @@ ifdef INSTALL_PATH
>> echo "echo ; echo Running tests in $$TARGET" >> $(ALL_SCRIPT); \
>> echo "echo ========================================" >> $(ALL_SCRIPT); \
>> echo "cd $$TARGET" >> $(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 "cd \$$ROOT" >> $(ALL_SCRIPT); \
>> done;
>>
>> @@ -129,7 +129,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: install
>> diff --git a/tools/testing/selftests/exec/Makefile
>> b/tools/testing/selftests/exec/Makefile
>> index 2e13035..2f3b200 100644
>> --- a/tools/testing/selftests/exec/Makefile
>> +++ b/tools/testing/selftests/exec/Makefile
>> @@ -5,19 +5,19 @@ TEST_GEN_FILES := execveat.symlink
>> execveat.denatured script subdir
>> # Makefile is a run-time dependency, since it's accessed by the execveat test
>> TEST_FILES := Makefile
>>
>> -EXTRA_CLEAN := $(OUTPUT)/subdir.moved $(OUTPUT)/execveat.moved $(OUTPUT)/xxxxx*
>> +EXTRA_CLEAN := $(OUTPUT)subdir.moved $(OUTPUT)execveat.moved $(OUTPUT)xxxxx*
>>
>> include ../lib.mk
>>
>> -$(OUTPUT)/subdir:
>> +$(OUTPUT)subdir:
>> mkdir -p $@
>> -$(OUTPUT)/script:
>> +$(OUTPUT)script:
>> echo '#!/bin/sh' > $@
>> echo 'exit $$*' >> $@
>> chmod +x $@
>> -$(OUTPUT)/execveat.symlink: $(OUTPUT)/execveat
>> +$(OUTPUT)execveat.symlink: $(OUTPUT)execveat
>> cd $(OUTPUT) && ln -s -f $(shell basename $<) $(shell basename $@)
>> -$(OUTPUT)/execveat.denatured: $(OUTPUT)/execveat
>> +$(OUTPUT)execveat.denatured: $(OUTPUT)execveat
>> cp $< $@
>> chmod -x $@
>>
>> diff --git a/tools/testing/selftests/ftrace/Makefile
>> b/tools/testing/selftests/ftrace/Makefile
>> index a8a5e21..33bb29b 100644
>> --- a/tools/testing/selftests/ftrace/Makefile
>> +++ b/tools/testing/selftests/ftrace/Makefile
>> @@ -2,6 +2,6 @@ all:
>>
>> TEST_PROGS := ftracetest
>> TEST_FILES := test.d
>> -EXTRA_CLEAN := $(OUTPUT)/logs/*
>> +EXTRA_CLEAN := $(OUTPUT)logs/*
>>
>> include ../lib.mk
>> diff --git a/tools/testing/selftests/futex/Makefile
>> b/tools/testing/selftests/futex/Makefile
>> index 653c5cd..11c6c49 100644
>> --- a/tools/testing/selftests/futex/Makefile
>> +++ b/tools/testing/selftests/futex/Makefile
>> @@ -8,9 +8,9 @@ include ../lib.mk
>>
>> all:
>> for DIR in $(SUBDIRS); do \
>> - BUILD_TARGET=$$OUTPUT/$$DIR; \
>> + BUILD_TARGET=$$OUTPUT$$DIR; \
>> mkdir $$BUILD_TARGET -p; \
>> - make OUTPUT=$$BUILD_TARGET -C $$DIR $@;\
>> + make OUTPUT=$$BUILD_TARGET/ -C $$DIR $@;\
>> done
>>
>> override define RUN_TESTS
>> @@ -22,9 +22,9 @@ override define INSTALL_RULE
>> install -t $(INSTALL_PATH) $(TEST_PROGS) $(TEST_PROGS_EXTENDED) $(TEST_FILES)
>>
>> @for SUBDIR in $(SUBDIRS); do \
>> - BUILD_TARGET=$$OUTPUT/$$SUBDIR; \
>> + BUILD_TARGET=$$OUTPUT$$SUBDIR; \
>> mkdir $$BUILD_TARGET -p; \
>> - $(MAKE) OUTPUT=$$BUILD_TARGET -C $$SUBDIR
>> INSTALL_PATH=$(INSTALL_PATH)/$$SUBDIR install; \
>> + $(MAKE) OUTPUT=$$BUILD_TARGET/ -C $$SUBDIR
>> INSTALL_PATH=$(INSTALL_PATH)/$$SUBDIR install; \
>> done;
>> endef
>>
>> @@ -34,7 +34,7 @@ endef
>>
>> clean:
>> for DIR in $(SUBDIRS); do \
>> - BUILD_TARGET=$$OUTPUT/$$DIR; \
>> + BUILD_TARGET=$$OUTPUT$$DIR; \
>> mkdir $$BUILD_TARGET -p; \
>> - make OUTPUT=$$BUILD_TARGET -C $$DIR $@;\
>> + make OUTPUT=$$BUILD_TARGET/ -C $$DIR $@;\
>> done
>> diff --git a/tools/testing/selftests/kcmp/Makefile
>> b/tools/testing/selftests/kcmp/Makefile
>> index 47aa988..0fb599e 100644
>> --- a/tools/testing/selftests/kcmp/Makefile
>> +++ b/tools/testing/selftests/kcmp/Makefile
>> @@ -2,7 +2,7 @@ CFLAGS += -I../../../../usr/include/
>>
>> TEST_GEN_PROGS := kcmp_test
>>
>> -EXTRA_CLEAN := $(OUTPUT)/kcmp-test-file
>> +EXTRA_CLEAN := $(OUTPUT)kcmp-test-file
>>
>> include ../lib.mk
>>
>> diff --git a/tools/testing/selftests/lib.mk b/tools/testing/selftests/lib.mk
>> index ce96d80..716e920 100644
>> --- a/tools/testing/selftests/lib.mk
>> +++ b/tools/testing/selftests/lib.mk
>> @@ -2,8 +2,8 @@
>> # Makefile can operate with or without the kbuild infrastructure.
>> CC := $(CROSS_COMPILE)gcc
>>
>> -TEST_GEN_PROGS := $(patsubst %,$(OUTPUT)/%,$(TEST_GEN_PROGS))
>> -TEST_GEN_FILES := $(patsubst %,$(OUTPUT)/%,$(TEST_GEN_FILES))
>> +TEST_GEN_PROGS := $(patsubst %,$(OUTPUT)%,$(TEST_GEN_PROGS))
>> +TEST_GEN_FILES := $(patsubst %,$(OUTPUT)%,$(TEST_GEN_FILES))
>>
>> all: $(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED) $(TEST_GEN_FILES)
>>
>> @@ -50,13 +50,13 @@ emit_tests:
>> clean:
>> $(RM) -r $(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED)
>> $(TEST_GEN_FILES) $(EXTRA_CLEAN)
>>
>> -$(OUTPUT)/%:%.c
>> +$(OUTPUT)%:%.c
>> $(LINK.c) $^ $(LDLIBS) -o $@
>>
>> -$(OUTPUT)/%.o:%.S
>> +$(OUTPUT)%.o:%.S
>> $(COMPILE.S) $^ -o $@
>>
>> -$(OUTPUT)/%:%.S
>> +$(OUTPUT)%:%.S
>> $(LINK.S) $^ $(LDLIBS) -o $@
>>
>> .PHONY: run_tests all clean install emit_tests
>> diff --git a/tools/testing/selftests/powerpc/Makefile
>> b/tools/testing/selftests/powerpc/Makefile
>> index 1c5d057..1a1a33c 100644
>> --- a/tools/testing/selftests/powerpc/Makefile
>> +++ b/tools/testing/selftests/powerpc/Makefile
>> @@ -34,35 +34,35 @@ endif
>> all: $(SUB_DIRS)
>>
>> $(SUB_DIRS):
>> - BUILD_TARGET=$$OUTPUT/$@; mkdir -p $$BUILD_TARGET; $(MAKE)
>> OUTPUT=$$BUILD_TARGET -k -C $@ all
>> + BUILD_TARGET=$$OUTPUT$@; mkdir -p $$BUILD_TARGET; $(MAKE)
>> OUTPUT=$$BUILD_TARGET/ -k -C $@ all
>>
>> include ../lib.mk
>>
>> override define RUN_TESTS
>> @for TARGET in $(SUB_DIRS); do \
>> - BUILD_TARGET=$$OUTPUT/$$TARGET; \
>> - $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET run_tests;\
>> + BUILD_TARGET=$$OUTPUT$$TARGET; \
>> + $(MAKE) OUTPUT=$$BUILD_TARGET/ -C $$TARGET run_tests;\
>> done;
>> endef
>>
>> override define INSTALL_RULE
>> @for TARGET in $(SUB_DIRS); do \
>> - BUILD_TARGET=$$OUTPUT/$$TARGET; \
>> - $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET install;\
>> + BUILD_TARGET=$$OUTPUT$$TARGET; \
>> + $(MAKE) OUTPUT=$$BUILD_TARGET/ -C $$TARGET install;\
>> done;
>> endef
>>
>> override define EMIT_TESTS
>> @for TARGET in $(SUB_DIRS); do \
>> - BUILD_TARGET=$$OUTPUT/$$TARGET; \
>> - $(MAKE) OUTPUT=$$BUILD_TARGET -s -C $$TARGET emit_tests;\
>> + BUILD_TARGET=$$OUTPUT$$TARGET; \
>> + $(MAKE) OUTPUT=$$BUILD_TARGET/ -s -C $$TARGET emit_tests;\
>> done;
>> endef
>>
>> clean:
>> @for TARGET in $(SUB_DIRS); do \
>> - BUILD_TARGET=$$OUTPUT/$$TARGET; \
>> - $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET clean; \
>> + BUILD_TARGET=$$OUTPUT$$TARGET; \
>> + $(MAKE) OUTPUT=$$BUILD_TARGET/ -C $$TARGET clean; \
>> done;
>> rm -f tags
>>
>> diff --git a/tools/testing/selftests/powerpc/benchmarks/Makefile
>> b/tools/testing/selftests/powerpc/benchmarks/Makefile
>> index fb96a89..c720780 100644
>> --- a/tools/testing/selftests/powerpc/benchmarks/Makefile
>> +++ b/tools/testing/selftests/powerpc/benchmarks/Makefile
>> @@ -6,6 +6,6 @@ include ../../lib.mk
>>
>> $(TEST_GEN_PROGS): ../harness.c
>>
>> -$(OUTPUT)/context_switch: ../utils.c
>> -$(OUTPUT)/context_switch: CFLAGS += -maltivec -mvsx -mabi=altivec
>> -$(OUTPUT)/context_switch: LDLIBS += -lpthread
>> +$(OUTPUT)context_switch: ../utils.c
>> +$(OUTPUT)context_switch: CFLAGS += -maltivec -mvsx -mabi=altivec
>> +$(OUTPUT)context_switch: LDLIBS += -lpthread
>> diff --git a/tools/testing/selftests/powerpc/copyloops/Makefile
>> b/tools/testing/selftests/powerpc/copyloops/Makefile
>> index 681ab19..60e195a 100644
>> --- a/tools/testing/selftests/powerpc/copyloops/Makefile
>> +++ b/tools/testing/selftests/powerpc/copyloops/Makefile
>> @@ -12,9 +12,9 @@ EXTRA_SOURCES := validate.c ../harness.c
>>
>> include ../../lib.mk
>>
>> -$(OUTPUT)/copyuser_64: CPPFLAGS += -D
>> COPY_LOOP=test___copy_tofrom_user_base
>> -$(OUTPUT)/copyuser_power7: CPPFLAGS += -D
>> COPY_LOOP=test___copy_tofrom_user_power7
>> -$(OUTPUT)/memcpy_64: CPPFLAGS += -D COPY_LOOP=test_memcpy
>> -$(OUTPUT)/memcpy_power7: CPPFLAGS += -D COPY_LOOP=test_memcpy_power7
>> +$(OUTPUT)copyuser_64: CPPFLAGS += -D COPY_LOOP=test___copy_tofrom_user_base
>> +$(OUTPUT)copyuser_power7: CPPFLAGS += -D
>> COPY_LOOP=test___copy_tofrom_user_power7
>> +$(OUTPUT)memcpy_64: CPPFLAGS += -D COPY_LOOP=test_memcpy
>> +$(OUTPUT)memcpy_power7: CPPFLAGS += -D COPY_LOOP=test_memcpy_power7
>>
>> $(TEST_GEN_PROGS): $(EXTRA_SOURCES)
>> diff --git a/tools/testing/selftests/powerpc/dscr/Makefile
>> b/tools/testing/selftests/powerpc/dscr/Makefile
>> index c5639de..378f825 100644
>> --- a/tools/testing/selftests/powerpc/dscr/Makefile
>> +++ b/tools/testing/selftests/powerpc/dscr/Makefile
>> @@ -4,6 +4,6 @@ TEST_GEN_PROGS := dscr_default_test dscr_explicit_test
>> dscr_user_test \
>>
>> include ../../lib.mk
>>
>> -$(OUTPUT)/dscr_default_test: LDLIBS += -lpthread
>> +$(OUTPUT)dscr_default_test: LDLIBS += -lpthread
>>
>> $(TEST_GEN_PROGS): ../harness.c
>> diff --git a/tools/testing/selftests/powerpc/math/Makefile
>> b/tools/testing/selftests/powerpc/math/Makefile
>> index fa8bae9..73d6f52 100644
>> --- a/tools/testing/selftests/powerpc/math/Makefile
>> +++ b/tools/testing/selftests/powerpc/math/Makefile
>> @@ -5,13 +5,13 @@ include ../../lib.mk
>> $(TEST_GEN_PROGS): ../harness.c
>> $(TEST_GEN_PROGS): CFLAGS += -O2 -g -pthread -m64 -maltivec
>>
>> -$(OUTPUT)/fpu_syscall: fpu_asm.S
>> -$(OUTPUT)/fpu_preempt: fpu_asm.S
>> -$(OUTPUT)/fpu_signal: fpu_asm.S
>> +$(OUTPUT)fpu_syscall: fpu_asm.S
>> +$(OUTPUT)fpu_preempt: fpu_asm.S
>> +$(OUTPUT)fpu_signal: fpu_asm.S
>>
>> -$(OUTPUT)/vmx_syscall: vmx_asm.S
>> -$(OUTPUT)/vmx_preempt: vmx_asm.S
>> -$(OUTPUT)/vmx_signal: vmx_asm.S
>> +$(OUTPUT)vmx_syscall: vmx_asm.S
>> +$(OUTPUT)vmx_preempt: vmx_asm.S
>> +$(OUTPUT)vmx_signal: vmx_asm.S
>>
>> -$(OUTPUT)/vsx_preempt: CFLAGS += -mvsx
>> -$(OUTPUT)/vsx_preempt: vsx_asm.S
>> +$(OUTPUT)vsx_preempt: CFLAGS += -mvsx
>> +$(OUTPUT)vsx_preempt: vsx_asm.S
>> diff --git a/tools/testing/selftests/powerpc/mm/Makefile
>> b/tools/testing/selftests/powerpc/mm/Makefile
>> index 1cffe54..d4d2e68 100644
>> --- a/tools/testing/selftests/powerpc/mm/Makefile
>> +++ b/tools/testing/selftests/powerpc/mm/Makefile
>> @@ -8,8 +8,8 @@ include ../../lib.mk
>>
>> $(TEST_GEN_PROGS): ../harness.c
>>
>> -$(OUTPUT)/prot_sao: ../utils.c
>> +$(OUTPUT)prot_sao: ../utils.c
>>
>> -$(OUTPUT)/tempfile:
>> +$(OUTPUT)tempfile:
>> dd if=/dev/zero of=$@ bs=64k count=1
>>
>> diff --git a/tools/testing/selftests/powerpc/pmu/Makefile
>> b/tools/testing/selftests/powerpc/pmu/Makefile
>> index e4e55d1..17a9be7 100644
>> --- a/tools/testing/selftests/powerpc/pmu/Makefile
>> +++ b/tools/testing/selftests/powerpc/pmu/Makefile
>> @@ -11,34 +11,34 @@ all: $(TEST_GEN_PROGS) ebb
>> $(TEST_GEN_PROGS): $(EXTRA_SOURCES)
>>
>> # loop.S can only be built 64-bit
>> -$(OUTPUT)/count_instructions: loop.S count_instructions.c $(EXTRA_SOURCES)
>> +$(OUTPUT)count_instructions: loop.S count_instructions.c $(EXTRA_SOURCES)
>> $(CC) $(CFLAGS) -m64 -o $@ $^
>>
>> -$(OUTPUT)/per_event_excludes: ../utils.c
>> +$(OUTPUT)per_event_excludes: ../utils.c
>>
>> DEFAULT_RUN_TESTS := $(RUN_TESTS)
>> override define RUN_TESTS
>> $(DEFAULT_RUN_TESTS)
>> - TARGET=ebb; BUILD_TARGET=$$OUTPUT/$$TARGET; $(MAKE)
>> OUTPUT=$$BUILD_TARGET -C $$TARGET run_tests
>> + TARGET=ebb; BUILD_TARGET=$$OUTPUT$$TARGET; $(MAKE)
>> OUTPUT=$$BUILD_TARGET/ -C $$TARGET run_tests
>> endef
>>
>> DEFAULT_EMIT_TESTS := $(EMIT_TESTS)
>> override define EMIT_TESTS
>> $(DEFAULT_EMIT_TESTS)
>> - TARGET=ebb; BUILD_TARGET=$$OUTPUT/$$TARGET; $(MAKE)
>> OUTPUT=$$BUILD_TARGET -s -C $$TARGET emit_tests
>> + TARGET=ebb; BUILD_TARGET=$$OUTPUT$$TARGET; $(MAKE)
>> OUTPUT=$$BUILD_TARGET/ -s -C $$TARGET emit_tests
>> endef
>>
>> DEFAULT_INSTALL_RULE := $(INSTALL_RULE)
>> override define INSTALL_RULE
>> $(DEFAULT_INSTALL_RULE)
>> - TARGET=ebb; BUILD_TARGET=$$OUTPUT/$$TARGET; $(MAKE)
>> OUTPUT=$$BUILD_TARGET -C $$TARGET install
>> + TARGET=ebb; BUILD_TARGET=$$OUTPUT$$TARGET; $(MAKE)
>> OUTPUT=$$BUILD_TARGET/ -C $$TARGET install
>> endef
>>
>> clean:
>> - $(RM) $(TEST_GEN_PROGS) $(OUTPUT)/loop.o
>> - TARGET=ebb; BUILD_TARGET=$$OUTPUT/$$TARGET; $(MAKE)
>> OUTPUT=$$BUILD_TARGET -C $$TARGET clean
>> + $(RM) $(TEST_GEN_PROGS) $(OUTPUT)loop.o
>> + TARGET=ebb; BUILD_TARGET=$$OUTPUT$$TARGET; $(MAKE)
>> OUTPUT=$$BUILD_TARGET/ -C $$TARGET clean
>>
>> ebb:
>> - TARGET=$@; BUILD_TARGET=$$OUTPUT/$$TARGET; mkdir -p $$BUILD_TARGET;
>> $(MAKE) OUTPUT=$$BUILD_TARGET -k -C $$TARGET all
>> + TARGET=$@; BUILD_TARGET=$$OUTPUT$$TARGET; mkdir -p $$BUILD_TARGET;
>> $(MAKE) OUTPUT=$$BUILD_TARGET/ -k -C $$TARGET all
>>
>> .PHONY: all run_tests clean ebb
>> diff --git a/tools/testing/selftests/powerpc/pmu/ebb/Makefile
>> b/tools/testing/selftests/powerpc/pmu/ebb/Makefile
>> index 6001fb0..1512260 100644
>> --- a/tools/testing/selftests/powerpc/pmu/ebb/Makefile
>> +++ b/tools/testing/selftests/powerpc/pmu/ebb/Makefile
>> @@ -21,6 +21,6 @@ include ../../../lib.mk
>> $(TEST_GEN_PROGS): ../../harness.c ../../utils.c ../event.c ../lib.c \
>> ebb.c ebb_handler.S trace.c busy_loop.S
>>
>> -$(OUTPUT)/instruction_count_test: ../loop.S
>> +$(OUTPUT)instruction_count_test: ../loop.S
>>
>> -$(OUTPUT)/lost_exception_test: ../lib.c
>> +$(OUTPUT)lost_exception_test: ../lib.c
>> diff --git a/tools/testing/selftests/powerpc/switch_endian/Makefile
>> b/tools/testing/selftests/powerpc/switch_endian/Makefile
>> index b92c2a1..4d0bbf7 100644
>> --- a/tools/testing/selftests/powerpc/switch_endian/Makefile
>> +++ b/tools/testing/selftests/powerpc/switch_endian/Makefile
>> @@ -2,14 +2,14 @@ TEST_GEN_PROGS := switch_endian_test
>>
>> ASFLAGS += -O2 -Wall -g -nostdlib -m64
>>
>> -EXTRA_CLEAN = $(OUTPUT)/*.o $(OUTPUT)/check-reversed.S
>> +EXTRA_CLEAN = $(OUTPUT)*.o $(OUTPUT)check-reversed.S
>>
>> include ../../lib.mk
>>
>> -$(OUTPUT)/switch_endian_test: $(OUTPUT)/check-reversed.S
>> +$(OUTPUT)switch_endian_test: $(OUTPUT)check-reversed.S
>>
>> -$(OUTPUT)/check-reversed.o: $(OUTPUT)/check.o
>> +$(OUTPUT)check-reversed.o: $(OUTPUT)check.o
>> $(CROSS_COMPILE)objcopy -j .text --reverse-bytes=4 -O binary $< $@
>>
>> -$(OUTPUT)/check-reversed.S: $(OUTPUT)/check-reversed.o
>> +$(OUTPUT)check-reversed.S: $(OUTPUT)check-reversed.o
>> hexdump -v -e '/1 ".byte 0x%02X\n"' $< > $@
>> diff --git a/tools/testing/selftests/powerpc/tm/Makefile
>> b/tools/testing/selftests/powerpc/tm/Makefile
>> index 5576ee6..9c76e25 100644
>> --- a/tools/testing/selftests/powerpc/tm/Makefile
>> +++ b/tools/testing/selftests/powerpc/tm/Makefile
>> @@ -10,10 +10,10 @@ $(TEST_GEN_PROGS): ../harness.c ../utils.c
>>
>> CFLAGS += -mhtm
>>
>> -$(OUTPUT)/tm-syscall: tm-syscall-asm.S
>> -$(OUTPUT)/tm-syscall: CFLAGS += -I../../../../../usr/include
>> -$(OUTPUT)/tm-tmspr: CFLAGS += -pthread
>> +$(OUTPUT)tm-syscall: tm-syscall-asm.S
>> +$(OUTPUT)tm-syscall: CFLAGS += -I../../../../../usr/include
>> +$(OUTPUT)tm-tmspr: CFLAGS += -pthread
>>
>> -SIGNAL_CONTEXT_CHK_TESTS := $(patsubst
>> %,$(OUTPUT)/%,$(SIGNAL_CONTEXT_CHK_TESTS))
>> +SIGNAL_CONTEXT_CHK_TESTS := $(patsubst
>> %,$(OUTPUT)%,$(SIGNAL_CONTEXT_CHK_TESTS))
>> $(SIGNAL_CONTEXT_CHK_TESTS): tm-signal.S
>> $(SIGNAL_CONTEXT_CHK_TESTS): CFLAGS += -mhtm -m64 -mvsx
>> diff --git a/tools/testing/selftests/vm/Makefile
>> b/tools/testing/selftests/vm/Makefile
>> index 222ee45..1e7c02c 100644
>> --- a/tools/testing/selftests/vm/Makefile
>> +++ b/tools/testing/selftests/vm/Makefile
>> @@ -19,10 +19,10 @@ TEST_PROGS := run_vmtests
>>
>> include ../lib.mk
>>
>> -$(OUTPUT)/userfaultfd: LDLIBS += -lpthread
>> ../../../../usr/include/linux/kernel.h
>> -$(OUTPUT)/userfaultfd_hugetlb: LDLIBS += -lpthread
>> ../../../../usr/include/linux/kernel.h
>> -$(OUTPUT)/userfaultfd_shmem: LDLIBS += -lpthread
>> ../../../../usr/include/linux/kernel.h
>> -$(OUTPUT)/mlock-random-test: LDLIBS += -lcap
>> +$(OUTPUT)userfaultfd: LDLIBS += -lpthread
>> ../../../../usr/include/linux/kernel.h
>> +$(OUTPUT)userfaultfd_hugetlb: LDLIBS += -lpthread
>> ../../../../usr/include/linux/kernel.h
>> +$(OUTPUT)userfaultfd_shmem: LDLIBS += -lpthread
>> ../../../../usr/include/linux/kernel.h
>> +$(OUTPUT)mlock-random-test: LDLIBS += -lcap
>>
>> ../../../../usr/include/linux/kernel.h:
>> make -C ../../../.. headers_install
>> diff --git a/tools/testing/selftests/x86/Makefile
>> b/tools/testing/selftests/x86/Makefile
>> index 3a5ebae..42db9f4 100644
>> --- a/tools/testing/selftests/x86/Makefile
>> +++ b/tools/testing/selftests/x86/Makefile
>> @@ -17,8 +17,8 @@ TARGETS_C_64BIT_ALL := $(TARGETS_C_BOTHBITS)
>> $(TARGETS_C_64BIT_ONLY)
>> BINARIES_32 := $(TARGETS_C_32BIT_ALL:%=%_32)
>> BINARIES_64 := $(TARGETS_C_64BIT_ALL:%=%_64)
>>
>> -BINARIES_32 := $(patsubst %,$(OUTPUT)/%,$(BINARIES_32))
>> -BINARIES_64 := $(patsubst %,$(OUTPUT)/%,$(BINARIES_64))
>> +BINARIES_32 := $(patsubst %,$(OUTPUT)%,$(BINARIES_32))
>> +BINARIES_64 := $(patsubst %,$(OUTPUT)%,$(BINARIES_64))
>>
>> CFLAGS := -O2 -g -std=gnu99 -pthread -Wall
>>
>> @@ -43,10 +43,10 @@ all_64: $(BINARIES_64)
>> clean:
>> $(RM) $(BINARIES_32) $(BINARIES_64)
>>
>> -$(BINARIES_32): $(OUTPUT)/%_32: %.c
>> +$(BINARIES_32): $(OUTPUT)%_32: %.c
>> $(CC) -m32 -o $@ $(CFLAGS) $(EXTRA_CFLAGS) $^ -lrt -ldl -lm
>>
>> -$(BINARIES_64): $(OUTPUT)/%_64: %.c
>> +$(BINARIES_64): $(OUTPUT)%_64: %.c
>> $(CC) -m64 -o $@ $(CFLAGS) $(EXTRA_CFLAGS) $^ -lrt -ldl
>>
>> # x86_64 users should be encouraged to install 32-bit libraries
>> @@ -68,12 +68,12 @@ warn_32bit_failure:
>> endif
>>
>> # Some tests have additional dependencies.
>> -$(OUTPUT)/sysret_ss_attrs_64: thunks.S
>> -$(OUTPUT)/ptrace_syscall_32: raw_syscall_helper_32.S
>> -$(OUTPUT)/test_syscall_vdso_32: thunks_32.S
>> +$(OUTPUT)sysret_ss_attrs_64: thunks.S
>> +$(OUTPUT)ptrace_syscall_32: raw_syscall_helper_32.S
>> +$(OUTPUT)test_syscall_vdso_32: thunks_32.S
>>
>> # check_initial_reg_state is special: it needs a custom entry, and it
>> # needs to be static so that its interpreter doesn't destroy its initial
>> # state.
>> -$(OUTPUT)/check_initial_reg_state_32: CFLAGS += -Wl,-ereal_start -static
>> -$(OUTPUT)/check_initial_reg_state_64: CFLAGS += -Wl,-ereal_start -static
>> +$(OUTPUT)check_initial_reg_state_32: CFLAGS += -Wl,-ereal_start -static
>> +$(OUTPUT)check_initial_reg_state_64: CFLAGS += -Wl,-ereal_start -static
>>
>