Subversion Repositories Kolibri OS

Rev

Rev 6069 | Rev 6109 | 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")
3
CFLAGS = CFLAGS_OPTIMIZE_SPEED .. " -c -DBUILD_DLL -DMISSING_SYSCALL_NAMES"
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"
5216 serge 12
DEFINES = "-D_IEEE_LIBM -DHAVE_RENAME"
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
23
LIBPATH = "-L$(SDK_DIR)/lib -L$(TOOLCHAIN_LIBPATH)"
6069 serge 24
STATIC_SRCS = {"crt/start.S", "crt/crt1.c", "crt/crt2.c", "crt/chkstk.S", "crt/exit.c"}
25
LIBCRT_SRCS = {"crt/start.S", "crt/crt3.c", "crt/chkstk.S",  "crt/pseudo-reloc.c", "pe/crtloader.c"}
5132 clevermous 26
LIBDLL_SRCS = {"crt/dllstart.c", "crt/chkstk.S", "crt/exit.S", "crt/pseudo-reloc.c", "crt/setjmp.S"}
6069 serge 27
LIBCDLL_SRCS = {"crt/crtdll.c", "crt/crt2.c", "crt/pseudo-reloc.c", "crt/chkstk.S", "crt/exit.S", "pe/loader.c"}
5132 clevermous 28
CORE_SRCS = {
29
  "argz/buf_findstr.c", "argz/envz_get.c",
6069 serge 30
  "crt/console.asm", "crt/emutls.c", "crt/thread.S", "crt/tls.S", "crt/setjmp.S", "crt/cpu_features.c",
5132 clevermous 31
  "ctype/ctype_.c", "ctype/isascii.c", "ctype/isblank.c", "ctype/isalnum.c",
32
  "ctype/isalpha.c", "ctype/iscntrl.c", "ctype/isdigit.c", "ctype/islower.c",
33
  "ctype/isupper.c", "ctype/isprint.c", "ctype/ispunct.c", "ctype/isspace.c",
34
  "ctype/iswctype.c", "ctype/iswalnum.c", "ctype/iswalpha.c", "ctype/iswblank.c",
35
  "ctype/iswcntrl.c", "ctype/iswdigit.c", "ctype/iswgraph.c", "ctype/iswlower.c",
36
  "ctype/iswprint.c", "ctype/iswpunct.c", "ctype/iswspace.c", "ctype/iswupper.c",
37
  "ctype/iswxdigit.c", "ctype/isxdigit.c", "ctype/toascii.c", "ctype/tolower.c",
38
  "ctype/toupper.c", "ctype/towctrans.c", "ctype/towlower.c", "ctype/towupper.c",
39
  "ctype/wctrans.c", "ctype/wctype.c",
40
  "errno/errno.c",
41
  "locale/locale.c", "locale/lctype.c", "locale/ldpart.c",
5216 serge 42
 
43
  "reent/closer.c", "reent/fstatr.c", "reent/getreent.c", "reent/gettimeofdayr.c",
44
  "reent/impure.c", "reent/init_reent.c", "reent/isattyr.c", "reent/linkr.c",
45
  "reent/lseekr.c", "reent/mutex.c", "reent/openr.c", "reent/readr.c",
46
  "reent/renamer.c", "reent/statr.c", "reent/timesr.c", "reent/unlinkr.c",
47
  "reent/writer.c",
5132 clevermous 48
  "search/qsort.c", "search/bsearch.c",
49
  "signal/signal.c",
6069 serge 50
  "sys/access.c", "sys/close.c", "sys/conio.c", "sys/create.c", "sys/errno.c", "sys/finfo.c",
5132 clevermous 51
  "sys/fsize.c", "sys/fstat.c", "sys/gettod.c", "sys/io.c", "sys/ioread.c",
52
  "sys/iowrite.c", "sys/isatty.c", "sys/lseek.c", "sys/open.c", "sys/read.c",
5216 serge 53
  "sys/_rename.c", "sys/stat.c", "sys/unlink.c", "sys/write.c", "sys/io_alloc.S",
5132 clevermous 54
  "time/asctime.c", "time/asctime_r.c", "time/clock.c", "time/ctime.c",
55
  "time/ctime_r.c", "time/difftime.c", "time/gettzinfo.c", "time/gmtime.c",
6099 serge 56
  "time/gmtime_r.c", "time/mktime.c", "time/month_lengths.c", "time/lcltime.c",
57
  "time/lcltime_r.c", "time/strftime.c", "time/time.c", "time/tzcalc_limits.c",
58
  "time/timelocal.c", "time/tzlock.c", "time/tzset.c", "time/tzset_r.c", "time/tzvars.c"
5132 clevermous 59
}
60
STDLIB_SRCS = {
61
  "__atexit.c", "__call_atexit.c", "abort.c", "abs.c", "assert.c", "atexit.c",
62
  "atof.c", "atoi.c", "atol.c", "div.c", "dtoa.c", "dtoastub.c", "exit.c",
6099 serge 63
  "gdtoa-gethex.c", "gdtoa-hexnan.c", "getenv.c", "getenv_r.c","mprec.c", "mbtowc.c",
5132 clevermous 64
  "mbtowc_r.c", "mbrtowc.c", "mlock.c", "calloc.c", "malloc.c", "mallocr.c",
65
  "rand.c", "rand_r.c", "rand48.c", "realloc.c", "seed48.c", "srand48.c",
6099 serge 66
  "strtod.c", "strtodg.c", "strtol.c", "strtold.c", "strtoll.c", "strtoll_r.c",
67
  "strtorx.c","strtoul.c", "strtoull.c", "strtoull_r.c", "system.c", "wcrtomb.c",
68
  "wctomb_r.c"
5132 clevermous 69
}
70
STRING_SRCS = {
71
  "memcpy.c", "memcmp.c", "memmove.c", "memset.c", "memchr.c", "stpcpy.c",
72
  "stpncpy.c", "strcat.c", "strchr.c", "strcmp.c", "strcoll.c", "strcasecmp.c",
73
  "strncasecmp.c", "strncat.c", "strncmp.c", "strncpy.c", "strndup.c",
74
  "strndup_r.c", "strnlen.c", "strcasestr.c", "strdup.c", "strdup_r.c",
75
  "strerror.c", "strlen.c", "strrchr.c", "strpbrk.c", "strsep.c", "strstr.c",
76
  "strtok.c", "strtok_r.c", "strupr.c", "strcspn.c", "strspn.c", "strcpy.c",
77
  "u_strerr.c"
78
}
79
 
