compiler/clib: #error if not cpu specific implementation of setjmp(), longjmp(),...
[AROS.git] / compiler / clib / mmakefile.src
blob0f4ad56bab39dc63198bed81674ac7b1eda6614f
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
387 # Note: These files are compiled differently
388 #       depending on whether -DAROSC_ROM is used
389 #       or not.
390 ROM_ONLY := \
391         __ctype \
392         __arosc_userdata \
393         __assert_kernel \
394         __vcformat \
395         __vcscan
397 ROM_COMMON := \
398         atof \
399         bcmp \
400         bcopy \
401         bzero \
402         div \
403         ldiv \
404         lldiv \
405         mblen \
406         mbtowc \
407         mbstowcs \
408         memchr \
409         memcmp \
410         memcpy \
411         memmove \
412         memset \
413         stccpy \
414         stcd_l \
415         stcl_d \
416         stcl_h \
417         stcl_o \
418         stch_l \
419         stco_l \
420         stcu_d \
421         stpblk \
422         stpcpy \
423         strcasecmp \
424         strcasestr \
425         strcat \
426         strchr \
427         strcmp \
428         strcpy \
429         strcspn \
430         _errstrings \
431         strerror_rom \
432         strlen \
433         strlcat \
434         strlcpy \
435         strncasecmp \
436         strncat \
437         strncmp \
438         strncpy \
439         strpbrk \
440         strrchr \
441         strrev \
442         strspn \
443         strstr \
444         strtod \
445         wctomb \
446         wcstombs
448 ROM_COMMON_ARCH := \
449         longjmp \
450         setjmp
452 # Objects for rom.lib, from the static build.
453 ROM_STATIC := \
454         __filesystem_support \
455         __isinf \
456         abs \
457         atoi \
458         atol \
459         bsearch \
460         isinf \
461         labs \
462         qsort \
463         rand \
464         snprintf \
465         sprintf \
466         sscanf \
467         stcd_l \
468         stch_l \
469         stcl_d \
470         strchr \
471         strerror_rom \
472         strspn \
473         strtol \
474         strtoll \
475         strtoul \
476         strtoull \
477         strtok \
478         vsnprintf \
479         vsprintf \
480         vsscanf
483 #MM- core-linklibs : linklibs-arosc linklibs-rom
484 #MM- linklibs : linklibs-clib-shared-linklib linklibs-rom
485 #MM- linklibs-clib : linklibs-clib-shared linklibs-rom
486 #MM- linklibs-clib-shared : includes linklibs-mlib \
487 #MM      linklibs-clib-common linklibs-autoinit
488 #MM- linklibs-clib-shared-linklib : includes linklibs-clib-common
489 #MM- linklibs-rom : includes linklibs-clib-common
490 #MM- linklibs-clib-quick : linklibs-clib-shared-quick \
491 #MM      linklibs-clib-common-quick linklibs-rom-quick
492 #MM- linklibs-clib-clean : linklibs-clib-shared-clean \
493 #MM      linklibs-clib-common-clean linklibs-rom-clean
495 #MM- linklibs-clib-quick : linklibs-clib-shared-quick linklibs-rom-quick
497 %build_linklib mmake=linklibs-clib-common \
498     libname=arosccommon files="$(COMMON) $(add-prefix arch/,$(COMMON_ARCH))" \
499     libdir=$(OBJDIR)
502 #   Also build $(AROS_LIB)/librom.a
504 #   This is a library that is allowed to be used inside modules and the
505 #   kernel. It must include no code which refers to global variables.
507 #   Currently the main difference is that it includes a different __assert()
508 #   function to handle asserts in the kernel.
510 ROM_COMMON_OBJS := $(addsuffix .o, \
511     $(addprefix $(OBJDIR)/,$(ROM_COMMON)) \
512     $(addprefix $(OBJDIR)/arch/,$(ROM_COMMON_ARCH)) \
514 %build_linklib mmake=linklibs-rom \
515     libname=rom files="$(ROM_ONLY) $(ROM_STATIC)" objs=$(ROM_COMMON_OBJS) \
516     cflags="$(CFLAGS) -DAROSC_STATIC -DAROSC_ROM"
517     objdir=$(OBJDIR)/static
521 AROSC_LINKLIB_OBJS := $(addsuffix .o, \
522     $(addprefix $(OBJDIR)/,$(COMMON)) \
523     $(addprefix $(OBJDIR)/arch/,$(COMMON_ARCH)) \
525 USER_LDFLAGS := -L$(OBJDIR)
526 %build_module mmake=linklibs-clib-shared \
527     modname=arosc modtype=library objdir=$(OBJDIR)/shared \
528     cflags="$(CFLAGS) -DAROSC_SHARED" \
529     files="$(SHARED) $(SHARED_ARCH)" \
530     linklibfiles=$(SHARED_LINKLIB) linklibobjs=$(AROSC_LINKLIB_OBJS) \
531     uselibs="arosccommon"
534 # x86_64 needs a reduced 32bit librom.a lib.
535 %rule_compile_multi basenames=$(ROM_COMMON) \
536     cflags="-m32 -DAROSC_LIB32 $(CFLAGS)" targetdir=$(OBJDIR)/32bit
538 ROM_COMMON_OBJ32 := $(addsuffix .o, $(addprefix $(OBJDIR)/32bit/,$(ROM_COMMON)))
539 %build_linklib mmake=linklibs-clib32 \
540     libname=rom files="$(ROM_ONLY) $(ROM_STATIC)" objs=$(ROM_COMMON_OBJ32) \
541     cflags="-m32 $(CFLAGS) -DAROSC_LIB32 -DAROSC_STATIC -DAROSC_ROM" \
542     objdir=$(OBJDIR)/static libdir=$(GENDIR)/lib32
546 check : $(TESTDIR)/snprintf
548 $(TESTDIR)/snprintf : snprintf.c $(LIBDIR)/startup.o $(DEPLIBS)
549         $(CC) -DTEST $(ILDFLAGS) $< -o $@ $(LIBS)
552 clean ::
553         -$(RM) $(OBJDIR) *.err $(LIB)