xref: /openbmc/linux/tools/testing/selftests/mm/Makefile (revision 26d0dfbb16fcb17d128a79dc70f3020ea6992af0)
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