Subversion Repositories Kolibri OS

Rev

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