compiler/clib: Do not call __arosc_get_ctype() for each call to a ctype.h macro.
[AROS.git] / compiler / clib / mmakefile.src
blob1fc3a537f1b987f1c8cd6addfd75de6e1bfd2a9f
1 # $Id$
2 include $(TOP)/config/make.cfg
5 #   This is a rather special makefile. It builds both a shared library
6 #   and a link library from the same source, with only a small amount of
7 #   overlap.
9 USER_CFLAGS :=  -I$(SRCDIR)/$(CURDIR) -I$(SRCDIR)/$(CURDIR)/include \
10         -D__mb_cur_max=MB_CUR_MAX               \
11         -DADATE="\"$(shell date '+%d.%m.%Y')\"" \
12         -fno-builtin
14 # FIXME: temporary fix for local/xxx.c
15 USER_CFLAGS += -D__BSD_VISIBLE=1
17 TESTDIR := $(BINDIR)/Tests
19 # Lists of files
20 #   - Common always exist in the link library.
22 COMMON  := \
23         __alloca \
24         __filesystem_support \
25         __isinf \
26         atof \
27         bcmp \
28         bcopy \
29         bzero \
30         div \
31         _errstrings \
32         getopt \
33         getopt_long \
34         isinf \
35         ldiv \
36         lldiv \
37         mblen \
38         mbtowc \
39         mbstowcs \
40         memchr \
41         memcmp \
42         memcpy \
43         memmove \
44         memset \
45         putchar \
46         stcd_l \
47         stcl_d \
48         stcl_h \
49         stcl_o \
50         stch_l \
51         stco_l \
52         stcu_d \
53         stccpy \
54         stpblk \
55         stpcpy \
56         stpsym \
57         strcasecmp \
58         strcasestr \
59         strcat \
60         strchr \
61         strcmp \
62         strcoll \
63         strcpy \
64         strcspn \
65         strdup \
66         strndup \
67         strlcat \
68         strlcpy \
69         strlen \
70         strlwr \
71         strncasecmp \
72         strncat \
73         strncmp \
74         strncpy \
75         strpbrk \
76         strrchr \
77         strrev \
78         strsep \
79         strspn \
80         strstr \
81         strtod \
82         strtok \
83         strupr \
84         strxfrm \
85         swab \
86         wctomb \
87         wcstombs
89 COMMON_ARCH := \
90         longjmp \
91         setjmp
93 #   - Shared are in either the shared linklib, or the arosc.library module
94 SHARED  := \
95         __arosc_init \
96         __arosc_ioerr2errno \
97         __arosc_nixmain \
98         __arosc_set_environptr \
99         __arosc_startup \
100         __arosc_userdata \
101         __assert \
102         __ctype \
103         __get_default_file \
104         __env \
105         __exec \
106         __exitfunc \
107         __fdesc \
108         __rand48 \
109         __signal \
110         __spawnv \
111         __stat \
112         __stdio \
113         __upath \
114         __vcformat \
115         __vcscan \
116         __vfork \
117         abort \
118         abs \
119         access \
120         asctime \
121         asctime_r \
122         atexit \
123         atoi \
124         atol \
125         basename \
126         bsearch \
127         calloc \
128         cfgetispeed \
129         cfgetospeed \
130         cfsetispeed \
131         cfsetospeed \
132         chdir \
133         chmod \
134         chown \
135         clearerr \
136         ctime \
137         ctime_r \
138         clock \
139         close \
140         closedir \
141         creat \
142         difftime \
143         dirfd \
144         dirname \
145         drand48 \
146         dup \
147         dup2 \
148         endgrent \
149         endpwent \
150         erand48 \
151         execl \
152         execlp \
153         execv \
154         execve \
155         execvp \
156         exit \
157         _exit \
158     fchdir \
159         fchmod \
160         fchown \
161         fclose \
162         fcntl \
163         fdopen \
164         feof \
165         ferror \
166         fflush \
167         fgetc \
168         fgetpos \
169         fgets \
170         fileno \
171         flock \
172         fopen \
173         fprintf \
174         fscanf \
175         fsync \
176         fputc \
177         fputs \
178         fread \
179         free \
180         freopen \
181         fseek \
182         fseeko \
183         fsetpos \
184         fstat \
185         ftell \
186         ftello \
187         ftime \
188         ftruncate \
189         fwrite \
190         gcvt \
191         getc \
192         getchar \
193         getcwd \
194         getenv \
195         getfsstat \
196         statfs \
197         getpid \
198         getrlimit \
199         gettimeofday \
200         getuid \
201         geteuid \
202         getgid \
203         getegid \
204         getgrgid \
205         getgroups \
206         getgrnam \
207         getgrent \
208         getlogin \
209         getpgrp \
210         getppid \
211         getpwent \
212         getpwnam \
213         getpwuid \
214         gets \
215         getw \
216         getloadavg \
217         gmtime \
218     gmtime_r \
219         isatty \
220         ioctl \
221         jrand48 \
222         kill \
223         labs \
224         lcong48 \
225         link \
226         locale/big5             \
227         locale/collate          \
228         locale/collcmp          \
229         locale/euc              \
230         locale/fix_grouping     \
231         locale/gb18030          \
232         locale/gb2312           \
233         locale/gbk              \
234         locale/iswctype         \
235         locale/ldpart           \
236         locale/localeconv       \
237         locale/lmessages        \
238         locale/lmonetary        \
239         locale/lnumeric         \
240         locale/mbrlen           \
241         locale/mbrtowc          \
242         locale/mbsinit          \
243         locale/mbsnrtowcs       \
244         locale/mskanji          \
245         locale/none             \
246         locale/rune             \
247         locale/runetype         \
248         locale/setlocale        \
249         locale/setrunelocale    \
250         locale/table            \
251         locale/tolower          \
252         locale/toupper          \
253         locale/utf8             \
254         locale/wcrtomb          \
255         locale/wcsnrtombs       \
256         locale/wctrans          \
257         locale/wctype           \
258         localtime \
259         localtime_r \
260         lrand48 \
261         lseek \
262         lstat \
263         malloc \
264         mkdir \
265         mknod \
266         mkstemp \
267         mktemp \
268         mktime \
269         mrand48 \
270         nanosleep \
271         nrand48 \
272         on_exit \
273         open \
274         opendir \
275         pathconf \
276         pclose \
277         perror \
278         pipe \
279         popen \
280         posix_memalign \
281         printf \
282         putenv \
283         putc \
284         puts \
285         putw \
286         qsort \
287         raise \
288         rand \
289         random \
290         read \
291         readdir \
292         readlink \
293         realloc \
294         realloc_nocopy \
295         realpath \
296         regex/regerror  \
297         regex/regexec   \
298         regex/regcomp   \
299         regex/regfree   \
300         remove \
301         rename \
302         rewind \
303         rewinddir \
304         rmdir \
305         scanf \
306         seed48 \
307         seekdir \
308         setbuf \
309         setenv \
310         setgid \
311         setgrent \
312         setlinebuf \
313         setpwent \
314         setrlimit \
315         setuid \
316         setvbuf \
317         sharecontextwithchild \
318         sigaction \
319         sigaddset \
320         sigdelset \
321         sigemptyset \
322         sigfillset \
323         sigismember \
324         signal \
325         sigpending \
326         sigprocmask \
327         sigsuspend \
328         sleep \
329         snprintf \
330         spawnv \
331         spawnvp \
332         sprintf \
333         srand48 \
334         sscanf \
335         stat \
336         stdtime/timelocal       \
337         strftime \
338         strerror \
339         strptime \
340         strtoimax \
341         strtol \
342         strtoll \
343         strtoul \
344         strtoull \
345         strtoumax \
346         sync \
347         sysconf \
348         symlink \
349         system \
350         tcgetattr \
351         telldir \
352         tempnam \
353         time \
354         times \
355         tmpfile \
356         tmpnam \
357         truncate \
358         tcsetattr \
359         ttyname \
360         umask \
361         ungetc \
362         uname \
363         unlink \
364         unsetenv \
365         updatestdio \
366         usleep \
367         utime \
368         utimes \
369         vfprintf \
370         vfscanf \
371         vprintf \
372         vscanf \
373         vsnprintf \
374         vsprintf \
375         vsscanf \
376         wait \
377         waitpid \
378         write
380 SHARED_ARCH := \
381     vfork \
382     vfork_longjmp
384 SHARED_LINKLIB := \
385        arosc_environ \
386        __ctype_linklib
388 # Note: These files are compiled differently
389 #       depending on whether -DAROSC_ROM is used
390 #       or not.
391 ROM_ONLY := \
392         __ctype \
393         __arosc_userdata \
394         __assert_kernel \
395         __vcformat \
396         __vcscan
398 ROM_COMMON := \
399         atof \
400         bcmp \
401         bcopy \
402         bzero \
403         div \
404         ldiv \
405         lldiv \
406         mblen \
407         mbtowc \
408         mbstowcs \
409         memchr \
410         memcmp \
411         memcpy \
412         memmove \
413         memset \
414         stccpy \
415         stcd_l \
416         stcl_d \
417         stcl_h \
418         stcl_o \
419         stch_l \
420         stco_l \
421         stcu_d \
422         stpblk \
423         stpcpy \
424         strcasecmp \
425         strcasestr \
426         strcat \
427         strchr \
428         strcmp \
429         strcpy \
430         strcspn \
431         _errstrings \
432         strerror_rom \
433         strlen \
434         strlcat \
435         strlcpy \
436         strncasecmp \
437         strncat \
438         strncmp \
439         strncpy \
440         strpbrk \
441         strrchr \
442         strrev \
443         strspn \
444         strstr \
445         strtod \
446         wctomb \
447         wcstombs
449 ROM_COMMON_ARCH := \
450         longjmp \
451         setjmp
453 # Objects for rom.lib, from the static build.
454 ROM_STATIC := \
455         __filesystem_support \
456         __isinf \
457         abs \
458         atoi \
459         atol \
460         bsearch \
461         isinf \
462         labs \
463         qsort \
464         rand \
465         snprintf \
466         sprintf \
467         sscanf \
468         stcd_l \
469         stch_l \
470         stcl_d \
471         strchr \
472         strerror_rom \
473         strspn \
474         strtol \
475         strtoll \
476         strtoul \
477         strtoull \
478         strtok \
479         vsnprintf \
480         vsprintf \
481         vsscanf
484 #MM- core-linklibs : linklibs-arosc linklibs-rom
485 #MM- linklibs : linklibs-clib-shared-linklib linklibs-rom
486 #MM- linklibs-clib : linklibs-clib-shared linklibs-rom
487 #MM- linklibs-clib-shared : includes linklibs-mlib \
488 #MM      linklibs-clib-common linklibs-autoinit
489 #MM- linklibs-clib-shared-linklib : includes linklibs-clib-common
490 #MM- linklibs-rom : includes linklibs-clib-common
491 #MM- linklibs-clib-quick : linklibs-clib-shared-quick \
492 #MM      linklibs-clib-common-quick linklibs-rom-quick
493 #MM- linklibs-clib-clean : linklibs-clib-shared-clean \
494 #MM      linklibs-clib-common-clean linklibs-rom-clean
496 #MM- linklibs-clib-quick : linklibs-clib-shared-quick linklibs-rom-quick
498 %build_linklib mmake=linklibs-clib-common \
499     libname=arosccommon files="$(COMMON) $(add-prefix arch/,$(COMMON_ARCH))" \
500     libdir=$(OBJDIR)
503 #   Also build $(AROS_LIB)/librom.a
505 #   This is a library that is allowed to be used inside modules and the
506 #   kernel. It must include no code which refers to global variables.
508 #   Currently the main difference is that it includes a different __assert()
509 #   function to handle asserts in the kernel.
511 ROM_COMMON_OBJS := $(addsuffix .o, \
512     $(addprefix $(OBJDIR)/,$(ROM_COMMON)) \
513     $(addprefix $(OBJDIR)/arch/,$(ROM_COMMON_ARCH)) \
515 %build_linklib mmake=linklibs-rom \
516     libname=rom files="$(ROM_ONLY) $(ROM_STATIC)" objs=$(ROM_COMMON_OBJS) \
517     cflags="$(CFLAGS) -DAROSC_STATIC -DAROSC_ROM"
518     objdir=$(OBJDIR)/static
522 AROSC_LINKLIB_OBJS := $(addsuffix .o, \
523     $(addprefix $(OBJDIR)/,$(COMMON)) \
524     $(addprefix $(OBJDIR)/arch/,$(COMMON_ARCH)) \
526 USER_LDFLAGS := -L$(OBJDIR)
527 %build_module mmake=linklibs-clib-shared \
528     modname=arosc modtype=library objdir=$(OBJDIR)/shared \
529     cflags="$(CFLAGS) -DAROSC_SHARED" \
530     files="$(SHARED) $(SHARED_ARCH)" \
531     linklibfiles=$(SHARED_LINKLIB) linklibobjs=$(AROSC_LINKLIB_OBJS) \
532     uselibs="arosccommon"
535 # x86_64 needs a reduced 32bit librom.a lib.
536 %rule_compile_multi basenames=$(ROM_COMMON) \
537     cflags="-m32 -DAROSC_LIB32 $(CFLAGS)" targetdir=$(OBJDIR)/32bit
539 ROM_COMMON_OBJ32 := $(addsuffix .o, $(addprefix $(OBJDIR)/32bit/,$(ROM_COMMON)))
540 %build_linklib mmake=linklibs-clib32 \
541     libname=rom files="$(ROM_ONLY) $(ROM_STATIC)" objs=$(ROM_COMMON_OBJ32) \
542     cflags="-m32 $(CFLAGS) -DAROSC_LIB32 -DAROSC_STATIC -DAROSC_ROM" \
543     objdir=$(OBJDIR)/static libdir=$(GENDIR)/lib32
547 check : $(TESTDIR)/snprintf
549 $(TESTDIR)/snprintf : snprintf.c $(LIBDIR)/startup.o $(DEPLIBS)
550         $(CC) -DTEST $(ILDFLAGS) $< -o $@ $(LIBS)
553 clean ::
554         -$(RM) $(OBJDIR) *.err $(LIB)