@@ -15,14 +15,37 @@ TEST_GEN_FILES += map_fixed_noreplace
15
15
TEST_GEN_FILES += map_populate
16
16
TEST_GEN_FILES += mlock-random-test
17
17
TEST_GEN_FILES += mlock2-tests
18
- TEST_GEN_FILES += protection_keys
19
18
TEST_GEN_FILES += mremap_dontunmap
20
19
TEST_GEN_FILES += on-fault-limit
21
20
TEST_GEN_FILES += thuge-gen
22
21
TEST_GEN_FILES += transhuge-stress
23
22
TEST_GEN_FILES += userfaultfd
24
23
TEST_GEN_FILES += khugepaged
25
24
25
+ ifeq ($(ARCH ) ,x86_64)
26
+ CAN_BUILD_I386 := $(shell ./../x86/check_cc.sh $(CC ) ../x86/trivial_32bit_program.c -m32)
27
+ CAN_BUILD_X86_64 := $(shell ./../x86/check_cc.sh $(CC ) ../x86/trivial_64bit_program.c)
28
+ CAN_BUILD_WITH_NOPIE := $(shell ./../x86/check_cc.sh $(CC ) ../x86/trivial_program.c -no-pie)
29
+
30
+ TARGETS := protection_keys
31
+ BINARIES_32 := $(TARGETS:%=%_32 )
32
+ BINARIES_64 := $(TARGETS:%=%_64 )
33
+
34
+ ifeq ($(CAN_BUILD_WITH_NOPIE ) ,1)
35
+ CFLAGS += -no-pie
36
+ endif
37
+
38
+ ifeq ($(CAN_BUILD_I386 ) ,1)
39
+ TEST_GEN_FILES += $(BINARIES_32 )
40
+ endif
41
+
42
+ ifeq ($(CAN_BUILD_X86_64 ) ,1)
43
+ TEST_GEN_FILES += $(BINARIES_64 )
44
+ endif
45
+ else
46
+ TEST_GEN_FILES += protection_keys
47
+ endif
48
+
26
49
ifneq (,$(filter $(MACHINE ) ,arm64 ia64 mips64 parisc64 ppc64 ppc64le riscv64 s390x sh64 sparc64 x86_64) )
27
50
TEST_GEN_FILES += va_128TBswitch
28
51
TEST_GEN_FILES += virtual_address_range
@@ -38,6 +61,55 @@ include ../lib.mk
38
61
39
62
$(OUTPUT ) /hmm-tests : LDLIBS += -lhugetlbfs -lpthread
40
63
64
+ ifeq ($(ARCH ) ,x86_64)
65
+ BINARIES_32 := $(patsubst % ,$(OUTPUT ) /% ,$(BINARIES_32 ) )
66
+ BINARIES_64 := $(patsubst % ,$(OUTPUT ) /% ,$(BINARIES_64 ) )
67
+
68
+ define gen-target-rule-32
69
+ $(1 ) $(1 ) _32: $(OUTPUT ) /$(1 ) _32
70
+ .PHONY: $(1 ) $(1 ) _32
71
+ endef
72
+
73
+ define gen-target-rule-64
74
+ $(1 ) $(1 ) _64: $(OUTPUT ) /$(1 ) _64
75
+ .PHONY: $(1 ) $(1 ) _64
76
+ endef
77
+
78
+ ifeq ($(CAN_BUILD_I386 ) ,1)
79
+ $(BINARIES_32 ) : CFLAGS += -m32
80
+ $(BINARIES_32 ) : LDLIBS += -lrt -ldl -lm
81
+ $(BINARIES_32 ) : % _32: % .c
82
+ $(CC ) $(CFLAGS ) $(EXTRA_CFLAGS ) $(notdir $^ ) $(LDLIBS ) -o $@
83
+ $(foreach t,$(TARGETS),$(eval $(call gen-target-rule-32,$(t))))
84
+ endif
85
+
86
+ ifeq ($(CAN_BUILD_X86_64 ) ,1)
87
+ $(BINARIES_64 ) : CFLAGS += -m64
88
+ $(BINARIES_64 ) : LDLIBS += -lrt -ldl
89
+ $(BINARIES_64 ) : % _64: % .c
90
+ $(CC ) $(CFLAGS ) $(EXTRA_CFLAGS ) $(notdir $^ ) $(LDLIBS ) -o $@
91
+ $(foreach t,$(TARGETS),$(eval $(call gen-target-rule-64,$(t))))
92
+ endif
93
+
94
+ # x86_64 users should be encouraged to install 32-bit libraries
95
+ ifeq ($(CAN_BUILD_I386 )$(CAN_BUILD_X86_64 ) ,01)
96
+ all : warn_32bit_failure
97
+
98
+ warn_32bit_failure :
99
+ @echo " Warning: you seem to have a broken 32-bit build" 2>&1 ; \
100
+ echo " environment. This will reduce test coverage of 64-bit" 2>&1 ; \
101
+ echo " kernels. If you are using a Debian-like distribution," 2>&1 ; \
102
+ echo " try:" ; 2>&1 ; \
103
+ echo " " ; \
104
+ echo " apt-get install gcc-multilib libc6-i386 libc6-dev-i386" ; \
105
+ echo " " ; \
106
+ echo " If you are using a Fedora-like distribution, try:" ; \
107
+ echo " " ; \
108
+ echo " yum install glibc-devel.*i686" ; \
109
+ exit 0;
110
+ endif
111
+ endif
112
+
41
113
$(OUTPUT ) /userfaultfd : LDLIBS += -lpthread
42
114
43
115
$(OUTPUT ) /mlock-random-test : LDLIBS += -lcap
0 commit comments