1*053f45beSAndroid Build Coastguard Worker# SPDX-License-Identifier: GPL-2.0 2*053f45beSAndroid Build Coastguard Worker# Makefile for vm selftests 3*053f45beSAndroid Build Coastguard Worker 4*053f45beSAndroid Build Coastguard WorkerLOCAL_HDRS += $(top_srcdir)/mm/gup_test.h 5*053f45beSAndroid Build Coastguard Worker 6*053f45beSAndroid Build Coastguard Workeruname_M := $(shell uname -m 2>/dev/null || echo not) 7*053f45beSAndroid Build Coastguard WorkerMACHINE ?= $(shell echo $(uname_M) | sed -e 's/aarch64.*/arm64/' -e 's/ppc64.*/ppc64/') 8*053f45beSAndroid Build Coastguard Worker 9*053f45beSAndroid Build Coastguard Worker# Without this, failed build products remain, with up-to-date timestamps, 10*053f45beSAndroid Build Coastguard Worker# thus tricking Make (and you!) into believing that All Is Well, in subsequent 11*053f45beSAndroid Build Coastguard Worker# make invocations: 12*053f45beSAndroid Build Coastguard Worker.DELETE_ON_ERROR: 13*053f45beSAndroid Build Coastguard Worker 14*053f45beSAndroid Build Coastguard Worker# Avoid accidental wrong builds, due to built-in rules working just a little 15*053f45beSAndroid Build Coastguard Worker# bit too well--but not quite as well as required for our situation here. 16*053f45beSAndroid Build Coastguard Worker# 17*053f45beSAndroid Build Coastguard Worker# In other words, "make userfaultfd" is supposed to fail to build at all, 18*053f45beSAndroid Build Coastguard Worker# because this Makefile only supports either "make" (all), or "make /full/path". 19*053f45beSAndroid Build Coastguard Worker# However, the built-in rules, if not suppressed, will pick up CFLAGS and the 20*053f45beSAndroid Build Coastguard Worker# initial LDLIBS (but not the target-specific LDLIBS, because those are only 21*053f45beSAndroid Build Coastguard Worker# set for the full path target!). This causes it to get pretty far into building 22*053f45beSAndroid Build Coastguard Worker# things despite using incorrect values such as an *occasionally* incomplete 23*053f45beSAndroid Build Coastguard Worker# LDLIBS. 24*053f45beSAndroid Build Coastguard WorkerMAKEFLAGS += --no-builtin-rules 25*053f45beSAndroid Build Coastguard Worker 26*053f45beSAndroid Build Coastguard WorkerCFLAGS = -Wall -I $(top_srcdir) -I $(top_srcdir)/usr/include $(EXTRA_CFLAGS) $(KHDR_INCLUDES) 27*053f45beSAndroid Build Coastguard WorkerLDLIBS = -lrt -lpthread 28*053f45beSAndroid Build Coastguard WorkerTEST_GEN_FILES = compaction_test 29*053f45beSAndroid Build Coastguard WorkerTEST_GEN_FILES += gup_test 30*053f45beSAndroid Build Coastguard WorkerTEST_GEN_FILES += hmm-tests 31*053f45beSAndroid Build Coastguard WorkerTEST_GEN_FILES += hugetlb-madvise 32*053f45beSAndroid Build Coastguard WorkerTEST_GEN_FILES += hugepage-mmap 33*053f45beSAndroid Build Coastguard WorkerTEST_GEN_FILES += hugepage-mremap 34*053f45beSAndroid Build Coastguard WorkerTEST_GEN_FILES += hugepage-shm 35*053f45beSAndroid Build Coastguard WorkerTEST_GEN_FILES += hugepage-vmemmap 36*053f45beSAndroid Build Coastguard WorkerTEST_GEN_FILES += khugepaged 37*053f45beSAndroid Build Coastguard WorkerTEST_GEN_PROGS = madv_populate 38*053f45beSAndroid Build Coastguard WorkerTEST_GEN_FILES += map_fixed_noreplace 39*053f45beSAndroid Build Coastguard WorkerTEST_GEN_FILES += map_hugetlb 40*053f45beSAndroid Build Coastguard WorkerTEST_GEN_FILES += map_populate 41*053f45beSAndroid Build Coastguard WorkerTEST_GEN_FILES += memfd_secret 42*053f45beSAndroid Build Coastguard WorkerTEST_GEN_FILES += migration 43*053f45beSAndroid Build Coastguard WorkerTEST_GEN_FILES += mlock-random-test 44*053f45beSAndroid Build Coastguard WorkerTEST_GEN_FILES += mlock2-tests 45*053f45beSAndroid Build Coastguard WorkerTEST_GEN_FILES += mrelease_test 46*053f45beSAndroid Build Coastguard WorkerTEST_GEN_FILES += mremap_dontunmap 47*053f45beSAndroid Build Coastguard WorkerTEST_GEN_FILES += mremap_test 48*053f45beSAndroid Build Coastguard WorkerTEST_GEN_FILES += on-fault-limit 49*053f45beSAndroid Build Coastguard WorkerTEST_GEN_FILES += thuge-gen 50*053f45beSAndroid Build Coastguard WorkerTEST_GEN_FILES += transhuge-stress 51*053f45beSAndroid Build Coastguard WorkerTEST_GEN_FILES += userfaultfd 52*053f45beSAndroid Build Coastguard WorkerTEST_GEN_PROGS += soft-dirty 53*053f45beSAndroid Build Coastguard WorkerTEST_GEN_PROGS += split_huge_page_test 54*053f45beSAndroid Build Coastguard WorkerTEST_GEN_FILES += ksm_tests 55*053f45beSAndroid Build Coastguard Worker 56*053f45beSAndroid Build Coastguard Workerifeq ($(MACHINE),x86_64) 57*053f45beSAndroid Build Coastguard WorkerCAN_BUILD_I386 := $(shell ./../x86/check_cc.sh "$(CC)" ../x86/trivial_32bit_program.c -m32) 58*053f45beSAndroid Build Coastguard WorkerCAN_BUILD_X86_64 := $(shell ./../x86/check_cc.sh "$(CC)" ../x86/trivial_64bit_program.c) 59*053f45beSAndroid Build Coastguard WorkerCAN_BUILD_WITH_NOPIE := $(shell ./../x86/check_cc.sh "$(CC)" ../x86/trivial_program.c -no-pie) 60*053f45beSAndroid Build Coastguard Worker 61*053f45beSAndroid Build Coastguard WorkerVMTARGETS := protection_keys 62*053f45beSAndroid Build Coastguard WorkerBINARIES_32 := $(VMTARGETS:%=%_32) 63*053f45beSAndroid Build Coastguard WorkerBINARIES_64 := $(VMTARGETS:%=%_64) 64*053f45beSAndroid Build Coastguard Worker 65*053f45beSAndroid Build Coastguard Workerifeq ($(CAN_BUILD_WITH_NOPIE),1) 66*053f45beSAndroid Build Coastguard WorkerCFLAGS += -no-pie 67*053f45beSAndroid Build Coastguard Workerendif 68*053f45beSAndroid Build Coastguard Worker 69*053f45beSAndroid Build Coastguard Workerifeq ($(CAN_BUILD_I386),1) 70*053f45beSAndroid Build Coastguard WorkerTEST_GEN_FILES += $(BINARIES_32) 71*053f45beSAndroid Build Coastguard Workerendif 72*053f45beSAndroid Build Coastguard Worker 73*053f45beSAndroid Build Coastguard Workerifeq ($(CAN_BUILD_X86_64),1) 74*053f45beSAndroid Build Coastguard WorkerTEST_GEN_FILES += $(BINARIES_64) 75*053f45beSAndroid Build Coastguard Workerendif 76*053f45beSAndroid Build Coastguard Workerelse 77*053f45beSAndroid Build Coastguard Worker 78*053f45beSAndroid Build Coastguard Workerifneq (,$(findstring $(MACHINE),ppc64)) 79*053f45beSAndroid Build Coastguard WorkerTEST_GEN_FILES += protection_keys 80*053f45beSAndroid Build Coastguard Workerendif 81*053f45beSAndroid Build Coastguard Worker 82*053f45beSAndroid Build Coastguard Workerendif 83*053f45beSAndroid Build Coastguard Worker 84*053f45beSAndroid Build Coastguard Workerifneq (,$(filter $(MACHINE),arm64 ia64 mips64 parisc64 ppc64 riscv64 s390x sh64 sparc64 x86_64)) 85*053f45beSAndroid Build Coastguard WorkerTEST_GEN_FILES += va_128TBswitch 86*053f45beSAndroid Build Coastguard WorkerTEST_GEN_FILES += virtual_address_range 87*053f45beSAndroid Build Coastguard WorkerTEST_GEN_FILES += write_to_hugetlbfs 88*053f45beSAndroid Build Coastguard Workerendif 89*053f45beSAndroid Build Coastguard Worker 90*053f45beSAndroid Build Coastguard WorkerTEST_PROGS := run_vmtests.sh 91*053f45beSAndroid Build Coastguard Worker 92*053f45beSAndroid Build Coastguard WorkerTEST_FILES := test_vmalloc.sh 93*053f45beSAndroid Build Coastguard WorkerTEST_FILES += test_hmm.sh 94*053f45beSAndroid Build Coastguard WorkerTEST_FILES += va_128TBswitch.sh 95*053f45beSAndroid Build Coastguard Worker 96*053f45beSAndroid Build Coastguard Workerinclude ../lib.mk 97*053f45beSAndroid Build Coastguard Worker 98*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/khugepaged: vm_util.c 99*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/madv_populate: vm_util.c 100*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/soft-dirty: vm_util.c 101*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/split_huge_page_test: vm_util.c 102*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/userfaultfd: vm_util.c 103*053f45beSAndroid Build Coastguard Worker 104*053f45beSAndroid Build Coastguard Workerifeq ($(MACHINE),x86_64) 105*053f45beSAndroid Build Coastguard WorkerBINARIES_32 := $(patsubst %,$(OUTPUT)/%,$(BINARIES_32)) 106*053f45beSAndroid Build Coastguard WorkerBINARIES_64 := $(patsubst %,$(OUTPUT)/%,$(BINARIES_64)) 107*053f45beSAndroid Build Coastguard Worker 108*053f45beSAndroid Build Coastguard Workerdefine gen-target-rule-32 109*053f45beSAndroid Build Coastguard Worker$(1) $(1)_32: $(OUTPUT)/$(1)_32 110*053f45beSAndroid Build Coastguard Worker.PHONY: $(1) $(1)_32 111*053f45beSAndroid Build Coastguard Workerendef 112*053f45beSAndroid Build Coastguard Worker 113*053f45beSAndroid Build Coastguard Workerdefine gen-target-rule-64 114*053f45beSAndroid Build Coastguard Worker$(1) $(1)_64: $(OUTPUT)/$(1)_64 115*053f45beSAndroid Build Coastguard Worker.PHONY: $(1) $(1)_64 116*053f45beSAndroid Build Coastguard Workerendef 117*053f45beSAndroid Build Coastguard Worker 118*053f45beSAndroid Build Coastguard Workerifeq ($(CAN_BUILD_I386),1) 119*053f45beSAndroid Build Coastguard Worker$(BINARIES_32): CFLAGS += -m32 -mxsave 120*053f45beSAndroid Build Coastguard Worker$(BINARIES_32): LDLIBS += -lrt -ldl -lm 121*053f45beSAndroid Build Coastguard Worker$(BINARIES_32): $(OUTPUT)/%_32: %.c 122*053f45beSAndroid Build Coastguard Worker $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(notdir $^) $(LDLIBS) -o $@ 123*053f45beSAndroid Build Coastguard Worker$(foreach t,$(VMTARGETS),$(eval $(call gen-target-rule-32,$(t)))) 124*053f45beSAndroid Build Coastguard Workerendif 125*053f45beSAndroid Build Coastguard Worker 126*053f45beSAndroid Build Coastguard Workerifeq ($(CAN_BUILD_X86_64),1) 127*053f45beSAndroid Build Coastguard Worker$(BINARIES_64): CFLAGS += -m64 -mxsave 128*053f45beSAndroid Build Coastguard Worker$(BINARIES_64): LDLIBS += -lrt -ldl 129*053f45beSAndroid Build Coastguard Worker$(BINARIES_64): $(OUTPUT)/%_64: %.c 130*053f45beSAndroid Build Coastguard Worker $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(notdir $^) $(LDLIBS) -o $@ 131*053f45beSAndroid Build Coastguard Worker$(foreach t,$(VMTARGETS),$(eval $(call gen-target-rule-64,$(t)))) 132*053f45beSAndroid Build Coastguard Workerendif 133*053f45beSAndroid Build Coastguard Worker 134*053f45beSAndroid Build Coastguard Worker# x86_64 users should be encouraged to install 32-bit libraries 135*053f45beSAndroid Build Coastguard Workerifeq ($(CAN_BUILD_I386)$(CAN_BUILD_X86_64),01) 136*053f45beSAndroid Build Coastguard Workerall: warn_32bit_failure 137*053f45beSAndroid Build Coastguard Worker 138*053f45beSAndroid Build Coastguard Workerwarn_32bit_failure: 139*053f45beSAndroid Build Coastguard Worker @echo "Warning: you seem to have a broken 32-bit build" 2>&1; \ 140*053f45beSAndroid Build Coastguard Worker echo "environment. This will reduce test coverage of 64-bit" 2>&1; \ 141*053f45beSAndroid Build Coastguard Worker echo "kernels. If you are using a Debian-like distribution," 2>&1; \ 142*053f45beSAndroid Build Coastguard Worker echo "try:"; 2>&1; \ 143*053f45beSAndroid Build Coastguard Worker echo ""; \ 144*053f45beSAndroid Build Coastguard Worker echo " apt-get install gcc-multilib libc6-i386 libc6-dev-i386"; \ 145*053f45beSAndroid Build Coastguard Worker echo ""; \ 146*053f45beSAndroid Build Coastguard Worker echo "If you are using a Fedora-like distribution, try:"; \ 147*053f45beSAndroid Build Coastguard Worker echo ""; \ 148*053f45beSAndroid Build Coastguard Worker echo " yum install glibc-devel.*i686"; \ 149*053f45beSAndroid Build Coastguard Worker exit 0; 150*053f45beSAndroid Build Coastguard Workerendif 151*053f45beSAndroid Build Coastguard Workerendif 152*053f45beSAndroid Build Coastguard Worker 153*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/mlock-random-test $(OUTPUT)/memfd_secret: LDLIBS += -lcap 154*053f45beSAndroid Build Coastguard Worker 155*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/ksm_tests: LDLIBS += -lnuma 156*053f45beSAndroid Build Coastguard Worker 157*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/migration: LDLIBS += -lnuma 158