80
STDIO_SRCS = {
81
  "clearerr.c", "diprintf.c", "dprintf.c", "printf.c", "putchar.c", "fgetc.c",
82
  "fgets.c", "fopen.c", "fclose.c", "fdopen.c", "fflush.c", "flags.c",
83
  "fileno.c", "findfp.c", "fiprintf.c", "fiscanf.c", "fprintf.c", "fputc.c",
6099 serge 84
  "fputs.c", "fputwc.c", "fread.c", "freopen.c", "fscanf.c", "fseek.c", "fseeko.c",
85
  "ftell.c", "ftello.c", "fwrite.c", "fvwrite.c", "fwalk.c", "makebuf.c",
86
  "mbstowcs.c", "mktemp.c", "perror.c", "putc.c", "puts.c", "refill.c", "remove.c",
87
  "rename.c", "rewind.c", "rget.c", "sccl.c", "setvbuf.c", "siprintf.c",
88
  "siscanf.c", "sniprintf.c", "snprintf.c", "sprintf.c", "sscanf.c", "stdio.c",
5220 serge 89
  "tmpfile.c", "tmpnam.c", "ungetc.c", "vasniprintf.c", "vasnprintf.c",
90
  "vdprintf.c", "vdiprintf.c", "vscanf.c", "vsprintf.c", "vsnprintf.c",
6099 serge 91
  "vsscanf.c", "wsetup.c", "wbuf.c"
92
 
5132 clevermous 93
}
94
 
