1 # SPDX-License-Identifier: GPL-2.0
2 # Makefile for vm selftests
3 uname_M
:= $(shell uname
-m
2>/dev
/null || echo not
)
4 MACHINE ?
= $(shell echo
$(uname_M
) | sed
-e
's/aarch64.*/arm64/')
6 # Without this, failed build products remain, with up-to-date timestamps,
7 # thus tricking Make (and you!) into believing that All Is Well, in subsequent
11 # Avoid accidental wrong builds, due to built-in rules working just a little
12 # bit too well--but not quite as well as required for our situation here.
14 # In other words, "make userfaultfd" is supposed to fail to build at all,
15 # because this Makefile only supports either "make" (all), or "make /full/path".
16 # However, the built-in rules, if not suppressed, will pick up CFLAGS and the
17 # initial LDLIBS (but not the target-specific LDLIBS, because those are only
18 # set for the full path target!). This causes it to get pretty far into building
19 # things despite using incorrect values such as an *occasionally* incomplete
21 MAKEFLAGS
+= --no-builtin-rules
23 CFLAGS
= -Wall
-I ..
/..
/..
/..
/usr
/include $(EXTRA_CFLAGS
)
25 TEST_GEN_FILES
= compaction_test
26 TEST_GEN_FILES
+= gup_benchmark
27 TEST_GEN_FILES
+= hmm-tests
28 TEST_GEN_FILES
+= hugepage-mmap
29 TEST_GEN_FILES
+= hugepage-shm
30 TEST_GEN_FILES
+= map_hugetlb
31 TEST_GEN_FILES
+= map_fixed_noreplace
32 TEST_GEN_FILES
+= map_populate
33 TEST_GEN_FILES
+= mlock-random-test
34 TEST_GEN_FILES
+= mlock2-tests
35 TEST_GEN_FILES
+= mremap_dontunmap
36 TEST_GEN_FILES
+= on-fault-limit
37 TEST_GEN_FILES
+= thuge-gen
38 TEST_GEN_FILES
+= transhuge-stress
39 TEST_GEN_FILES
+= userfaultfd
40 TEST_GEN_FILES
+= khugepaged
43 CAN_BUILD_I386
:= $(shell .
/..
/x86
/check_cc.sh
$(CC
) ..
/x86
/trivial_32bit_program.c
-m32
)
44 CAN_BUILD_X86_64
:= $(shell .
/..
/x86
/check_cc.sh
$(CC
) ..
/x86
/trivial_64bit_program.c
)
45 CAN_BUILD_WITH_NOPIE
:= $(shell .
/..
/x86
/check_cc.sh
$(CC
) ..
/x86
/trivial_program.c
-no-pie
)
47 TARGETS
:= protection_keys
48 BINARIES_32
:= $(TARGETS
:%=%_32
)
49 BINARIES_64
:= $(TARGETS
:%=%_64
)
51 ifeq ($(CAN_BUILD_WITH_NOPIE
),1)
55 ifeq ($(CAN_BUILD_I386
),1)
56 TEST_GEN_FILES
+= $(BINARIES_32
)
59 ifeq ($(CAN_BUILD_X86_64
),1)
60 TEST_GEN_FILES
+= $(BINARIES_64
)
63 TEST_GEN_FILES
+= protection_keys
66 ifneq (,$(filter $(MACHINE
),arm64 ia64 mips64 parisc64 ppc64 ppc64le riscv64 s390x sh64 sparc64 x86_64
))
67 TEST_GEN_FILES
+= va_128TBswitch
68 TEST_GEN_FILES
+= virtual_address_range
69 TEST_GEN_FILES
+= write_to_hugetlbfs
72 TEST_PROGS
:= run_vmtests
74 TEST_FILES
:= test_vmalloc.sh
76 KSFT_KHDR_INSTALL
:= 1
79 $(OUTPUT
)/hmm-tests
: LDLIBS
+= -lhugetlbfs
-lpthread
82 BINARIES_32
:= $(patsubst %,$(OUTPUT
)/%,$(BINARIES_32
))
83 BINARIES_64
:= $(patsubst %,$(OUTPUT
)/%,$(BINARIES_64
))
85 define gen-target-rule-32
86 $(1) $(1)_32
: $(OUTPUT
)/$(1)_32
90 define gen-target-rule-64
91 $(1) $(1)_64
: $(OUTPUT
)/$(1)_64
95 ifeq ($(CAN_BUILD_I386
),1)
96 $(BINARIES_32
): CFLAGS
+= -m32
97 $(BINARIES_32
): LDLIBS
+= -lrt
-ldl
-lm
98 $(BINARIES_32
): %_32
: %.c
99 $(CC
) $(CFLAGS
) $(EXTRA_CFLAGS
) $(notdir $^
) $(LDLIBS
) -o
$@
100 $(foreach t
,$(TARGETS
),$(eval
$(call gen-target-rule-32
,$(t
))))
103 ifeq ($(CAN_BUILD_X86_64
),1)
104 $(BINARIES_64
): CFLAGS
+= -m64
105 $(BINARIES_64
): LDLIBS
+= -lrt
-ldl
106 $(BINARIES_64
): %_64
: %.c
107 $(CC
) $(CFLAGS
) $(EXTRA_CFLAGS
) $(notdir $^
) $(LDLIBS
) -o
$@
108 $(foreach t
,$(TARGETS
),$(eval
$(call gen-target-rule-64
,$(t
))))
111 # x86_64 users should be encouraged to install 32-bit libraries
112 ifeq ($(CAN_BUILD_I386
)$(CAN_BUILD_X86_64
),01)
113 all: warn_32bit_failure
116 @echo
"Warning: you seem to have a broken 32-bit build" 2>&1; \
117 echo
"environment. This will reduce test coverage of 64-bit" 2>&1; \
118 echo
"kernels. If you are using a Debian-like distribution," 2>&1; \
121 echo
" apt-get install gcc-multilib libc6-i386 libc6-dev-i386"; \
123 echo
"If you are using a Fedora-like distribution, try:"; \
125 echo
" yum install glibc-devel.*i686"; \
130 $(OUTPUT
)/userfaultfd
: LDLIBS
+= -lpthread
132 $(OUTPUT
)/mlock-random-test
: LDLIBS
+= -lcap