Subversion Repositories Kolibri OS

Rev

Rev 6547 | Rev 6621 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
5132 clevermous 1
if tup.getconfig("NO_GCC") ~= "" or tup.getconfig("NO_FASM") ~= "" then return end
2
tup.include("../../../../../programs/use_gcc.lua")
6539 serge 3
CFLAGS =  "-c -O2 -fno-builtin -fno-ident -fomit-frame-pointer -DMISSING_SYSCALL_NAMES"
5132 clevermous 4
LDFLAGS = "-shared -s -T libcdll.lds --out-implib $(SDK_DIR)/lib/libc.dll.a --image-base 0"
5
-- LDFLAGS = LDFLAGS .. " --output-def libc.orig.def"
6
 
7
SDK_DIR = "../../.."
8
 
9
LIBC_TOPDIR = "."
10
LIBC_INCLUDES = "include"
11
NAME = "libc"
6540 serge 12
DEFINES = "-U__WIN32__ -U_Win32 -U_WIN32 -U__MINGW32__ -U_MSC_VER-D_IEEE_LIBM -DHAVE_RENAME -DBUILD_LIBC"
5132 clevermous 13
INCLUDES = "-Iinclude"
14
 
15
TOOLCHAIN_LIBPATH = tup.getconfig("TOOLCHAIN_LIBPATH")
16
-- if not given explicitly in config, try to guess
17
if TOOLCHAIN_LIBPATH == "" then
18
  if tup.getconfig("TUP_PLATFORM") == "win32"
19
  then TOOLCHAIN_LIBPATH="C:\\MinGW\\msys\\1.0\\home\\autobuild\\tools\\win32\\mingw32\\lib"
20
  else TOOLCHAIN_LIBPATH="/home/autobuild/tools/win32/mingw32/lib"
21
  end
