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