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