22
end
6547 serge 23
LIBPATH = "-L$(SDK_DIR)/lib"
6536 serge 24
STATIC_SRCS = {"crt/start.S", "crt/crt1.c", "crt/crt2.c", "crt/exit.S"}
25
LIBDLL_SRCS = {"crt/dllstart.c", "crt/exit.S", "crt/pseudo-reloc.c", "crt/setjmp.S"}
6542 serge 26
LIBCDLL_SRCS = {"crt/crt2.c", "crt/pseudo-reloc.c", "crt/exit.S", "crt/setjmp.S"}
5132 clevermous 27
CORE_SRCS = {
28
  "argz/buf_findstr.c", "argz/envz_get.c",
6546 serge 29
  "crt/console.asm", "crt/thread.S", "crt/cpu_features.c", "crt/tls.c",
5132 clevermous 30
  "ctype/ctype_.c", "ctype/isascii.c", "ctype/isblank.c", "ctype/isalnum.c",
31
  "ctype/isalpha.c", "ctype/iscntrl.c", "ctype/isdigit.c", "ctype/islower.c",
32
  "ctype/isupper.c", "ctype/isprint.c", "ctype/ispunct.c", "ctype/isspace.c",
33
  "ctype/iswctype.c", "ctype/iswalnum.c", "ctype/iswalpha.c", "ctype/iswblank.c",
34
  "ctype/iswcntrl.c", "ctype/iswdigit.c", "ctype/iswgraph.c", "ctype/iswlower.c",
35
  "ctype/iswprint.c", "ctype/iswpunct.c", "ctype/iswspace.c", "ctype/iswupper.c",
36
  "ctype/iswxdigit.c", "ctype/isxdigit.c", "ctype/toascii.c", "ctype/tolower.c",
37
  "ctype/toupper.c", "ctype/towctrans.c", "ctype/towlower.c", "ctype/towupper.c",
38
  "ctype/wctrans.c", "ctype/wctype.c",
39
  "errno/errno.c",
40
  "locale/locale.c", "locale/lctype.c", "locale/ldpart.c",
5216 serge 41
 
42
  "reent/closer.c", "reent/fstatr.c", "reent/getreent.c", "reent/gettimeofdayr.c",
43
  "reent/impure.c", "reent/init_reent.c", "reent/isattyr.c", "reent/linkr.c",
44
  "reent/lseekr.c", "reent/mutex.c", "reent/openr.c", "reent/readr.c",
6536 serge 45
  "reent/statr.c", "reent/timesr.c", "reent/unlinkr.c",
5216 serge 46
  "reent/writer.c",
5132 clevermous 47
  "search/qsort.c", "search/bsearch.c",
48
  "signal/signal.c",
6109 serge 49
  "sys/access.c", "sys/clock_gettime.c", "sys/close.c", "sys/conio.c", "sys/create.c",
50
  "sys/errno.c", "sys/finfo.c", "sys/fsize.c", "sys/fstat.c", "sys/gettod.c", "sys/io.c",
51
  "sys/ioread.c", "sys/iowrite.c", "sys/isatty.c", "sys/lseek.c", "sys/open.c",
52
  "sys/read.c", "sys/_rename.c", "sys/stat.c", "sys/unlink.c", "sys/write.c",
53
  "sys/io_alloc.S", "time/asctime.c", "time/asctime_r.c", "time/clock.c", "time/ctime.c",
5132 clevermous 54
  "time/ctime_r.c", "time/difftime.c", "time/gettzinfo.c", "time/gmtime.c",
6099 serge 55
  "time/gmtime_r.c", "time/mktime.c", "time/month_lengths.c", "time/lcltime.c",
56
  "time/lcltime_r.c", "time/strftime.c", "time/time.c", "time/tzcalc_limits.c",
57
  "time/timelocal.c", "time/tzlock.c", "time/tzset.c", "time/tzset_r.c", "time/tzvars.c"
5132 clevermous 58
}
59
STDLIB_SRCS = {
6536 serge 60
  "__atexit.c",
61
  "__call_atexit.c",
62
  "abort.c",
63
  "abs.c",
64
  "assert.c",
65
  "atexit.c",
66
  "atof.c",
67
  "atoi.c",
68
  "atol.c",
69
  "cxa_atexit.c",
70
  "cxa_finalize.c",
71
  "div.c",
72
  "dtoa.c",
73
  "dtoastub.c",
74
  "efgcvt.c",
75
  "ecvtbuf.c",
76
  "eprintf.c",
77
  "erand48.c",
78
  "exit.c",
79
  "gdtoa-gethex.c",
80
  "gdtoa-hexnan.c",
81
  "getenv.c",
82
  "getenv_r.c",
83
  "itoa.c",
6537 serge 84
  "labs.c",
6536 serge 85
  "mprec.c",
86
  "mbtowc.c",
87
  "mbtowc_r.c",
88
  "mbrtowc.c",
89
  "mlock.c",
90
  "calloc.c",
91
  "malloc.c",
92
  "mallocr.c",
93
  "rand.c",
94
  "rand_r.c",
95
  "rand48.c",
96
  "realloc.c",
97
  "seed48.c",
98
  "srand48.c",
99
  "strtod.c",
100
  "strtodg.c",
101
  "strtol.c",
102
  "strtold.c",
103
  "strtoll.c",
104
  "strtoll_r.c",
105
  "strtorx.c",
106
  "strtoul.c",
107
  "strtoull.c",
108
  "strtoull_r.c",
109
  "system.c",
110
  "utoa.c",
111
  "wcrtomb.c",
6099 serge 112
  "wctomb_r.c"
5132 clevermous 113
}
114
STRING_SRCS = {
6557 serge 115
  "bcmp.c",
116
  "bcopy.c",
117
 
118
  "bzero.c",
119
  "explicit_bzero.c",
120
  "gnu_basename.c",
121
  "index.c",
122
  "memccpy.c",
123
  "memchr.c",
124
  "memcmp.c",
6536 serge 125
  "memcpy.c",
6557 serge 126
  "memmem.c",
6536 serge 127
  "memmove.c",
6557 serge 128
  "mempcpy.c",
129
  "memrchr.c",
6536 serge 130
  "memset.c",
6557 serge 131
  "rawmemchr.c",
132
  "rindex.c",
6536 serge 133
  "stpcpy.c",
134
  "stpncpy.c",
6557 serge 135
  "strcasecmp.c",
136
  "strcasestr.c",
6536 serge 137
  "strcat.c",
138
  "strchr.c",
6557 serge 139
  "strchrnul.c",
6536 serge 140
  "strcmp.c",
141
  "strcoll.c",
6557 serge 142
  "strcpy.c",
143
  "strcspn.c",
144
  "strdup.c",
145
  "strdup_r.c",
146
  "strerror.c",
147
  "strerror_r.c",
148
  "strlcat.c",
149
  "strlcpy.c",
150
  "strlen.c",
151
  "strlwr.c",
6536 serge 152
  "strncasecmp.c",
153
  "strncat.c",
154
  "strncmp.c",
155
  "strncpy.c",
156
  "strndup.c",
157
  "strndup_r.c",
158
  "strnlen.c",
6557 serge 159
  "strpbrk.c",
6536 serge 160
  "strrchr.c",
161
  "strsep.c",
6557 serge 162
  "strspn.c",
6536 serge 163
  "strstr.c",
164
  "strtok.c",
165
  "strtok_r.c",
166
  "strupr.c",
167
  "strxfrm.c",
6557 serge 168
  "swab.c",
169
  "u_strerr.c",
170
  "wcpcpy.c",
171
  "wcpncpy.c",
172
  "wcscasecmp.c",
173
  "wcscat.c",
174
  "wcschr.c",
175
  "wcscmp.c",
176
  "wcscoll.c",
177
  "wcscpy.c",
178
  "wcscspn.c",
179
  "wcsdup.c",
180
  "wcslcat.c",
181
  "wcslcpy.c",
182
  "wcslen.c",
183
  "wcsncasecmp.c",
184
  "wcsncat.c",
185
  "wcsncmp.c",
186
  "wcsncpy.c",
187
  "wcsnlen.c",
188
  "wcspbrk.c",
189
  "wcsrchr.c",
190
  "wcsspn.c",
191
  "wcsstr.c",
192
  "wcstok.c",
193
  "wcswidth.c",
194
  "wcsxfrm.c",
195
  "wcwidth.c",
196
  "wmemchr.c",
197
  "wmemcmp.c",
198
  "wmemcpy.c",
199
  "wmemmove.c",
200
  "wmemset.c"
5132 clevermous 201
}
202
 
