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