Back to home page

OSCL-LXR

 
 

    


0001 # SPDX-License-Identifier: GPL-2.0
0002 # Makefile for vm selftests
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 # Without this, failed build products remain, with up-to-date timestamps,
0012 # thus tricking Make (and you!) into believing that All Is Well, in subsequent
0013 # make invocations:
0014 .DELETE_ON_ERROR:
0015 
0016 # Avoid accidental wrong builds, due to built-in rules working just a little
0017 # bit too well--but not quite as well as required for our situation here.
0018 #
0019 # In other words, "make userfaultfd" is supposed to fail to build at all,
0020 # because this Makefile only supports either "make" (all), or "make /full/path".
0021 # However,  the built-in rules, if not suppressed, will pick up CFLAGS and the
0022 # initial LDLIBS (but not the target-specific LDLIBS, because those are only
0023 # set for the full path target!). This causes it to get pretty far into building
0024 # things despite using incorrect values such as an *occasionally* incomplete
0025 # LDLIBS.
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 # x86_64 users should be encouraged to install 32-bit libraries
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 # HMM_EXTRA_LIBS may get set in local_config.mk, or it may be left empty.
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