95
MATH_SRCS = {
96
  "e_acos.c", "e_acosh.c", "e_asin.c", "e_atan2.c", "e_atanh.c", "e_cosh.c", "e_exp.c", "e_fmod.c",
97
  "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",
98
  "e_remainder.c", "e_scalb.c", "e_sinh.c", "e_sqrt.c", "ef_acos.c", "ef_acosh.c", "ef_asin.c",
99
  "ef_atan2.c", "ef_atanh.c", "ef_cosh.c", "ef_exp.c", "ef_fmod.c", "ef_hypot.c", "ef_j0.c", "ef_j1.c",
100
  "ef_jn.c", "ef_log.c", "ef_log10.c", "ef_pow.c", "ef_rem_pio2.c", "ef_remainder.c", "ef_scalb.c",
101
  "ef_sinh.c", "ef_sqrt.c", "er_gamma.c", "er_lgamma.c", "erf_gamma.c", "erf_lgamma.c", "f_exp.c",
102
  "f_expf.c", "f_llrint.c", "f_llrintf.c", "f_llrintl.c", "f_lrint.c", "f_lrintf.c", "f_lrintl.c",
5141 serge 103
  "f_pow.c", "f_powf.c", "f_rint.c", "f_rintf.c", "f_rintl.c", "feclearexcept.c", "fetestexcept.c",
104
  "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",
105
  "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 106
  "s_fabs.c", "s_fdim.c", "s_finite.c", "s_floor.c", "s_fma.c", "s_fmax.c", "s_fmin.c", "s_fpclassify.c",
107
  "s_frexp.c", "s_ilogb.c", "s_infconst.c", "s_infinity.c", "s_isinf.c", "s_isinfd.c", "s_isnan.c",
108
  "s_isnand.c", "s_ldexp.c", "s_lib_ver.c", "s_llrint.c", "s_llround.c", "s_log1p.c", "s_log2.c",
109
  "s_logb.c", "s_lrint.c", "s_lround.c", "s_matherr.c", "s_modf.c", "s_nan.c", "s_nearbyint.c",
110
  "s_nextafter.c", "s_pow10.c", "s_remquo.c", "s_rint.c", "s_round.c", "s_scalbln.c", "s_scalbn.c",
111
  "s_signbit.c", "s_signif.c", "s_sin.c", "s_tan.c", "s_tanh.c", "s_trunc.c", "scalblnl.c", "scalbnl.c",
112
  "sf_asinh.c", "sf_atan.c", "sf_cbrt.c", "sf_ceil.c", "sf_copysign.c", "sf_cos.c", "sf_erf.c",
113
  "sf_exp10.c", "sf_expm1.c", "sf_fabs.c", "sf_fdim.c", "sf_finite.c", "sf_floor.c", "sf_fma.c",
114
  "sf_fmax.c", "sf_fmin.c", "sf_fpclassify.c", "sf_frexp.c", "sf_ilogb.c", "sf_infinity.c",
115
  "sf_isinf.c", "sf_isinff.c", "sf_isnan.c", "sf_isnanf.c", "sf_ldexp.c", "sf_llrint.c",
116
  "sf_llround.c", "sf_log1p.c", "sf_log2.c", "sf_logb.c", "sf_lrint.c", "sf_lround.c", "sf_modf.c",
117
  "sf_nan.c", "sf_nearbyint.c", "sf_nextafter.c", "sf_pow10.c", "sf_remquo.c", "sf_rint.c",
118
  "sf_round.c", "sf_scalbln.c", "sf_scalbn.c", "sf_signif.c", "sf_sin.c", "sf_tan.c", "sf_tanh.c",
119
  "sf_trunc.c", "w_acos.c", "w_acosh.c", "w_asin.c", "w_atan2.c", "w_atanh.c", "w_cosh.c", "w_drem.c",
120
  "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",
121
  "w_log.c", "w_log10.c", "w_pow.c", "w_remainder.c", "w_scalb.c", "w_sincos.c", "w_sinh.c", "w_sqrt.c",
122
  "w_tgamma.c", "wf_acos.c", "wf_acosh.c", "wf_asin.c", "wf_atan2.c", "wf_atanh.c", "wf_cosh.c",
123
  "wf_drem.c", "wf_exp.c", "wf_exp2.c", "wf_fmod.c", "wf_gamma.c", "wf_hypot.c", "wf_j0.c", "wf_j1.c",
124
  "wf_jn.c", "wf_lgamma.c", "wf_log.c", "wf_log10.c", "wf_pow.c", "wf_remainder.c", "wf_scalb.c",
125
  "wf_sincos.c", "wf_sinh.c", "wf_sqrt.c", "wf_tgamma.c", "wr_gamma.c", "wr_lgamma.c", "wrf_gamma.c",
126
  "wrf_lgamma.c",
127
  "f_atan2.S", "f_atan2f.S", "f_frexp.S", "f_frexpf.S", "f_ldexp.S", "f_ldexpf.S", "f_log.S",
128
  "f_log10.S", "f_log10f.S", "f_logf.S", "f_tan.S", "f_tanf.S"
129
}
130
 
