xref: /linux/tools/testing/selftests/Makefile (revision 083f345151938706d33969b37b92e7e13ab02b3e)
1TARGETS =  bpf
2TARGETS += breakpoints
3TARGETS += capabilities
4TARGETS += cpu-hotplug
5TARGETS += efivarfs
6TARGETS += exec
7TARGETS += firmware
8TARGETS += ftrace
9TARGETS += futex
10TARGETS += gpio
11TARGETS += ipc
12TARGETS += kcmp
13TARGETS += lib
14TARGETS += membarrier
15TARGETS += memfd
16TARGETS += memory-hotplug
17TARGETS += mount
18TARGETS += mqueue
19TARGETS += net
20TARGETS += nsfs
21TARGETS += powerpc
22TARGETS += pstore
23TARGETS += ptrace
24TARGETS += seccomp
25TARGETS += sigaltstack
26TARGETS += size
27TARGETS += static_keys
28TARGETS += sync
29TARGETS += sysctl
30ifneq (1, $(quicktest))
31TARGETS += timers
32endif
33TARGETS += user
34TARGETS += vm
35TARGETS += x86
36TARGETS += zram
37#Please keep the TARGETS list alphabetically sorted
38# Run "make quicktest=1 run_tests" or
39# "make quicktest=1 kselftest from top level Makefile
40
41TARGETS_HOTPLUG = cpu-hotplug
42TARGETS_HOTPLUG += memory-hotplug
43
44# Clear LDFLAGS and MAKEFLAGS if called from main
45# Makefile to avoid test build failures when test
46# Makefile doesn't have explicit build rules.
47ifeq (1,$(MAKELEVEL))
48override LDFLAGS =
49override MAKEFLAGS =
50endif
51
52BUILD := $(O)
53ifndef BUILD
54  BUILD := $(KBUILD_OUTPUT)
55endif
56ifndef BUILD
57  BUILD := $(shell pwd)
58endif
59
60export BUILD
61all:
62	for TARGET in $(TARGETS); do		\
63		BUILD_TARGET=$$BUILD/$$TARGET;	\
64		mkdir $$BUILD_TARGET  -p;	\
65		make OUTPUT=$$BUILD_TARGET -C $$TARGET;\
66	done;
67
68run_tests: all
69	for TARGET in $(TARGETS); do \
70		BUILD_TARGET=$$BUILD/$$TARGET;	\
71		make OUTPUT=$$BUILD_TARGET -C $$TARGET run_tests;\
72	done;
73
74hotplug:
75	for TARGET in $(TARGETS_HOTPLUG); do \
76		BUILD_TARGET=$$BUILD/$$TARGET;	\
77		make OUTPUT=$$BUILD_TARGET -C $$TARGET;\
78	done;
79
80run_hotplug: hotplug
81	for TARGET in $(TARGETS_HOTPLUG); do \
82		BUILD_TARGET=$$BUILD/$$TARGET;	\
83		make OUTPUT=$$BUILD_TARGET -C $$TARGET run_full_test;\
84	done;
85
86clean_hotplug:
87	for TARGET in $(TARGETS_HOTPLUG); do \
88		BUILD_TARGET=$$BUILD/$$TARGET;	\
89		make OUTPUT=$$BUILD_TARGET -C $$TARGET clean;\
90	done;
91
92run_pstore_crash:
93	make -C pstore run_crash
94
95INSTALL_PATH ?= install
96INSTALL_PATH := $(abspath $(INSTALL_PATH))
97ALL_SCRIPT := $(INSTALL_PATH)/run_kselftest.sh
98
99install:
100ifdef INSTALL_PATH
101	@# Ask all targets to install their files
102	mkdir -p $(INSTALL_PATH)
103	for TARGET in $(TARGETS); do \
104		BUILD_TARGET=$$BUILD/$$TARGET;	\
105		make OUTPUT=$$BUILD_TARGET -C $$TARGET INSTALL_PATH=$(INSTALL_PATH)/$$TARGET install; \
106	done;
107
108	@# Ask all targets to emit their test scripts
109	echo "#!/bin/bash" > $(ALL_SCRIPT)
110	echo "cd \$$(dirname \$$0)" >> $(ALL_SCRIPT)
111	echo "ROOT=\$$PWD" >> $(ALL_SCRIPT)
112
113	for TARGET in $(TARGETS); do \
114		BUILD_TARGET=$$BUILD/$$TARGET;	\
115		echo "echo ; echo Running tests in $$TARGET" >> $(ALL_SCRIPT); \
116		echo "echo ========================================" >> $(ALL_SCRIPT); \
117		echo "cd $$TARGET" >> $(ALL_SCRIPT); \
118		make -s --no-print-directory OUTPUT=$$BUILD_TARGET -C $$TARGET emit_tests >> $(ALL_SCRIPT); \
119		echo "cd \$$ROOT" >> $(ALL_SCRIPT); \
120	done;
121
122	chmod u+x $(ALL_SCRIPT)
123else
124	$(error Error: set INSTALL_PATH to use install)
125endif
126
127clean:
128	for TARGET in $(TARGETS); do \
129		BUILD_TARGET=$$BUILD/$$TARGET;	\
130		make OUTPUT=$$BUILD_TARGET -C $$TARGET clean;\
131	done;
132
133.PHONY: install
134