]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
selftests: enable O and KBUILD_OUTPUT
authorbamvor.zhangjian@huawei.com <bamvor.zhangjian@huawei.com>
Tue, 29 Nov 2016 11:55:52 +0000 (19:55 +0800)
committerShuah Khan <shuahkh@osg.samsung.com>
Thu, 5 Jan 2017 20:42:22 +0000 (13:42 -0700)
Enable O and KBUILD_OUTPUT for kselftest. User could compile kselftest
to another directory by passing O or KBUILD_OUTPUT. And O is high
priority than KBUILD_OUTPUT.

Signed-off-by: Bamvor Jian Zhang <bamvor.zhangjian@linaro.org>
Signed-off-by: Shuah Khan <shuahkh@osg.samsung.com>
18 files changed:
tools/testing/selftests/Makefile
tools/testing/selftests/exec/Makefile
tools/testing/selftests/ftrace/Makefile
tools/testing/selftests/futex/Makefile
tools/testing/selftests/kcmp/Makefile
tools/testing/selftests/lib.mk
tools/testing/selftests/powerpc/Makefile
tools/testing/selftests/powerpc/benchmarks/Makefile
tools/testing/selftests/powerpc/copyloops/Makefile
tools/testing/selftests/powerpc/dscr/Makefile
tools/testing/selftests/powerpc/math/Makefile
tools/testing/selftests/powerpc/mm/Makefile
tools/testing/selftests/powerpc/pmu/Makefile
tools/testing/selftests/powerpc/pmu/ebb/Makefile
tools/testing/selftests/powerpc/switch_endian/Makefile
tools/testing/selftests/powerpc/tm/Makefile
tools/testing/selftests/vm/Makefile
tools/testing/selftests/x86/Makefile

index 71b05891a6a14adfe7537e70333352b844966134..2741f9e35215b0bda1708f02e9f96c7d747f1f36 100644 (file)
@@ -49,29 +49,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:
@@ -86,7 +101,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
@@ -95,10 +111,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;
 
@@ -109,7 +126,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
index 48d1f863d584f619c7aa525b313b22c4f3136830..2e13035dff7f6f4bfcf28d59e38bd1d7231bacce 100644 (file)
@@ -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 $@
+
index 6c64b421a4fdb81463cf91f9c661f74053a7d579..a8a5e21850e740a099228963db130961e542b838 100644 (file)
@@ -2,6 +2,6 @@ all:
 
 TEST_PROGS := ftracetest
 TEST_FILES := test.d
-EXTRA_CLEAN := logs/*
+EXTRA_CLEAN := $(OUTPUT)/logs/*
 
 include ../lib.mk
index 6a1752956283cbef8f70ae83c103fa73a1dae4ab..653c5cd9e44d6bc4fba89b79ae8d1d707993e542 100644 (file)
@@ -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
index 74a8adda58fbc80d81819cf6e7146f0206488334..47aa9887f9d4bfcf53907cafff36b947469cbb80 100644 (file)
@@ -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
 
index 0f7a371beff7bf197c6ab72dc971dff5b99bc676..01bb7782a35e6468e9b549907af6b132edeb1fc4 100644 (file)
@@ -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
index c2c4211ba58b83facb996ceab3ecac7f9077a31e..1d48c0cab5962f9b02f7437df3fb80aa99b6f32a 100644 (file)
@@ -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:
index 08a55bd178005699bb8ad93da09ec9fa3b7eda99..286c6ed2378ca28176d993cdc041499c602b3ae6 100644 (file)
@@ -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
index 9ad1558e2ea9ca749277c1bd03dd9888474ddce8..681ab19d0a8486b5dafe7b25e5148e4c4d4e0e0b 100644 (file)
@@ -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)
index 4262de42017bc4eae1f8860054516316d6250a09..c5639deb8887ed49acd3e3238c0384a903b6fbf2 100644 (file)
@@ -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
index 814c38591b13a922bf6452092e4575e9b0505cde..da9f42feaaacb8f28ae3df8c5a23b77cc410db6e 100644 (file)
@@ -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
index d5633783c82e03c784d8cebbbc8ecdfb5f36b33b..1cffe54dccfb8a31f4b704756ce0e82b4393e38c 100644 (file)
@@ -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
 
index ab0f9026c21c7c1802ee9f928fab031af1b7d542..097b08acd867c08ddae93212908984fcc684963d 100644 (file)
@@ -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
index 0bc2bd6db51181f1ab09d150bc0464d841d791e1..6001fb0a377a70f9ee1a57acd19424ec44bda6ae 100644 (file)
@@ -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
index dbd05ac8dbf7e9323101aab7443f55fb65d01de7..b92c2a132c4f5d038465ef190584da31de3a79a9 100644 (file)
@@ -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"' $< > $@
index 117c6247928a845c04b03913905c7e311baac1ef..07da21769ff89f621861cbb2e34e266c7a184f5b 100644 (file)
@@ -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
index 8141d5169f4de473040798a1c357da2edcd0e3ac..983140e68661fc948057bf1a43adbedd0f2217ff 100644 (file)
@@ -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
index 8c1cb423cfe6939addceb2da403bed74cfc97e30..f251cf9e62f02c7ee13e833d9eb2fae549c618e2 100644 (file)
@@ -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