131
function prepend(what, to)
132
  local result = {}
133
  for i,v in ipairs(to) do
134
    table.insert(result, what .. v)
135
  end
136
  return result
137
end
138
 
139
-- make shared
140
LIB_SRCS = LIBCDLL_SRCS
141
 
142
LIB_SRCS += CORE_SRCS
143
LIB_SRCS += prepend("stdio/", STDIO_SRCS)
144
LIB_SRCS += prepend("string/", STRING_SRCS)
145
LIB_SRCS += prepend("stdlib/", STDLIB_SRCS)
146
LIB_SRCS += prepend("math/", MATH_SRCS)
147
 
148
ALL_OBJS = {}
149
function compile(list)
150
  local result = {}
151
  for i,v in ipairs(list) do
152
    if ALL_OBJS[v] then
153
      -- already compiled
154
    elseif v:sub(-2) == ".c" or v:sub(-2) == ".S" then
155
      ALL_OBJS[v] = tup.rule(v, "kos32-gcc $(CFLAGS) $(DEFINES) $(INCLUDES) -o %o %f", v:sub(1, -3) .. ".o")
156
    elseif v:sub(-4) == ".asm" then
157
      ALL_OBJS[v] = tup.rule(v, "fasm %f %o", v:sub(1, -5) .. ".obj")
158
    end
159
    result += ALL_OBJS[v]
160
  end
161
  return result
162
end
163
 
164
LIB_OBJS = compile(LIB_SRCS)
165
LIBCRT_OBJS = compile(LIBCRT_SRCS)
166
LIBDLL_OBJS = compile(LIBDLL_SRCS)
167
 
168
vfprintf_extra_objs = {
169
  {"-DFLOATING_POINT", "stdio/vfprintf.o"},
170
  {"-DINTEGER_ONLY", "stdio/vfiprintf.o"},
171
  {"-DSTRING_ONLY", "stdio/svfprintf.o"},
172
  {"-DINTEGER_ONLY -DSTRING_ONLY", "stdio/svfiprintf.o"},
173
}
174
for i,v in ipairs(vfprintf_extra_objs) do
175
  LIB_OBJS += tup.rule("stdio/vfprintf.c", "kos32-gcc $(CFLAGS) $(DEFINES) $(INCLUDES) -fshort-enums " .. v[1] .. " -c %f -o %o", v[2])
176
end
177
 
178
vfscanf_extra_objs = {
179
  {"", "stdio/vfscanf.o"},
180
  {"-DINTEGER_ONLY", "stdio/vfiscanf.o"},
181
  {"-DSTRING_ONLY", "stdio/svscanf.o"},
182
  {"-DINTEGER_ONLY -DSTRING_ONLY", "stdio/svfiscanf.o"},
183
}
184
for i,v in ipairs(vfscanf_extra_objs) do
185
  LIB_OBJS += tup.rule("stdio/vfscanf.c", "kos32-gcc $(CFLAGS) $(DEFINES) $(INCLUDES) -fshort-enums " .. v[1] .. " -c %f -o %o", v[2])
186
end
187
 
188
tup.rule(LIB_OBJS, "kos32-ld " .. LDFLAGS .. " " .. LIBPATH .. " -o %o %f -lgcc --version-script libc.ver " .. tup.getconfig("KPACK_CMD"),
189
  {SDK_DIR .. "/bin/libc.dll", extra_outputs = {SDK_DIR .. "/lib/libc.dll.a", SDK_DIR .. "/lib/"}})
190
tup.rule(LIBCRT_OBJS, "kos32-ar rcs %o %f", {SDK_DIR .. "/lib/libapp.a", extra_outputs = {SDK_DIR .. "/lib/"}})
191
tup.rule(LIBDLL_OBJS, "kos32-ar rcs %o %f", {SDK_DIR .. "/lib/libdll.a", extra_outputs = {SDK_DIR .. "/lib/"}})