203
STDIO_SRCS = {
6536 serge 204
  "asiprintf.c",
205
  "asniprintf.c",
206
  "asnprintf.c",
207
  "asprintf.c",
208
  "clearerr.c",
209
  "diprintf.c",
210
  "dprintf.c",
211
  "fclose.c",
212
  "fcloseall.c",
213
  "fdopen.c",
214
  "feof.c",
215
  "feof_u.c",
216
  "ferror.c",
217
  "ferror_u.c",
218
  "fflush.c",
219
  "fflush_u.c",
220
  "fgetc.c",
221
  "fgetc_u.c",
222
  "fgetpos.c",
223
  "fgets.c",
224
  "fgets_u.c",
225
  "fileno.c",
226
  "fileno_u.c",
227
  "findfp.c",
228
  "fiprintf.c",
229
  "fiscanf.c",
230
  "flags.c",
231
  "fmemopen.c",
232
  "fopen.c",
233
  "fopencookie.c",
234
  "fprintf.c",
235
  "fpurge.c",
236
  "fputc.c",
237
  "fputc_u.c",
238
  "fputs.c",
239
  "fputs_u.c",
240
  "fputwc.c",
241
  "fsetpos.c",
242
  "fread.c",
243
  "fread_u.c",
244
  "freopen.c",
245
  "fscanf.c",
246
  "fseek.c",
247
  "fseeko.c",
248
  "fsetlocking.c",
249
  "ftell.c",
250
  "ftello.c",
251
  "fvwrite.c",
252
  "fwalk.c",
253
  "fwide.c",
254
  "fwrite.c",
255
  "fwrite_u.c",
256
  "getc.c",
257
  "getc_u.c",
258
  "getchar.c",
259
  "getchar_u.c",
260
  "getdelim.c",
261
  "getline.c",
262
  "gets.c",
263
  "iprintf.c",
264
  "iscanf.c",
265
  "makebuf.c",
266
  "mbstowcs.c",
267
  "mktemp.c",
268
  "open_memstream.c",
269
  "perror.c",
270
  "printf.c",
271
  "putc.c",
272
  "putc_u.c",
273
  "putchar.c",
274
  "putchar_u.c",
275
  "puts.c",
276
  "refill.c",
277
  "remove.c",
278
  "rename.c",
279
  "rewind.c",
280
  "rget.c",
281
  "scanf.c",
282
  "sccl.c",
283
  "setbuf.c",
284
  "setbuffer.c",
285
  "setlinebuf.c",
286
  "setvbuf.c",
287
  "siprintf.c",
288
  "siscanf.c",
289
  "sniprintf.c",
290
  "snprintf.c",
291
  "sprintf.c",
292
  "sscanf.c",
293
  "stdio.c",
294
  "stdio_ext.c",
295
  "tmpfile.c",
296
  "tmpnam.c",
297
  "ungetc.c",
298
  "vasiprintf.c",
299
  "vasniprintf.c",
300
  "vasnprintf.c",
301
  "vasprintf.c",
302
  "vdiprintf.c",
303
  "vdprintf.c",
304
  "viprintf.c",
305
  "viscanf.c",
306
  "vprintf.c",
307
  "vscanf.c",
308
  "vsiprintf.c",
309
  "vsiscanf.c",
310
  "vsprintf.c",
311
  "vsniprintf.c",
312
  "vsnprintf.c",
313
  "vsscanf.c",
314
  "wsetup.c",
315
  "wbuf.c"
6537 serge 316
}
6099 serge 317
 
