0001
0002
0003
0004 LOCAL_HDRS += $(selfdir)/vm/local_config.h $(top_srcdir)/mm/gup_test.h
0005
0006 include local_config.mk
0007
0008 uname_M := $(shell uname -m 2>/dev/null || echo not)
0009 MACHINE ?= $(shell echo $(uname_M) | sed -e 's/aarch64.*/arm64/' -e 's/ppc64.*/ppc64/')
0010
0011
0012
0013
0014 .DELETE_ON_ERROR:
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026 MAKEFLAGS += --no-builtin-rules
0027
0028 CFLAGS = -Wall -I ../../../../usr/include $(EXTRA_CFLAGS) $(KHDR_INCLUDES)
0029 LDLIBS = -lrt -lpthread
0030 TEST_GEN_FILES = compaction_test
0031 TEST_GEN_FILES += gup_test
0032 TEST_GEN_FILES += hmm-tests
0033 TEST_GEN_FILES += hugetlb-madvise
0034 TEST_GEN_FILES += hugepage-mmap
0035 TEST_GEN_FILES += hugepage-mremap
0036 TEST_GEN_FILES += hugepage-shm
0037 TEST_GEN_FILES += hugepage-vmemmap
0038 TEST_GEN_FILES += khugepaged
0039 TEST_GEN_PROGS = madv_populate
0040 TEST_GEN_FILES += map_fixed_noreplace
0041 TEST_GEN_FILES += map_hugetlb
0042 TEST_GEN_FILES += map_populate
0043 TEST_GEN_FILES += memfd_secret
0044 TEST_GEN_FILES += migration
0045 TEST_GEN_FILES += mlock-random-test
0046 TEST_GEN_FILES += mlock2-tests
0047 TEST_GEN_FILES += mrelease_test
0048 TEST_GEN_FILES += mremap_dontunmap
0049 TEST_GEN_FILES += mremap_test
0050 TEST_GEN_FILES += on-fault-limit
0051 TEST_GEN_FILES += thuge-gen
0052 TEST_GEN_FILES += transhuge-stress
0053 TEST_GEN_FILES += userfaultfd
0054 TEST_GEN_PROGS += soft-dirty
0055 TEST_GEN_PROGS += split_huge_page_test
0056 TEST_GEN_FILES += ksm_tests
0057
0058 ifeq ($(MACHINE),x86_64)
0059 CAN_BUILD_I386 := $(shell ./../x86/check_cc.sh "$(CC)" ../x86/trivial_32bit_program.c -m32)
0060 CAN_BUILD_X86_64 := $(shell ./../x86/check_cc.sh "$(CC)" ../x86/trivial_64bit_program.c)
0061 CAN_BUILD_WITH_NOPIE := $(shell ./../x86/check_cc.sh "$(CC)" ../x86/trivial_program.c -no-pie)
0062
0063 VMTARGETS := protection_keys
0064 BINARIES_32 := $(VMTARGETS:%=%_32)
0065 BINARIES_64 := $(VMTARGETS:%=%_64)
0066
0067 ifeq ($(CAN_BUILD_WITH_NOPIE),1)
0068 CFLAGS += -no-pie
0069 endif
0070
0071 ifeq ($(CAN_BUILD_I386),1)
0072 TEST_GEN_FILES += $(BINARIES_32)
0073 endif
0074
0075 ifeq ($(CAN_BUILD_X86_64),1)
0076 TEST_GEN_FILES += $(BINARIES_64)
0077 endif
0078 else
0079
0080 ifneq (,$(findstring $(MACHINE),ppc64))
0081 TEST_GEN_FILES += protection_keys
0082 endif
0083
0084 endif
0085
0086 ifneq (,$(filter $(MACHINE),arm64 ia64 mips64 parisc64 ppc64 riscv64 s390x sh64 sparc64 x86_64))
0087 TEST_GEN_FILES += va_128TBswitch
0088 TEST_GEN_FILES += virtual_address_range
0089 TEST_GEN_FILES += write_to_hugetlbfs
0090 endif
0091
0092 TEST_PROGS := run_vmtests.sh
0093
0094 TEST_FILES := test_vmalloc.sh
0095 TEST_FILES += test_hmm.sh
0096 TEST_FILES += va_128TBswitch.sh
0097
0098 include ../lib.mk
0099
0100 $(OUTPUT)/madv_populate: vm_util.c
0101 $(OUTPUT)/soft-dirty: vm_util.c
0102 $(OUTPUT)/split_huge_page_test: vm_util.c
0103
0104 ifeq ($(MACHINE),x86_64)
0105 BINARIES_32 := $(patsubst %,$(OUTPUT)/%,$(BINARIES_32))
0106 BINARIES_64 := $(patsubst %,$(OUTPUT)/%,$(BINARIES_64))
0107
0108 define gen-target-rule-32
0109 $(1) $(1)_32: $(OUTPUT)/$(1)_32
0110 .PHONY: $(1) $(1)_32
0111 endef
0112
0113 define gen-target-rule-64
0114 $(1) $(1)_64: $(OUTPUT)/$(1)_64
0115 .PHONY: $(1) $(1)_64
0116 endef
0117
0118 ifeq ($(CAN_BUILD_I386),1)
0119 $(BINARIES_32): CFLAGS += -m32 -mxsave
0120 $(BINARIES_32): LDLIBS += -lrt -ldl -lm
0121 $(BINARIES_32): $(OUTPUT)/%_32: %.c
0122 $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(notdir $^) $(LDLIBS) -o $@
0123 $(foreach t,$(VMTARGETS),$(eval $(call gen-target-rule-32,$(t))))
0124 endif
0125
0126 ifeq ($(CAN_BUILD_X86_64),1)
0127 $(BINARIES_64): CFLAGS += -m64 -mxsave
0128 $(BINARIES_64): LDLIBS += -lrt -ldl
0129 $(BINARIES_64): $(OUTPUT)/%_64: %.c
0130 $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(notdir $^) $(LDLIBS) -o $@
0131 $(foreach t,$(VMTARGETS),$(eval $(call gen-target-rule-64,$(t))))
0132 endif
0133
0134
0135 ifeq ($(CAN_BUILD_I386)$(CAN_BUILD_X86_64),01)
0136 all: warn_32bit_failure
0137
0138 warn_32bit_failure:
0139 @echo "Warning: you seem to have a broken 32-bit build" 2>&1; \
0140 echo "environment. This will reduce test coverage of 64-bit" 2>&1; \
0141 echo "kernels. If you are using a Debian-like distribution," 2>&1; \
0142 echo "try:"; 2>&1; \
0143 echo ""; \
0144 echo " apt-get install gcc-multilib libc6-i386 libc6-dev-i386"; \
0145 echo ""; \
0146 echo "If you are using a Fedora-like distribution, try:"; \
0147 echo ""; \
0148 echo " yum install glibc-devel.*i686"; \
0149 exit 0;
0150 endif
0151 endif
0152
0153 $(OUTPUT)/mlock-random-test $(OUTPUT)/memfd_secret: LDLIBS += -lcap
0154
0155
0156 $(OUTPUT)/hmm-tests: LDLIBS += $(HMM_EXTRA_LIBS)
0157
0158 $(OUTPUT)/ksm_tests: LDLIBS += -lnuma
0159
0160 $(OUTPUT)/migration: LDLIBS += -lnuma
0161
0162 local_config.mk local_config.h: check_config.sh
0163 /bin/sh ./check_config.sh $(CC)
0164
0165 EXTRA_CLEAN += local_config.mk local_config.h
0166
0167 ifeq ($(HMM_EXTRA_LIBS),)
0168 all: warn_missing_hugelibs
0169
0170 warn_missing_hugelibs:
0171 @echo ; \
0172 echo "Warning: missing libhugetlbfs support. Some HMM tests will be skipped." ; \
0173 echo
0174 endif