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