1 # SPDX-License-Identifier: GPL-2.0
2 # Makefile for vm selftests
4 include local_config.mk
6 uname_M
:= $(shell uname
-m
2>/dev
/null || echo not
)
7 MACHINE ?
= $(shell echo
$(uname_M
) | sed
-e
's/aarch64.*/arm64/')
9 # Without this, failed build products remain, with up-to-date timestamps,
10 # thus tricking Make (and you!) into believing that All Is Well, in subsequent
14 # Avoid accidental wrong builds, due to built-in rules working just a little
15 # bit too well--but not quite as well as required for our situation here.
17 # In other words, "make userfaultfd" is supposed to fail to build at all,
18 # because this Makefile only supports either "make" (all), or "make /full/path".
19 # However, the built-in rules, if not suppressed, will pick up CFLAGS and the
20 # initial LDLIBS (but not the target-specific LDLIBS, because those are only
21 # set for the full path target!). This causes it to get pretty far into building
22 # things despite using incorrect values such as an *occasionally* incomplete
24 MAKEFLAGS
+= --no-builtin-rules
26 CFLAGS
= -Wall
-I ..
/..
/..
/..
/usr
/include $(EXTRA_CFLAGS
)
27 LDLIBS
= -lrt
-lpthread
28 TEST_GEN_FILES
= compaction_test
29 TEST_GEN_FILES
+= gup_test
30 TEST_GEN_FILES
+= hmm-tests
31 TEST_GEN_FILES
+= hugepage-mmap
32 TEST_GEN_FILES
+= hugepage-shm
33 TEST_GEN_FILES
+= khugepaged
34 TEST_GEN_FILES
+= map_fixed_noreplace
35 TEST_GEN_FILES
+= map_hugetlb
36 TEST_GEN_FILES
+= map_populate
37 TEST_GEN_FILES
+= mlock-random-test
38 TEST_GEN_FILES
+= mlock2-tests
39 TEST_GEN_FILES
+= mremap_dontunmap
40 TEST_GEN_FILES
+= on-fault-limit
41 TEST_GEN_FILES
+= thuge-gen
42 TEST_GEN_FILES
+= transhuge-stress
43 TEST_GEN_FILES
+= userfaultfd
46 CAN_BUILD_I386
:= $(shell .
/..
/x86
/check_cc.sh
$(CC
) ..
/x86
/trivial_32bit_program.c
-m32
)
47 CAN_BUILD_X86_64
:= $(shell .
/..
/x86
/check_cc.sh
$(CC
) ..
/x86
/trivial_64bit_program.c
)
48 CAN_BUILD_WITH_NOPIE
:= $(shell .
/..
/x86
/check_cc.sh
$(CC
) ..
/x86
/trivial_program.c
-no-pie
)
50 TARGETS
:= protection_keys
51 BINARIES_32
:= $(TARGETS
:%=%_32
)
52 BINARIES_64
:= $(TARGETS
:%=%_64
)
54 ifeq ($(CAN_BUILD_WITH_NOPIE
),1)
58 ifeq ($(CAN_BUILD_I386
),1)
59 TEST_GEN_FILES
+= $(BINARIES_32
)
62 ifeq ($(CAN_BUILD_X86_64
),1)
63 TEST_GEN_FILES
+= $(BINARIES_64
)
67 ifneq (,$(findstring $(ARCH
),powerpc
))
68 TEST_GEN_FILES
+= protection_keys
73 ifneq (,$(filter $(MACHINE
),arm64 ia64 mips64 parisc64 ppc64 ppc64le riscv64 s390x sh64 sparc64 x86_64
))
74 TEST_GEN_FILES
+= va_128TBswitch
75 TEST_GEN_FILES
+= virtual_address_range
76 TEST_GEN_FILES
+= write_to_hugetlbfs
79 TEST_PROGS
:= run_vmtests.sh
81 TEST_FILES
:= test_vmalloc.sh
83 KSFT_KHDR_INSTALL
:= 1
87 BINARIES_32
:= $(patsubst %,$(OUTPUT
)/%,$(BINARIES_32
))
88 BINARIES_64
:= $(patsubst %,$(OUTPUT
)/%,$(BINARIES_64
))
90 define gen-target-rule-32
91 $(1) $(1)_32
: $(OUTPUT
)/$(1)_32
95 define gen-target-rule-64
96 $(1) $(1)_64
: $(OUTPUT
)/$(1)_64
100 ifeq ($(CAN_BUILD_I386
),1)
101 $(BINARIES_32
): CFLAGS
+= -m32
102 $(BINARIES_32
): LDLIBS
+= -lrt
-ldl
-lm
103 $(BINARIES_32
): %_32
: %.c
104 $(CC
) $(CFLAGS
) $(EXTRA_CFLAGS
) $(notdir $^
) $(LDLIBS
) -o
$@
105 $(foreach t
,$(TARGETS
),$(eval
$(call gen-target-rule-32
,$(t
))))
108 ifeq ($(CAN_BUILD_X86_64
),1)
109 $(BINARIES_64
): CFLAGS
+= -m64
110 $(BINARIES_64
): LDLIBS
+= -lrt
-ldl
111 $(BINARIES_64
): %_64
: %.c
112 $(CC
) $(CFLAGS
) $(EXTRA_CFLAGS
) $(notdir $^
) $(LDLIBS
) -o
$@
113 $(foreach t
,$(TARGETS
),$(eval
$(call gen-target-rule-64
,$(t
))))
116 # x86_64 users should be encouraged to install 32-bit libraries
117 ifeq ($(CAN_BUILD_I386
)$(CAN_BUILD_X86_64
),01)
118 all: warn_32bit_failure
121 @echo
"Warning: you seem to have a broken 32-bit build" 2>&1; \
122 echo
"environment. This will reduce test coverage of 64-bit" 2>&1; \
123 echo
"kernels. If you are using a Debian-like distribution," 2>&1; \
126 echo
" apt-get install gcc-multilib libc6-i386 libc6-dev-i386"; \
128 echo
"If you are using a Fedora-like distribution, try:"; \
130 echo
" yum install glibc-devel.*i686"; \
135 $(OUTPUT
)/mlock-random-test
: LDLIBS
+= -lcap
137 $(OUTPUT
)/gup_test
: ..
/..
/..
/..
/mm
/gup_test.h
139 $(OUTPUT
)/hmm-tests
: local_config.h
141 # HMM_EXTRA_LIBS may get set in local_config.mk, or it may be left empty.
142 $(OUTPUT
)/hmm-tests
: LDLIBS
+= $(HMM_EXTRA_LIBS
)
144 local_config.mk local_config.h
: check_config.sh
145 /bin
/sh .
/check_config.sh
$(CC
)
147 EXTRA_CLEAN
+= local_config.mk local_config.h
149 ifeq ($(HMM_EXTRA_LIBS
),)
150 all: warn_missing_hugelibs
152 warn_missing_hugelibs
:
154 echo
"Warning: missing libhugetlbfs support. Some HMM tests will be skipped." ; \