Makefile 8.5 KB

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