tools/testing/selftests/vm: fix build error
[linux-2.6-microblaze.git] / tools / testing / selftests / vm / Makefile
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/')
5
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
8 # make invocations:
9 .DELETE_ON_ERROR:
10
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.
13 #
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
20 # LDLIBS.
21 MAKEFLAGS += --no-builtin-rules
22
23 CFLAGS = -Wall -I ../../../../usr/include $(EXTRA_CFLAGS)
24 LDLIBS = -lrt
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
41
42 ifeq ($(ARCH),x86_64)
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)
46
47 TARGETS := protection_keys
48 BINARIES_32 := $(TARGETS:%=%_32)
49 BINARIES_64 := $(TARGETS:%=%_64)
50
51 ifeq ($(CAN_BUILD_WITH_NOPIE),1)
52 CFLAGS += -no-pie
53 endif
54
55 ifeq ($(CAN_BUILD_I386),1)
56 TEST_GEN_FILES += $(BINARIES_32)
57 endif
58
59 ifeq ($(CAN_BUILD_X86_64),1)
60 TEST_GEN_FILES += $(BINARIES_64)
61 endif
62 else
63
64 ifneq (,$(findstring $(ARCH),powerpc))
65 TEST_GEN_FILES += protection_keys
66 endif
67
68 endif
69
70 ifneq (,$(filter $(MACHINE),arm64 ia64 mips64 parisc64 ppc64 ppc64le riscv64 s390x sh64 sparc64 x86_64))
71 TEST_GEN_FILES += va_128TBswitch
72 TEST_GEN_FILES += virtual_address_range
73 TEST_GEN_FILES += write_to_hugetlbfs
74 endif
75
76 TEST_PROGS := run_vmtests
77
78 TEST_FILES := test_vmalloc.sh
79
80 KSFT_KHDR_INSTALL := 1
81 include ../lib.mk
82
83 $(OUTPUT)/hmm-tests: LDLIBS += -lhugetlbfs -lpthread
84
85 ifeq ($(ARCH),x86_64)
86 BINARIES_32 := $(patsubst %,$(OUTPUT)/%,$(BINARIES_32))
87 BINARIES_64 := $(patsubst %,$(OUTPUT)/%,$(BINARIES_64))
88
89 define gen-target-rule-32
90 $(1) $(1)_32: $(OUTPUT)/$(1)_32
91 .PHONY: $(1) $(1)_32
92 endef
93
94 define gen-target-rule-64
95 $(1) $(1)_64: $(OUTPUT)/$(1)_64
96 .PHONY: $(1) $(1)_64
97 endef
98
99 ifeq ($(CAN_BUILD_I386),1)
100 $(BINARIES_32): CFLAGS += -m32
101 $(BINARIES_32): LDLIBS += -lrt -ldl -lm
102 $(BINARIES_32): %_32: %.c
103         $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(notdir $^) $(LDLIBS) -o $@
104 $(foreach t,$(TARGETS),$(eval $(call gen-target-rule-32,$(t))))
105 endif
106
107 ifeq ($(CAN_BUILD_X86_64),1)
108 $(BINARIES_64): CFLAGS += -m64
109 $(BINARIES_64): LDLIBS += -lrt -ldl
110 $(BINARIES_64): %_64: %.c
111         $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(notdir $^) $(LDLIBS) -o $@
112 $(foreach t,$(TARGETS),$(eval $(call gen-target-rule-64,$(t))))
113 endif
114
115 # x86_64 users should be encouraged to install 32-bit libraries
116 ifeq ($(CAN_BUILD_I386)$(CAN_BUILD_X86_64),01)
117 all: warn_32bit_failure
118
119 warn_32bit_failure:
120         @echo "Warning: you seem to have a broken 32-bit build" 2>&1;           \
121         echo  "environment. This will reduce test coverage of 64-bit" 2>&1;     \
122         echo  "kernels. If you are using a Debian-like distribution," 2>&1;     \
123         echo  "try:"; 2>&1;                                                     \
124         echo  "";                                                               \
125         echo  "  apt-get install gcc-multilib libc6-i386 libc6-dev-i386";       \
126         echo  "";                                                               \
127         echo  "If you are using a Fedora-like distribution, try:";              \
128         echo  "";                                                               \
129         echo  "  yum install glibc-devel.*i686";                                \
130         exit 0;
131 endif
132 endif
133
134 $(OUTPUT)/userfaultfd: LDLIBS += -lpthread
135
136 $(OUTPUT)/mlock-random-test: LDLIBS += -lcap