5132 clevermous 318
 
319
MATH_SRCS = {
320
  "e_acos.c", "e_acosh.c", "e_asin.c", "e_atan2.c", "e_atanh.c", "e_cosh.c", "e_exp.c", "e_fmod.c",
321
  "e_hypot.c", "e_j0.c", "e_j1.c", "e_jn.c", "e_log.c", "e_log10.c", "e_pow.c", "e_rem_pio2.c",
322
  "e_remainder.c", "e_scalb.c", "e_sinh.c", "e_sqrt.c", "ef_acos.c", "ef_acosh.c", "ef_asin.c",
323
  "ef_atan2.c", "ef_atanh.c", "ef_cosh.c", "ef_exp.c", "ef_fmod.c", "ef_hypot.c", "ef_j0.c", "ef_j1.c",
324
  "ef_jn.c", "ef_log.c", "ef_log10.c", "ef_pow.c", "ef_rem_pio2.c", "ef_remainder.c", "ef_scalb.c",
325
  "ef_sinh.c", "ef_sqrt.c", "er_gamma.c", "er_lgamma.c", "erf_gamma.c", "erf_lgamma.c", "f_exp.c",
326
  "f_expf.c", "f_llrint.c", "f_llrintf.c", "f_llrintl.c", "f_lrint.c", "f_lrintf.c", "f_lrintl.c",
5141 serge 327
  "f_pow.c", "f_powf.c", "f_rint.c", "f_rintf.c", "f_rintl.c", "feclearexcept.c", "fetestexcept.c",
328
  "k_cos.c", "k_rem_pio2.c", "k_sin.c", "k_standard.c", "k_tan.c", "kf_cos.c", "kf_rem_pio2.c", "kf_sin.c",
329
  "kf_tan.c", "s_asinh.c", "s_atan.c", "s_cbrt.c", "s_ceil.c", "s_copysign.c", "s_cos.c", "s_erf.c", "s_exp10.c", "s_expm1.c",
5132 clevermous 330
  "s_fabs.c", "s_fdim.c", "s_finite.c", "s_floor.c", "s_fma.c", "s_fmax.c", "s_fmin.c", "s_fpclassify.c",
331
  "s_frexp.c", "s_ilogb.c", "s_infconst.c", "s_infinity.c", "s_isinf.c", "s_isinfd.c", "s_isnan.c",
332
  "s_isnand.c", "s_ldexp.c", "s_lib_ver.c", "s_llrint.c", "s_llround.c", "s_log1p.c", "s_log2.c",
333
  "s_logb.c", "s_lrint.c", "s_lround.c", "s_matherr.c", "s_modf.c", "s_nan.c", "s_nearbyint.c",
334
  "s_nextafter.c", "s_pow10.c", "s_remquo.c", "s_rint.c", "s_round.c", "s_scalbln.c", "s_scalbn.c",
335
  "s_signbit.c", "s_signif.c", "s_sin.c", "s_tan.c", "s_tanh.c", "s_trunc.c", "scalblnl.c", "scalbnl.c",
336
  "sf_asinh.c", "sf_atan.c", "sf_cbrt.c", "sf_ceil.c", "sf_copysign.c", "sf_cos.c", "sf_erf.c",
337
  "sf_exp10.c", "sf_expm1.c", "sf_fabs.c", "sf_fdim.c", "sf_finite.c", "sf_floor.c", "sf_fma.c",
338
  "sf_fmax.c", "sf_fmin.c", "sf_fpclassify.c", "sf_frexp.c", "sf_ilogb.c", "sf_infinity.c",
339
  "sf_isinf.c", "sf_isinff.c", "sf_isnan.c", "sf_isnanf.c", "sf_ldexp.c", "sf_llrint.c",
340
  "sf_llround.c", "sf_log1p.c", "sf_log2.c", "sf_logb.c", "sf_lrint.c", "sf_lround.c", "sf_modf.c",
341
  "sf_nan.c", "sf_nearbyint.c", "sf_nextafter.c", "sf_pow10.c", "sf_remquo.c", "sf_rint.c",
342
  "sf_round.c", "sf_scalbln.c", "sf_scalbn.c", "sf_signif.c", "sf_sin.c", "sf_tan.c", "sf_tanh.c",
343
  "sf_trunc.c", "w_acos.c", "w_acosh.c", "w_asin.c", "w_atan2.c", "w_atanh.c", "w_cosh.c", "w_drem.c",
344
  "w_exp.c", "w_exp2.c", "w_fmod.c", "w_gamma.c", "w_hypot.c", "w_j0.c", "w_j1.c", "w_jn.c", "w_lgamma.c",
345
  "w_log.c", "w_log10.c", "w_pow.c", "w_remainder.c", "w_scalb.c", "w_sincos.c", "w_sinh.c", "w_sqrt.c",
346
  "w_tgamma.c", "wf_acos.c", "wf_acosh.c", "wf_asin.c", "wf_atan2.c", "wf_atanh.c", "wf_cosh.c",
347
  "wf_drem.c", "wf_exp.c", "wf_exp2.c", "wf_fmod.c", "wf_gamma.c", "wf_hypot.c", "wf_j0.c", "wf_j1.c",
348
  "wf_jn.c", "wf_lgamma.c", "wf_log.c", "wf_log10.c", "wf_pow.c", "wf_remainder.c", "wf_scalb.c",
349
  "wf_sincos.c", "wf_sinh.c", "wf_sqrt.c", "wf_tgamma.c", "wr_gamma.c", "wr_lgamma.c", "wrf_gamma.c",
350
  "wrf_lgamma.c",
351
  "f_atan2.S", "f_atan2f.S", "f_frexp.S", "f_frexpf.S", "f_ldexp.S", "f_ldexpf.S", "f_log.S",
352
  "f_log10.S", "f_log10f.S", "f_logf.S", "f_tan.S", "f_tanf.S"
353
}
354
 
