xref: /OK3568_Linux_fs/kernel/tools/testing/selftests/vm/Makefile (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0
2*4882a593Smuzhiyun# Makefile for vm selftests
3*4882a593Smuzhiyununame_M := $(shell uname -m 2>/dev/null || echo not)
4*4882a593SmuzhiyunMACHINE ?= $(shell echo $(uname_M) | sed -e 's/aarch64.*/arm64/' -e 's/ppc64.*/ppc64/')
5*4882a593Smuzhiyun
6*4882a593Smuzhiyun# Without this, failed build products remain, with up-to-date timestamps,
7*4882a593Smuzhiyun# thus tricking Make (and you!) into believing that All Is Well, in subsequent
8*4882a593Smuzhiyun# make invocations:
9*4882a593Smuzhiyun.DELETE_ON_ERROR:
10*4882a593Smuzhiyun
11*4882a593Smuzhiyun# Avoid accidental wrong builds, due to built-in rules working just a little
12*4882a593Smuzhiyun# bit too well--but not quite as well as required for our situation here.
13*4882a593Smuzhiyun#
14*4882a593Smuzhiyun# In other words, "make userfaultfd" is supposed to fail to build at all,
15*4882a593Smuzhiyun# because this Makefile only supports either "make" (all), or "make /full/path".
16*4882a593Smuzhiyun# However,  the built-in rules, if not suppressed, will pick up CFLAGS and the
17*4882a593Smuzhiyun# initial LDLIBS (but not the target-specific LDLIBS, because those are only
18*4882a593Smuzhiyun# set for the full path target!). This causes it to get pretty far into building
19*4882a593Smuzhiyun# things despite using incorrect values such as an *occasionally* incomplete
20*4882a593Smuzhiyun# LDLIBS.
21*4882a593SmuzhiyunMAKEFLAGS += --no-builtin-rules
22*4882a593Smuzhiyun
23*4882a593SmuzhiyunCFLAGS = -Wall -I ../../../../usr/include $(EXTRA_CFLAGS)
24*4882a593SmuzhiyunLDLIBS = -lrt
25*4882a593SmuzhiyunTEST_GEN_FILES = compaction_test
26*4882a593SmuzhiyunTEST_GEN_FILES += gup_benchmark
27*4882a593SmuzhiyunTEST_GEN_FILES += hmm-tests
28*4882a593SmuzhiyunTEST_GEN_FILES += hugepage-mmap
29*4882a593SmuzhiyunTEST_GEN_FILES += hugepage-shm
30*4882a593SmuzhiyunTEST_GEN_FILES += map_hugetlb
31*4882a593SmuzhiyunTEST_GEN_FILES += map_fixed_noreplace
32*4882a593SmuzhiyunTEST_GEN_FILES += map_populate
33*4882a593SmuzhiyunTEST_GEN_FILES += mlock-random-test
34*4882a593SmuzhiyunTEST_GEN_FILES += mlock2-tests
35*4882a593SmuzhiyunTEST_GEN_FILES += mremap_dontunmap
36*4882a593SmuzhiyunTEST_GEN_FILES += on-fault-limit
37*4882a593SmuzhiyunTEST_GEN_FILES += thuge-gen
38*4882a593SmuzhiyunTEST_GEN_FILES += transhuge-stress
39*4882a593SmuzhiyunTEST_GEN_FILES += userfaultfd
40*4882a593SmuzhiyunTEST_GEN_FILES += khugepaged
41*4882a593Smuzhiyun
42*4882a593Smuzhiyunifeq ($(MACHINE),x86_64)
43*4882a593SmuzhiyunCAN_BUILD_I386 := $(shell ./../x86/check_cc.sh "$(CC)" ../x86/trivial_32bit_program.c -m32)
44*4882a593SmuzhiyunCAN_BUILD_X86_64 := $(shell ./../x86/check_cc.sh "$(CC)" ../x86/trivial_64bit_program.c)
45*4882a593SmuzhiyunCAN_BUILD_WITH_NOPIE := $(shell ./../x86/check_cc.sh "$(CC)" ../x86/trivial_program.c -no-pie)
46*4882a593Smuzhiyun
47*4882a593SmuzhiyunVMTARGETS := protection_keys
48*4882a593SmuzhiyunBINARIES_32 := $(VMTARGETS:%=%_32)
49*4882a593SmuzhiyunBINARIES_64 := $(VMTARGETS:%=%_64)
50*4882a593Smuzhiyun
51*4882a593Smuzhiyunifeq ($(CAN_BUILD_WITH_NOPIE),1)
52*4882a593SmuzhiyunCFLAGS += -no-pie
53*4882a593Smuzhiyunendif
54*4882a593Smuzhiyun
55*4882a593Smuzhiyunifeq ($(CAN_BUILD_I386),1)
56*4882a593SmuzhiyunTEST_GEN_FILES += $(BINARIES_32)
57*4882a593Smuzhiyunendif
58*4882a593Smuzhiyun
59*4882a593Smuzhiyunifeq ($(CAN_BUILD_X86_64),1)
60*4882a593SmuzhiyunTEST_GEN_FILES += $(BINARIES_64)
61*4882a593Smuzhiyunendif
62*4882a593Smuzhiyunelse
63*4882a593Smuzhiyun
64*4882a593Smuzhiyunifneq (,$(findstring $(MACHINE),ppc64))
65*4882a593SmuzhiyunTEST_GEN_FILES += protection_keys
66*4882a593Smuzhiyunendif
67*4882a593Smuzhiyun
68*4882a593Smuzhiyunendif
69*4882a593Smuzhiyun
70*4882a593Smuzhiyunifneq (,$(filter $(MACHINE),arm64 ia64 mips64 parisc64 ppc64 riscv64 s390x sh64 sparc64 x86_64))
71*4882a593SmuzhiyunTEST_GEN_FILES += va_128TBswitch
72*4882a593SmuzhiyunTEST_GEN_FILES += virtual_address_range
73*4882a593SmuzhiyunTEST_GEN_FILES += write_to_hugetlbfs
74*4882a593Smuzhiyunendif
75*4882a593Smuzhiyun
76*4882a593SmuzhiyunTEST_PROGS := run_vmtests
77*4882a593Smuzhiyun
78*4882a593SmuzhiyunTEST_FILES := test_vmalloc.sh
79*4882a593Smuzhiyun
80*4882a593SmuzhiyunKSFT_KHDR_INSTALL := 1
81*4882a593Smuzhiyuninclude ../lib.mk
82*4882a593Smuzhiyun
83*4882a593Smuzhiyun$(OUTPUT)/hmm-tests: LDLIBS += -lhugetlbfs -lpthread
84*4882a593Smuzhiyun
85*4882a593Smuzhiyunifeq ($(MACHINE),x86_64)
86*4882a593SmuzhiyunBINARIES_32 := $(patsubst %,$(OUTPUT)/%,$(BINARIES_32))
87*4882a593SmuzhiyunBINARIES_64 := $(patsubst %,$(OUTPUT)/%,$(BINARIES_64))
88*4882a593Smuzhiyun
89*4882a593Smuzhiyundefine gen-target-rule-32
90*4882a593Smuzhiyun$(1) $(1)_32: $(OUTPUT)/$(1)_32
91*4882a593Smuzhiyun.PHONY: $(1) $(1)_32
92*4882a593Smuzhiyunendef
93*4882a593Smuzhiyun
94*4882a593Smuzhiyundefine gen-target-rule-64
95*4882a593Smuzhiyun$(1) $(1)_64: $(OUTPUT)/$(1)_64
96*4882a593Smuzhiyun.PHONY: $(1) $(1)_64
97*4882a593Smuzhiyunendef
98*4882a593Smuzhiyun
99*4882a593Smuzhiyunifeq ($(CAN_BUILD_I386),1)
100*4882a593Smuzhiyun$(BINARIES_32): CFLAGS += -m32
101*4882a593Smuzhiyun$(BINARIES_32): LDLIBS += -lrt -ldl -lm
102*4882a593Smuzhiyun$(BINARIES_32): $(OUTPUT)/%_32: %.c
103*4882a593Smuzhiyun	$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(notdir $^) $(LDLIBS) -o $@
104*4882a593Smuzhiyun$(foreach t,$(VMTARGETS),$(eval $(call gen-target-rule-32,$(t))))
105*4882a593Smuzhiyunendif
106*4882a593Smuzhiyun
107*4882a593Smuzhiyunifeq ($(CAN_BUILD_X86_64),1)
108*4882a593Smuzhiyun$(BINARIES_64): CFLAGS += -m64
109*4882a593Smuzhiyun$(BINARIES_64): LDLIBS += -lrt -ldl
110*4882a593Smuzhiyun$(BINARIES_64): $(OUTPUT)/%_64: %.c
111*4882a593Smuzhiyun	$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(notdir $^) $(LDLIBS) -o $@
112*4882a593Smuzhiyun$(foreach t,$(VMTARGETS),$(eval $(call gen-target-rule-64,$(t))))
113*4882a593Smuzhiyunendif
114*4882a593Smuzhiyun
115*4882a593Smuzhiyun# x86_64 users should be encouraged to install 32-bit libraries
116*4882a593Smuzhiyunifeq ($(CAN_BUILD_I386)$(CAN_BUILD_X86_64),01)
117*4882a593Smuzhiyunall: warn_32bit_failure
118*4882a593Smuzhiyun
119*4882a593Smuzhiyunwarn_32bit_failure:
120*4882a593Smuzhiyun	@echo "Warning: you seem to have a broken 32-bit build" 2>&1;		\
121*4882a593Smuzhiyun	echo  "environment. This will reduce test coverage of 64-bit" 2>&1;	\
122*4882a593Smuzhiyun	echo  "kernels. If you are using a Debian-like distribution," 2>&1;	\
123*4882a593Smuzhiyun	echo  "try:"; 2>&1;							\
124*4882a593Smuzhiyun	echo  "";								\
125*4882a593Smuzhiyun	echo  "  apt-get install gcc-multilib libc6-i386 libc6-dev-i386";	\
126*4882a593Smuzhiyun	echo  "";								\
127*4882a593Smuzhiyun	echo  "If you are using a Fedora-like distribution, try:";		\
128*4882a593Smuzhiyun	echo  "";								\
129*4882a593Smuzhiyun	echo  "  yum install glibc-devel.*i686";				\
130*4882a593Smuzhiyun	exit 0;
131*4882a593Smuzhiyunendif
132*4882a593Smuzhiyunendif
133*4882a593Smuzhiyun
134*4882a593Smuzhiyun$(OUTPUT)/userfaultfd: LDLIBS += -lpthread
135*4882a593Smuzhiyun
136*4882a593Smuzhiyun$(OUTPUT)/mlock-random-test: LDLIBS += -lcap
137