1*053f45beSAndroid Build Coastguard Worker# SPDX-License-Identifier: GPL-2.0 2*053f45beSAndroid Build Coastguard WorkerTARGETS += alsa 3*053f45beSAndroid Build Coastguard WorkerTARGETS += amd-pstate 4*053f45beSAndroid Build Coastguard WorkerTARGETS += arm64 5*053f45beSAndroid Build Coastguard WorkerTARGETS += bpf 6*053f45beSAndroid Build Coastguard WorkerTARGETS += breakpoints 7*053f45beSAndroid Build Coastguard WorkerTARGETS += capabilities 8*053f45beSAndroid Build Coastguard WorkerTARGETS += cgroup 9*053f45beSAndroid Build Coastguard WorkerTARGETS += clone3 10*053f45beSAndroid Build Coastguard WorkerTARGETS += core 11*053f45beSAndroid Build Coastguard WorkerTARGETS += cpufreq 12*053f45beSAndroid Build Coastguard WorkerTARGETS += cpu-hotplug 13*053f45beSAndroid Build Coastguard WorkerTARGETS += damon 14*053f45beSAndroid Build Coastguard WorkerTARGETS += drivers/dma-buf 15*053f45beSAndroid Build Coastguard WorkerTARGETS += drivers/s390x/uvdevice 16*053f45beSAndroid Build Coastguard WorkerTARGETS += drivers/net/bonding 17*053f45beSAndroid Build Coastguard WorkerTARGETS += drivers/net/team 18*053f45beSAndroid Build Coastguard WorkerTARGETS += efivarfs 19*053f45beSAndroid Build Coastguard WorkerTARGETS += exec 20*053f45beSAndroid Build Coastguard WorkerTARGETS += filesystems 21*053f45beSAndroid Build Coastguard WorkerTARGETS += filesystems/binderfs 22*053f45beSAndroid Build Coastguard WorkerTARGETS += filesystems/epoll 23*053f45beSAndroid Build Coastguard WorkerTARGETS += filesystems/fat 24*053f45beSAndroid Build Coastguard WorkerTARGETS += firmware 25*053f45beSAndroid Build Coastguard WorkerTARGETS += fpu 26*053f45beSAndroid Build Coastguard WorkerTARGETS += ftrace 27*053f45beSAndroid Build Coastguard WorkerTARGETS += futex 28*053f45beSAndroid Build Coastguard WorkerTARGETS += gpio 29*053f45beSAndroid Build Coastguard WorkerTARGETS += intel_pstate 30*053f45beSAndroid Build Coastguard WorkerTARGETS += ipc 31*053f45beSAndroid Build Coastguard WorkerTARGETS += ir 32*053f45beSAndroid Build Coastguard WorkerTARGETS += kcmp 33*053f45beSAndroid Build Coastguard WorkerTARGETS += kexec 34*053f45beSAndroid Build Coastguard WorkerTARGETS += kvm 35*053f45beSAndroid Build Coastguard WorkerTARGETS += landlock 36*053f45beSAndroid Build Coastguard WorkerTARGETS += lib 37*053f45beSAndroid Build Coastguard WorkerTARGETS += livepatch 38*053f45beSAndroid Build Coastguard WorkerTARGETS += lkdtm 39*053f45beSAndroid Build Coastguard WorkerTARGETS += membarrier 40*053f45beSAndroid Build Coastguard WorkerTARGETS += memfd 41*053f45beSAndroid Build Coastguard WorkerTARGETS += memory-hotplug 42*053f45beSAndroid Build Coastguard WorkerTARGETS += mincore 43*053f45beSAndroid Build Coastguard WorkerTARGETS += mount 44*053f45beSAndroid Build Coastguard WorkerTARGETS += mount_setattr 45*053f45beSAndroid Build Coastguard WorkerTARGETS += move_mount_set_group 46*053f45beSAndroid Build Coastguard WorkerTARGETS += mqueue 47*053f45beSAndroid Build Coastguard WorkerTARGETS += nci 48*053f45beSAndroid Build Coastguard WorkerTARGETS += net 49*053f45beSAndroid Build Coastguard WorkerTARGETS += net/af_unix 50*053f45beSAndroid Build Coastguard WorkerTARGETS += net/forwarding 51*053f45beSAndroid Build Coastguard WorkerTARGETS += net/mptcp 52*053f45beSAndroid Build Coastguard WorkerTARGETS += net/openvswitch 53*053f45beSAndroid Build Coastguard WorkerTARGETS += netfilter 54*053f45beSAndroid Build Coastguard WorkerTARGETS += nsfs 55*053f45beSAndroid Build Coastguard WorkerTARGETS += pidfd 56*053f45beSAndroid Build Coastguard WorkerTARGETS += pid_namespace 57*053f45beSAndroid Build Coastguard WorkerTARGETS += powerpc 58*053f45beSAndroid Build Coastguard WorkerTARGETS += proc 59*053f45beSAndroid Build Coastguard WorkerTARGETS += pstore 60*053f45beSAndroid Build Coastguard WorkerTARGETS += ptrace 61*053f45beSAndroid Build Coastguard WorkerTARGETS += openat2 62*053f45beSAndroid Build Coastguard WorkerTARGETS += resctrl 63*053f45beSAndroid Build Coastguard WorkerTARGETS += rlimits 64*053f45beSAndroid Build Coastguard WorkerTARGETS += rseq 65*053f45beSAndroid Build Coastguard WorkerTARGETS += rtc 66*053f45beSAndroid Build Coastguard WorkerTARGETS += seccomp 67*053f45beSAndroid Build Coastguard WorkerTARGETS += sgx 68*053f45beSAndroid Build Coastguard WorkerTARGETS += sigaltstack 69*053f45beSAndroid Build Coastguard WorkerTARGETS += size 70*053f45beSAndroid Build Coastguard WorkerTARGETS += sparc64 71*053f45beSAndroid Build Coastguard WorkerTARGETS += splice 72*053f45beSAndroid Build Coastguard WorkerTARGETS += static_keys 73*053f45beSAndroid Build Coastguard WorkerTARGETS += sync 74*053f45beSAndroid Build Coastguard WorkerTARGETS += syscall_user_dispatch 75*053f45beSAndroid Build Coastguard WorkerTARGETS += sysctl 76*053f45beSAndroid Build Coastguard WorkerTARGETS += tc-testing 77*053f45beSAndroid Build Coastguard WorkerTARGETS += timens 78*053f45beSAndroid Build Coastguard Workerifneq (1, $(quicktest)) 79*053f45beSAndroid Build Coastguard WorkerTARGETS += timers 80*053f45beSAndroid Build Coastguard Workerendif 81*053f45beSAndroid Build Coastguard WorkerTARGETS += tmpfs 82*053f45beSAndroid Build Coastguard WorkerTARGETS += tpm2 83*053f45beSAndroid Build Coastguard WorkerTARGETS += user 84*053f45beSAndroid Build Coastguard WorkerTARGETS += vDSO 85*053f45beSAndroid Build Coastguard WorkerTARGETS += vm 86*053f45beSAndroid Build Coastguard WorkerTARGETS += x86 87*053f45beSAndroid Build Coastguard WorkerTARGETS += zram 88*053f45beSAndroid Build Coastguard Worker#Please keep the TARGETS list alphabetically sorted 89*053f45beSAndroid Build Coastguard Worker# Run "make quicktest=1 run_tests" or 90*053f45beSAndroid Build Coastguard Worker# "make quicktest=1 kselftest" from top level Makefile 91*053f45beSAndroid Build Coastguard Worker 92*053f45beSAndroid Build Coastguard WorkerTARGETS_HOTPLUG = cpu-hotplug 93*053f45beSAndroid Build Coastguard WorkerTARGETS_HOTPLUG += memory-hotplug 94*053f45beSAndroid Build Coastguard Worker 95*053f45beSAndroid Build Coastguard Worker# User can optionally provide a TARGETS skiplist. By default we skip 96*053f45beSAndroid Build Coastguard Worker# BPF since it has cutting edge build time dependencies which require 97*053f45beSAndroid Build Coastguard Worker# more effort to install. 98*053f45beSAndroid Build Coastguard WorkerSKIP_TARGETS ?= bpf 99*053f45beSAndroid Build Coastguard Workerifneq ($(SKIP_TARGETS),) 100*053f45beSAndroid Build Coastguard Worker TMP := $(filter-out $(SKIP_TARGETS), $(TARGETS)) 101*053f45beSAndroid Build Coastguard Worker override TARGETS := $(TMP) 102*053f45beSAndroid Build Coastguard Workerendif 103*053f45beSAndroid Build Coastguard Worker 104*053f45beSAndroid Build Coastguard Worker# User can set FORCE_TARGETS to 1 to require all targets to be successfully 105*053f45beSAndroid Build Coastguard Worker# built; make will fail if any of the targets cannot be built. If 106*053f45beSAndroid Build Coastguard Worker# FORCE_TARGETS is not set (the default), make will succeed if at least one 107*053f45beSAndroid Build Coastguard Worker# of the targets gets built. 108*053f45beSAndroid Build Coastguard WorkerFORCE_TARGETS ?= 109*053f45beSAndroid Build Coastguard Worker 110*053f45beSAndroid Build Coastguard Worker# Clear LDFLAGS and MAKEFLAGS when implicit rules are missing. This provides 111*053f45beSAndroid Build Coastguard Worker# implicit rules to sub-test Makefiles which avoids build failures in test 112*053f45beSAndroid Build Coastguard Worker# Makefile that don't have explicit build rules. 113*053f45beSAndroid Build Coastguard Workerifeq (,$(LINK.c)) 114*053f45beSAndroid Build Coastguard Workeroverride LDFLAGS = 115*053f45beSAndroid Build Coastguard Workeroverride MAKEFLAGS = 116*053f45beSAndroid Build Coastguard Workerendif 117*053f45beSAndroid Build Coastguard Worker 118*053f45beSAndroid Build Coastguard Worker# Append kselftest to KBUILD_OUTPUT and O to avoid cluttering 119*053f45beSAndroid Build Coastguard Worker# KBUILD_OUTPUT with selftest objects and headers installed 120*053f45beSAndroid Build Coastguard Worker# by selftests Makefile or lib.mk. 121*053f45beSAndroid Build Coastguard Workerifdef building_out_of_srctree 122*053f45beSAndroid Build Coastguard Workeroverride LDFLAGS = 123*053f45beSAndroid Build Coastguard Workerendif 124*053f45beSAndroid Build Coastguard Worker 125*053f45beSAndroid Build Coastguard Workertop_srcdir ?= ../../.. 126*053f45beSAndroid Build Coastguard Worker 127*053f45beSAndroid Build Coastguard Workerifeq ("$(origin O)", "command line") 128*053f45beSAndroid Build Coastguard Worker KBUILD_OUTPUT := $(O) 129*053f45beSAndroid Build Coastguard Workerendif 130*053f45beSAndroid Build Coastguard Worker 131*053f45beSAndroid Build Coastguard Workerifneq ($(KBUILD_OUTPUT),) 132*053f45beSAndroid Build Coastguard Worker # Make's built-in functions such as $(abspath ...), $(realpath ...) cannot 133*053f45beSAndroid Build Coastguard Worker # expand a shell special character '~'. We use a somewhat tedious way here. 134*053f45beSAndroid Build Coastguard Worker abs_objtree := $(shell cd $(top_srcdir) && mkdir -p $(KBUILD_OUTPUT) && cd $(KBUILD_OUTPUT) && pwd) 135*053f45beSAndroid Build Coastguard Worker $(if $(abs_objtree),, \ 136*053f45beSAndroid Build Coastguard Worker $(error failed to create output directory "$(KBUILD_OUTPUT)")) 137*053f45beSAndroid Build Coastguard Worker # $(realpath ...) resolves symlinks 138*053f45beSAndroid Build Coastguard Worker abs_objtree := $(realpath $(abs_objtree)) 139*053f45beSAndroid Build Coastguard Worker BUILD := $(abs_objtree)/kselftest 140*053f45beSAndroid Build Coastguard Worker KHDR_INCLUDES := -isystem ${abs_objtree}/usr/include 141*053f45beSAndroid Build Coastguard Workerelse 142*053f45beSAndroid Build Coastguard Worker BUILD := $(CURDIR) 143*053f45beSAndroid Build Coastguard Worker abs_srctree := $(shell cd $(top_srcdir) && pwd) 144*053f45beSAndroid Build Coastguard Worker KHDR_INCLUDES := -isystem ${abs_srctree}/usr/include 145*053f45beSAndroid Build Coastguard Worker DEFAULT_INSTALL_HDR_PATH := 1 146*053f45beSAndroid Build Coastguard Workerendif 147*053f45beSAndroid Build Coastguard Worker 148*053f45beSAndroid Build Coastguard Worker# Prepare for headers install 149*053f45beSAndroid Build Coastguard Workerinclude $(top_srcdir)/scripts/subarch.include 150*053f45beSAndroid Build Coastguard WorkerARCH ?= $(SUBARCH) 151*053f45beSAndroid Build Coastguard Workerexport BUILD 152*053f45beSAndroid Build Coastguard Workerexport KHDR_INCLUDES 153*053f45beSAndroid Build Coastguard Worker 154*053f45beSAndroid Build Coastguard Worker# set default goal to all, so make without a target runs all, even when 155*053f45beSAndroid Build Coastguard Worker# all isn't the first target in the file. 156*053f45beSAndroid Build Coastguard Worker.DEFAULT_GOAL := all 157*053f45beSAndroid Build Coastguard Worker 158*053f45beSAndroid Build Coastguard Workerall: 159*053f45beSAndroid Build Coastguard Worker @ret=1; \ 160*053f45beSAndroid Build Coastguard Worker for TARGET in $(TARGETS); do \ 161*053f45beSAndroid Build Coastguard Worker BUILD_TARGET=$$BUILD/$$TARGET; \ 162*053f45beSAndroid Build Coastguard Worker mkdir $$BUILD_TARGET -p; \ 163*053f45beSAndroid Build Coastguard Worker $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET \ 164*053f45beSAndroid Build Coastguard Worker O=$(abs_objtree) \ 165*053f45beSAndroid Build Coastguard Worker $(if $(FORCE_TARGETS),|| exit); \ 166*053f45beSAndroid Build Coastguard Worker ret=$$((ret * $$?)); \ 167*053f45beSAndroid Build Coastguard Worker done; exit $$ret; 168*053f45beSAndroid Build Coastguard Worker 169*053f45beSAndroid Build Coastguard Workerrun_tests: all 170*053f45beSAndroid Build Coastguard Worker @for TARGET in $(TARGETS); do \ 171*053f45beSAndroid Build Coastguard Worker BUILD_TARGET=$$BUILD/$$TARGET; \ 172*053f45beSAndroid Build Coastguard Worker $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET run_tests \ 173*053f45beSAndroid Build Coastguard Worker O=$(abs_objtree); \ 174*053f45beSAndroid Build Coastguard Worker done; 175*053f45beSAndroid Build Coastguard Worker 176*053f45beSAndroid Build Coastguard Workerhotplug: 177*053f45beSAndroid Build Coastguard Worker @for TARGET in $(TARGETS_HOTPLUG); do \ 178*053f45beSAndroid Build Coastguard Worker BUILD_TARGET=$$BUILD/$$TARGET; \ 179*053f45beSAndroid Build Coastguard Worker $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET;\ 180*053f45beSAndroid Build Coastguard Worker done; 181*053f45beSAndroid Build Coastguard Worker 182*053f45beSAndroid Build Coastguard Workerrun_hotplug: hotplug 183*053f45beSAndroid Build Coastguard Worker @for TARGET in $(TARGETS_HOTPLUG); do \ 184*053f45beSAndroid Build Coastguard Worker BUILD_TARGET=$$BUILD/$$TARGET; \ 185*053f45beSAndroid Build Coastguard Worker $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET run_full_test;\ 186*053f45beSAndroid Build Coastguard Worker done; 187*053f45beSAndroid Build Coastguard Worker 188*053f45beSAndroid Build Coastguard Workerclean_hotplug: 189*053f45beSAndroid Build Coastguard Worker @for TARGET in $(TARGETS_HOTPLUG); do \ 190*053f45beSAndroid Build Coastguard Worker BUILD_TARGET=$$BUILD/$$TARGET; \ 191*053f45beSAndroid Build Coastguard Worker $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET clean;\ 192*053f45beSAndroid Build Coastguard Worker done; 193*053f45beSAndroid Build Coastguard Worker 194*053f45beSAndroid Build Coastguard Workerrun_pstore_crash: 195*053f45beSAndroid Build Coastguard Worker $(MAKE) -C pstore run_crash 196*053f45beSAndroid Build Coastguard Worker 197*053f45beSAndroid Build Coastguard Worker# Use $BUILD as the default install root. $BUILD points to the 198*053f45beSAndroid Build Coastguard Worker# right output location for the following cases: 199*053f45beSAndroid Build Coastguard Worker# 1. output_dir=kernel_src 200*053f45beSAndroid Build Coastguard Worker# 2. a separate output directory is specified using O= KBUILD_OUTPUT 201*053f45beSAndroid Build Coastguard Worker# 3. a separate output directory is specified using KBUILD_OUTPUT 202*053f45beSAndroid Build Coastguard Worker# Avoid conflict with INSTALL_PATH set by the main Makefile 203*053f45beSAndroid Build Coastguard Worker# 204*053f45beSAndroid Build Coastguard WorkerKSFT_INSTALL_PATH ?= $(BUILD)/kselftest_install 205*053f45beSAndroid Build Coastguard WorkerKSFT_INSTALL_PATH := $(abspath $(KSFT_INSTALL_PATH)) 206*053f45beSAndroid Build Coastguard Worker# Avoid changing the rest of the logic here and lib.mk. 207*053f45beSAndroid Build Coastguard WorkerINSTALL_PATH := $(KSFT_INSTALL_PATH) 208*053f45beSAndroid Build Coastguard WorkerALL_SCRIPT := $(INSTALL_PATH)/run_kselftest.sh 209*053f45beSAndroid Build Coastguard WorkerTEST_LIST := $(INSTALL_PATH)/kselftest-list.txt 210*053f45beSAndroid Build Coastguard Worker 211*053f45beSAndroid Build Coastguard Workerinstall: all 212*053f45beSAndroid Build Coastguard Workerifdef INSTALL_PATH 213*053f45beSAndroid Build Coastguard Worker @# Ask all targets to install their files 214*053f45beSAndroid Build Coastguard Worker mkdir -p $(INSTALL_PATH)/kselftest 215*053f45beSAndroid Build Coastguard Worker install -m 744 kselftest/module.sh $(INSTALL_PATH)/kselftest/ 216*053f45beSAndroid Build Coastguard Worker install -m 744 kselftest/runner.sh $(INSTALL_PATH)/kselftest/ 217*053f45beSAndroid Build Coastguard Worker install -m 744 kselftest/prefix.pl $(INSTALL_PATH)/kselftest/ 218*053f45beSAndroid Build Coastguard Worker install -m 744 run_kselftest.sh $(INSTALL_PATH)/ 219*053f45beSAndroid Build Coastguard Worker rm -f $(TEST_LIST) 220*053f45beSAndroid Build Coastguard Worker @ret=1; \ 221*053f45beSAndroid Build Coastguard Worker for TARGET in $(TARGETS); do \ 222*053f45beSAndroid Build Coastguard Worker BUILD_TARGET=$$BUILD/$$TARGET; \ 223*053f45beSAndroid Build Coastguard Worker $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET INSTALL_PATH=$(INSTALL_PATH)/$$TARGET install \ 224*053f45beSAndroid Build Coastguard Worker O=$(abs_objtree) \ 225*053f45beSAndroid Build Coastguard Worker $(if $(FORCE_TARGETS),|| exit); \ 226*053f45beSAndroid Build Coastguard Worker ret=$$((ret * $$?)); \ 227*053f45beSAndroid Build Coastguard Worker done; exit $$ret; 228*053f45beSAndroid Build Coastguard Worker 229*053f45beSAndroid Build Coastguard Worker 230*053f45beSAndroid Build Coastguard Worker @# Ask all targets to emit their test scripts 231*053f45beSAndroid Build Coastguard Worker @# While building kselftest-list.text skip also non-existent TARGET dirs: 232*053f45beSAndroid Build Coastguard Worker @# they could be the result of a build failure and should NOT be 233*053f45beSAndroid Build Coastguard Worker @# included in the generated runlist. 234*053f45beSAndroid Build Coastguard Worker for TARGET in $(TARGETS); do \ 235*053f45beSAndroid Build Coastguard Worker BUILD_TARGET=$$BUILD/$$TARGET; \ 236*053f45beSAndroid Build Coastguard Worker [ ! -d $(INSTALL_PATH)/$$TARGET ] && echo "Skipping non-existent dir: $$TARGET" && continue; \ 237*053f45beSAndroid Build Coastguard Worker echo -ne "Emit Tests for $$TARGET\n"; \ 238*053f45beSAndroid Build Coastguard Worker $(MAKE) -s --no-print-directory OUTPUT=$$BUILD_TARGET COLLECTION=$$TARGET \ 239*053f45beSAndroid Build Coastguard Worker -C $$TARGET emit_tests >> $(TEST_LIST); \ 240*053f45beSAndroid Build Coastguard Worker done; 241*053f45beSAndroid Build Coastguard Workerelse 242*053f45beSAndroid Build Coastguard Worker $(error Error: set INSTALL_PATH to use install) 243*053f45beSAndroid Build Coastguard Workerendif 244*053f45beSAndroid Build Coastguard Worker 245*053f45beSAndroid Build Coastguard WorkerFORMAT ?= .gz 246*053f45beSAndroid Build Coastguard WorkerTAR_PATH = $(abspath ${INSTALL_PATH}/kselftest-packages/kselftest.tar${FORMAT}) 247*053f45beSAndroid Build Coastguard Workergen_tar: install 248*053f45beSAndroid Build Coastguard Worker @mkdir -p ${INSTALL_PATH}/kselftest-packages/ 249*053f45beSAndroid Build Coastguard Worker @tar caf ${TAR_PATH} --exclude=kselftest-packages -C ${INSTALL_PATH} . 250*053f45beSAndroid Build Coastguard Worker @echo "Created ${TAR_PATH}" 251*053f45beSAndroid Build Coastguard Worker 252*053f45beSAndroid Build Coastguard Workerclean: 253*053f45beSAndroid Build Coastguard Worker @for TARGET in $(TARGETS); do \ 254*053f45beSAndroid Build Coastguard Worker BUILD_TARGET=$$BUILD/$$TARGET; \ 255*053f45beSAndroid Build Coastguard Worker $(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET clean;\ 256*053f45beSAndroid Build Coastguard Worker done; 257*053f45beSAndroid Build Coastguard Worker 258*053f45beSAndroid Build Coastguard Worker.PHONY: all run_tests hotplug run_hotplug clean_hotplug run_pstore_crash install clean gen_tar 259