355
function prepend(what, to)
356
  local result = {}
357
  for i,v in ipairs(to) do
358
    table.insert(result, what .. v)
359
  end
360
  return result
361
end
362
 
363
-- make shared
364
LIB_SRCS = LIBCDLL_SRCS
365
 
366
LIB_SRCS += CORE_SRCS
367
LIB_SRCS += prepend("stdio/", STDIO_SRCS)
368
LIB_SRCS += prepend("string/", STRING_SRCS)
369
LIB_SRCS += prepend("stdlib/", STDLIB_SRCS)
370
LIB_SRCS += prepend("math/", MATH_SRCS)
371
 
372
ALL_OBJS = {}
373
function compile(list)
374
  local result = {}
375
  for i,v in ipairs(list) do
376
    if ALL_OBJS[v] then
377
      -- already compiled
378
    elseif v:sub(-2) == ".c" or v:sub(-2) == ".S" then
379
      ALL_OBJS[v] = tup.rule(v, "kos32-gcc $(CFLAGS) $(DEFINES) $(INCLUDES) -o %o %f", v:sub(1, -3) .. ".o")
380
    elseif v:sub(-4) == ".asm" then
381
      ALL_OBJS[v] = tup.rule(v, "fasm %f %o", v:sub(1, -5) .. ".obj")
