Makefile 9.2 KB

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