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