Subversion Repositories Kolibri OS

Rev

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 definition and LIBGCC2_UNITS_PER_WORD setting.  The DImode
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