1# SPDX-License-Identifier: GPL-2.0 2TARGETS = android 3TARGETS += bpf 4TARGETS += breakpoints 5TARGETS += capabilities 6TARGETS += cgroup 7TARGETS += cpufreq 8TARGETS += cpu-hotplug 9TARGETS += efivarfs 10TARGETS += exec 11TARGETS += filesystems 12TARGETS += firmware 13TARGETS += ftrace 14TARGETS += futex 15TARGETS += gpio 16TARGETS += intel_pstate 17TARGETS += ipc 18TARGETS += kcmp 19TARGETS += kvm 20TARGETS += lib 21TARGETS += membarrier 22TARGETS += memfd 23TARGETS += memory-hotplug 24TARGETS += mount 25TARGETS += mqueue 26TARGETS += net 27TARGETS += nsfs 28TARGETS += powerpc 29TARGETS += proc 30TARGETS += pstore 31TARGETS += ptrace 32TARGETS += rtc 33TARGETS += seccomp 34TARGETS += sigaltstack 35TARGETS += size 36TARGETS += sparc64 37TARGETS += splice 38TARGETS += static_keys 39TARGETS += sync 40TARGETS += sysctl 41ifneq (1, $(quicktest)) 42TARGETS += timers 43endif 44TARGETS += user 45TARGETS += vm 46TARGETS += x86 47TARGETS += zram 48#Please keep the TARGETS list alphabetically sorted 49# Run "make quicktest=1 run_tests" or 50# "make quicktest=1 kselftest" from top level Makefile 51 52TARGETS_HOTPLUG = cpu-hotplug 53TARGETS_HOTPLUG += memory-hotplug 54 55# Clear LDFLAGS and MAKEFLAGS if called from main 56# Makefile to avoid test build failures when test 57# Makefile doesn't have explicit build rules. 58ifeq (1,$(MAKELEVEL)) 59override LDFLAGS = 60override MAKEFLAGS = 61endif 62 63ifneq ($(KBUILD_SRC),) 64override LDFLAGS = 65endif 66 67BUILD := $(O) 68ifndef BUILD 69 BUILD := $(KBUILD_OUTPUT) 70endif 71ifndef BUILD 72 BUILD := $(shell pwd) 73endif 74 75# KSFT_TAP_LEVEL is used from KSFT framework to prevent nested TAP header 76# printing from tests. Applicable to run_tests case where run_tests adds 77# TAP header prior running tests and when a test program invokes another 78# with system() call. Export it here to cover override RUN_TESTS defines. 79export KSFT_TAP_LEVEL=`echo 1` 80 81export BUILD 82all: 83 @for TARGET in $(TARGETS); do \ 84 BUILD_TARGET=$$BUILD/$$TARGET; \ 85 mkdir $$BUILD_TARGET -p; \ 86 make OUTPUT=$$BUILD_TARGET -C $$TARGET;\ 87 done; 88 89run_tests: all 90 @for TARGET in $(TARGETS); do \ 91 BUILD_TARGET=$$BUILD/$$TARGET; \ 92 make OUTPUT=$$BUILD_TARGET -C $$TARGET run_tests;\ 93 done; 94 95hotplug: 96 @for TARGET in $(TARGETS_HOTPLUG); do \ 97 BUILD_TARGET=$$BUILD/$$TARGET; \ 98 make OUTPUT=$$BUILD_TARGET -C $$TARGET;\ 99 done; 100 101run_hotplug: hotplug 102 @for TARGET in $(TARGETS_HOTPLUG); do \ 103 BUILD_TARGET=$$BUILD/$$TARGET; \ 104 make OUTPUT=$$BUILD_TARGET -C $$TARGET run_full_test;\ 105 done; 106 107clean_hotplug: 108 @for TARGET in $(TARGETS_HOTPLUG); do \ 109 BUILD_TARGET=$$BUILD/$$TARGET; \ 110 make OUTPUT=$$BUILD_TARGET -C $$TARGET clean;\ 111 done; 112 113run_pstore_crash: 114 make -C pstore run_crash 115 116INSTALL_PATH ?= install 117INSTALL_PATH := $(abspath $(INSTALL_PATH)) 118ALL_SCRIPT := $(INSTALL_PATH)/run_kselftest.sh 119 120install: 121ifdef INSTALL_PATH 122 @# Ask all targets to install their files 123 mkdir -p $(INSTALL_PATH) 124 @for TARGET in $(TARGETS); do \ 125 BUILD_TARGET=$$BUILD/$$TARGET; \ 126 make OUTPUT=$$BUILD_TARGET -C $$TARGET INSTALL_PATH=$(INSTALL_PATH)/$$TARGET install; \ 127 done; 128 129 @# Ask all targets to emit their test scripts 130 echo "#!/bin/sh" > $(ALL_SCRIPT) 131 echo "BASE_DIR=\$$(realpath \$$(dirname \$$0))" >> $(ALL_SCRIPT) 132 echo "cd \$$BASE_DIR" >> $(ALL_SCRIPT) 133 echo "ROOT=\$$PWD" >> $(ALL_SCRIPT) 134 echo "if [ \"\$$1\" = \"--summary\" ]; then" >> $(ALL_SCRIPT) 135 echo " OUTPUT=\$$BASE_DIR/output.log" >> $(ALL_SCRIPT) 136 echo " cat /dev/null > \$$OUTPUT" >> $(ALL_SCRIPT) 137 echo "else" >> $(ALL_SCRIPT) 138 echo " OUTPUT=/dev/stdout" >> $(ALL_SCRIPT) 139 echo "fi" >> $(ALL_SCRIPT) 140 echo "export KSFT_TAP_LEVEL=1" >> $(ALL_SCRIPT) 141 echo "export skip=4" >> $(ALL_SCRIPT) 142 143 for TARGET in $(TARGETS); do \ 144 BUILD_TARGET=$$BUILD/$$TARGET; \ 145 echo "echo ; echo TAP version 13" >> $(ALL_SCRIPT); \ 146 echo "echo Running tests in $$TARGET" >> $(ALL_SCRIPT); \ 147 echo "echo ========================================" >> $(ALL_SCRIPT); \ 148 echo "[ -w /dev/kmsg ] && echo \"kselftest: Running tests in $$TARGET\" >> /dev/kmsg" >> $(ALL_SCRIPT); \ 149 echo "cd $$TARGET" >> $(ALL_SCRIPT); \ 150 make -s --no-print-directory OUTPUT=$$BUILD_TARGET -C $$TARGET emit_tests >> $(ALL_SCRIPT); \ 151 echo "cd \$$ROOT" >> $(ALL_SCRIPT); \ 152 done; 153 154 chmod u+x $(ALL_SCRIPT) 155else 156 $(error Error: set INSTALL_PATH to use install) 157endif 158 159clean: 160 @for TARGET in $(TARGETS); do \ 161 BUILD_TARGET=$$BUILD/$$TARGET; \ 162 make OUTPUT=$$BUILD_TARGET -C $$TARGET clean;\ 163 done; 164 165.PHONY: all run_tests hotplug run_hotplug clean_hotplug run_pstore_crash install clean 166