Makefile 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. # SPDX-License-Identifier: GPL-2.0
  2. # Makefile for mm selftests
  3. LOCAL_HDRS += $(selfdir)/mm/local_config.h $(top_srcdir)/mm/gup_test.h
  4. LOCAL_HDRS += $(selfdir)/mm/mseal_helpers.h
  5. include local_config.mk
  6. ifeq ($(ARCH),)
  7. ifeq ($(CROSS_COMPILE),)
  8. uname_M := $(shell uname -m 2>/dev/null || echo not)
  9. else
  10. uname_M := $(shell echo $(CROSS_COMPILE) | grep -o '^[a-z0-9]\+')
  11. endif
  12. ARCH ?= $(shell echo $(uname_M) | sed -e 's/aarch64.*/arm64/' -e 's/ppc64.*/powerpc/')
  13. endif
  14. # Without this, failed build products remain, with up-to-date timestamps,
  15. # thus tricking Make (and you!) into believing that All Is Well, in subsequent
  16. # make invocations:
  17. .DELETE_ON_ERROR:
  18. # Avoid accidental wrong builds, due to built-in rules working just a little
  19. # bit too well--but not quite as well as required for our situation here.
  20. #
  21. # In other words, "make $SOME_TEST" is supposed to fail to build at all,
  22. # because this Makefile only supports either "make" (all), or "make /full/path".
  23. # However, the built-in rules, if not suppressed, will pick up CFLAGS and the
  24. # initial LDLIBS (but not the target-specific LDLIBS, because those are only
  25. # set for the full path target!). This causes it to get pretty far into building
  26. # things despite using incorrect values such as an *occasionally* incomplete
  27. # LDLIBS.
  28. MAKEFLAGS += --no-builtin-rules
  29. CFLAGS = -Wall -O2 -I $(top_srcdir) $(EXTRA_CFLAGS) $(KHDR_INCLUDES) $(TOOLS_INCLUDES)
  30. LDLIBS = -lrt -lpthread -lm
  31. # Some distributions (such as Ubuntu) configure GCC so that _FORTIFY_SOURCE is
  32. # automatically enabled at -O1 or above. This triggers various unused-result
  33. # warnings where functions such as read() or write() are called and their
  34. # return value is not checked. Disable _FORTIFY_SOURCE to silence those
  35. # warnings.
  36. CFLAGS += -U_FORTIFY_SOURCE
  37. TEST_GEN_FILES = cow
  38. TEST_GEN_FILES += compaction_test
  39. TEST_GEN_FILES += gup_longterm
  40. TEST_GEN_FILES += gup_test
  41. TEST_GEN_FILES += hmm-tests
  42. TEST_GEN_FILES += hugetlb-madvise
  43. TEST_GEN_FILES += hugetlb-read-hwpoison
  44. TEST_GEN_FILES += hugetlb-soft-offline
  45. TEST_GEN_FILES += hugepage-mmap
  46. TEST_GEN_FILES += hugepage-mremap
  47. TEST_GEN_FILES += hugepage-shm
  48. TEST_GEN_FILES += hugepage-vmemmap
  49. TEST_GEN_FILES += khugepaged
  50. TEST_GEN_FILES += madv_populate
  51. TEST_GEN_FILES += map_fixed_noreplace
  52. TEST_GEN_FILES += map_hugetlb
  53. TEST_GEN_FILES += map_populate
  54. ifneq (,$(filter $(ARCH),arm64 riscv riscv64 x86 x86_64))
  55. TEST_GEN_FILES += memfd_secret
  56. endif
  57. TEST_GEN_FILES += migration
  58. TEST_GEN_FILES += mkdirty
  59. TEST_GEN_FILES += mlock-random-test
  60. TEST_GEN_FILES += mlock2-tests
  61. TEST_GEN_FILES += mrelease_test
  62. TEST_GEN_FILES += mremap_dontunmap
  63. TEST_GEN_FILES += mremap_test
  64. TEST_GEN_FILES += mseal_test
  65. TEST_GEN_FILES += seal_elf
  66. TEST_GEN_FILES += on-fault-limit
  67. TEST_GEN_FILES += pagemap_ioctl
  68. TEST_GEN_FILES += thuge-gen
  69. TEST_GEN_FILES += transhuge-stress
  70. TEST_GEN_FILES += uffd-stress
  71. TEST_GEN_FILES += uffd-unit-tests
  72. TEST_GEN_FILES += split_huge_page_test
  73. TEST_GEN_FILES += ksm_tests
  74. TEST_GEN_FILES += ksm_functional_tests
  75. TEST_GEN_FILES += mdwe_test
  76. TEST_GEN_FILES += hugetlb_fault_after_madv
  77. TEST_GEN_FILES += hugetlb_madv_vs_map
  78. TEST_GEN_FILES += hugetlb_dio
  79. TEST_GEN_FILES += droppable
  80. ifneq ($(ARCH),arm64)
  81. TEST_GEN_FILES += soft-dirty
  82. endif
  83. ifeq ($(ARCH),x86_64)
  84. CAN_BUILD_I386 := $(shell ./../x86/check_cc.sh "$(CC)" ../x86/trivial_32bit_program.c -m32)
  85. CAN_BUILD_X86_64 := $(shell ./../x86/check_cc.sh "$(CC)" ../x86/trivial_64bit_program.c)
  86. CAN_BUILD_WITH_NOPIE := $(shell ./../x86/check_cc.sh "$(CC)" ../x86/trivial_program.c -no-pie)
  87. VMTARGETS := protection_keys
  88. VMTARGETS += pkey_sighandler_tests
  89. BINARIES_32 := $(VMTARGETS:%=%_32)
  90. BINARIES_64 := $(VMTARGETS:%=%_64)
  91. ifeq ($(CAN_BUILD_WITH_NOPIE),1)
  92. CFLAGS += -no-pie
  93. endif
  94. ifeq ($(CAN_BUILD_I386),1)
  95. TEST_GEN_FILES += $(BINARIES_32)
  96. endif
  97. ifeq ($(CAN_BUILD_X86_64),1)
  98. TEST_GEN_FILES += $(BINARIES_64)
  99. endif
  100. else
  101. ifneq (,$(filter $(ARCH),arm64 powerpc))
  102. TEST_GEN_FILES += protection_keys
  103. endif
  104. endif
  105. ifneq (,$(filter $(ARCH),arm64 mips64 parisc64 powerpc riscv64 s390x sparc64 x86_64 s390))
  106. TEST_GEN_FILES += va_high_addr_switch
  107. TEST_GEN_FILES += virtual_address_range
  108. TEST_GEN_FILES += write_to_hugetlbfs
  109. endif
  110. TEST_PROGS := run_vmtests.sh
  111. TEST_FILES := test_vmalloc.sh
  112. TEST_FILES += test_hmm.sh
  113. TEST_FILES += va_high_addr_switch.sh
  114. TEST_FILES += charge_reserved_hugetlb.sh
  115. TEST_FILES += hugetlb_reparenting_test.sh
  116. # required by charge_reserved_hugetlb.sh
  117. TEST_FILES += write_hugetlb_memory.sh
  118. include ../lib.mk
  119. $(TEST_GEN_PROGS): vm_util.c thp_settings.c
  120. $(TEST_GEN_FILES): vm_util.c thp_settings.c
  121. $(OUTPUT)/uffd-stress: uffd-common.c
  122. $(OUTPUT)/uffd-unit-tests: uffd-common.c
  123. ifeq ($(ARCH),x86_64)
  124. BINARIES_32 := $(patsubst %,$(OUTPUT)/%,$(BINARIES_32))
  125. BINARIES_64 := $(patsubst %,$(OUTPUT)/%,$(BINARIES_64))
  126. define gen-target-rule-32
  127. $(1) $(1)_32: $(OUTPUT)/$(1)_32
  128. .PHONY: $(1) $(1)_32
  129. endef
  130. define gen-target-rule-64
  131. $(1) $(1)_64: $(OUTPUT)/$(1)_64
  132. .PHONY: $(1) $(1)_64
  133. endef
  134. ifeq ($(CAN_BUILD_I386),1)
  135. $(BINARIES_32): CFLAGS += -m32 -mxsave
  136. $(BINARIES_32): LDLIBS += -lrt -ldl -lm
  137. $(BINARIES_32): $(OUTPUT)/%_32: %.c
  138. $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(notdir $^) $(LDLIBS) -o $@
  139. $(foreach t,$(VMTARGETS),$(eval $(call gen-target-rule-32,$(t))))
  140. endif
  141. ifeq ($(CAN_BUILD_X86_64),1)
  142. $(BINARIES_64): CFLAGS += -m64 -mxsave
  143. $(BINARIES_64): LDLIBS += -lrt -ldl
  144. $(BINARIES_64): $(OUTPUT)/%_64: %.c
  145. $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(notdir $^) $(LDLIBS) -o $@
  146. $(foreach t,$(VMTARGETS),$(eval $(call gen-target-rule-64,$(t))))
  147. endif
  148. # x86_64 users should be encouraged to install 32-bit libraries
  149. ifeq ($(CAN_BUILD_I386)$(CAN_BUILD_X86_64),01)
  150. all: warn_32bit_failure
  151. warn_32bit_failure:
  152. @echo "Warning: you seem to have a broken 32-bit build" 2>&1; \
  153. echo "environment. This will reduce test coverage of 64-bit" 2>&1; \
  154. echo "kernels. If you are using a Debian-like distribution," 2>&1; \
  155. echo "try:"; 2>&1; \
  156. echo ""; \
  157. echo " apt-get install gcc-multilib libc6-i386 libc6-dev-i386"; \
  158. echo ""; \
  159. echo "If you are using a Fedora-like distribution, try:"; \
  160. echo ""; \
  161. echo " yum install glibc-devel.*i686"; \
  162. exit 0;
  163. endif
  164. endif
  165. # IOURING_EXTRA_LIBS may get set in local_config.mk, or it may be left empty.
  166. $(OUTPUT)/cow: LDLIBS += $(IOURING_EXTRA_LIBS)
  167. $(OUTPUT)/gup_longterm: LDLIBS += $(IOURING_EXTRA_LIBS)
  168. $(OUTPUT)/mlock-random-test $(OUTPUT)/memfd_secret: LDLIBS += -lcap
  169. $(OUTPUT)/ksm_tests: LDLIBS += -lnuma
  170. $(OUTPUT)/migration: LDLIBS += -lnuma
  171. local_config.mk local_config.h: check_config.sh
  172. /bin/sh ./check_config.sh $(CC)
  173. EXTRA_CLEAN += local_config.mk local_config.h
  174. ifeq ($(IOURING_EXTRA_LIBS),)
  175. all: warn_missing_liburing
  176. warn_missing_liburing:
  177. @echo ; \
  178. echo "Warning: missing liburing support. Some tests will be skipped." ; \
  179. echo
  180. endif