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