xref: /openbmc/linux/tools/testing/selftests/Makefile (revision aaf9128a)
1# SPDX-License-Identifier: GPL-2.0
2TARGETS = android
3TARGETS += bpf
4TARGETS += breakpoints
5TARGETS += capabilities
6TARGETS += cgroup
7TARGETS += cpufreq
8TARGETS += cpu-hotplug
9TARGETS += efivarfs
10TARGETS += exec
11TARGETS += filesystems
12TARGETS += firmware
13TARGETS += ftrace
14TARGETS += futex
15TARGETS += gpio
16TARGETS += intel_pstate
17TARGETS += ipc
18TARGETS += kcmp
19TARGETS += kvm
20TARGETS += lib
21TARGETS += membarrier
22TARGETS += memfd
23TARGETS += memory-hotplug
24TARGETS += mount
25TARGETS += mqueue
26TARGETS += net
27TARGETS += netfilter
28TARGETS += networking/timestamping
29TARGETS += nsfs
30TARGETS += powerpc
31TARGETS += proc
32TARGETS += pstore
33TARGETS += ptrace
34TARGETS += rseq
35TARGETS += rtc
36TARGETS += seccomp
37TARGETS += sigaltstack
38TARGETS += size
39TARGETS += sparc64
40TARGETS += splice
41TARGETS += static_keys
42TARGETS += sync
43TARGETS += sysctl
44ifneq (1, $(quicktest))
45TARGETS += timers
46endif
47TARGETS += user
48TARGETS += vm
49TARGETS += x86
50TARGETS += zram
51#Please keep the TARGETS list alphabetically sorted
52# Run "make quicktest=1 run_tests" or
53# "make quicktest=1 kselftest" from top level Makefile
54
55TARGETS_HOTPLUG = cpu-hotplug
56TARGETS_HOTPLUG += memory-hotplug
57
58# Clear LDFLAGS and MAKEFLAGS if called from main
59# Makefile to avoid test build failures when test
60# Makefile doesn't have explicit build rules.
61ifeq (1,$(MAKELEVEL))
62override LDFLAGS =
63override MAKEFLAGS =
64endif
65
66ifneq ($(KBUILD_SRC),)
67override LDFLAGS =
68endif
69
70BUILD := $(O)
71ifndef BUILD
72  BUILD := $(KBUILD_OUTPUT)
73endif
74ifndef BUILD
75  BUILD := $(shell pwd)
76endif
77
78# KSFT_TAP_LEVEL is used from KSFT framework to prevent nested TAP header
79# printing from tests. Applicable to run_tests case where run_tests adds
80# TAP header prior running tests and when a test program invokes another
81# with system() call. Export it here to cover override RUN_TESTS defines.
82export KSFT_TAP_LEVEL=`echo 1`
83
84export BUILD
85all:
86	@for TARGET in $(TARGETS); do		\
87		BUILD_TARGET=$$BUILD/$$TARGET;	\
88		mkdir $$BUILD_TARGET  -p;	\
89		make OUTPUT=$$BUILD_TARGET -C $$TARGET;\
90	done;
91
92run_tests: all
93	@for TARGET in $(TARGETS); do \
94		BUILD_TARGET=$$BUILD/$$TARGET;	\
95		make OUTPUT=$$BUILD_TARGET -C $$TARGET run_tests;\
96	done;
97
98hotplug:
99	@for TARGET in $(TARGETS_HOTPLUG); do \
100		BUILD_TARGET=$$BUILD/$$TARGET;	\
101		make OUTPUT=$$BUILD_TARGET -C $$TARGET;\
102	done;
103
104run_hotplug: hotplug
105	@for TARGET in $(TARGETS_HOTPLUG); do \
106		BUILD_TARGET=$$BUILD/$$TARGET;	\
107		make OUTPUT=$$BUILD_TARGET -C $$TARGET run_full_test;\
108	done;
109
110clean_hotplug:
111	@for TARGET in $(TARGETS_HOTPLUG); do \
112		BUILD_TARGET=$$BUILD/$$TARGET;	\
113		make OUTPUT=$$BUILD_TARGET -C $$TARGET clean;\
114	done;
115
116run_pstore_crash:
117	make -C pstore run_crash
118
119INSTALL_PATH ?= install
120INSTALL_PATH := $(abspath $(INSTALL_PATH))
121ALL_SCRIPT := $(INSTALL_PATH)/run_kselftest.sh
122
123install:
124ifdef INSTALL_PATH
125	@# Ask all targets to install their files
126	mkdir -p $(INSTALL_PATH)
127	@for TARGET in $(TARGETS); do \
128		BUILD_TARGET=$$BUILD/$$TARGET;	\
129		make OUTPUT=$$BUILD_TARGET -C $$TARGET INSTALL_PATH=$(INSTALL_PATH)/$$TARGET install; \
130	done;
131
132	@# Ask all targets to emit their test scripts
133	echo "#!/bin/sh" > $(ALL_SCRIPT)
134	echo "BASE_DIR=\$$(realpath \$$(dirname \$$0))" >> $(ALL_SCRIPT)
135	echo "cd \$$BASE_DIR" >> $(ALL_SCRIPT)
136	echo "ROOT=\$$PWD" >> $(ALL_SCRIPT)
137	echo "if [ \"\$$1\" = \"--summary\" ]; then" >> $(ALL_SCRIPT)
138	echo "  OUTPUT=\$$BASE_DIR/output.log" >> $(ALL_SCRIPT)
139	echo "  cat /dev/null > \$$OUTPUT" >> $(ALL_SCRIPT)
140	echo "else" >> $(ALL_SCRIPT)
141	echo "  OUTPUT=/dev/stdout" >> $(ALL_SCRIPT)
142	echo "fi" >> $(ALL_SCRIPT)
143	echo "export KSFT_TAP_LEVEL=1" >> $(ALL_SCRIPT)
144	echo "export skip=4" >> $(ALL_SCRIPT)
145
146	for TARGET in $(TARGETS); do \
147		BUILD_TARGET=$$BUILD/$$TARGET;	\
148		echo "echo ; echo TAP version 13" >> $(ALL_SCRIPT);	\
149		echo "echo Running tests in $$TARGET" >> $(ALL_SCRIPT); \
150		echo "echo ========================================" >> $(ALL_SCRIPT); \
151		echo "[ -w /dev/kmsg ] && echo \"kselftest: Running tests in $$TARGET\" >> /dev/kmsg" >> $(ALL_SCRIPT); \
152		echo "cd $$TARGET" >> $(ALL_SCRIPT); \
153		make -s --no-print-directory OUTPUT=$$BUILD_TARGET -C $$TARGET emit_tests >> $(ALL_SCRIPT); \
154		echo "cd \$$ROOT" >> $(ALL_SCRIPT); \
155	done;
156
157	chmod u+x $(ALL_SCRIPT)
158else
159	$(error Error: set INSTALL_PATH to use install)
160endif
161
162clean:
163	@for TARGET in $(TARGETS); do \
164		BUILD_TARGET=$$BUILD/$$TARGET;	\
165		make OUTPUT=$$BUILD_TARGET -C $$TARGET clean;\
166	done;
167
168.PHONY: all run_tests hotplug run_hotplug clean_hotplug run_pstore_crash install clean
169