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