Makefile.inc revision 1.55 1 # $NetBSD: Makefile.inc,v 1.55 2025/09/10 23:07:39 nat 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 powidf2.c \
122 powisf2.c \
123 powitf2.c \
124 powixf2.c
125
126 . if ${MKLIBCSOFTFLOAT} != "no" || ${MKSOFTFLOAT} == "no"
127 GENERIC_SRCS+= \
128 negdf2.c \
129 negsf2.c
130 . endif
131 .endif # IEEE 754 only machines
132
133 .if ${LIBC_MACHINE_ARCH} != "m68k"
134 GENERIC_SRCS+= \
135 fixxfdi.c
136 .endif
137
138
139 .if ${LIBC_MACHINE_CPU} == "aarch64"
140 GENERIC_SRCS+= \
141 comparetf2.c
142 LINTFLAGS.comparetf2.c += -X 132
143 .endif
144
145 GENERIC_SRCS+= \
146 fixunsdfti.c \
147 fixunssfti.c \
148 fixunsxfti.c \
149 fixxfti.c \
150 floattidf.c \
151 floattisf.c \
152 floattixf.c \
153 floatuntidf.c \
154 floatuntisf.c \
155 floatuntixf.c
156
157 # These have h/w instructions which are always used.
158 .if ${LIBC_MACHINE_ARCH} != "alpha" && ${LIBC_MACHINE_CPU} != "aarch64" \
159 && ${LIBC_MACHINE_CPU} != "powerpc" && ${LIBC_MACHINE_CPU} != "or1k"
160 GENERIC_SRCS+= \
161 clzsi2.c
162 .endif
163
164 # These have h/w instructions which are always used.
165 .if ${LIBC_MACHINE_ARCH} != "alpha" && ${LIBC_MACHINE_ARCH} != "vax" \
166 && ${LIBC_MACHINE_CPU} != "aarch64" && ${LIBC_MACHINE_CPU} != "powerpc" \
167 && ${LIBC_MACHINE_CPU} != "or1k"
168 GENERIC_SRCS+= \
169 ctzsi2.c
170 .endif
171
172 # These have h/w instructions which are always used.
173 .if ${LIBC_MACHINE_ARCH} != "alpha" && ${LIBC_MACHINE_CPU} != "powerpc" \
174 && ${LIBC_MACHINE_CPU} != "aarch64" && ${LIBC_MACHINE_ARCH} != "vax"
175 GENERIC_SRCS+= \
176 divmodsi4.c \
177 divsi3.c \
178 modsi3.c \
179 udivmodsi4.c \
180 umodsi3.c
181
182 . if ${LIBC_MACHINE_CPU} != "sh3"
183 # On sh3 __udivsi3 is gcc "millicode" with special calling convention
184 # (less registers clobbered than usual). Each DSO that needs it gets
185 # its own hidden copy from libgcc.a.
186 GENERIC_SRCS+= \
187 udivsi3.c
188 . endif
189 .endif
190
191
192 GENERIC_SRCS+= \
193 absvdi2.c \
194 addvdi3.c \
195 mulodi4.c \
196 mulvdi3.c \
197 negvdi2.c \
198 paritydi2.c \
199 popcountdi2.c \
200 subvdi3.c
201
202 # These have h/w instructions which are always used.
203 .if ${LIBC_MACHINE_ARCH} != "alpha" && ${LIBC_MACHINE_CPU} != "powerpc64" \
204 && ${LIBC_MACHINE_CPU} != "aarch64" && ${LIBC_MACHINE_CPU} != "or1k"
205 GENERIC_SRCS+= \
206 clzdi2.c \
207 ctzdi2.c \
208 ffsdi2.c
209 .endif
210
211 # Don't need these on 64-bit machines.
212 .if empty(LIBC_MACHINE_ARCH:M*64*) && ${LIBC_MACHINE_ARCH} != "alpha"
213 GENERIC_SRCS+= \
214 cmpdi2.c \
215 ashldi3.c \
216 ashrdi3.c \
217 divdi3.c \
218 divmoddi4.c \
219 lshrdi3.c \
220 moddi3.c \
221 muldi3.c \
222 negdi2.c \
223 ucmpdi2.c \
224 udivdi3.c \
225 udivmoddi4.c \
226 umoddi3.c
227 .endif
228
229 GENERIC_SRCS+= \
230 GCDAProfiling.c \
231 InstrProfiling.c \
232 InstrProfilingBuffer.c \
233 InstrProfilingFile.c \
234 InstrProfilingPlatformLinux.c \
235 InstrProfilingUtil.c \
236 InstrProfilingValue.c \
237 InstrProfilingWriter.c
238
239 .if ${MKPROFILE} != "no"
240 POBJS+= InstrProfilingRuntime.po
241 .endif
242
243 .if ${LIBC_MACHINE_ARCH} == "powerpc" || ${LIBC_MACHINE_ARCH} == "powerpc64"
244 GENERIC_SRCS+= \
245 fixtfdi.c \
246 fixunstfdi.c \
247 floatditf.c \
248 floatunditf.c \
249 gcc_qadd.c \
250 gcc_qdiv.c \
251 gcc_qmul.c \
252 gcc_qsub.c
253 .endif
254
255 .if ${LIBC_MACHINE_CPU} == "aarch64"
256 GENERIC_SRCS+= \
257 clear_cache.c \
258 addtf3.c \
259 divtf3.c \
260 multf3.c \
261 subtf3.c \
262 trunctfsf2.c \
263 trunctfdf2.c \
264 fixdfti.c \
265 fixtfsi.c \
266 fixtfdi.c \
267 extendsftf2.c \
268 extenddftf2.c \
269 floatunsitf.c \
270 floatunditf.c \
271 floatsitf.c \
272 floatditf.c
273 LINTFLAGS.addtf3.c += -X 132
274 LINTFLAGS.divtf3.c += -X 132
275 LINTFLAGS.extenddftf2.c += -X 117,132
276 LINTFLAGS.extendsftf2.c += -X 117,132
277 LINTFLAGS.fixdfti.c += -X 132,309
278 LINTFLAGS.fixtfdi.c += -X 132
279 LINTFLAGS.fixtfsi.c += -X 132
280 LINTFLAGS.floatditf.c += -X 132
281 LINTFLAGS.floatsitf.c += -X 132
282 LINTFLAGS.floatunsitf.c += -X 132
283 LINTFLAGS.floatunditf.c += -X 132
284 LINTFLAGS.multf3.c += -X 132
285 LINTFLAGS.subtf3.c += -X 132
286 LINTFLAGS.trunctfdf2.c += -X 117,132
287 LINTFLAGS.trunctfsf2.c += -X 117,132
288 .endif
289
290 .if ${LIBC_MACHINE_ARCH} == "powerpc" || ${LIBC_MACHINE_ARCH} == "powerpc64"
291 GENERIC_SRCS+= \
292 clear_cache.c
293 .endif
294
295 .if ${LIBC_MACHINE_ARCH} == "sparc" || ${LIBC_MACHINE_ARCH} == "sparc64"
296 GENERIC_SRCS+= \
297 clear_cache.c
298 .endif
299
300 .if ${LIBC_MACHINE_CPU} == "arm"
301 .if !empty(LIBC_MACHINE_ARCH:Mearm*)
302 GENERIC_SRCS+= \
303 aeabi_idivmod.S \
304 aeabi_ldivmod.S \
305 aeabi_uidivmod.S \
306 aeabi_uldivmod.S
307 .endif
308 GENERIC_SRCS+= \
309 clear_cache.c
310 # Not yet, overlaps with softfloat
311 # aeabi_dcmp.S \
312 # aeabi_fcmp.S
313 # Not yet, requires ARMv6
314 #GENERIC_SRCS+= \
315 # bswapdi2.S \
316 # bswapsi2.S
317 .endif
318
319 .for src in ${GENERIC_SRCS}
320 . if exists(${COMPILER_RT_CPU_DIR}/${src:R}.S) || \
321 exists(${COMPILER_RT_ARCH_DIR}/${src:R}.S)
322 SRCS+= ${src:R}.S
323 . else
324 SRCS+= ${src}
325 . if ${src:E} != "cc"
326 COPTS.${src}+= -Wno-missing-prototypes \
327 -Wno-old-style-definition \
328 -Wno-strict-prototypes \
329 -Wno-uninitialized \
330 -Wno-cast-qual
331 . endif
332 . endif
333 .if ${MKSOFTFLOAT:Uno} != "no"
334 COPTS.${src}+= -D__SOFT_FP__
335 .endif
336 .endfor
337
338 LINTFLAGS.GCDAProfiling.c += -X 123,132,351 # Ok, this is just sloppy
339 LINTFLAGS.GCDAProfiling.c += -X 286,287 # missing prototypes
340 LINTFLAGS.GCDAProfiling.c += -X 298 # vax
341 LINTFLAGS.InstrProfiling.c += -X 298 # vax
342 LINTFLAGS.InstrProfiling.c += -X 351
343 LINTFLAGS.InstrProfilingFile.c += -X 351
344 LINTFLAGS.InstrProfilingPlatformLinux.c += -X 190,351
345 LINTFLAGS.InstrProfilingValue.c += -X 132,231,275,351
346 LINTFLAGS.InstrProfilingValue.c += -X 298 # vax
347 LINTFLAGS.InstrProfilingWriter.c += -X 132
348 LINTFLAGS.absvdi2.c += -X 117,351
349 LINTFLAGS.absvsi2.c += -X 117,351
350 LINTFLAGS.absvsi3.c += -X 351
351 LINTFLAGS.absvti2.c += -X 117,351
352 LINTFLAGS.addvdi3.c += -X 351
353 LINTFLAGS.addvsi3.c += -X 351
354 LINTFLAGS.addvti3.c += -X 351
355 LINTFLAGS.ashlti3.c += -X 351
356 LINTFLAGS.ashrdi3.c += -X 117 # vax
357 LINTFLAGS.ashrti3.c += -X 117,351
358 LINTFLAGS.clzdi2.c += -X 351
359 LINTFLAGS.clzsi2.c += -X 351
360 LINTFLAGS.cmpti2.c += -X 351
361 LINTFLAGS.crtzi.c += -X 351
362 LINTFLAGS.crzdi2.c += -X 351
363 LINTFLAGS.ctzdi2.c += -X 351
364 LINTFLAGS.ctzsi2.c += -X 351
365 LINTFLAGS.ctzti2.c += -X 351
366 LINTFLAGS.divdi3.c += -X 117 # vax
367 LINTFLAGS.divmodsi4.c += -X 351
368 LINTFLAGS.divsi3.c += -X 117
369 LINTFLAGS.divtc3.c += -X 351 # ppc
370 LINTFLAGS.divti3.c += -X 117,351
371 LINTFLAGS.dlfcn_elf.c += -X 351
372 LINTFLAGS.ffsdi2.c += -X 132,351
373 LINTFLAGS.ffsti2.c += -X 132,351
374 LINTFLAGS.fixdfdi.c += -X 132,309,351
375 LINTFLAGS.fixdfsi.c += -X 132
376 LINTFLAGS.fixsfdi.c += -X 132,351
377 LINTFLAGS.fixunsdfdi.c += -X 132,309,351
378 LINTFLAGS.fixunsdfsi.c += -X 132,309,351
379 LINTFLAGS.fixunsdfti.c += -X 132,309,351
380 LINTFLAGS.fixunssfdi.c += -X 132,309,351
381 LINTFLAGS.fixunssfsi.c += -X 132,351
382 LINTFLAGS.fixunssfti.c += -X 132,351
383 LINTFLAGS.fixunsxfdi.c += -X 351
384 LINTFLAGS.fixunsxfsi.c += -X 132,309,351
385 LINTFLAGS.fixunsxfti.c += -X 132,351
386 LINTFLAGS.fixxfdi.c += -X 351
387 LINTFLAGS.fixxfti.c += -X 117,132,351
388 LINTFLAGS.floatdidf.c += -X 117 # alpha
389 LINTFLAGS.floatdidf.c += -X 351
390 LINTFLAGS.floatdisf.c += -X 117 # alpha
391 LINTFLAGS.floatdisf.c += -X 351
392 LINTFLAGS.floatdixf.c += -X 117 # alpha
393 LINTFLAGS.floatdixf.c += -X 351
394 LINTFLAGS.floattidf.c += -X 117,122,141,267,351
395 LINTFLAGS.floattisf.c += -X 117,351
396 LINTFLAGS.floattisf.c += -X 117,351
397 LINTFLAGS.floattixf.c += -X 117,122,351
398 LINTFLAGS.floattixf.c += -X 141 # alpha
399 LINTFLAGS.floatuntidf.c += -X 122,141,267,351
400 LINTFLAGS.floatuntisf.c += -X 351
401 LINTFLAGS.floatuntixf.c += -X 122,351
402 LINTFLAGS.floatuntixf.c += -X 141 # alpha
403 LINTFLAGS.gcc_personality_v0.c += -X 132,193,231
404 LINTFLAGS.int_util.c += -X 231
405 LINTFLAGS.lshrti3.c += -X 351
406 LINTFLAGS.moddi3.c += -X 117 # vax
407 LINTFLAGS.modsi3.c += -X 117,351
408 LINTFLAGS.modti3.c += -X 117,351
409 LINTFLAGS.muldc3.c += -X 117,351
410 LINTFLAGS.mulodi4.c += -X 117,351
411 LINTFLAGS.mulosi4.c += -X 117,351
412 LINTFLAGS.muloti4.c += -X 117,351
413 LINTFLAGS.multi3.c += -X 351
414 LINTFLAGS.mulvdi3.c += -X 117,351
415 LINTFLAGS.mulvsi3.c += -X 117,351
416 LINTFLAGS.mulvti3.c += -X 117,351
417 LINTFLAGS.negdf2.c += -X 309,351
418 LINTFLAGS.negsf2.c += -X 132,351
419 LINTFLAGS.negti2.c += -X 351
420 LINTFLAGS.negvdi2.c += -X 141,351
421 LINTFLAGS.negvsi2.c += -X 141,351
422 LINTFLAGS.negvti2.c += -X 141,351
423 LINTFLAGS.parityti2.c += -X 351
424 LINTFLAGS.popcountdi2.c += -X 351
425 LINTFLAGS.popcountsi2.c += -X 351
426 LINTFLAGS.popcountti2.c += -X 122,132,351
427 LINTFLAGS.powidf2.c += -X 351
428 LINTFLAGS.powisf2.c += -X 351
429 LINTFLAGS.powixf2.c += -X 351
430 LINTFLAGS.subvdi3.c += -X 351
431 LINTFLAGS.subvsi3.c += -X 351
432 LINTFLAGS.subvti3.c += -X 351
433 LINTFLAGS.ucmpti2.c += -X 351
434 LINTFLAGS.ucmpti2.c += -X 351
435 LINTFLAGS.udivmoddi4.c += -X 117 # vax
436 LINTFLAGS.udivmodti4.c += -X 117,132
437 LINTFLAGS.udivsi3.c += -X 117
438 LINTFLAGS.udivti3.c += -X 351
439 LINTFLAGS.umodsi3.c += -X 351
440 LINTFLAGS.umodti3.c += -X 351
441 LINTFLAGS.gcc_personality_v0.c += ${${ACTIVE_CC} == "clang":? -X 298:}
442
443 .include "${COMPILER_RT_DIR}/abi.mk"
444