Rev 6521 | Rev 6533 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
6515 | serge | 1 | |
2 | export AR = kos32-ar |
||
3 | export LD = kos32-ld |
||
4 | export STRIP = kos32-strip |
||
5 | |||
6 | |||
7 | |||
8 | |||
6518 | serge | 9 | enable_shared = no |
10 | double_type_size = 64 |
||
6517 | serge | 11 | long_double_type_size = 96 |
12 | decimal_float = yes |
||
13 | enable_vtable_verify = no |
||
6518 | serge | 14 | enable_decimal_float = bid |
6517 | serge | 15 | fixed_point = no |
16 | |||
17 | |||
6521 | serge | 18 | # The rules for compiling them should be in the t-* file for the machine. |
19 | EXTRA_PARTS = crtbegin.o crtend.o crtfastmath.o |
||
20 | |||
6517 | serge | 21 | |
6515 | serge | 22 | CFLAGS_OPT+= -fbuilding-libgcc -fno-stack-protector |
23 | |||
24 | |||
6518 | serge | 25 | CFLAGS+= -U_Win32 -U_WIN32 -U__MINGW32__ -UWIN32 -U_MSC_VER |
6515 | serge | 26 | CFLAGS+= -W -Wall -Wno-narrowing -Wwrite-strings -Wcast-qual -Wstrict-prototypes |
27 | CFLAGS+= -Wold-style-definition $(CFLAGS_OPT) |
||
6518 | serge | 28 | |
6515 | serge | 29 | |
6518 | serge | 30 | |
6515 | serge | 31 | |
6527 | serge | 32 | |
6518 | serge | 33 | |
6517 | serge | 34 | |
35 | |||
6518 | serge | 36 | LIB2FUNCS_ST = _eprintf __gcc_bcmp |
37 | |||
38 | |||
39 | LIB2FUNCS_EXCLUDE = |
||
40 | |||
41 | |||
42 | # unwinder info. |
||
43 | LIB2_DIVMOD_FUNCS = _divdi3 _moddi3 _udivdi3 _umoddi3 _udiv_w_sdiv _udivmoddi4 |
||
44 | |||
45 | |||
46 | |||
47 | |||
6515 | serge | 48 | |
49 | |||
6517 | serge | 50 | _fpcmp_parts_sf _compare_sf _eq_sf _ne_sf _gt_sf _ge_sf \ |
51 | _lt_sf _le_sf _unord_sf _si_to_sf _sf_to_si _negate_sf _make_sf \ |
||
52 | _sf_to_df _sf_to_tf _thenan_sf _sf_to_usi _usi_to_sf |
||
53 | |||
54 | |||
55 | _fpcmp_parts_df _compare_df _eq_df _ne_df _gt_df _ge_df \ |
||
56 | _lt_df _le_df _unord_df _si_to_df _df_to_si _negate_df _make_df \ |
||
57 | _df_to_sf _df_to_tf _thenan_df _df_to_usi _usi_to_df |
||
58 | |||
59 | |||
60 | _fpcmp_parts_tf _compare_tf _eq_tf _ne_tf _gt_tf _ge_tf \ |
||
61 | _lt_tf _le_tf _unord_tf _si_to_tf _tf_to_si _negate_tf _make_tf \ |
||
62 | _tf_to_df _tf_to_sf _thenan_tf _tf_to_usi _usi_to_tf |
||
63 | |||
64 | |||
6518 | serge | 65 | LIB2ADDEH = unwind-dw2.c unwind-dw2-fde.c unwind-sjlj.c unwind-c.c |
6521 | serge | 66 | LIB2ADDEHSTATIC = $(LIB2ADDEH) |
6518 | serge | 67 | |
6517 | serge | 68 | |
6527 | serge | 69 | config/i386/kos32-app.c \ |
70 | config/i386/libc-loader.c |
||
71 | |||
72 | |||
6518 | serge | 73 | CUSTOM_CRTSTUFF = yes |
74 | |||
75 | |||
76 | |||
6519 | serge | 77 | |
6518 | serge | 78 | |
6519 | serge | 79 | |
6518 | serge | 80 | |
81 | |||
6519 | serge | 82 | |
6518 | serge | 83 | |
6519 | serge | 84 | |
6518 | serge | 85 | |
86 | |||
87 | |||
88 | |||
89 | |||
90 | |||
6519 | serge | 91 | |
6518 | serge | 92 | |
6519 | serge | 93 | |
6518 | serge | 94 | |
95 | |||
96 | |||
97 | |||
98 | |||
6519 | serge | 99 | |
6518 | serge | 100 | |
101 | |||
102 | |||
6527 | serge | 103 | LIB1ASMFUNCS = _chkstk _chkstk_ms _start |
104 | |||
6518 | serge | 105 | |
106 | |||
107 | |||
108 | LIB2ADD += config/i386/sfp-exceptions.c |
||
6527 | serge | 109 | |
6518 | serge | 110 | |
6527 | serge | 111 | |
6518 | serge | 112 | softfp_int_modes := si di ti |
113 | |||
114 | |||
115 | |||
116 | |||
117 | |||
118 | |||
119 | |||
120 | |||
121 | |||
122 | |||
123 | |||
124 | |||
125 | |||
126 | |||
127 | |||
128 | |||
129 | |||
130 | # instead of LIB2ADD because that's the way to be sure on some targets |
||
131 | # (e.g. *-*-darwin*) only one copy of it is linked. |
||
132 | LIB2ADDEH += emutls.c |
||
133 | LIB2ADDEHSTATIC += emutls.c |
||
134 | |||
135 | |||
136 | |||
137 | neg$(m)2 sub$(m)3 unord$(m)2 |
||
138 | softfp_floatint_funcs = fix$(m)$(i) fixuns$(m)$(i) \ |
||
139 | float$(i)$(m) floatun$(i)$(m) |
||
140 | |||
141 | |||
142 | $(foreach m,$(softfp_float_modes), \ |
||
143 | $(softfp_float_funcs) \ |
||
144 | $(foreach i,$(softfp_int_modes), \ |
||
145 | $(softfp_floatint_funcs))) \ |
||
146 | $(foreach e,$(softfp_extensions),extend$(e)2) \ |
||
147 | $(foreach t,$(softfp_truncations),trunc$(t)2) \ |
||
148 | $(softfp_extras) |
||
149 | |||
150 | |||
151 | # This list is taken from mklibgcc.in and doesn't presently allow for |
||
152 | # 64-bit targets where si should become di and di should become ti. |
||
153 | softfp_func_list := $(filter-out floatdidf floatdisf fixunsdfsi fixunssfsi \ |
||
154 | fixunsdfdi fixdfdi fixunssfdi fixsfdi fixxfdi fixunsxfdi \ |
||
155 | floatdixf fixunsxfsi fixtfdi fixunstfdi floatditf \ |
||
156 | floatundidf floatundisf floatundixf floatunditf,$(softfp_func_list)) |
||
157 | endif |
||
158 | |||
159 | |||
160 | |||
161 | |||
162 | # for the functions in the soft-fp files have not been brought across |
||
163 | # from glibc. |
||
164 | |||
165 | |||
166 | |||
167 | |||
168 | $(addsuffix _s$(objext), $(soft-fp-objects-base)) |
||
169 | |||
170 | |||
171 | |||
172 | |||
173 | |||
174 | |||
175 | # Functions in libgcc2.c are excluded for each soft-float mode (a |
||
176 | # target may have both soft-float and hard-float modes), for the fixed |
||
177 | # list of integer modes (si and di) for which libgcc2.c defines any |
||
178 | # such functions. Depending on the target, the si and di symbols may |
||
179 | # in fact define di and ti functions. |
||
180 | |||
181 | |||
182 | $(addprefix _,$(foreach m,$(softfp_float_modes), \ |
||
183 | $(foreach i,si di, \ |
||
184 | $(softfp_floatint_funcs)))) |
||
185 | endif |
||
186 | |||
187 | |||
188 | |||
189 | |||
190 | |||
6515 | serge | 191 | _clear_cache _trampoline __main _absvsi2 _absvdi2 _addvsi3 \ |
192 | _addvdi3 _subvsi3 _subvdi3 _mulvsi3 _mulvdi3 _negvsi2 _negvdi2 \ |
||
193 | _ctors _ffssi2 _ffsdi2 _clz _clzsi2 _clzdi2 _ctzsi2 _ctzdi2 \ |
||
194 | _popcount_tab _popcountsi2 _popcountdi2 _paritysi2 _paritydi2 \ |
||
195 | _powisf2 _powidf2 _powixf2 _powitf2 _mulsc3 _muldc3 _mulxc3 \ |
||
196 | _multc3 _divsc3 _divdc3 _divxc3 _divtc3 _bswapsi2 _bswapdi2 \ |
||
197 | _clrsbsi2 _clrsbdi2 |
||
6517 | serge | 198 | |
6515 | serge | 199 | |
6517 | serge | 200 | |
6515 | serge | 201 | |
202 | $(patsubst %,_fixuns%XX,sf df xf tf) \ |
||
203 | $(patsubst %,_floatXX%,sf df xf tf) \ |
||
204 | $(patsubst %,_floatunXX%,sf df xf tf) |
||
205 | |||
206 | |||
6518 | serge | 207 | lib2funcs += $(subst XX,si,$(swfloatfuncs)) |
208 | lib2funcs += $(subst XX,di,$(dwfloatfuncs)) |
||
209 | endif |
||
210 | |||
6515 | serge | 211 | |
6518 | serge | 212 | # unwinder info. |
213 | LIB2_DIVMOD_FUNCS = _divdi3 _moddi3 _udivdi3 _umoddi3 _udiv_w_sdiv _udivmoddi4 |
||
214 | |||
215 | |||
216 | # defined as optimized assembly code in LIB1ASMFUNCS or as C code |
||
217 | # in LIB2FUNCS_EXCLUDE. |
||
218 | lib2funcs := $(filter-out $(LIB2FUNCS_EXCLUDE) $(LIB1ASMFUNCS),$(lib2funcs)) |
||
219 | LIB2_DIVMOD_FUNCS := $(filter-out $(LIB2FUNCS_EXCLUDE) $(LIB1ASMFUNCS), \ |
||
220 | $(LIB2_DIVMOD_FUNCS)) |
||
221 | |||
222 | |||
6519 | serge | 223 | |
6518 | serge | 224 | |
6519 | serge | 225 | $(lib1asmfuncs-o): %$(objext): config/$(LIB1ASMSRC) |
226 | $(gcc_compile) -DL$* -xassembler-with-cpp -c $< -o $@ |
||
227 | libgcc-objects += $(lib1asmfuncs-o) |
||
228 | |||
229 | |||
230 | |||
231 | |||
6518 | serge | 232 | lib2funcs-o = $(patsubst %,%$(objext),$(lib2funcs) $(LIB2FUNCS_ST)) |
6517 | serge | 233 | $(lib2funcs-o): %$(objext): libgcc2.c |
234 | $(gcc_compile) -DL$* -c $< -o $@ |
||
235 | libgcc-objects += $(lib2funcs-o) |
||
6518 | serge | 236 | |
6517 | serge | 237 | |
6518 | serge | 238 | # Build libgcc2.c for each conversion function, with a specific |
239 | # L |
||
240 | # functions are built with a wordsize of 4; the TImode functions are |
||
241 | # built with the same labels, but a wordsize of 8. |
||
242 | |||
6517 | serge | 243 | |
6518 | serge | 244 | difuncs := $(filter-out $(LIB2FUNCS_EXCLUDE),$(subst XX,di,$(dwfloatfuncs))) |
245 | tifuncs := $(filter-out $(LIB2FUNCS_EXCLUDE),$(subst XX,ti,$(dwfloatfuncs))) |
||
246 | |||
247 | |||
248 | iter-labels := $(sifuncs) $(difuncs) $(difuncs) |
||
249 | iter-sizes := $(patsubst %,4,$(sifuncs) $(difuncs)) $(patsubst %,8,$(tifuncs)) |
||
250 | |||
251 | |||
252 | |||
253 | |||
254 | endif |
||
255 | |||
256 | |||
257 | # Provide default flags for compiling divmod functions, if they haven't been |
||
258 | # set already by a target-specific Makefile fragment. |
||
259 | LIB2_DIVMOD_EXCEPTION_FLAGS := -fexceptions -fnon-call-exceptions |
||
260 | endif |
||
261 | |||
262 | |||
263 | lib2-divmod-o = $(patsubst %,%$(objext),$(LIB2_DIVMOD_FUNCS)) |
||
264 | $(lib2-divmod-o): %$(objext): libgcc2.c |
||
265 | $(gcc_compile) -DL$* -c $< $(LIB2_DIVMOD_EXCEPTION_FLAGS) -o $@ |
||
266 | libgcc-objects += $(lib2-divmod-o) |
||
267 | |||
268 | |||
6517 | serge | 269 | # _sf_to_tf and _df_to_tf require tp-bit.c being compiled in. |
270 | FPBIT_FUNCS := $(filter-out _sf_to_tf,$(FPBIT_FUNCS)) |
||
271 | DPBIT_FUNCS := $(filter-out _df_to_tf,$(DPBIT_FUNCS)) |
||
272 | endif |
||
273 | |||
274 | |||
275 | DPBIT_FUNCS := $(filter-out $(LIB2FUNCS_EXCLUDE),$(DPBIT_FUNCS)) |
||
276 | TPBIT_FUNCS := $(filter-out $(LIB2FUNCS_EXCLUDE),$(TPBIT_FUNCS)) |
||
277 | |||
278 | |||
279 | |||
280 | |||
281 | ifneq ($(FPBIT),) |
||
282 | fpbit-o = $(patsubst %,%$(objext),$(FPBIT_FUNCS)) |
||
283 | $(fpbit-o): %$(objext): $(fpbit-src) |
||
284 | $(gcc_compile) -DFINE_GRAINED_LIBRARIES -DL$* -DFLOAT $(FPBIT_CFLAGS) -c $< -o $@ |
||
285 | libgcc-objects += $(fpbit-o) |
||
286 | endif |
||
287 | |||
288 | |||
289 | ifneq ($(DPBIT),) |
||
290 | dpbit-o = $(patsubst %,%$(objext),$(DPBIT_FUNCS)) |
||
291 | $(dpbit-o): %$(objext): $(fpbit-src) |
||
292 | $(gcc_compile) -DFINE_GRAINED_LIBRARIES -DL$* $(DPBIT_CFLAGS) -c $< -o $@ |
||
293 | libgcc-objects += $(dpbit-o) |
||
294 | endif |
||
295 | |||
296 | |||
297 | ifneq ($(TPBIT),) |
||
298 | tpbit-o = $(patsubst %,%$(objext),$(TPBIT_FUNCS)) |
||
299 | $(tpbit-o): %$(objext): $(fpbit-src) |
||
300 | $(gcc_compile) -DFINE_GRAINED_LIBRARIES -DL$* -DTFLOAT $(TPBIT_CFLAGS) -c $< -o $@ |
||
301 | libgcc-objects += $(tpbit-o) |
||
302 | endif |
||
303 | |||
304 | |||
6518 | serge | 305 | ifeq ($(decimal_float),yes) |
306 | |||
307 | |||
308 | ifneq ($(DFP_ENABLE),) |
||
309 | D32PBIT = 1 |
||
310 | D64PBIT = 1 |
||
311 | D128PBIT = 1 |
||
312 | endif |
||
313 | |||
314 | |||
315 | ifneq ($(D32PBIT)$(D64PBIT)$(D128PBIT),) |
||
316 | ifeq ($(enable_decimal_float),bid) |
||
317 | dfp-filenames += bid_decimal_globals bid_decimal_data \ |
||
318 | bid_binarydecimal bid_convert_data \ |
||
319 | _isinfd32 _isinfd64 _isinfd128 bid64_noncomp \ |
||
320 | bid128_noncomp bid128_fma bid_round bid_from_int \ |
||
321 | bid64_add bid128_add bid64_div bid128_div \ |
||
322 | bid64_mul bid128_mul bid64_compare bid128_compare \ |
||
323 | bid128 bid32_to_bid64 bid32_to_bid128 bid64_to_bid128 \ |
||
324 | bid64_to_int32 bid64_to_int64 \ |
||
325 | bid64_to_uint32 bid64_to_uint64 \ |
||
326 | bid128_to_int32 bid128_to_int64 \ |
||
327 | bid128_to_uint32 bid128_to_uint64 |
||
328 | else |
||
329 | dfp-filenames += decContext decNumber decExcept decRound decLibrary decDouble decPacked decQuad decSingle |
||
330 | endif |
||
331 | endif |
||
332 | |||
333 | |||
334 | |||
335 | ifeq ($(enable_decimal_float),bid) |
||
336 | $(dfp-objects): %$(objext): config/libbid/%.c |
||
337 | else |
||
338 | $(dfp-objects): %$(objext): ../libdecnumber/%.c |
||
339 | endif |
||
340 | $(gcc_compile) -c $< |
||
341 | libgcc-objects += $(dfp-objects) |
||
342 | |||
343 | |||
344 | ifneq ($(enable_decimal_float),bid) |
||
345 | ifneq ($(D32PBIT),) |
||
346 | decbits-filenames += decimal32 |
||
347 | endif |
||
348 | |||
349 | |||
350 | decbits-filenames += decimal64 |
||
351 | endif |
||
352 | |||
353 | |||
354 | decbits-filenames += decimal128 |
||
355 | endif |
||
356 | endif |
||
357 | |||
358 | |||
359 | ifeq ($(enable_decimal_float),bid) |
||
360 | $(decbits-objects): %$(objext): config/libbid/%.c |
||
361 | else |
||
362 | $(decbits-objects): %$(objext): ../libdecnumber/$(enable_decimal_float)/%.c |
||
363 | endif |
||
364 | $(gcc_compile) -c $< |
||
365 | libgcc-objects += $(decbits-objects) |
||
366 | |||
367 | |||
368 | |||
369 | |||
6517 | serge | 370 | D32PBIT_FUNCS = _addsub_sd _div_sd _mul_sd _plus_sd _minus_sd \ |
371 | _eq_sd _ne_sd _lt_sd _gt_sd _le_sd _ge_sd \ |
||
372 | _sd_to_si _sd_to_di _sd_to_usi _sd_to_udi \ |
||
373 | _si_to_sd _di_to_sd _usi_to_sd _udi_to_sd \ |
||
374 | _sd_to_sf _sd_to_df _sd_to_xf _sd_to_tf \ |
||
375 | _sf_to_sd _df_to_sd _xf_to_sd _tf_to_sd \ |
||
376 | _sd_to_dd _sd_to_td _unord_sd _conv_sd |
||
377 | |||
378 | |||
379 | _eq_dd _ne_dd _lt_dd _gt_dd _le_dd _ge_dd \ |
||
380 | _dd_to_si _dd_to_di _dd_to_usi _dd_to_udi \ |
||
381 | _si_to_dd _di_to_dd _usi_to_dd _udi_to_dd \ |
||
382 | _dd_to_sf _dd_to_df _dd_to_xf _dd_to_tf \ |
||
383 | _sf_to_dd _df_to_dd _xf_to_dd _tf_to_dd \ |
||
384 | _dd_to_sd _dd_to_td _unord_dd _conv_dd |
||
385 | |||
386 | |||
387 | _eq_td _ne_td _lt_td _gt_td _le_td _ge_td \ |
||
388 | _td_to_si _td_to_di _td_to_usi _td_to_udi \ |
||
389 | _si_to_td _di_to_td _usi_to_td _udi_to_td \ |
||
390 | _td_to_sf _td_to_df _td_to_xf _td_to_tf \ |
||
391 | _sf_to_td _df_to_td _xf_to_td _tf_to_td \ |
||
392 | _td_to_sd _td_to_dd _unord_td _conv_td |
||
393 | |||
394 | |||
395 | ifneq ($(D32PBIT),) |
||
396 | D32PBIT_FUNCS:=$(filter-out _plus_sd _minus_sd _conv_sd, $(D32PBIT_FUNCS)) |
||
397 | endif |
||
398 | |||
399 | |||
400 | D64PBIT_FUNCS:=$(filter-out _plus_dd _minus_dd _conv_dd, $(D64PBIT_FUNCS)) |
||
401 | endif |
||
402 | |||
403 | |||
404 | D128PBIT_FUNCS:=$(filter-out _plus_td _minus_td _conv_td, $(D128PBIT_FUNCS)) |
||
405 | endif |
||
406 | endif |
||
407 | |||
408 | |||
409 | d32pbit-o = $(patsubst %,%$(objext),$(D32PBIT_FUNCS)) |
||
410 | ifeq ($(enable_decimal_float),bid) |
||
411 | $(d32pbit-o): %$(objext): config/libbid/%.c |
||
412 | else |
||
413 | $(d32pbit-o): %$(objext): $(srcdir)/dfp-bit.c |
||
414 | endif |
||
415 | $(gcc_compile) -DFINE_GRAINED_LIBRARIES -DL$* -DWIDTH=32 -c $< -o $@ |
||
416 | libgcc-objects += $(d32pbit-o) |
||
417 | endif |
||
418 | |||
419 | |||
420 | d64pbit-o = $(patsubst %,%$(objext),$(D64PBIT_FUNCS)) |
||
421 | ifeq ($(enable_decimal_float),bid) |
||
422 | $(d64pbit-o): %$(objext): config/libbid/%.c |
||
423 | else |
||
424 | $(d64pbit-o): %$(objext): $(srcdir)/dfp-bit.c |
||
425 | endif |
||
426 | $(gcc_compile) -DFINE_GRAINED_LIBRARIES -DL$* -DWIDTH=64 -c $< |
||
427 | libgcc-objects += $(d64pbit-o) |
||
428 | endif |
||
429 | |||
430 | |||
431 | d128pbit-o = $(patsubst %,%$(objext),$(D128PBIT_FUNCS)) |
||
432 | ifeq ($(enable_decimal_float),bid) |
||
433 | $(d128pbit-o): %$(objext): config/libbid/%.c |
||
434 | else |
||
435 | $(d128pbit-o): %$(objext): $(srcdir)/dfp-bit.c |
||
436 | endif |
||
437 | $(gcc_compile) -DFINE_GRAINED_LIBRARIES -DL$* -DWIDTH=128 -c $< |
||
438 | libgcc-objects += $(d128pbit-o) |
||
439 | endif |
||
440 | |||
441 | |||
6518 | serge | 442 | |
443 | |||
444 | ifneq ($(filter-out %.c %.S %.asm,$(LIB2ADD) $(LIB2ADD_ST)),) |
||
445 | $(error Unsupported files in LIB2ADD or LIB2ADD_ST.) |
||
446 | endif |
||
447 | |||
448 | |||
449 | libgcc-objects += $(addsuffix $(objext),$(basename $(notdir $(LIB2ADD_ST)))) |
||
6521 | serge | 450 | |
6518 | serge | 451 | |
452 | iter-items := $(LIB2ADD) $(LIB2ADD_ST) |
||
453 | include $(iterator) |
||
454 | |||
455 | |||
456 | |||
457 | |||
6520 | serge | 458 | |
6518 | serge | 459 | |
460 | include $(iterator) |
||
461 | |||
462 | |||
463 | |||
6515 | serge | 464 | |
465 | |||
466 | |||
467 | |||
6518 | serge | 468 | $(AR) crs libgcc.a $(libgcc-objects) |
469 | # mv -f libbfd.a $(SDK_DIR)/lib |
||
6517 | serge | 470 | libgcc-objects> |
6515 | serge | 471 | |
472 | |||
473 |