Makefile.inc revision 1.45 1 1.45 christos # $NetBSD: Makefile.inc,v 1.45 2024/01/23 12:23:34 christos Exp $
2 1.1 joerg
3 1.40 rin COMPILER_RT_DIR= ${NETBSDSRCDIR}/sys/external/bsd/compiler_rt
4 1.40 rin COMPILER_RT_SRCDIR= ${COMPILER_RT_DIR}/dist
5 1.1 joerg
6 1.25 joerg .if ${LIBC_MACHINE_ARCH} == "powerpc" || ${LIBC_MACHINE_ARCH} == "powerpc64"
7 1.15 joerg COMPILER_RT_CPU_DIR= ${COMPILER_RT_SRCDIR}/lib/builtins/ppc
8 1.15 joerg COMPILER_RT_ARCH_DIR= ${COMPILER_RT_SRCDIR}/lib/builtins/ppc
9 1.1 joerg .else
10 1.24 matt COMPILER_RT_CPU_DIR= ${COMPILER_RT_SRCDIR}/lib/builtins/${LIBC_MACHINE_CPU}
11 1.16 matt COMPILER_RT_ARCH_DIR= ${COMPILER_RT_SRCDIR}/lib/builtins/${LIBC_MACHINE_ARCH}
12 1.1 joerg .endif
13 1.1 joerg
14 1.1 joerg .PATH: ${COMPILER_RT_CPU_DIR}
15 1.1 joerg .PATH: ${COMPILER_RT_ARCH_DIR}
16 1.15 joerg .PATH: ${COMPILER_RT_SRCDIR}/lib/builtins
17 1.4 joerg .PATH: ${COMPILER_RT_SRCDIR}/lib/profile
18 1.1 joerg
19 1.1 joerg # Complex support needs parts of libm
20 1.1 joerg #GENERIC_SRCS+=
21 1.1 joerg # mulxc3.c \
22 1.1 joerg # mulsc3.c \
23 1.1 joerg # divxc3.c \
24 1.1 joerg # divdc3.c \
25 1.1 joerg # divsc3.c
26 1.1 joerg
27 1.21 joerg # Implemented on top of our atomic interface.
28 1.21 joerg #GENERIC_SRCS+= atomic.c
29 1.2 joerg
30 1.10 joerg .if ${HAVE_LIBGCC_EH} == "no"
31 1.2 joerg GENERIC_SRCS+= \
32 1.2 joerg gcc_personality_v0.c
33 1.6 joerg .endif
34 1.2 joerg
35 1.35 martin GENERIC_SRCS+= \
36 1.35 martin absvsi2.c \
37 1.35 martin absvti2.c \
38 1.35 martin addvsi3.c \
39 1.35 martin addvti3.c \
40 1.35 martin ashlti3.c \
41 1.35 martin ashrti3.c \
42 1.35 martin clzti2.c \
43 1.35 martin cmpti2.c \
44 1.35 martin ctzti2.c \
45 1.35 martin divti3.c \
46 1.35 martin ffsti2.c \
47 1.35 martin fixsfdi.c \
48 1.35 martin fixdfdi.c \
49 1.35 martin fixunsdfdi.c \
50 1.35 martin fixunsdfsi.c \
51 1.35 martin fixunssfdi.c \
52 1.35 martin fixunssfsi.c \
53 1.35 martin fixunsxfdi.c \
54 1.35 martin fixunsxfsi.c \
55 1.35 martin int_util.c \
56 1.35 martin lshrti3.c \
57 1.35 martin modti3.c \
58 1.35 martin muldc3.c \
59 1.35 martin mulosi4.c \
60 1.35 martin muloti4.c \
61 1.35 martin multi3.c \
62 1.35 martin mulvsi3.c \
63 1.35 martin mulvti3.c \
64 1.35 martin negti2.c \
65 1.35 martin negvsi2.c \
66 1.35 martin negvti2.c \
67 1.35 martin paritysi2.c \
68 1.35 martin parityti2.c \
69 1.35 martin popcountsi2.c \
70 1.35 martin popcountti2.c \
71 1.35 martin subvsi3.c \
72 1.35 martin subvti3.c \
73 1.35 martin ucmpti2.c \
74 1.35 martin udivmodti4.c \
75 1.35 martin udivti3.c \
76 1.35 martin umodti3.c
77 1.35 martin
78 1.35 martin # only used for machines using IEEE 754 floating point formats
79 1.42 rin .if ${LIBC_MACHINE_ARCH} != "vax"
80 1.35 martin
81 1.8 joerg .if 0
82 1.2 joerg # Conflicts with soft-float
83 1.2 joerg GENERIC_SRCS+= \
84 1.2 joerg comparedf2.c \
85 1.3 joerg comparesf2.c \
86 1.3 joerg adddf3.c \
87 1.3 joerg addsf3.c \
88 1.23 joerg addtf3.c \
89 1.3 joerg divdf3.c \
90 1.3 joerg divsf3.c \
91 1.23 joerg divtf3.c \
92 1.3 joerg extendsfdf2.c \
93 1.23 joerg extendsftf2.c \
94 1.23 joerg extenddftf2.c \
95 1.11 joerg fixdfsi.c \
96 1.3 joerg fixdfti.c \
97 1.3 joerg fixsfsi.c \
98 1.3 joerg fixsfti.c \
99 1.3 joerg floatsidf.c \
100 1.3 joerg floatsisf.c \
101 1.7 joerg floatunsidf.c \
102 1.7 joerg floatunsisf.c \
103 1.3 joerg muldf3.c \
104 1.3 joerg mulsf3.c \
105 1.23 joerg multf3.c \
106 1.3 joerg subdf3.c \
107 1.3 joerg subsf3.c \
108 1.23 joerg subtf3.c \
109 1.23 joerg truncdfsf2.c \
110 1.23 joerg trunctfdf2.c \
111 1.23 joerg trunctfsf2.c
112 1.2 joerg .endif
113 1.2 joerg
114 1.35 martin GENERIC_SRCS+= \
115 1.1 joerg floatdidf.c \
116 1.1 joerg floatdisf.c \
117 1.1 joerg floatdixf.c \
118 1.1 joerg floatundidf.c \
119 1.1 joerg floatundisf.c \
120 1.1 joerg floatundixf.c \
121 1.1 joerg negdf2.c \
122 1.1 joerg negsf2.c \
123 1.1 joerg powidf2.c \
124 1.1 joerg powisf2.c \
125 1.1 joerg powitf2.c \
126 1.35 martin powixf2.c
127 1.35 martin
128 1.35 martin .endif # IEEE 754 only machines
129 1.1 joerg
130 1.42 rin .if ${LIBC_MACHINE_ARCH} != "m68k"
131 1.31 martin GENERIC_SRCS+= \
132 1.31 martin fixxfdi.c
133 1.31 martin .endif
134 1.31 martin
135 1.31 martin
136 1.42 rin .if ${LIBC_MACHINE_CPU} == "aarch64"
137 1.41 nia GENERIC_SRCS+= \
138 1.41 nia comparetf2.c
139 1.41 nia .endif
140 1.41 nia
141 1.22 matt GENERIC_SRCS+= \
142 1.22 matt fixunsdfti.c \
143 1.22 matt fixunssfti.c \
144 1.22 matt fixunsxfti.c \
145 1.22 matt fixxfti.c \
146 1.22 matt floattidf.c \
147 1.22 matt floattisf.c \
148 1.22 matt floattixf.c \
149 1.22 matt floatuntidf.c \
150 1.22 matt floatuntisf.c \
151 1.22 matt floatuntixf.c
152 1.22 matt
153 1.22 matt # These have h/w instructions which are always used.
154 1.27 matt .if ${LIBC_MACHINE_ARCH} != "alpha" && ${LIBC_MACHINE_CPU} != "aarch64" \
155 1.27 matt && ${LIBC_MACHINE_CPU} != "powerpc" && ${LIBC_MACHINE_CPU} != "or1k"
156 1.26 matt GENERIC_SRCS+= \
157 1.26 matt clzsi2.c
158 1.26 matt .endif
159 1.26 matt
160 1.26 matt # These have h/w instructions which are always used.
161 1.27 matt .if ${LIBC_MACHINE_ARCH} != "alpha" && ${LIBC_MACHINE_ARCH} != "vax" \
162 1.27 matt && ${LIBC_MACHINE_CPU} != "aarch64" && ${LIBC_MACHINE_CPU} != "powerpc" \
163 1.27 matt && ${LIBC_MACHINE_CPU} != "or1k"
164 1.27 matt GENERIC_SRCS+= \
165 1.27 matt ctzsi2.c
166 1.27 matt .endif
167 1.27 matt
168 1.27 matt # These have h/w instructions which are always used.
169 1.26 matt .if ${LIBC_MACHINE_ARCH} != "alpha" && ${LIBC_MACHINE_CPU} != "powerpc" \
170 1.24 matt && ${LIBC_MACHINE_CPU} != "aarch64" && ${LIBC_MACHINE_ARCH} != "vax"
171 1.22 matt GENERIC_SRCS+= \
172 1.22 matt divmodsi4.c \
173 1.22 matt divsi3.c \
174 1.38 rin modsi3.c \
175 1.37 rin udivmodsi4.c \
176 1.22 matt umodsi3.c
177 1.22 matt
178 1.24 matt . if ${LIBC_MACHINE_CPU} != "sh3"
179 1.17 uwe # On sh3 __udivsi3 is gcc "millicode" with special calling convention
180 1.17 uwe # (less registers clobbered than usual). Each DSO that needs it gets
181 1.17 uwe # its own hidden copy from libgcc.a.
182 1.17 uwe GENERIC_SRCS+= \
183 1.17 uwe udivsi3.c
184 1.22 matt . endif
185 1.17 uwe .endif
186 1.17 uwe
187 1.22 matt
188 1.4 joerg GENERIC_SRCS+= \
189 1.5 matt absvdi2.c \
190 1.5 matt addvdi3.c \
191 1.5 matt mulodi4.c \
192 1.5 matt mulvdi3.c \
193 1.5 matt negvdi2.c \
194 1.5 matt paritydi2.c \
195 1.5 matt popcountdi2.c \
196 1.5 matt subvdi3.c
197 1.5 matt
198 1.22 matt # These have h/w instructions which are always used.
199 1.24 matt .if ${LIBC_MACHINE_ARCH} != "alpha" && ${LIBC_MACHINE_CPU} != "powerpc64" \
200 1.39 jakllsch && ${LIBC_MACHINE_CPU} != "aarch64" && ${LIBC_MACHINE_CPU} != "or1k"
201 1.22 matt GENERIC_SRCS+= \
202 1.22 matt clzdi2.c \
203 1.22 matt ctzdi2.c \
204 1.22 matt ffsdi2.c
205 1.22 matt .endif
206 1.22 matt
207 1.22 matt # Don't need these on 64-bit machines.
208 1.12 joerg .if empty(LIBC_MACHINE_ARCH:M*64*) && ${LIBC_MACHINE_ARCH} != "alpha"
209 1.5 matt GENERIC_SRCS+= \
210 1.5 matt cmpdi2.c \
211 1.5 matt ashldi3.c \
212 1.5 matt ashrdi3.c \
213 1.5 matt divdi3.c \
214 1.5 matt divmoddi4.c \
215 1.5 matt lshrdi3.c \
216 1.5 matt moddi3.c \
217 1.5 matt muldi3.c \
218 1.5 matt negdi2.c \
219 1.5 matt ucmpdi2.c \
220 1.5 matt udivdi3.c \
221 1.5 matt udivmoddi4.c \
222 1.5 matt umoddi3.c
223 1.5 matt .endif
224 1.5 matt
225 1.5 matt GENERIC_SRCS+= \
226 1.4 joerg GCDAProfiling.c \
227 1.18 joerg InstrProfiling.c \
228 1.18 joerg InstrProfilingBuffer.c \
229 1.18 joerg InstrProfilingFile.c \
230 1.28 joerg InstrProfilingPlatformLinux.c \
231 1.28 joerg InstrProfilingUtil.c \
232 1.28 joerg InstrProfilingValue.c \
233 1.28 joerg InstrProfilingWriter.c
234 1.28 joerg
235 1.29 adam .if ${MKPROFILE} != "no"
236 1.28 joerg POBJS+= InstrProfilingRuntime.po
237 1.29 adam .endif
238 1.4 joerg
239 1.25 joerg .if ${LIBC_MACHINE_ARCH} == "powerpc" || ${LIBC_MACHINE_ARCH} == "powerpc64"
240 1.1 joerg GENERIC_SRCS+= \
241 1.1 joerg fixtfdi.c \
242 1.1 joerg fixunstfdi.c \
243 1.1 joerg floatditf.c \
244 1.1 joerg floatunditf.c \
245 1.1 joerg gcc_qadd.c \
246 1.1 joerg gcc_qdiv.c \
247 1.1 joerg gcc_qmul.c \
248 1.1 joerg gcc_qsub.c
249 1.1 joerg .endif
250 1.1 joerg
251 1.24 matt .if ${LIBC_MACHINE_CPU} == "aarch64"
252 1.22 matt GENERIC_SRCS+= \
253 1.41 nia clear_cache.c \
254 1.41 nia addtf3.c \
255 1.41 nia divtf3.c \
256 1.41 nia multf3.c \
257 1.41 nia subtf3.c \
258 1.41 nia trunctfsf2.c \
259 1.41 nia trunctfdf2.c \
260 1.41 nia fixdfti.c \
261 1.41 nia fixtfsi.c \
262 1.41 nia fixtfdi.c \
263 1.41 nia extendsftf2.c \
264 1.41 nia extenddftf2.c \
265 1.41 nia floatunsitf.c \
266 1.41 nia floatunditf.c \
267 1.41 nia floatsitf.c \
268 1.41 nia floatditf.c
269 1.22 matt .endif
270 1.22 matt
271 1.34 joerg .if ${LIBC_MACHINE_ARCH} == "powerpc" || ${LIBC_MACHINE_ARCH} == "powerpc64"
272 1.34 joerg GENERIC_SRCS+= \
273 1.34 joerg clear_cache.c
274 1.34 joerg .endif
275 1.34 joerg
276 1.33 joerg .if ${LIBC_MACHINE_ARCH} == "sparc" || ${LIBC_MACHINE_ARCH} == "sparc64"
277 1.32 joerg GENERIC_SRCS+= \
278 1.32 joerg clear_cache.c
279 1.32 joerg .endif
280 1.32 joerg
281 1.24 matt .if ${LIBC_MACHINE_CPU} == "arm"
282 1.2 joerg .if !empty(LIBC_MACHINE_ARCH:Mearm*)
283 1.2 joerg GENERIC_SRCS+= \
284 1.2 joerg aeabi_idivmod.S \
285 1.2 joerg aeabi_ldivmod.S \
286 1.2 joerg aeabi_uidivmod.S \
287 1.2 joerg aeabi_uldivmod.S
288 1.2 joerg .endif
289 1.13 joerg GENERIC_SRCS+= \
290 1.13 joerg clear_cache.c
291 1.9 joerg # Not yet, overlaps with softfloat
292 1.9 joerg # aeabi_dcmp.S \
293 1.9 joerg # aeabi_fcmp.S
294 1.3 joerg # Not yet, requires ARMv6
295 1.3 joerg #GENERIC_SRCS+= \
296 1.3 joerg # bswapdi2.S \
297 1.3 joerg # bswapsi2.S
298 1.2 joerg .endif
299 1.2 joerg
300 1.1 joerg .for src in ${GENERIC_SRCS}
301 1.1 joerg . if exists(${COMPILER_RT_CPU_DIR}/${src:R}.S) || \
302 1.1 joerg exists(${COMPILER_RT_ARCH_DIR}/${src:R}.S)
303 1.1 joerg SRCS+= ${src:R}.S
304 1.1 joerg . else
305 1.1 joerg SRCS+= ${src}
306 1.19 joerg . if ${src:E} != "cc"
307 1.2 joerg COPTS.${src}+= -Wno-missing-prototypes \
308 1.2 joerg -Wno-old-style-definition \
309 1.2 joerg -Wno-strict-prototypes \
310 1.20 joerg -Wno-uninitialized \
311 1.20 joerg -Wno-cast-qual
312 1.19 joerg . endif
313 1.1 joerg . endif
314 1.30 martin .if ${MKSOFTFLOAT:Uno} != "no"
315 1.30 martin COPTS.${src}+= -D__SOFT_FP__
316 1.30 martin .endif
317 1.1 joerg .endfor
318 1.40 rin
319 1.43 christos LINTFLAGS.GCDAProfiling.c += -X 123,132,351 # Ok, this is just sloppy
320 1.43 christos LINTFLAGS.InstrProfiling.c += -X 351
321 1.43 christos LINTFLAGS.InstrProfilingFile.c += -X 351
322 1.43 christos LINTFLAGS.InstrProfilingPlatformLinux.c += -X 190,351
323 1.43 christos LINTFLAGS.InstrProfilingValue.c += -X 132,231,275,351
324 1.43 christos LINTFLAGS.InstrProfilingWriter.c += -X 132
325 1.43 christos LINTFLAGS.absvdi2.c += -X 117,351
326 1.43 christos LINTFLAGS.absvsi2.c += -X 117,351
327 1.43 christos LINTFLAGS.absvsi3.c += -X 351
328 1.43 christos LINTFLAGS.absvti2.c += -X 117,351
329 1.43 christos LINTFLAGS.addvdi3.c += -X 351
330 1.43 christos LINTFLAGS.addvsi3.c += -X 351
331 1.43 christos LINTFLAGS.addvti3.c += -X 351
332 1.43 christos LINTFLAGS.ashlti3.c += -X 351
333 1.43 christos LINTFLAGS.ashrti3.c += -X 117,351
334 1.43 christos LINTFLAGS.clzdi2.c += -X 351
335 1.43 christos LINTFLAGS.clzsi2.c += -X 351
336 1.43 christos LINTFLAGS.cmpti2.c += -X 351
337 1.43 christos LINTFLAGS.crtzi.c += -X 351
338 1.43 christos LINTFLAGS.crzdi2.c += -X 351
339 1.43 christos LINTFLAGS.ctzdi2.c += -X 351
340 1.43 christos LINTFLAGS.ctzsi2.c += -X 351
341 1.43 christos LINTFLAGS.ctzti2.c += -X 351
342 1.43 christos LINTFLAGS.divmodsi4.c += -X 351
343 1.43 christos LINTFLAGS.divsi3.c += -X 117
344 1.43 christos LINTFLAGS.divti3.c += -X 117,351
345 1.45 christos LINTFLAGS.divtc3.c += -X 351 # ppc
346 1.43 christos LINTFLAGS.dlfcn_elf.c += -X 351
347 1.43 christos LINTFLAGS.ffsdi2.c += -X 132,351
348 1.43 christos LINTFLAGS.ffsti2.c += -X 132,351
349 1.43 christos LINTFLAGS.fixdfdi.c += -X 132,309,351
350 1.43 christos LINTFLAGS.fixdfsi.c += -X 132
351 1.43 christos LINTFLAGS.fixsfdi.c += -X 132,351
352 1.43 christos LINTFLAGS.fixunsdfdi.c += -X 132,309,351
353 1.43 christos LINTFLAGS.fixunsdfsi.c += -X 132,309,351
354 1.43 christos LINTFLAGS.fixunsdfti.c += -X 132,309,351
355 1.43 christos LINTFLAGS.fixunssfdi.c += -X 132,309,351
356 1.43 christos LINTFLAGS.fixunssfsi.c += -X 132,351
357 1.43 christos LINTFLAGS.fixunssfti.c += -X 132,351
358 1.43 christos LINTFLAGS.fixunsxfdi.c += -X 351
359 1.43 christos LINTFLAGS.fixunsxfsi.c += -X 132,309,351
360 1.43 christos LINTFLAGS.fixunsxfti.c += -X 132,351
361 1.43 christos LINTFLAGS.fixxfdi.c += -X 351
362 1.43 christos LINTFLAGS.fixxfti.c += -X 117,132,351
363 1.43 christos LINTFLAGS.floatdidf.c += -X 351
364 1.44 christos LINTFLAGS.floatdidf.c += -X 117 # alpha
365 1.43 christos LINTFLAGS.floatdisf.c += -X 351
366 1.44 christos LINTFLAGS.floatdisf.c += -X 117 # alpha
367 1.43 christos LINTFLAGS.floatdixf.c += -X 351
368 1.44 christos LINTFLAGS.floatdixf.c += -X 117 # alpha
369 1.43 christos LINTFLAGS.floattidf.c += -X 117,122,141,267,351
370 1.43 christos LINTFLAGS.floattisf.c += -X 117,351
371 1.43 christos LINTFLAGS.floattisf.c += -X 117,351
372 1.43 christos LINTFLAGS.floattixf.c += -X 117,122,351
373 1.44 christos LINTFLAGS.floattixf.c += -X 141 # alpha
374 1.43 christos LINTFLAGS.floatuntidf.c += -X 122,141,267,351
375 1.43 christos LINTFLAGS.floatuntisf.c += -X 351
376 1.43 christos LINTFLAGS.floatuntixf.c += -X 122,351
377 1.44 christos LINTFLAGS.floatuntixf.c += -X 141 # alpha
378 1.43 christos LINTFLAGS.int_util.c += -X 231
379 1.43 christos LINTFLAGS.lshrti3.c += -X 351
380 1.43 christos LINTFLAGS.modsi3.c += -X 117,351
381 1.43 christos LINTFLAGS.modti3.c += -X 117,351
382 1.43 christos LINTFLAGS.muldc3.c += -X 117,351
383 1.43 christos LINTFLAGS.mulodi4.c += -X 117,351
384 1.43 christos LINTFLAGS.mulosi4.c += -X 117,351
385 1.43 christos LINTFLAGS.muloti4.c += -X 117,351
386 1.43 christos LINTFLAGS.multi3.c += -X 351
387 1.43 christos LINTFLAGS.mulvdi3.c += -X 117,351
388 1.43 christos LINTFLAGS.mulvsi3.c += -X 117,351
389 1.43 christos LINTFLAGS.mulvti3.c += -X 117,351
390 1.43 christos LINTFLAGS.negdf2.c += -X 309,351
391 1.43 christos LINTFLAGS.negsf2.c += -X 132,351
392 1.43 christos LINTFLAGS.negti2.c += -X 351
393 1.43 christos LINTFLAGS.negvdi2.c += -X 351
394 1.43 christos LINTFLAGS.negvsi2.c += -X 351
395 1.43 christos LINTFLAGS.negvti2.c += -X 351
396 1.43 christos LINTFLAGS.parityti2.c += -X 351
397 1.43 christos LINTFLAGS.popcountdi2.c += -X 351
398 1.43 christos LINTFLAGS.popcountsi2.c += -X 351
399 1.43 christos LINTFLAGS.popcountti2.c += -X 122,132,351
400 1.43 christos LINTFLAGS.powidf2.c += -X 161,351
401 1.43 christos LINTFLAGS.powisf2.c += -X 161,351
402 1.43 christos LINTFLAGS.powixf2.c += -X 161,351
403 1.43 christos LINTFLAGS.subvdi3.c += -X 351
404 1.43 christos LINTFLAGS.subvsi3.c += -X 351
405 1.43 christos LINTFLAGS.subvti3.c += -X 351
406 1.43 christos LINTFLAGS.ucmpti2.c += -X 351
407 1.43 christos LINTFLAGS.ucmpti2.c += -X 351
408 1.43 christos LINTFLAGS.udivmodti4.c += -X 117,132
409 1.43 christos LINTFLAGS.udivsi3.c += -X 117
410 1.43 christos LINTFLAGS.udivti3.c += -X 351
411 1.43 christos LINTFLAGS.umodsi3.c += -X 351
412 1.43 christos LINTFLAGS.umodti3.c += -X 351
413 1.43 christos
414 1.40 rin .include "${COMPILER_RT_DIR}/abi.mk"
415