Makefile 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. # SPDX-License-Identifier: GPL-2.0
  2. # Makefile for vm selftests
  3. LOCAL_HDRS += $(top_srcdir)/mm/gup_test.h
  4. uname_M := $(shell uname -m 2>/dev/null || echo not)
  5. MACHINE ?= $(shell echo $(uname_M) | sed -e 's/aarch64.*/arm64/' -e 's/ppc64.*/ppc64/')
  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. # Avoid accidental wrong builds, due to built-in rules working just a little
  11. # bit too well--but not quite as well as required for our situation here.
  12. #
  13. # In other words, "make userfaultfd" is supposed to fail to build at all,
  14. # because this Makefile only supports either "make" (all), or "make /full/path".
  15. # However, the built-in rules, if not suppressed, will pick up CFLAGS and the
  16. # initial LDLIBS (but not the target-specific LDLIBS, because those are only
  17. # set for the full path target!). This causes it to get pretty far into building
  18. # things despite using incorrect values such as an *occasionally* incomplete
  19. # LDLIBS.
  20. MAKEFLAGS += --no-builtin-rules
  21. CFLAGS = -Wall -I $(top_srcdir) $(EXTRA_CFLAGS) $(KHDR_INCLUDES)
  22. LDLIBS = -lrt -lpthread
  23. TEST_GEN_FILES = compaction_test
  24. TEST_GEN_FILES += gup_test
  25. TEST_GEN_FILES += hmm-tests
  26. TEST_GEN_FILES += hugetlb-madvise
  27. TEST_GEN_FILES += hugepage-mmap
  28. TEST_GEN_FILES += hugepage-mremap
  29. TEST_GEN_FILES += hugepage-shm
  30. TEST_GEN_FILES += hugepage-vmemmap
  31. TEST_GEN_FILES += khugepaged
  32. TEST_GEN_PROGS = madv_populate
  33. TEST_GEN_FILES += map_fixed_noreplace
  34. TEST_GEN_FILES += map_hugetlb
  35. TEST_GEN_FILES += map_populate
  36. TEST_GEN_FILES += memfd_secret
  37. TEST_GEN_FILES += migration
  38. TEST_GEN_FILES += mlock-random-test
  39. TEST_GEN_FILES += mlock2-tests
  40. TEST_GEN_FILES += mrelease_test
  41. TEST_GEN_FILES += mremap_dontunmap
  42. TEST_GEN_FILES += mremap_test
  43. TEST_GEN_FILES += on-fault-limit
  44. TEST_GEN_FILES += thuge-gen
  45. TEST_GEN_FILES += transhuge-stress
  46. TEST_GEN_FILES += userfaultfd
  47. TEST_GEN_PROGS += soft-dirty
  48. TEST_GEN_PROGS += split_huge_page_test
  49. TEST_GEN_FILES += ksm_tests
  50. ifeq ($(MACHINE),x86_64)
  51. CAN_BUILD_I386 := $(shell ./../x86/check_cc.sh "$(CC)" ../x86/trivial_32bit_program.c -m32)
  52. CAN_BUILD_X86_64 := $(shell ./../x86/check_cc.sh "$(CC)" ../x86/trivial_64bit_program.c)
  53. CAN_BUILD_WITH_NOPIE := $(shell ./../x86/check_cc.sh "$(CC)" ../x86/trivial_program.c -no-pie)
  54. VMTARGETS := protection_keys
  55. BINARIES_32 := $(VMTARGETS:%=%_32)
  56. BINARIES_64 := $(VMTARGETS:%=%_64)
  57. ifeq ($(CAN_BUILD_WITH_NOPIE),1)
  58. CFLAGS += -no-pie
  59. endif
  60. ifeq ($(CAN_BUILD_I386),1)
  61. TEST_GEN_FILES += $(BINARIES_32)
  62. endif
  63. ifeq ($(CAN_BUILD_X86_64),1)
  64. TEST_GEN_FILES += $(BINARIES_64)
  65. endif
  66. else
  67. ifneq (,$(findstring $(MACHINE),ppc64))
  68. TEST_GEN_FILES += protection_keys
  69. endif
  70. endif
  71. ifneq (,$(filter $(MACHINE),arm64 ia64 mips64 parisc64 ppc64 riscv64 s390x sh64 sparc64 x86_64))
  72. TEST_GEN_FILES += va_128TBswitch
  73. TEST_GEN_FILES += virtual_address_range
  74. TEST_GEN_FILES += write_to_hugetlbfs
  75. endif
  76. TEST_PROGS := run_vmtests.sh
  77. TEST_FILES := test_vmalloc.sh
  78. TEST_FILES += test_hmm.sh
  79. TEST_FILES += va_128TBswitch.sh
  80. include ../lib.mk
  81. $(OUTPUT)/khugepaged: vm_util.c
  82. $(OUTPUT)/madv_populate: vm_util.c
  83. $(OUTPUT)/soft-dirty: vm_util.c
  84. $(OUTPUT)/split_huge_page_test: vm_util.c
  85. $(OUTPUT)/userfaultfd: vm_util.c
  86. ifeq ($(MACHINE),x86_64)
  87. BINARIES_32 := $(patsubst %,$(OUTPUT)/%,$(BINARIES_32))
  88. BINARIES_64 := $(patsubst %,$(OUTPUT)/%,$(BINARIES_64))
  89. define gen-target-rule-32
  90. $(1) $(1)_32: $(OUTPUT)/$(1)_32
  91. .PHONY: $(1) $(1)_32
  92. endef
  93. define gen-target-rule-64
  94. $(1) $(1)_64: $(OUTPUT)/$(1)_64
  95. .PHONY: $(1) $(1)_64
  96. endef
  97. ifeq ($(CAN_BUILD_I386),1)
  98. $(BINARIES_32): CFLAGS += -m32 -mxsave
  99. $(BINARIES_32): LDLIBS += -lrt -ldl -lm
  100. $(BINARIES_32): $(OUTPUT)/%_32: %.c
  101. $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(notdir $^) $(LDLIBS) -o $@
  102. $(foreach t,$(VMTARGETS),$(eval $(call gen-target-rule-32,$(t))))
  103. endif
  104. ifeq ($(CAN_BUILD_X86_64),1)
  105. $(BINARIES_64): CFLAGS += -m64 -mxsave
  106. $(BINARIES_64): LDLIBS += -lrt -ldl
  107. $(BINARIES_64): $(OUTPUT)/%_64: %.c
  108. $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(notdir $^) $(LDLIBS) -o $@
  109. $(foreach t,$(VMTARGETS),$(eval $(call gen-target-rule-64,$(t))))
  110. endif
  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
  114. warn_32bit_failure:
  115. @echo "Warning: you seem to have a broken 32-bit build" 2>&1; \
  116. echo "environment. This will reduce test coverage of 64-bit" 2>&1; \
  117. echo "kernels. If you are using a Debian-like distribution," 2>&1; \
  118. echo "try:"; 2>&1; \
  119. echo ""; \
  120. echo " apt-get install gcc-multilib libc6-i386 libc6-dev-i386"; \
  121. echo ""; \
  122. echo "If you are using a Fedora-like distribution, try:"; \
  123. echo ""; \
  124. echo " yum install glibc-devel.*i686"; \
  125. exit 0;
  126. endif
  127. endif
  128. $(OUTPUT)/mlock-random-test $(OUTPUT)/memfd_secret: LDLIBS += -lcap
  129. $(OUTPUT)/ksm_tests: LDLIBS += -lnuma
  130. $(OUTPUT)/migration: LDLIBS += -lnuma