]> git.ipfire.org Git - thirdparty/glibc.git/blob - sysdeps/x86_64/Makefile
x86: Add support to build strcmp/strlen/strchr with explicit ISA level
[thirdparty/glibc.git] / sysdeps / x86_64 / Makefile
1 # The i387 `long double' is a distinct type we support.
2 long-double-fcts = yes
3
4 ifeq ($(subdir),csu)
5 gen-as-const-headers += link-defines.sym
6 endif
7
8 ifeq ($(subdir),gmon)
9 sysdep_routines += _mcount
10 # We cannot compile _mcount.S with -pg because that would create
11 # recursive calls when ENTRY is used. Just copy the normal static
12 # object.
13 sysdep_noprof += _mcount
14 endif
15
16 ifeq ($(subdir),string)
17 sysdep_routines += \
18 strcasecmp_l-nonascii \
19 strcspn-generic \
20 strncase_l-nonascii \
21 strpbrk-generic \
22 strspn-generic \
23 varshift \
24 # sysdep_routines
25 gen-as-const-headers += locale-defines.sym
26 tests += \
27 tst-rsi-strlen
28 endif
29
30 ifeq ($(subdir),elf)
31 # There is no good reason to use MMX in x86-64 ld.so with GCC.
32 CFLAGS-.os += $(if $(filter $(@F),$(patsubst %,%.os,$(all-rtld-routines))),\
33 -mno-mmx)
34
35 sysdep-dl-routines += tlsdesc dl-tlsdesc tls_get_addr
36
37 tests += ifuncmain8
38 modules-names += ifuncmod8
39
40 $(objpfx)ifuncmain8: $(objpfx)ifuncmod8.so
41
42 tests += tst-quad1 tst-quad2
43 modules-names += tst-quadmod1 tst-quadmod2
44
45 $(objpfx)tst-quad1: $(objpfx)tst-quadmod1.so
46 $(objpfx)tst-quad2: $(objpfx)tst-quadmod2.so
47
48 quad-pie-test += tst-quad1pie tst-quad2pie
49 tests += $(quad-pie-test)
50 tests-pie += $(quad-pie-test)
51 test-extras += tst-quadmod1pie tst-quadmod2pie
52 extra-test-objs += tst-quadmod1pie.o tst-quadmod2pie.o
53
54 $(objpfx)tst-quad1pie: $(objpfx)tst-quadmod1pie.o
55 $(objpfx)tst-quad2pie: $(objpfx)tst-quadmod2pie.o
56
57 CFLAGS-tst-quad1pie.c = $(PIE-ccflag)
58 CFLAGS-tst-quad2pie.c = $(PIE-ccflag)
59
60 tests += tst-x86_64-1
61 modules-names += x86_64/tst-x86_64mod-1
62 extra-test-objs += tst-x86_64mod-1.o
63 LDFLAGS-tst-x86_64mod-1.so = -Wl,-soname,tst-x86_64mod-1.so
64 ifneq (no,$(have-tunables))
65 # Test the state size for XSAVE when XSAVEC is disabled.
66 tst-x86_64-1-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=-XSAVEC
67 endif
68
69 $(objpfx)tst-x86_64-1: $(objpfx)x86_64/tst-x86_64mod-1.so
70
71 ifneq (no,$(have-tunables))
72 tests += tst-platform-1
73 modules-names += tst-platformmod-1 x86_64/tst-platformmod-2
74 extra-test-objs += tst-platformmod-2.o
75 CFLAGS-tst-platform-1.c = -mno-avx
76 CFLAGS-tst-platformmod-1.c = -mno-avx
77 CFLAGS-tst-platformmod-2.c = -mno-avx
78 LDFLAGS-tst-platformmod-2.so = -Wl,-soname,tst-platformmod-2.so
79 $(objpfx)tst-platform-1: $(objpfx)tst-platformmod-1.so
80 $(objpfx)tst-platform-1.out: $(objpfx)x86_64/tst-platformmod-2.so
81 # Turn off AVX512F and AVX2 so that GLRO(dl_platform) is
82 # always set to x86_64.
83 tst-platform-1-ENV = LD_PRELOAD=$(objpfx)\$$PLATFORM/tst-platformmod-2.so \
84 GLIBC_TUNABLES=glibc.cpu.hwcaps=-AVX512F,-AVX2
85 endif
86
87 tests += tst-audit3 tst-audit4 tst-audit5 tst-audit6 tst-audit7 \
88 tst-audit10 tst-sse tst-avx tst-avx512
89 test-extras += tst-audit4-aux tst-audit10-aux \
90 tst-avx-aux tst-avx512-aux
91 extra-test-objs += tst-audit4-aux.o tst-audit10-aux.o \
92 tst-avx-aux.o tst-avx512-aux.o
93
94 ifeq ($(have-insert),yes)
95 tests += tst-split-dynreloc
96 LDFLAGS-tst-split-dynreloc = -Wl,-T,$(..)sysdeps/x86_64/tst-split-dynreloc.lds
97 tst-split-dynreloc-ENV = LD_BIND_NOW=1
98 endif
99
100 modules-names += tst-auditmod3a tst-auditmod3b \
101 tst-auditmod4a tst-auditmod4b \
102 tst-auditmod5a tst-auditmod5b \
103 tst-auditmod6a tst-auditmod6b tst-auditmod6c \
104 tst-auditmod7a tst-auditmod7b \
105 tst-auditmod10a tst-auditmod10b \
106 tst-ssemod tst-avxmod tst-avx512mod
107
108 $(objpfx)tst-audit3: $(objpfx)tst-auditmod3a.so
109 $(objpfx)tst-audit3.out: $(objpfx)tst-auditmod3b.so
110 tst-audit3-ENV = LD_AUDIT=$(objpfx)tst-auditmod3b.so
111
112 $(objpfx)tst-audit4: $(objpfx)tst-audit4-aux.o $(objpfx)tst-auditmod4a.so
113 $(objpfx)tst-audit4.out: $(objpfx)tst-auditmod4b.so
114 tst-audit4-ENV = LD_AUDIT=$(objpfx)tst-auditmod4b.so
115
116 $(objpfx)tst-audit5: $(objpfx)tst-auditmod5a.so
117 $(objpfx)tst-audit5.out: $(objpfx)tst-auditmod5b.so
118 tst-audit5-ENV = LD_AUDIT=$(objpfx)tst-auditmod5b.so
119
120 $(objpfx)tst-audit6: $(objpfx)tst-auditmod6a.so
121 $(objpfx)tst-audit6.out: $(objpfx)tst-auditmod6b.so \
122 $(objpfx)tst-auditmod6c.so
123 tst-audit6-ENV = LD_AUDIT=$(objpfx)tst-auditmod6b.so:$(objpfx)tst-auditmod6c.so
124
125 $(objpfx)tst-audit7: $(objpfx)tst-auditmod7a.so
126 $(objpfx)tst-audit7.out: $(objpfx)tst-auditmod7b.so
127 tst-audit7-ENV = LD_AUDIT=$(objpfx)tst-auditmod7b.so
128
129 $(objpfx)tst-audit10: $(objpfx)tst-audit10-aux.o $(objpfx)tst-auditmod10a.so
130 $(objpfx)tst-audit10.out: $(objpfx)tst-auditmod10b.so
131 tst-audit10-ENV = LD_AUDIT=$(objpfx)tst-auditmod10b.so
132
133 $(objpfx)tst-sse: $(objpfx)tst-ssemod.so
134 $(objpfx)tst-avx: $(objpfx)tst-avx-aux.o $(objpfx)tst-avxmod.so
135 $(objpfx)tst-avx512: $(objpfx)tst-avx512-aux.o $(objpfx)tst-avx512mod.so
136
137 AVX-CFLAGS=-mavx -mno-vzeroupper
138 CFLAGS-tst-audit4-aux.c += $(AVX-CFLAGS)
139 CFLAGS-tst-auditmod4a.c += $(AVX-CFLAGS)
140 CFLAGS-tst-auditmod4b.c += $(AVX-CFLAGS)
141 CFLAGS-tst-auditmod6b.c += $(AVX-CFLAGS)
142 CFLAGS-tst-auditmod6c.c += $(AVX-CFLAGS)
143 CFLAGS-tst-auditmod7b.c += $(AVX-CFLAGS)
144 CFLAGS-tst-avx-aux.c += $(AVX-CFLAGS)
145 CFLAGS-tst-avxmod.c += $(AVX-CFLAGS)
146 AVX512-CFLAGS = -mavx512f
147 CFLAGS-tst-audit10-aux.c += $(AVX512-CFLAGS)
148 CFLAGS-tst-auditmod10a.c += $(AVX512-CFLAGS)
149 CFLAGS-tst-auditmod10b.c += $(AVX512-CFLAGS)
150 CFLAGS-tst-avx512-aux.c += $(AVX512-CFLAGS)
151 CFLAGS-tst-avx512mod.c += $(AVX512-CFLAGS)
152
153 $(objpfx)tst-glibc-hwcaps: $(objpfx)libmarkermod2-1.so \
154 $(objpfx)libmarkermod3-1.so $(objpfx)libmarkermod4-1.so
155 $(objpfx)tst-glibc-hwcaps.out: \
156 $(objpfx)libmarkermod2.so \
157 $(objpfx)glibc-hwcaps/x86-64-v2/libmarkermod2.so \
158 $(objpfx)libmarkermod3.so \
159 $(objpfx)glibc-hwcaps/x86-64-v2/libmarkermod3.so \
160 $(objpfx)glibc-hwcaps/x86-64-v3/libmarkermod3.so \
161 $(objpfx)libmarkermod4.so \
162 $(objpfx)glibc-hwcaps/x86-64-v2/libmarkermod4.so \
163 $(objpfx)glibc-hwcaps/x86-64-v3/libmarkermod4.so \
164 $(objpfx)glibc-hwcaps/x86-64-v4/libmarkermod4.so \
165
166 $(objpfx)glibc-hwcaps/x86-64-v2/libmarkermod2.so: $(objpfx)libmarkermod2-2.so
167 $(make-target-directory)
168 cp $< $@
169 $(objpfx)glibc-hwcaps/x86-64-v2/libmarkermod3.so: $(objpfx)libmarkermod3-2.so
170 $(make-target-directory)
171 cp $< $@
172 $(objpfx)glibc-hwcaps/x86-64-v3/libmarkermod3.so: $(objpfx)libmarkermod3-3.so
173 $(make-target-directory)
174 cp $< $@
175 $(objpfx)glibc-hwcaps/x86-64-v2/libmarkermod4.so: $(objpfx)libmarkermod4-2.so
176 $(make-target-directory)
177 cp $< $@
178 $(objpfx)glibc-hwcaps/x86-64-v3/libmarkermod4.so: $(objpfx)libmarkermod4-3.so
179 $(make-target-directory)
180 cp $< $@
181 $(objpfx)glibc-hwcaps/x86-64-v4/libmarkermod4.so: $(objpfx)libmarkermod4-4.so
182 $(make-target-directory)
183 cp $< $@
184
185 ifeq (no,$(build-hardcoded-path-in-tests))
186 # This is an ld.so.cache test, and RPATH/RUNPATH in the executable
187 # interferes with its test objectives.
188 tests-container += tst-glibc-hwcaps-cache
189 endif
190
191 tests-internal += tst-x86-64-tls-1
192
193 endif # $(subdir) == elf
194
195 ifeq ($(subdir),csu)
196 gen-as-const-headers += tlsdesc.sym rtld-offsets.sym
197 endif
198
199 ifeq ($(subdir),wcsmbs)
200
201 sysdep_routines += \
202 wcsncmp-generic \
203 wcsnlen-generic \
204 # sysdep_routines
205
206 tests += \
207 tst-rsi-wcslen
208 endif
209
210 $(objpfx)x86_64/tst-x86_64mod-1.os: $(objpfx)tst-x86_64mod-1.os
211 $(make-target-directory)
212 rm -f $@
213 ln $< $@
214
215 do-tests-clean common-mostlyclean: tst-x86_64-1-clean
216
217 .PHONY: tst-x86_64-1-clean
218 tst-x86_64-1-clean:
219 -rm -rf $(objpfx)x86_64
220
221 $(objpfx)x86_64/tst-platformmod-2.os: $(objpfx)tst-platformmod-2.os
222 $(make-target-directory)
223 rm -f $@
224 ln $< $@