]> git.ipfire.org Git - thirdparty/linux.git/blob - tools/testing/selftests/Makefile
Merge tag 'arm64-upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64...
[thirdparty/linux.git] / tools / testing / selftests / Makefile
1 # SPDX-License-Identifier: GPL-2.0
2 TARGETS += alsa
3 TARGETS += amd-pstate
4 TARGETS += arm64
5 TARGETS += bpf
6 TARGETS += breakpoints
7 TARGETS += cachestat
8 TARGETS += capabilities
9 TARGETS += cgroup
10 TARGETS += clone3
11 TARGETS += connector
12 TARGETS += core
13 TARGETS += cpufreq
14 TARGETS += cpu-hotplug
15 TARGETS += damon
16 TARGETS += dmabuf-heaps
17 TARGETS += drivers/dma-buf
18 TARGETS += drivers/s390x/uvdevice
19 TARGETS += drivers/net/bonding
20 TARGETS += drivers/net/team
21 TARGETS += dt
22 TARGETS += efivarfs
23 TARGETS += exec
24 TARGETS += fchmodat2
25 TARGETS += filesystems
26 TARGETS += filesystems/binderfs
27 TARGETS += filesystems/epoll
28 TARGETS += filesystems/fat
29 TARGETS += filesystems/overlayfs
30 TARGETS += filesystems/statmount
31 TARGETS += firmware
32 TARGETS += fpu
33 TARGETS += ftrace
34 TARGETS += futex
35 TARGETS += gpio
36 TARGETS += hid
37 TARGETS += intel_pstate
38 TARGETS += iommu
39 TARGETS += ipc
40 TARGETS += ir
41 TARGETS += kcmp
42 TARGETS += kexec
43 TARGETS += kvm
44 TARGETS += landlock
45 TARGETS += lib
46 TARGETS += livepatch
47 TARGETS += lkdtm
48 TARGETS += lsm
49 TARGETS += membarrier
50 TARGETS += memfd
51 TARGETS += memory-hotplug
52 TARGETS += mincore
53 TARGETS += mount
54 TARGETS += mount_setattr
55 TARGETS += move_mount_set_group
56 TARGETS += mqueue
57 TARGETS += nci
58 TARGETS += net
59 TARGETS += net/af_unix
60 TARGETS += net/forwarding
61 TARGETS += net/hsr
62 TARGETS += net/mptcp
63 TARGETS += net/openvswitch
64 TARGETS += net/tcp_ao
65 TARGETS += netfilter
66 TARGETS += nsfs
67 TARGETS += perf_events
68 TARGETS += pidfd
69 TARGETS += pid_namespace
70 TARGETS += power_supply
71 TARGETS += powerpc
72 TARGETS += prctl
73 TARGETS += proc
74 TARGETS += pstore
75 TARGETS += ptrace
76 TARGETS += openat2
77 TARGETS += resctrl
78 TARGETS += riscv
79 TARGETS += rlimits
80 TARGETS += rseq
81 TARGETS += rtc
82 TARGETS += rust
83 TARGETS += seccomp
84 TARGETS += sgx
85 TARGETS += sigaltstack
86 TARGETS += size
87 TARGETS += sparc64
88 TARGETS += splice
89 TARGETS += static_keys
90 TARGETS += sync
91 TARGETS += syscall_user_dispatch
92 TARGETS += sysctl
93 TARGETS += tc-testing
94 TARGETS += tdx
95 TARGETS += thermal/intel/power_floor
96 TARGETS += thermal/intel/workload_hint
97 TARGETS += timens
98 ifneq (1, $(quicktest))
99 TARGETS += timers
100 endif
101 TARGETS += tmpfs
102 TARGETS += tpm2
103 TARGETS += tty
104 TARGETS += uevent
105 TARGETS += user
106 TARGETS += user_events
107 TARGETS += vDSO
108 TARGETS += mm
109 TARGETS += x86
110 TARGETS += zram
111 #Please keep the TARGETS list alphabetically sorted
112 # Run "make quicktest=1 run_tests" or
113 # "make quicktest=1 kselftest" from top level Makefile
114
115 TARGETS_HOTPLUG = cpu-hotplug
116 TARGETS_HOTPLUG += memory-hotplug
117
118 # User can optionally provide a TARGETS skiplist. By default we skip
119 # BPF since it has cutting edge build time dependencies which require
120 # more effort to install.
121 SKIP_TARGETS ?= bpf
122 ifneq ($(SKIP_TARGETS),)
123 TMP := $(filter-out $(SKIP_TARGETS), $(TARGETS))
124 override TARGETS := $(TMP)
125 endif
126
127 # User can set FORCE_TARGETS to 1 to require all targets to be successfully
128 # built; make will fail if any of the targets cannot be built. If
129 # FORCE_TARGETS is not set (the default), make will succeed if at least one
130 # of the targets gets built.
131 FORCE_TARGETS ?=
132
133 # Clear LDFLAGS and MAKEFLAGS when implicit rules are missing. This provides
134 # implicit rules to sub-test Makefiles which avoids build failures in test
135 # Makefile that don't have explicit build rules.
136 ifeq (,$(LINK.c))
137 override LDFLAGS =
138 override MAKEFLAGS =
139 endif
140
141 # Append kselftest to KBUILD_OUTPUT and O to avoid cluttering
142 # KBUILD_OUTPUT with selftest objects and headers installed
143 # by selftests Makefile or lib.mk.
144 ifdef building_out_of_srctree
145 override LDFLAGS =
146 endif
147
148 top_srcdir ?= ../../..
149
150 ifeq ("$(origin O)", "command line")
151 KBUILD_OUTPUT := $(O)
152 endif
153
154 ifneq ($(KBUILD_OUTPUT),)
155 # Make's built-in functions such as $(abspath ...), $(realpath ...) cannot
156 # expand a shell special character '~'. We use a somewhat tedious way here.
157 abs_objtree := $(shell cd $(top_srcdir) && mkdir -p $(KBUILD_OUTPUT) && cd $(KBUILD_OUTPUT) && pwd)
158 $(if $(abs_objtree),, \
159 $(error failed to create output directory "$(KBUILD_OUTPUT)"))
160 # $(realpath ...) resolves symlinks
161 abs_objtree := $(realpath $(abs_objtree))
162 BUILD := $(abs_objtree)/kselftest
163 KHDR_INCLUDES := -isystem ${abs_objtree}/usr/include
164 else
165 BUILD := $(CURDIR)
166 abs_srctree := $(shell cd $(top_srcdir) && pwd)
167 KHDR_INCLUDES := -isystem ${abs_srctree}/usr/include
168 DEFAULT_INSTALL_HDR_PATH := 1
169 endif
170
171 # Prepare for headers install
172 include $(top_srcdir)/scripts/subarch.include
173 ARCH ?= $(SUBARCH)
174 export BUILD
175 export KHDR_INCLUDES
176
177 # set default goal to all, so make without a target runs all, even when
178 # all isn't the first target in the file.
179 .DEFAULT_GOAL := all
180
181 all:
182 @ret=1; \
183 for TARGET in $(TARGETS); do \
184 BUILD_TARGET=$$BUILD/$$TARGET; \
185 mkdir $$BUILD_TARGET -p; \
186 $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET \
187 O=$(abs_objtree) \
188 $(if $(FORCE_TARGETS),|| exit); \
189 ret=$$((ret * $$?)); \
190 done; exit $$ret;
191
192 run_tests: all
193 @for TARGET in $(TARGETS); do \
194 BUILD_TARGET=$$BUILD/$$TARGET; \
195 $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET run_tests \
196 SRC_PATH=$(shell readlink -e $$(pwd)) \
197 OBJ_PATH=$(BUILD) \
198 O=$(abs_objtree); \
199 done;
200
201 hotplug:
202 @for TARGET in $(TARGETS_HOTPLUG); do \
203 BUILD_TARGET=$$BUILD/$$TARGET; \
204 $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET;\
205 done;
206
207 run_hotplug: hotplug
208 @for TARGET in $(TARGETS_HOTPLUG); do \
209 BUILD_TARGET=$$BUILD/$$TARGET; \
210 $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET run_full_test;\
211 done;
212
213 clean_hotplug:
214 @for TARGET in $(TARGETS_HOTPLUG); do \
215 BUILD_TARGET=$$BUILD/$$TARGET; \
216 $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET clean;\
217 done;
218
219 run_pstore_crash:
220 $(MAKE) -C pstore run_crash
221
222 # Use $BUILD as the default install root. $BUILD points to the
223 # right output location for the following cases:
224 # 1. output_dir=kernel_src
225 # 2. a separate output directory is specified using O= KBUILD_OUTPUT
226 # 3. a separate output directory is specified using KBUILD_OUTPUT
227 # Avoid conflict with INSTALL_PATH set by the main Makefile
228 #
229 KSFT_INSTALL_PATH ?= $(BUILD)/kselftest_install
230 KSFT_INSTALL_PATH := $(abspath $(KSFT_INSTALL_PATH))
231 # Avoid changing the rest of the logic here and lib.mk.
232 INSTALL_PATH := $(KSFT_INSTALL_PATH)
233 ALL_SCRIPT := $(INSTALL_PATH)/run_kselftest.sh
234 TEST_LIST := $(INSTALL_PATH)/kselftest-list.txt
235
236 install: all
237 ifdef INSTALL_PATH
238 @# Ask all targets to install their files
239 mkdir -p $(INSTALL_PATH)/kselftest
240 install -m 744 kselftest/module.sh $(INSTALL_PATH)/kselftest/
241 install -m 744 kselftest/runner.sh $(INSTALL_PATH)/kselftest/
242 install -m 744 kselftest/prefix.pl $(INSTALL_PATH)/kselftest/
243 install -m 744 kselftest/ktap_helpers.sh $(INSTALL_PATH)/kselftest/
244 install -m 744 run_kselftest.sh $(INSTALL_PATH)/
245 rm -f $(TEST_LIST)
246 @ret=1; \
247 for TARGET in $(TARGETS); do \
248 BUILD_TARGET=$$BUILD/$$TARGET; \
249 $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET install \
250 INSTALL_PATH=$(INSTALL_PATH)/$$TARGET \
251 SRC_PATH=$(shell readlink -e $$(pwd)) \
252 OBJ_PATH=$(INSTALL_PATH) \
253 O=$(abs_objtree) \
254 $(if $(FORCE_TARGETS),|| exit); \
255 ret=$$((ret * $$?)); \
256 done; exit $$ret;
257
258
259 @# Ask all targets to emit their test scripts
260 @# While building kselftest-list.text skip also non-existent TARGET dirs:
261 @# they could be the result of a build failure and should NOT be
262 @# included in the generated runlist.
263 for TARGET in $(TARGETS); do \
264 BUILD_TARGET=$$BUILD/$$TARGET; \
265 [ ! -d $(INSTALL_PATH)/$$TARGET ] && printf "Skipping non-existent dir: $$TARGET\n" && continue; \
266 printf "Emit Tests for $$TARGET\n"; \
267 $(MAKE) -s --no-print-directory OUTPUT=$$BUILD_TARGET COLLECTION=$$TARGET \
268 -C $$TARGET emit_tests >> $(TEST_LIST); \
269 done;
270 else
271 $(error Error: set INSTALL_PATH to use install)
272 endif
273
274 FORMAT ?= .gz
275 TAR_PATH = $(abspath ${INSTALL_PATH}/kselftest-packages/kselftest.tar${FORMAT})
276 gen_tar: install
277 @mkdir -p ${INSTALL_PATH}/kselftest-packages/
278 @tar caf ${TAR_PATH} --exclude=kselftest-packages -C ${INSTALL_PATH} .
279 @echo "Created ${TAR_PATH}"
280
281 clean:
282 @for TARGET in $(TARGETS); do \
283 BUILD_TARGET=$$BUILD/$$TARGET; \
284 $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET clean;\
285 done;
286
287 .PHONY: all run_tests hotplug run_hotplug clean_hotplug run_pstore_crash install clean gen_tar