382
    end
383
    result += ALL_OBJS[v]
384
  end
385
  return result
386
end
387
 
388
LIB_OBJS = compile(LIB_SRCS)
6537 serge 389
LIB_OBJS += tup.rule("crt/crtdll.c", "kos32-gcc $(CFLAGS) $(DEFINES) $(INCLUDES) -fno-delete-null-pointer-checks -c %f -o %o","crt/crtdll.o")
390
LIB_OBJS += tup.rule("pe/loader.c", "kos32-gcc $(CFLAGS) $(DEFINES) $(INCLUDES) -fno-delete-null-pointer-checks -c %f -o %o", "pe/loader.o")
391
LIB_OBJS += tup.rule("reent/renamer.c", "kos32-gcc $(CFLAGS) $(DEFINES) $(INCLUDES) -D_COMPILING_NEWLIB -c %f -o %o", "reent/renamer.o")
6536 serge 392
 
5132 clevermous 393
LIBDLL_OBJS = compile(LIBDLL_SRCS)
394
 
6536 serge 395
 
5132 clevermous 396
vfprintf_extra_objs = {
6536 serge 397
  {"", "stdio/vfprintf.o"},
5132 clevermous 398
  {"-DINTEGER_ONLY", "stdio/vfiprintf.o"},
399
  {"-DSTRING_ONLY", "stdio/svfprintf.o"},
400
  {"-DINTEGER_ONLY -DSTRING_ONLY", "stdio/svfiprintf.o"},
401
}
402
for i,v in ipairs(vfprintf_extra_objs) do
403
  LIB_OBJS += tup.rule("stdio/vfprintf.c", "kos32-gcc $(CFLAGS) $(DEFINES) $(INCLUDES) -fshort-enums " .. v[1] .. " -c %f -o %o", v[2])
404
end
405
 
406
vfscanf_extra_objs = {
407
  {"", "stdio/vfscanf.o"},
408
  {"-DINTEGER_ONLY", "stdio/vfiscanf.o"},
409
  {"-DSTRING_ONLY", "stdio/svscanf.o"},
410
  {"-DINTEGER_ONLY -DSTRING_ONLY", "stdio/svfiscanf.o"},
411
}
412
for i,v in ipairs(vfscanf_extra_objs) do
6536 serge 413
  LIB_OBJS += tup.rule("stdio/vfscanf.c", "kos32-gcc $(CFLAGS) $(DEFINES) $(INCLUDES) " .. v[1] .. " -c %f -o %o", v[2])
5132 clevermous 414
end
415
 
416
tup.rule(LIB_OBJS, "kos32-ld " .. LDFLAGS .. " " .. LIBPATH .. " -o %o %f -lgcc --version-script libc.ver " .. tup.getconfig("KPACK_CMD"),
417
  {SDK_DIR .. "/bin/libc.dll", extra_outputs = {SDK_DIR .. "/lib/libc.dll.a", SDK_DIR .. "/lib/"}})
418
tup.rule(LIBDLL_OBJS, "kos32-ar rcs %o %f", {SDK_DIR .. "/lib/libdll.a", extra_outputs = {SDK_DIR .. "/lib/"}})