1# SPDX-License-Identifier: GPL-2.0 2TARGETS = bpf 3TARGETS += breakpoints 4TARGETS += capabilities 5TARGETS += cpufreq 6TARGETS += cpu-hotplug 7TARGETS += efivarfs 8TARGETS += exec 9TARGETS += firmware 10TARGETS += ftrace 11TARGETS += futex 12TARGETS += gpio 13TARGETS += intel_pstate 14TARGETS += ipc 15TARGETS += kcmp 16TARGETS += lib 17TARGETS += membarrier 18TARGETS += memfd 19TARGETS += memory-hotplug 20TARGETS += mount 21TARGETS += mqueue 22TARGETS += net 23TARGETS += nsfs 24TARGETS += powerpc 25TARGETS += pstore 26TARGETS += ptrace 27TARGETS += seccomp 28TARGETS += sigaltstack 29TARGETS += size 30TARGETS += splice 31TARGETS += static_keys 32TARGETS += sync 33TARGETS += sysctl 34ifneq (1, $(quicktest)) 35TARGETS += timers 36endif 37TARGETS += user 38TARGETS += vm 39TARGETS += x86 40TARGETS += zram 41#Please keep the TARGETS list alphabetically sorted 42# Run "make quicktest=1 run_tests" or 43# "make quicktest=1 kselftest" from top level Makefile 44 45TARGETS_HOTPLUG = cpu-hotplug 46TARGETS_HOTPLUG += memory-hotplug 47 48# Clear LDFLAGS and MAKEFLAGS if called from main 49# Makefile to avoid test build failures when test 50# Makefile doesn't have explicit build rules. 51ifeq (1,$(MAKELEVEL)) 52override LDFLAGS = 53override MAKEFLAGS = 54endif 55 56ifneq ($(KBUILD_SRC),) 57override LDFLAGS = 58endif 59 60BUILD := $(O) 61ifndef BUILD 62 BUILD := $(KBUILD_OUTPUT) 63endif 64ifndef BUILD 65 BUILD := $(shell pwd) 66endif 67 68export BUILD 69all: 70 @for TARGET in $(TARGETS); do \ 71 BUILD_TARGET=$$BUILD/$$TARGET; \ 72 mkdir $$BUILD_TARGET -p; \ 73 make OUTPUT=$$BUILD_TARGET -C $$TARGET;\ 74 done; 75 76run_tests: all 77 @for TARGET in $(TARGETS); do \ 78 BUILD_TARGET=$$BUILD/$$TARGET; \ 79 make OUTPUT=$$BUILD_TARGET -C $$TARGET run_tests;\ 80 done; 81 82hotplug: 83 @for TARGET in $(TARGETS_HOTPLUG); do \ 84 BUILD_TARGET=$$BUILD/$$TARGET; \ 85 make OUTPUT=$$BUILD_TARGET -C $$TARGET;\ 86 done; 87 88run_hotplug: hotplug 89 @for TARGET in $(TARGETS_HOTPLUG); do \ 90 BUILD_TARGET=$$BUILD/$$TARGET; \ 91 make OUTPUT=$$BUILD_TARGET -C $$TARGET run_full_test;\ 92 done; 93 94clean_hotplug: 95 @for TARGET in $(TARGETS_HOTPLUG); do \ 96 BUILD_TARGET=$$BUILD/$$TARGET; \ 97 make OUTPUT=$$BUILD_TARGET -C $$TARGET clean;\ 98 done; 99 100run_pstore_crash: 101 make -C pstore run_crash 102 103INSTALL_PATH ?= install 104INSTALL_PATH := $(abspath $(INSTALL_PATH)) 105ALL_SCRIPT := $(INSTALL_PATH)/run_kselftest.sh 106 107install: 108ifdef INSTALL_PATH 109 @# Ask all targets to install their files 110 mkdir -p $(INSTALL_PATH) 111 @for TARGET in $(TARGETS); do \ 112 BUILD_TARGET=$$BUILD/$$TARGET; \ 113 make OUTPUT=$$BUILD_TARGET -C $$TARGET INSTALL_PATH=$(INSTALL_PATH)/$$TARGET install; \ 114 done; 115 116 @# Ask all targets to emit their test scripts 117 echo "#!/bin/sh" > $(ALL_SCRIPT) 118 echo "cd \$$(dirname \$$0)" >> $(ALL_SCRIPT) 119 echo "ROOT=\$$PWD" >> $(ALL_SCRIPT) 120 121 for TARGET in $(TARGETS); do \ 122 BUILD_TARGET=$$BUILD/$$TARGET; \ 123 echo "echo ; echo Running tests in $$TARGET" >> $(ALL_SCRIPT); \ 124 echo "echo ========================================" >> $(ALL_SCRIPT); \ 125 echo "cd $$TARGET" >> $(ALL_SCRIPT); \ 126 make -s --no-print-directory OUTPUT=$$BUILD_TARGET -C $$TARGET emit_tests >> $(ALL_SCRIPT); \ 127 echo "cd \$$ROOT" >> $(ALL_SCRIPT); \ 128 done; 129 130 chmod u+x $(ALL_SCRIPT) 131else 132 $(error Error: set INSTALL_PATH to use install) 133endif 134 135clean: 136 @for TARGET in $(TARGETS); do \ 137 BUILD_TARGET=$$BUILD/$$TARGET; \ 138 make OUTPUT=$$BUILD_TARGET -C $$TARGET clean;\ 139 done; 140 141.PHONY: all run_tests hotplug run_hotplug clean_hotplug run_pstore_crash install clean 142