diff mbox

[v2,6/6] selftests: enable O and KBUILD_OUTPUT

Message ID 20161129115552.8148-7-bamvor.zhangjian@huawei.com
State Accepted
Commit a8ba798bc8ec663cf02e80b0dd770324de9bafd9
Headers show

Commit Message

Zhangjian (Bamvor) Nov. 29, 2016, 11:55 a.m. UTC
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(-)

-- 
2.10.0

Comments

Andy Lutomirski March 20, 2017, 9:39 p.m. UTC | #1
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
Michael Ellerman March 21, 2017, 8:35 a.m. UTC | #2
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
Bamvor Zhang Jian March 21, 2017, 9 a.m. UTC | #3
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
Shuah Khan March 21, 2017, 1:54 p.m. UTC | #4
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
Bamvor Zhang Jian March 21, 2017, 4:09 p.m. UTC | #5
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(-)


@@ -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

>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

Shuah Khan March 21, 2017, 6:02 p.m. UTC | #6
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

>
Michael Ellerman March 22, 2017, 11:35 a.m. UTC | #7
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
Michael Ellerman March 22, 2017, 11:38 a.m. UTC | #8
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
Michael Ellerman March 22, 2017, 11:46 a.m. UTC | #9
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
Bamvor Zhang Jian March 22, 2017, 12:52 p.m. UTC | #10
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(-)


@@ -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

> cheersdiff --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

Bamvor Zhang Jian March 22, 2017, 12:55 p.m. UTC | #11
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

>>

>
diff mbox

Patch

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