Commit | Line | Data |
---|---|---|
b2441318 | 1 | # SPDX-License-Identifier: GPL-2.0 |
f0a1ffa6 | 2 | TARGETS += acct |
5aaf9eff | 3 | TARGETS += alsa |
e1083a03 | 4 | TARGETS += amd-pstate |
5aaf9eff | 5 | TARGETS += arm64 |
47a18c42 | 6 | TARGETS += bpf |
5aa5bd14 | 7 | TARGETS += breakpoints |
88537aac | 8 | TARGETS += cachestat |
f4ecb322 | 9 | TARGETS += capabilities |
84092dbc | 10 | TARGETS += cgroup |
de528723 | 11 | TARGETS += clone3 |
73a29531 | 12 | TARGETS += connector |
2c5db60e | 13 | TARGETS += core |
e66d5b67 | 14 | TARGETS += cpufreq |
58c7be84 | 15 | TARGETS += cpu-hotplug |
678f0cdc | 16 | TARGETS += damon |
b7274930 | 17 | TARGETS += devices/error_logs |
0debb20c | 18 | TARGETS += devices/probe |
888c72d5 | 19 | TARGETS += dmabuf-heaps |
6edf2e37 | 20 | TARGETS += drivers/dma-buf |
7f853a25 | 21 | TARGETS += drivers/ntsync |
cbac9242 | 22 | TARGETS += drivers/s390x/uvdevice |
b4db9f84 | 23 | TARGETS += drivers/net |
c078290a | 24 | TARGETS += drivers/net/bonding |
bbb774d9 | 25 | TARGETS += drivers/net/team |
ccfaed04 | 26 | TARGETS += drivers/net/virtio_net |
8e51106d | 27 | TARGETS += drivers/platform/x86/intel/ifs |
14571ab1 | 28 | TARGETS += dt |
58c7be84 | 29 | TARGETS += efivarfs |
96e869d8 | 30 | TARGETS += exec |
4859c257 | 31 | TARGETS += fchmodat2 |
ce290a19 | 32 | TARGETS += filesystems |
75abec73 | 33 | TARGETS += filesystems/binderfs |
f2728fe8 | 34 | TARGETS += filesystems/epoll |
dd7c9be3 | 35 | TARGETS += filesystems/fat |
b5a78c71 | 36 | TARGETS += filesystems/overlayfs |
5bd3cf8c | 37 | TARGETS += filesystems/statmount |
e1c24b52 | 38 | TARGETS += filesystems/mount-notify |
96e869d8 | 39 | TARGETS += firmware |
4185b3b9 | 40 | TARGETS += fpu |
96e869d8 | 41 | TARGETS += ftrace |
ecac1a75 | 42 | TARGETS += futex |
22f6592b | 43 | TARGETS += gpio |
dbb60c8a | 44 | TARGETS += hid |
6320303f | 45 | TARGETS += intel_pstate |
57f09887 | 46 | TARGETS += iommu |
7e722473 | 47 | TARGETS += ipc |
e55c884e | 48 | TARGETS += ir |
66a01b96 | 49 | TARGETS += kcmp |
c3c0e811 | 50 | TARGETS += kexec |
df82ffc5 | 51 | TARGETS += kselftest_harness |
783e9e51 | 52 | TARGETS += kvm |
e1199815 | 53 | TARGETS += landlock |
317dc34a | 54 | TARGETS += lib |
a2818ee4 | 55 | TARGETS += livepatch |
46d1a0f0 | 56 | TARGETS += lkdtm |
d3d929a8 | 57 | TARGETS += lsm |
b6d97344 | 58 | TARGETS += membarrier |
4f5ce5e8 | 59 | TARGETS += memfd |
58c7be84 | 60 | TARGETS += memory-hotplug |
7a309195 | 61 | TARGETS += mincore |
db181ce0 | 62 | TARGETS += mount |
01eadc8d | 63 | TARGETS += mount_setattr |
8374f431 | 64 | TARGETS += move_mount_set_group |
96e869d8 | 65 | TARGETS += mqueue |
b481341e | 66 | TARGETS += mseal_system_mappings |
f595cf12 | 67 | TARGETS += nci |
a6f68034 | 68 | TARGETS += net |
314001f0 | 69 | TARGETS += net/af_unix |
77442ffa | 70 | TARGETS += net/can |
81573b18 | 71 | TARGETS += net/forwarding |
7d0455e9 | 72 | TARGETS += net/hsr |
048d19d4 | 73 | TARGETS += net/mptcp |
9ef1ed26 | 74 | TARGETS += net/netfilter |
8a405552 | 75 | TARGETS += net/openvswitch |
959bc330 | 76 | TARGETS += net/ovpn |
8a405552 | 77 | TARGETS += net/packetdrill |
3ade6ce1 | 78 | TARGETS += net/rds |
8a405552 | 79 | TARGETS += net/tcp_ao |
6ad92bf6 | 80 | TARGETS += nsfs |
392188bb | 81 | TARGETS += pci_endpoint |
838f12c3 | 82 | TARGETS += pcie_bwctrl |
888c72d5 | 83 | TARGETS += perf_events |
575a0ae9 | 84 | TARGETS += pidfd |
6952a4f6 | 85 | TARGETS += pid_namespace |
4a679c5a | 86 | TARGETS += power_supply |
96e869d8 | 87 | TARGETS += powerpc |
52905861 | 88 | TARGETS += prctl |
9cd65655 | 89 | TARGETS += proc |
cc04a46f | 90 | TARGETS += pstore |
17afab1d | 91 | TARGETS += ptrace |
b28a10ae | 92 | TARGETS += openat2 |
b733143c | 93 | TARGETS += resctrl |
287dcc2b | 94 | TARGETS += riscv |
e4aebf06 | 95 | TARGETS += rlimits |
ccba8b64 | 96 | TARGETS += rseq |
a12ab9e1 | 97 | TARGETS += rtc |
5d94da7f | 98 | TARGETS += rust |
7941b83b | 99 | TARGETS += sched_ext |
c99ee51a | 100 | TARGETS += seccomp |
2adcba79 | 101 | TARGETS += sgx |
11f0c8e0 | 102 | TARGETS += signal |
96e869d8 | 103 | TARGETS += size |
3c545084 | 104 | TARGETS += sparc64 |
b8826e50 | 105 | TARGETS += splice |
1087d019 | 106 | TARGETS += static_keys |
82208160 | 107 | TARGETS += sync |
179ef035 | 108 | TARGETS += syscall_user_dispatch |
96e869d8 | 109 | TARGETS += sysctl |
2b9843fb | 110 | TARGETS += tc-testing |
00e07cfb | 111 | TARGETS += tdx |
d4d27e5a | 112 | TARGETS += thermal/intel/power_floor |
27801542 | 113 | TARGETS += thermal/intel/workload_hint |
61c57676 | 114 | TARGETS += timens |
2278e5ed | 115 | ifneq (1, $(quicktest)) |
0bc4b0cf | 116 | TARGETS += timers |
2278e5ed | 117 | endif |
a3322868 | 118 | TARGETS += tmpfs |
6ea3dfe1 | 119 | TARGETS += tpm2 |
e8cc3348 | 120 | TARGETS += tty |
6aecda00 | 121 | TARGETS += ublk |
6f874fa0 | 122 | TARGETS += uevent |
68b4d2d5 | 123 | TARGETS += user_events |
40723419 | 124 | TARGETS += vDSO |
baa489fa | 125 | TARGETS += mm |
3f705dfd | 126 | TARGETS += x86 |
7a9b709e | 127 | TARGETS += x86/bugs |
f21fb798 | 128 | TARGETS += 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 |
133 | TARGETS_HOTPLUG = cpu-hotplug |
134 | TARGETS_HOTPLUG += memory-hotplug | |
135 | ||
b86761ff | 136 | # Networking tests want the net/lib target, include it automatically |
ff4b2bfa | 137 | ifneq ($(filter net drivers/net drivers/net/hw,$(TARGETS)),) |
b86761ff JK |
138 | ifeq ($(filter net/lib,$(TARGETS)),) |
139 | INSTALL_DEP_TARGETS := net/lib | |
140 | endif | |
141 | endif | |
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. | |
146 | SKIP_TARGETS ?= bpf sched_ext | |
3a24f7f6 CM |
147 | ifneq ($(SKIP_TARGETS),) |
148 | TMP := $(filter-out $(SKIP_TARGETS), $(TARGETS)) | |
149 | override TARGETS := $(TMP) | |
150 | endif | |
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. | |
156 | FORCE_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. | |
161 | ifeq (,$(LINK.c)) | |
60df4642 | 162 | override LDFLAGS = |
67d8712d SK |
163 | override MAKEFLAGS = |
164 | endif | |
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 | 169 | ifdef building_out_of_srctree |
52fd1d08 SK |
170 | override LDFLAGS = |
171 | endif | |
172 | ||
5ad51ab6 MUA |
173 | top_srcdir ?= ../../.. |
174 | ||
175 | ifeq ("$(origin O)", "command line") | |
176 | KBUILD_OUTPUT := $(O) | |
177 | endif | |
178 | ||
179 | ifneq ($(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 | 189 | else |
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 | 194 | endif |
195 | ||
8ce72dc3 | 196 | # Prepare for headers install |
8ce72dc3 SK |
197 | include $(top_srcdir)/scripts/subarch.include |
198 | ARCH ?= $(SUBARCH) | |
a8ba798b | 199 | export BUILD |
250f8c11 | 200 | export 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 | 206 | all: |
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 | 217 | run_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 | 226 | hotplug: |
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 | ||
232 | run_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 | ||
238 | clean_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 | 244 | run_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 |
254 | KSFT_INSTALL_PATH ?= $(BUILD)/kselftest_install |
255 | KSFT_INSTALL_PATH := $(abspath $(KSFT_INSTALL_PATH)) | |
256 | # Avoid changing the rest of the logic here and lib.mk. | |
257 | INSTALL_PATH := $(KSFT_INSTALL_PATH) | |
32dcfba6 | 258 | ALL_SCRIPT := $(INSTALL_PATH)/run_kselftest.sh |
f0f0a5df | 259 | TEST_LIST := $(INSTALL_PATH)/kselftest-list.txt |
32dcfba6 | 260 | |
c3c59928 | 261 | install: all |
32dcfba6 ME |
262 | ifdef 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 |
296 | else |
297 | $(error Error: set INSTALL_PATH to use install) | |
298 | endif | |
299 | ||
a5f30467 VK |
300 | FORMAT ?= .gz |
301 | TAR_PATH = $(abspath ${INSTALL_PATH}/kselftest-packages/kselftest.tar${FORMAT}) | |
302 | gen_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 | 307 | clean: |
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 |