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