1baa489faSSeongJae Park# SPDX-License-Identifier: GPL-2.0 2baa489faSSeongJae Park# Makefile for mm selftests 3baa489faSSeongJae Park 4baa489faSSeongJae ParkLOCAL_HDRS += $(selfdir)/mm/local_config.h $(top_srcdir)/mm/gup_test.h 5baa489faSSeongJae Park 6baa489faSSeongJae Parkinclude local_config.mk 7baa489faSSeongJae Park 80518dbe9SMark Brownifeq ($(ARCH),) 90518dbe9SMark Brown 109a3f21feSBjörn Töpelifeq ($(CROSS_COMPILE),) 11baa489faSSeongJae Parkuname_M := $(shell uname -m 2>/dev/null || echo not) 129a3f21feSBjörn Töpelelse 139a3f21feSBjörn Töpeluname_M := $(shell echo $(CROSS_COMPILE) | grep -o '^[a-z0-9]\+') 149a3f21feSBjörn Töpelendif 1573b58d9dSMichael EllermanARCH ?= $(shell echo $(uname_M) | sed -e 's/aarch64.*/arm64/' -e 's/ppc64.*/powerpc/') 160518dbe9SMark Brownendif 17baa489faSSeongJae Park 18baa489faSSeongJae Park# Without this, failed build products remain, with up-to-date timestamps, 19baa489faSSeongJae Park# thus tricking Make (and you!) into believing that All Is Well, in subsequent 20baa489faSSeongJae Park# make invocations: 21baa489faSSeongJae Park.DELETE_ON_ERROR: 22baa489faSSeongJae Park 23baa489faSSeongJae Park# Avoid accidental wrong builds, due to built-in rules working just a little 24baa489faSSeongJae Park# bit too well--but not quite as well as required for our situation here. 25baa489faSSeongJae Park# 26686a8bb7SPeter Xu# In other words, "make $SOME_TEST" is supposed to fail to build at all, 27baa489faSSeongJae Park# because this Makefile only supports either "make" (all), or "make /full/path". 28baa489faSSeongJae Park# However, the built-in rules, if not suppressed, will pick up CFLAGS and the 29baa489faSSeongJae Park# initial LDLIBS (but not the target-specific LDLIBS, because those are only 30baa489faSSeongJae Park# set for the full path target!). This causes it to get pretty far into building 31baa489faSSeongJae Park# things despite using incorrect values such as an *occasionally* incomplete 32baa489faSSeongJae Park# LDLIBS. 33baa489faSSeongJae ParkMAKEFLAGS += --no-builtin-rules 34baa489faSSeongJae Park 351e6d1e36SMuhammad Usama AnjumCFLAGS = -Wall -I $(top_srcdir) $(EXTRA_CFLAGS) $(KHDR_INCLUDES) 36baa489faSSeongJae ParkLDLIBS = -lrt -lpthread 37aef6fde7SPeter Xu 3805f1edacSRyan RobertsTEST_GEN_FILES = cow 3905f1edacSRyan RobertsTEST_GEN_FILES += compaction_test 4005f1edacSRyan RobertsTEST_GEN_FILES += gup_longterm 4105f1edacSRyan RobertsTEST_GEN_FILES += gup_test 4205f1edacSRyan RobertsTEST_GEN_FILES += hmm-tests 4305f1edacSRyan RobertsTEST_GEN_FILES += hugetlb-madvise 4405f1edacSRyan RobertsTEST_GEN_FILES += hugetlb-read-hwpoison 4505f1edacSRyan RobertsTEST_GEN_FILES += hugepage-mmap 4605f1edacSRyan RobertsTEST_GEN_FILES += hugepage-mremap 4705f1edacSRyan RobertsTEST_GEN_FILES += hugepage-shm 4805f1edacSRyan RobertsTEST_GEN_FILES += hugepage-vmemmap 4905f1edacSRyan RobertsTEST_GEN_FILES += khugepaged 5005f1edacSRyan RobertsTEST_GEN_FILES += madv_populate 5105f1edacSRyan RobertsTEST_GEN_FILES += map_fixed_noreplace 5205f1edacSRyan RobertsTEST_GEN_FILES += map_hugetlb 5305f1edacSRyan RobertsTEST_GEN_FILES += map_populate 54*f2ce5746SMuhammad Usama Anjumifneq (,$(filter $(ARCH),arm64 riscv riscv64 x86 x86_64)) 5505f1edacSRyan RobertsTEST_GEN_FILES += memfd_secret 56*f2ce5746SMuhammad Usama Anjumendif 5705f1edacSRyan RobertsTEST_GEN_FILES += migration 5805f1edacSRyan RobertsTEST_GEN_FILES += mkdirty 5905f1edacSRyan RobertsTEST_GEN_FILES += mlock-random-test 6005f1edacSRyan RobertsTEST_GEN_FILES += mlock2-tests 6105f1edacSRyan RobertsTEST_GEN_FILES += mrelease_test 6205f1edacSRyan RobertsTEST_GEN_FILES += mremap_dontunmap 6305f1edacSRyan RobertsTEST_GEN_FILES += mremap_test 6405f1edacSRyan RobertsTEST_GEN_FILES += on-fault-limit 6505f1edacSRyan RobertsTEST_GEN_FILES += thuge-gen 6605f1edacSRyan RobertsTEST_GEN_FILES += transhuge-stress 6705f1edacSRyan RobertsTEST_GEN_FILES += uffd-stress 6805f1edacSRyan RobertsTEST_GEN_FILES += uffd-unit-tests 6905f1edacSRyan RobertsTEST_GEN_FILES += split_huge_page_test 7005f1edacSRyan RobertsTEST_GEN_FILES += ksm_tests 7105f1edacSRyan RobertsTEST_GEN_FILES += ksm_functional_tests 7205f1edacSRyan RobertsTEST_GEN_FILES += mdwe_test 73baa489faSSeongJae Park 74f6dd4e22SRyan Robertsifneq ($(ARCH),arm64) 75f6dd4e22SRyan RobertsTEST_GEN_PROGS += soft-dirty 76f6dd4e22SRyan Robertsendif 77f6dd4e22SRyan Roberts 780518dbe9SMark Brownifeq ($(ARCH),x86_64) 79baa489faSSeongJae ParkCAN_BUILD_I386 := $(shell ./../x86/check_cc.sh "$(CC)" ../x86/trivial_32bit_program.c -m32) 80baa489faSSeongJae ParkCAN_BUILD_X86_64 := $(shell ./../x86/check_cc.sh "$(CC)" ../x86/trivial_64bit_program.c) 81baa489faSSeongJae ParkCAN_BUILD_WITH_NOPIE := $(shell ./../x86/check_cc.sh "$(CC)" ../x86/trivial_program.c -no-pie) 82baa489faSSeongJae Park 83baa489faSSeongJae ParkVMTARGETS := protection_keys 84baa489faSSeongJae ParkBINARIES_32 := $(VMTARGETS:%=%_32) 85baa489faSSeongJae ParkBINARIES_64 := $(VMTARGETS:%=%_64) 86baa489faSSeongJae Park 87baa489faSSeongJae Parkifeq ($(CAN_BUILD_WITH_NOPIE),1) 88baa489faSSeongJae ParkCFLAGS += -no-pie 89baa489faSSeongJae Parkendif 90baa489faSSeongJae Park 91baa489faSSeongJae Parkifeq ($(CAN_BUILD_I386),1) 9205f1edacSRyan RobertsTEST_GEN_FILES += $(BINARIES_32) 93baa489faSSeongJae Parkendif 94baa489faSSeongJae Park 95baa489faSSeongJae Parkifeq ($(CAN_BUILD_X86_64),1) 9605f1edacSRyan RobertsTEST_GEN_FILES += $(BINARIES_64) 97baa489faSSeongJae Parkendif 98baa489faSSeongJae Parkelse 99baa489faSSeongJae Park 10073b58d9dSMichael Ellermanifneq (,$(findstring $(ARCH),powerpc)) 10105f1edacSRyan RobertsTEST_GEN_FILES += protection_keys 102baa489faSSeongJae Parkendif 103baa489faSSeongJae Park 104baa489faSSeongJae Parkendif 105baa489faSSeongJae Park 106772f8319SNico Pacheifneq (,$(filter $(ARCH),arm64 ia64 mips64 parisc64 powerpc riscv64 s390x sparc64 x86_64 s390)) 10705f1edacSRyan RobertsTEST_GEN_FILES += va_high_addr_switch 10805f1edacSRyan RobertsTEST_GEN_FILES += virtual_address_range 10905f1edacSRyan RobertsTEST_GEN_FILES += write_to_hugetlbfs 110baa489faSSeongJae Parkendif 111baa489faSSeongJae Park 112baa489faSSeongJae ParkTEST_PROGS := run_vmtests.sh 113baa489faSSeongJae Park 114baa489faSSeongJae ParkTEST_FILES := test_vmalloc.sh 115baa489faSSeongJae ParkTEST_FILES += test_hmm.sh 116bbe16872SChaitanya S PrakashTEST_FILES += va_high_addr_switch.sh 117baa489faSSeongJae Park 118baa489faSSeongJae Parkinclude ../lib.mk 119baa489faSSeongJae Park 1204b54f5a7SPeter Xu$(TEST_GEN_PROGS): vm_util.c 12105f1edacSRyan Roberts$(TEST_GEN_FILES): vm_util.c 122baa489faSSeongJae Park 123686a8bb7SPeter Xu$(OUTPUT)/uffd-stress: uffd-common.c 124686a8bb7SPeter Xu$(OUTPUT)/uffd-unit-tests: uffd-common.c 125baa489faSSeongJae Park 1260518dbe9SMark Brownifeq ($(ARCH),x86_64) 127baa489faSSeongJae ParkBINARIES_32 := $(patsubst %,$(OUTPUT)/%,$(BINARIES_32)) 128baa489faSSeongJae ParkBINARIES_64 := $(patsubst %,$(OUTPUT)/%,$(BINARIES_64)) 129baa489faSSeongJae Park 130baa489faSSeongJae Parkdefine gen-target-rule-32 131baa489faSSeongJae Park$(1) $(1)_32: $(OUTPUT)/$(1)_32 132baa489faSSeongJae Park.PHONY: $(1) $(1)_32 133baa489faSSeongJae Parkendef 134baa489faSSeongJae Park 135baa489faSSeongJae Parkdefine gen-target-rule-64 136baa489faSSeongJae Park$(1) $(1)_64: $(OUTPUT)/$(1)_64 137baa489faSSeongJae Park.PHONY: $(1) $(1)_64 138baa489faSSeongJae Parkendef 139baa489faSSeongJae Park 140baa489faSSeongJae Parkifeq ($(CAN_BUILD_I386),1) 141baa489faSSeongJae Park$(BINARIES_32): CFLAGS += -m32 -mxsave 142baa489faSSeongJae Park$(BINARIES_32): LDLIBS += -lrt -ldl -lm 143baa489faSSeongJae Park$(BINARIES_32): $(OUTPUT)/%_32: %.c 144baa489faSSeongJae Park $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(notdir $^) $(LDLIBS) -o $@ 145baa489faSSeongJae Park$(foreach t,$(VMTARGETS),$(eval $(call gen-target-rule-32,$(t)))) 146baa489faSSeongJae Parkendif 147baa489faSSeongJae Park 148baa489faSSeongJae Parkifeq ($(CAN_BUILD_X86_64),1) 149baa489faSSeongJae Park$(BINARIES_64): CFLAGS += -m64 -mxsave 150baa489faSSeongJae Park$(BINARIES_64): LDLIBS += -lrt -ldl 151baa489faSSeongJae Park$(BINARIES_64): $(OUTPUT)/%_64: %.c 152baa489faSSeongJae Park $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(notdir $^) $(LDLIBS) -o $@ 153baa489faSSeongJae Park$(foreach t,$(VMTARGETS),$(eval $(call gen-target-rule-64,$(t)))) 154baa489faSSeongJae Parkendif 155baa489faSSeongJae Park 156baa489faSSeongJae Park# x86_64 users should be encouraged to install 32-bit libraries 157baa489faSSeongJae Parkifeq ($(CAN_BUILD_I386)$(CAN_BUILD_X86_64),01) 158baa489faSSeongJae Parkall: warn_32bit_failure 159baa489faSSeongJae Park 160baa489faSSeongJae Parkwarn_32bit_failure: 161baa489faSSeongJae Park @echo "Warning: you seem to have a broken 32-bit build" 2>&1; \ 162baa489faSSeongJae Park echo "environment. This will reduce test coverage of 64-bit" 2>&1; \ 163baa489faSSeongJae Park echo "kernels. If you are using a Debian-like distribution," 2>&1; \ 164baa489faSSeongJae Park echo "try:"; 2>&1; \ 165baa489faSSeongJae Park echo ""; \ 166baa489faSSeongJae Park echo " apt-get install gcc-multilib libc6-i386 libc6-dev-i386"; \ 167baa489faSSeongJae Park echo ""; \ 168baa489faSSeongJae Park echo "If you are using a Fedora-like distribution, try:"; \ 169baa489faSSeongJae Park echo ""; \ 170baa489faSSeongJae Park echo " yum install glibc-devel.*i686"; \ 171baa489faSSeongJae Park exit 0; 172baa489faSSeongJae Parkendif 173baa489faSSeongJae Parkendif 174baa489faSSeongJae Park 17571fc41ebSPeter Xu# IOURING_EXTRA_LIBS may get set in local_config.mk, or it may be left empty. 17671fc41ebSPeter Xu$(OUTPUT)/cow: LDLIBS += $(IOURING_EXTRA_LIBS) 177baa489faSSeongJae Park 178c879462aSDavid Hildenbrand$(OUTPUT)/gup_longterm: LDLIBS += $(IOURING_EXTRA_LIBS) 179c879462aSDavid Hildenbrand 180baa489faSSeongJae Park$(OUTPUT)/mlock-random-test $(OUTPUT)/memfd_secret: LDLIBS += -lcap 181baa489faSSeongJae Park 182baa489faSSeongJae Park$(OUTPUT)/ksm_tests: LDLIBS += -lnuma 183baa489faSSeongJae Park 184baa489faSSeongJae Park$(OUTPUT)/migration: LDLIBS += -lnuma 185baa489faSSeongJae Park 186baa489faSSeongJae Parklocal_config.mk local_config.h: check_config.sh 187baa489faSSeongJae Park /bin/sh ./check_config.sh $(CC) 188baa489faSSeongJae Park 189baa489faSSeongJae ParkEXTRA_CLEAN += local_config.mk local_config.h 190baa489faSSeongJae Park 19171fc41ebSPeter Xuifeq ($(IOURING_EXTRA_LIBS),) 192baa489faSSeongJae Parkall: warn_missing_liburing 193baa489faSSeongJae Park 194baa489faSSeongJae Parkwarn_missing_liburing: 195baa489faSSeongJae Park @echo ; \ 19671fc41ebSPeter Xu echo "Warning: missing liburing support. Some tests will be skipped." ; \ 197baa489faSSeongJae Park echo 198baa489faSSeongJae Parkendif 199