
Avoid accidental wrong builds, due to built-in rules working just a little bit too well--but not quite as well as required for our situation here. In other words, "make userfaultfd" (for example) is supposed to fail to build at all, because this Makefile only supports either "make" (all), or "make /full/path". However, the built-in rules, if not suppressed, will pick up CFLAGS and the initial LDLIBS (but not the target-specific LDLIBS, because those are only set for the full path target!). This causes it to get pretty far into building things despite using incorrect values such as an *occasionally* incomplete LDLIBS value. Signed-off-by: John Hubbard <jhubbard@nvidia.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Cc: Shuah Khan <shuah@kernel.org> Cc: Jason Gunthorpe <jgg@ziepe.ca> Link: https://lkml.kernel.org/r/20200915012901.1655280-3-jhubbard@nvidia.com Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
133 lines
4.1 KiB
Makefile
133 lines
4.1 KiB
Makefile
# SPDX-License-Identifier: GPL-2.0
|
|
# Makefile for vm selftests
|
|
uname_M := $(shell uname -m 2>/dev/null || echo not)
|
|
MACHINE ?= $(shell echo $(uname_M) | sed -e 's/aarch64.*/arm64/')
|
|
|
|
# Without this, failed build products remain, with up-to-date timestamps,
|
|
# thus tricking Make (and you!) into believing that All Is Well, in subsequent
|
|
# make invocations:
|
|
.DELETE_ON_ERROR:
|
|
|
|
# Avoid accidental wrong builds, due to built-in rules working just a little
|
|
# bit too well--but not quite as well as required for our situation here.
|
|
#
|
|
# In other words, "make userfaultfd" is supposed to fail to build at all,
|
|
# because this Makefile only supports either "make" (all), or "make /full/path".
|
|
# However, the built-in rules, if not suppressed, will pick up CFLAGS and the
|
|
# initial LDLIBS (but not the target-specific LDLIBS, because those are only
|
|
# set for the full path target!). This causes it to get pretty far into building
|
|
# things despite using incorrect values such as an *occasionally* incomplete
|
|
# LDLIBS.
|
|
MAKEFLAGS += --no-builtin-rules
|
|
|
|
CFLAGS = -Wall -I ../../../../usr/include $(EXTRA_CFLAGS)
|
|
LDLIBS = -lrt
|
|
TEST_GEN_FILES = compaction_test
|
|
TEST_GEN_FILES += gup_benchmark
|
|
TEST_GEN_FILES += hmm-tests
|
|
TEST_GEN_FILES += hugepage-mmap
|
|
TEST_GEN_FILES += hugepage-shm
|
|
TEST_GEN_FILES += map_hugetlb
|
|
TEST_GEN_FILES += map_fixed_noreplace
|
|
TEST_GEN_FILES += map_populate
|
|
TEST_GEN_FILES += mlock-random-test
|
|
TEST_GEN_FILES += mlock2-tests
|
|
TEST_GEN_FILES += mremap_dontunmap
|
|
TEST_GEN_FILES += on-fault-limit
|
|
TEST_GEN_FILES += thuge-gen
|
|
TEST_GEN_FILES += transhuge-stress
|
|
TEST_GEN_FILES += userfaultfd
|
|
TEST_GEN_FILES += khugepaged
|
|
|
|
ifeq ($(ARCH),x86_64)
|
|
CAN_BUILD_I386 := $(shell ./../x86/check_cc.sh $(CC) ../x86/trivial_32bit_program.c -m32)
|
|
CAN_BUILD_X86_64 := $(shell ./../x86/check_cc.sh $(CC) ../x86/trivial_64bit_program.c)
|
|
CAN_BUILD_WITH_NOPIE := $(shell ./../x86/check_cc.sh $(CC) ../x86/trivial_program.c -no-pie)
|
|
|
|
TARGETS := protection_keys
|
|
BINARIES_32 := $(TARGETS:%=%_32)
|
|
BINARIES_64 := $(TARGETS:%=%_64)
|
|
|
|
ifeq ($(CAN_BUILD_WITH_NOPIE),1)
|
|
CFLAGS += -no-pie
|
|
endif
|
|
|
|
ifeq ($(CAN_BUILD_I386),1)
|
|
TEST_GEN_FILES += $(BINARIES_32)
|
|
endif
|
|
|
|
ifeq ($(CAN_BUILD_X86_64),1)
|
|
TEST_GEN_FILES += $(BINARIES_64)
|
|
endif
|
|
else
|
|
TEST_GEN_FILES += protection_keys
|
|
endif
|
|
|
|
ifneq (,$(filter $(MACHINE),arm64 ia64 mips64 parisc64 ppc64 ppc64le riscv64 s390x sh64 sparc64 x86_64))
|
|
TEST_GEN_FILES += va_128TBswitch
|
|
TEST_GEN_FILES += virtual_address_range
|
|
TEST_GEN_FILES += write_to_hugetlbfs
|
|
endif
|
|
|
|
TEST_PROGS := run_vmtests
|
|
|
|
TEST_FILES := test_vmalloc.sh
|
|
|
|
KSFT_KHDR_INSTALL := 1
|
|
include ../lib.mk
|
|
|
|
$(OUTPUT)/hmm-tests: LDLIBS += -lhugetlbfs -lpthread
|
|
|
|
ifeq ($(ARCH),x86_64)
|
|
BINARIES_32 := $(patsubst %,$(OUTPUT)/%,$(BINARIES_32))
|
|
BINARIES_64 := $(patsubst %,$(OUTPUT)/%,$(BINARIES_64))
|
|
|
|
define gen-target-rule-32
|
|
$(1) $(1)_32: $(OUTPUT)/$(1)_32
|
|
.PHONY: $(1) $(1)_32
|
|
endef
|
|
|
|
define gen-target-rule-64
|
|
$(1) $(1)_64: $(OUTPUT)/$(1)_64
|
|
.PHONY: $(1) $(1)_64
|
|
endef
|
|
|
|
ifeq ($(CAN_BUILD_I386),1)
|
|
$(BINARIES_32): CFLAGS += -m32
|
|
$(BINARIES_32): LDLIBS += -lrt -ldl -lm
|
|
$(BINARIES_32): %_32: %.c
|
|
$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(notdir $^) $(LDLIBS) -o $@
|
|
$(foreach t,$(TARGETS),$(eval $(call gen-target-rule-32,$(t))))
|
|
endif
|
|
|
|
ifeq ($(CAN_BUILD_X86_64),1)
|
|
$(BINARIES_64): CFLAGS += -m64
|
|
$(BINARIES_64): LDLIBS += -lrt -ldl
|
|
$(BINARIES_64): %_64: %.c
|
|
$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(notdir $^) $(LDLIBS) -o $@
|
|
$(foreach t,$(TARGETS),$(eval $(call gen-target-rule-64,$(t))))
|
|
endif
|
|
|
|
# x86_64 users should be encouraged to install 32-bit libraries
|
|
ifeq ($(CAN_BUILD_I386)$(CAN_BUILD_X86_64),01)
|
|
all: warn_32bit_failure
|
|
|
|
warn_32bit_failure:
|
|
@echo "Warning: you seem to have a broken 32-bit build" 2>&1; \
|
|
echo "environment. This will reduce test coverage of 64-bit" 2>&1; \
|
|
echo "kernels. If you are using a Debian-like distribution," 2>&1; \
|
|
echo "try:"; 2>&1; \
|
|
echo ""; \
|
|
echo " apt-get install gcc-multilib libc6-i386 libc6-dev-i386"; \
|
|
echo ""; \
|
|
echo "If you are using a Fedora-like distribution, try:"; \
|
|
echo ""; \
|
|
echo " yum install glibc-devel.*i686"; \
|
|
exit 0;
|
|
endif
|
|
endif
|
|
|
|
$(OUTPUT)/userfaultfd: LDLIBS += -lpthread
|
|
|
|
$(OUTPUT)/mlock-random-test: LDLIBS += -lcap
|