Merge tag 'pm-6.16-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
[linux-block.git] / tools / testing / selftests / Makefile
CommitLineData
b2441318 1# SPDX-License-Identifier: GPL-2.0
f0a1ffa6 2TARGETS += acct
5aaf9eff 3TARGETS += alsa
e1083a03 4TARGETS += amd-pstate
5aaf9eff 5TARGETS += arm64
47a18c42 6TARGETS += bpf
5aa5bd14 7TARGETS += breakpoints
88537aac 8TARGETS += cachestat
f4ecb322 9TARGETS += capabilities
84092dbc 10TARGETS += cgroup
de528723 11TARGETS += clone3
73a29531 12TARGETS += connector
2c5db60e 13TARGETS += core
e66d5b67 14TARGETS += cpufreq
58c7be84 15TARGETS += cpu-hotplug
678f0cdc 16TARGETS += damon
b7274930 17TARGETS += devices/error_logs
0debb20c 18TARGETS += devices/probe
888c72d5 19TARGETS += dmabuf-heaps
6edf2e37 20TARGETS += drivers/dma-buf
7f853a25 21TARGETS += drivers/ntsync
cbac9242 22TARGETS += drivers/s390x/uvdevice
b4db9f84 23TARGETS += drivers/net
c078290a 24TARGETS += drivers/net/bonding
bbb774d9 25TARGETS += drivers/net/team
ccfaed04 26TARGETS += drivers/net/virtio_net
8e51106d 27TARGETS += drivers/platform/x86/intel/ifs
14571ab1 28TARGETS += dt
58c7be84 29TARGETS += efivarfs
96e869d8 30TARGETS += exec
4859c257 31TARGETS += fchmodat2
ce290a19 32TARGETS += filesystems
75abec73 33TARGETS += filesystems/binderfs
f2728fe8 34TARGETS += filesystems/epoll
dd7c9be3 35TARGETS += filesystems/fat
b5a78c71 36TARGETS += filesystems/overlayfs
5bd3cf8c 37TARGETS += filesystems/statmount
e1c24b52 38TARGETS += filesystems/mount-notify
96e869d8 39TARGETS += firmware
4185b3b9 40TARGETS += fpu
96e869d8 41TARGETS += ftrace
ecac1a75 42TARGETS += futex
22f6592b 43TARGETS += gpio
dbb60c8a 44TARGETS += hid
6320303f 45TARGETS += intel_pstate
57f09887 46TARGETS += iommu
7e722473 47TARGETS += ipc
e55c884e 48TARGETS += ir
66a01b96 49TARGETS += kcmp
c3c0e811 50TARGETS += kexec
df82ffc5 51TARGETS += kselftest_harness
783e9e51 52TARGETS += kvm
e1199815 53TARGETS += landlock
317dc34a 54TARGETS += lib
a2818ee4 55TARGETS += livepatch
46d1a0f0 56TARGETS += lkdtm
d3d929a8 57TARGETS += lsm
b6d97344 58TARGETS += membarrier
4f5ce5e8 59TARGETS += memfd
58c7be84 60TARGETS += memory-hotplug
7a309195 61TARGETS += mincore
db181ce0 62TARGETS += mount
01eadc8d 63TARGETS += mount_setattr
8374f431 64TARGETS += move_mount_set_group
96e869d8 65TARGETS += mqueue
b481341e 66TARGETS += mseal_system_mappings
f595cf12 67TARGETS += nci
a6f68034 68TARGETS += net
314001f0 69TARGETS += net/af_unix
77442ffa 70TARGETS += net/can
81573b18 71TARGETS += net/forwarding
7d0455e9 72TARGETS += net/hsr
048d19d4 73TARGETS += net/mptcp
9ef1ed26 74TARGETS += net/netfilter
8a405552 75TARGETS += net/openvswitch
959bc330 76TARGETS += net/ovpn
8a405552 77TARGETS += net/packetdrill
3ade6ce1 78TARGETS += net/rds
8a405552 79TARGETS += net/tcp_ao
6ad92bf6 80TARGETS += nsfs
392188bb 81TARGETS += pci_endpoint
838f12c3 82TARGETS += pcie_bwctrl
888c72d5 83TARGETS += perf_events
575a0ae9 84TARGETS += pidfd
6952a4f6 85TARGETS += pid_namespace
4a679c5a 86TARGETS += power_supply
96e869d8 87TARGETS += powerpc
52905861 88TARGETS += prctl
9cd65655 89TARGETS += proc
cc04a46f 90TARGETS += pstore
17afab1d 91TARGETS += ptrace
b28a10ae 92TARGETS += openat2
b733143c 93TARGETS += resctrl
287dcc2b 94TARGETS += riscv
e4aebf06 95TARGETS += rlimits
ccba8b64 96TARGETS += rseq
a12ab9e1 97TARGETS += rtc
5d94da7f 98TARGETS += rust
7941b83b 99TARGETS += sched_ext
c99ee51a 100TARGETS += seccomp
2adcba79 101TARGETS += sgx
11f0c8e0 102TARGETS += signal
96e869d8 103TARGETS += size
3c545084 104TARGETS += sparc64
b8826e50 105TARGETS += splice
1087d019 106TARGETS += static_keys
82208160 107TARGETS += sync
179ef035 108TARGETS += syscall_user_dispatch
96e869d8 109TARGETS += sysctl
2b9843fb 110TARGETS += tc-testing
00e07cfb 111TARGETS += tdx
d4d27e5a 112TARGETS += thermal/intel/power_floor
27801542 113TARGETS += thermal/intel/workload_hint
61c57676 114TARGETS += timens
2278e5ed 115ifneq (1, $(quicktest))
0bc4b0cf 116TARGETS += timers
2278e5ed 117endif
a3322868 118TARGETS += tmpfs
6ea3dfe1 119TARGETS += tpm2
e8cc3348 120TARGETS += tty
6aecda00 121TARGETS += ublk
6f874fa0 122TARGETS += uevent
68b4d2d5 123TARGETS += user_events
40723419 124TARGETS += vDSO
baa489fa 125TARGETS += mm
3f705dfd 126TARGETS += x86
7a9b709e 127TARGETS += x86/bugs
f21fb798 128TARGETS += zram
96e869d8 129#Please keep the TARGETS list alphabetically sorted
2278e5ed 130# Run "make quicktest=1 run_tests" or
c6a13faf 131# "make quicktest=1 kselftest" from top level Makefile
274343ad 132
ddddda9b
SK
133TARGETS_HOTPLUG = cpu-hotplug
134TARGETS_HOTPLUG += memory-hotplug
135
b86761ff 136# Networking tests want the net/lib target, include it automatically
ff4b2bfa 137ifneq ($(filter net drivers/net drivers/net/hw,$(TARGETS)),)
b86761ff
JK
138ifeq ($(filter net/lib,$(TARGETS)),)
139 INSTALL_DEP_TARGETS := net/lib
140endif
141endif
142
7941b83b
BT
143# User can optionally provide a TARGETS skiplist. By default we skip
144# targets using BPF since it has cutting edge build time dependencies
145# which require more effort to install.
146SKIP_TARGETS ?= bpf sched_ext
3a24f7f6
CM
147ifneq ($(SKIP_TARGETS),)
148 TMP := $(filter-out $(SKIP_TARGETS), $(TARGETS))
149 override TARGETS := $(TMP)
150endif
151
9d235a55
JB
152# User can set FORCE_TARGETS to 1 to require all targets to be successfully
153# built; make will fail if any of the targets cannot be built. If
154# FORCE_TARGETS is not set (the default), make will succeed if at least one
155# of the targets gets built.
156FORCE_TARGETS ?=
157
f69237e1
GT
158# Clear LDFLAGS and MAKEFLAGS when implicit rules are missing. This provides
159# implicit rules to sub-test Makefiles which avoids build failures in test
160# Makefile that don't have explicit build rules.
161ifeq (,$(LINK.c))
60df4642 162override LDFLAGS =
67d8712d
SK
163override MAKEFLAGS =
164endif
165
29e911ef 166# Append kselftest to KBUILD_OUTPUT and O to avoid cluttering
61c2018c
SK
167# KBUILD_OUTPUT with selftest objects and headers installed
168# by selftests Makefile or lib.mk.
051f278e 169ifdef building_out_of_srctree
52fd1d08
SK
170override LDFLAGS =
171endif
172
5ad51ab6
MUA
173top_srcdir ?= ../../..
174
175ifeq ("$(origin O)", "command line")
176 KBUILD_OUTPUT := $(O)
177endif
178
179ifneq ($(KBUILD_OUTPUT),)
180 # Make's built-in functions such as $(abspath ...), $(realpath ...) cannot
181 # expand a shell special character '~'. We use a somewhat tedious way here.
182 abs_objtree := $(shell cd $(top_srcdir) && mkdir -p $(KBUILD_OUTPUT) && cd $(KBUILD_OUTPUT) && pwd)
183 $(if $(abs_objtree),, \
184 $(error failed to create output directory "$(KBUILD_OUTPUT)"))
185 # $(realpath ...) resolves symlinks
186 abs_objtree := $(realpath $(abs_objtree))
187 BUILD := $(abs_objtree)/kselftest
cee27ae5 188 KHDR_INCLUDES := -isystem ${abs_objtree}/usr/include
8ce72dc3 189else
5ad51ab6 190 BUILD := $(CURDIR)
250f8c11 191 abs_srctree := $(shell cd $(top_srcdir) && pwd)
cee27ae5 192 KHDR_INCLUDES := -isystem ${abs_srctree}/usr/include
5ad51ab6 193 DEFAULT_INSTALL_HDR_PATH := 1
a8ba798b 194endif
195
8ce72dc3 196# Prepare for headers install
8ce72dc3
SK
197include $(top_srcdir)/scripts/subarch.include
198ARCH ?= $(SUBARCH)
a8ba798b 199export BUILD
250f8c11 200export KHDR_INCLUDES
8ce72dc3
SK
201
202# set default goal to all, so make without a target runs all, even when
203# all isn't the first target in the file.
204.DEFAULT_GOAL := all
205
43e8832f 206all:
5f70bde2 207 @ret=1; \
d3f2a958 208 for TARGET in $(TARGETS) $(INSTALL_DEP_TARGETS); do \
5f70bde2
CM
209 BUILD_TARGET=$$BUILD/$$TARGET; \
210 mkdir $$BUILD_TARGET -p; \
9d235a55 211 $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET \
f6d344cd 212 O=$(abs_objtree) \
9d235a55 213 $(if $(FORCE_TARGETS),|| exit); \
5f70bde2
CM
214 ret=$$((ret * $$?)); \
215 done; exit $$ret;
274343ad 216
cab6b056 217run_tests: all
1ede0536 218 @for TARGET in $(TARGETS); do \
a8ba798b 219 BUILD_TARGET=$$BUILD/$$TARGET; \
f6d344cd 220 $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET run_tests \
2a0683be
BP
221 SRC_PATH=$(shell readlink -e $$(pwd)) \
222 OBJ_PATH=$(BUILD) \
f6d344cd 223 O=$(abs_objtree); \
f467f714
FW
224 done;
225
ddddda9b 226hotplug:
1ede0536 227 @for TARGET in $(TARGETS_HOTPLUG); do \
a8ba798b 228 BUILD_TARGET=$$BUILD/$$TARGET; \
0ac33e4e 229 $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET;\
ddddda9b
SK
230 done;
231
232run_hotplug: hotplug
1ede0536 233 @for TARGET in $(TARGETS_HOTPLUG); do \
a8ba798b 234 BUILD_TARGET=$$BUILD/$$TARGET; \
0ac33e4e 235 $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET run_full_test;\
ddddda9b
SK
236 done;
237
238clean_hotplug:
1ede0536 239 @for TARGET in $(TARGETS_HOTPLUG); do \
a8ba798b 240 BUILD_TARGET=$$BUILD/$$TARGET; \
0ac33e4e 241 $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET clean;\
ddddda9b
SK
242 done;
243
f615e2bb 244run_pstore_crash:
0ac33e4e 245 $(MAKE) -C pstore run_crash
f615e2bb 246
c3c59928
SK
247# Use $BUILD as the default install root. $BUILD points to the
248# right output location for the following cases:
249# 1. output_dir=kernel_src
250# 2. a separate output directory is specified using O= KBUILD_OUTPUT
251# 3. a separate output directory is specified using KBUILD_OUTPUT
17eac6c2 252# Avoid conflict with INSTALL_PATH set by the main Makefile
c3c59928 253#
17eac6c2
SK
254KSFT_INSTALL_PATH ?= $(BUILD)/kselftest_install
255KSFT_INSTALL_PATH := $(abspath $(KSFT_INSTALL_PATH))
256# Avoid changing the rest of the logic here and lib.mk.
257INSTALL_PATH := $(KSFT_INSTALL_PATH)
32dcfba6 258ALL_SCRIPT := $(INSTALL_PATH)/run_kselftest.sh
f0f0a5df 259TEST_LIST := $(INSTALL_PATH)/kselftest-list.txt
32dcfba6 260
c3c59928 261install: all
32dcfba6
ME
262ifdef INSTALL_PATH
263 @# Ask all targets to install their files
d4e59a53 264 mkdir -p $(INSTALL_PATH)/kselftest
c78fd76f 265 install -m 744 kselftest/module.sh $(INSTALL_PATH)/kselftest/
d4e59a53 266 install -m 744 kselftest/runner.sh $(INSTALL_PATH)/kselftest/
5c069b6d 267 install -m 744 kselftest/prefix.pl $(INSTALL_PATH)/kselftest/
7c079e90 268 install -m 744 kselftest/ktap_helpers.sh $(INSTALL_PATH)/kselftest/
0e7b7bde 269 install -m 744 kselftest/ksft.py $(INSTALL_PATH)/kselftest/
f0f0a5df
KC
270 install -m 744 run_kselftest.sh $(INSTALL_PATH)/
271 rm -f $(TEST_LIST)
5f70bde2 272 @ret=1; \
b86761ff 273 for TARGET in $(TARGETS) $(INSTALL_DEP_TARGETS); do \
a8ba798b 274 BUILD_TARGET=$$BUILD/$$TARGET; \
2a0683be
BP
275 $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET install \
276 INSTALL_PATH=$(INSTALL_PATH)/$$TARGET \
277 SRC_PATH=$(shell readlink -e $$(pwd)) \
278 OBJ_PATH=$(INSTALL_PATH) \
f6d344cd 279 O=$(abs_objtree) \
9d235a55 280 $(if $(FORCE_TARGETS),|| exit); \
5f70bde2
CM
281 ret=$$((ret * $$?)); \
282 done; exit $$ret;
32dcfba6 283
32dcfba6 284
f0f0a5df
KC
285 @# Ask all targets to emit their test scripts
286 @# While building kselftest-list.text skip also non-existent TARGET dirs:
131b30c9
CM
287 @# they could be the result of a build failure and should NOT be
288 @# included in the generated runlist.
32dcfba6 289 for TARGET in $(TARGETS); do \
a8ba798b 290 BUILD_TARGET=$$BUILD/$$TARGET; \
9e34fad0
GT
291 [ ! -d $(INSTALL_PATH)/$$TARGET ] && printf "Skipping non-existent dir: $$TARGET\n" && continue; \
292 printf "Emit Tests for $$TARGET\n"; \
f0f0a5df
KC
293 $(MAKE) -s --no-print-directory OUTPUT=$$BUILD_TARGET COLLECTION=$$TARGET \
294 -C $$TARGET emit_tests >> $(TEST_LIST); \
32dcfba6 295 done;
32dcfba6
ME
296else
297 $(error Error: set INSTALL_PATH to use install)
298endif
299
a5f30467
VK
300FORMAT ?= .gz
301TAR_PATH = $(abspath ${INSTALL_PATH}/kselftest-packages/kselftest.tar${FORMAT})
302gen_tar: install
303 @mkdir -p ${INSTALL_PATH}/kselftest-packages/
304 @tar caf ${TAR_PATH} --exclude=kselftest-packages -C ${INSTALL_PATH} .
305 @echo "Created ${TAR_PATH}"
306
274343ad 307clean:
1ede0536 308 @for TARGET in $(TARGETS); do \
a8ba798b 309 BUILD_TARGET=$$BUILD/$$TARGET; \
0ac33e4e 310 $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET clean;\
274343ad 311 done;
32dcfba6 312
3bb267a3 313.PHONY: all run_tests hotplug run_hotplug clean_hotplug run_pstore_crash install clean gen_tar