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