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