r6831@lvps87-230-33-50: verhaegs | 2008-02-03 14:08:57 +0100
[tangerine.git] / compiler / clib / mmakefile.src
blob46133f96d6dcb329bc5ea5d46d689942ff97b789
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. -Iinclude -I$(TOP)/rom/exec  \
10         -D__mb_cur_max=MB_CUR_MAX               \
11         -DEFTYPE=EINVAL
13 # We are trying to build:
14 #   $(AROS_LIBS)/arosc.library    from $(SHARED)
15 #   $(AROS_LIB)/libarosc.a        from $(COMMON) and $(STUBS)
17 #   It turns out that some of $(SHARED) refer to things in $(COMMON), so
18 #   I've put that into the arosc.library as well.
19 MODULE      :=  arosc.library
20 SHARED_LIB  :=  $(AROS_LIB)/libarosc.a
22 # New: Also trying to build
23 #   $(AROS_LIB)/librom.a            from $(COMMON) and $(ROMONLY)
25 #   This is a library that is allowed to be used inside modules and the
26 #   kernel. It must include no code which refers to global variables.
28 #   Currently the main difference is that it includes a different __assert()
29 #   function to handle asserts in the kernel.
30 ROM_LIB     :=  $(AROS_LIB)/librom.a
32 # All of the above
33 LIB         := $(SHARED_LIB) $(ROM_LIB) $(AROS_LIBS)/$(MODULE)
35 # Lists of files
36 #   - Common always exist in the link library.
38 COMMON  := \
39         __alloca \
40         __isinf \
41         bcmp \
42         bcopy \
43         bzero \
44         div \
45         getopt \
46         isinf \
47         ldiv \
48         lldiv \
49         mblen \
50         mbtowc \
51         mbstowcs \
52         memchr \
53         memcmp \
54         memcpy \
55         memmove \
56         memset \
57         putchar \
58         stccpy \
59         stpblk \
60         stpcpy \
61         stpsym \
62         strcasecmp \
63         strcasestr \
64         strcat \
65         strchr \
66         strcmp \
67         strcoll \
68         strcpy \
69         strcspn \
70         strdup \
71         strlcat \
72         strlcpy \
73         strlen \
74         strlwr \
75         strncasecmp \
76         strncat \
77         strncmp \
78         strncpy \
79         strpbrk \
80         strrchr \
81         strrev \
82         strsep \
83         strspn \
84         strstr \
85         strtod \
86         strtok \
87         strupr \
88         strxfrm \
89         swab \
90         wctomb \
91         wcstombs
93 COMMON_ARCH := \
94         longjmp \
95         setjmp
97 #   - Shared are in either the shared linklib, or the arosc.library module
98 SHARED  := \
99         __arosc_nixmain \
100         __arosc_userdata \
101         __assert \
102         __ctype \
103         __env \
104         __exitfunc \
105         __ioerr2errno \
106         __open \
107         __rand48 \
108         __spawnv \
109         __stat \
110         __stdio \
111         __upath \
112         __vcformat \
113         __vcscan \
114         abort \
115         abs \
116         access \
117         asctime \
118         asctime_r \
119         atexit \
120         atof \
121         atoi \
122         atol \
123         basename \
124         bsearch \
125         calloc \
126         chdir \
127         chmod \
128         chown \
129         clearerr \
130         ctime \
131         ctime_r \
132         clock \
133         close \
134         closedir \
135         creat \
136         difftime \
137         dirfd \
138         dirname \
139         drand48 \
140         dup \
141         dup2 \
142         endgrent \
143         endpwent \
144         erand48 \
145         execl \
146         execvp \
147         exit \
148         _exit \
149         fchmod \
150         fchown \
151         fclose \
152         fcntl \
153         fdopen \
154         feof \
155         ferror \
156         fflush \
157         fgetc \
158         fgetpos \
159         fgets \
160         fileno \
161         fopen \
162         fprintf \
163         fscanf \
164         fsync \
165         fputc \
166         fputs \
167         fread \
168         free \
169         freopen \
170         fseek \
171         fsetpos \
172         fstat \
173         ftell \
174         ftime \
175         ftruncate \
176         fwrite \
177         gcvt \
178         getcwd \
179         getenv \
180         getfsstat \
181         getpid \
182         gettimeofday \
183         getuid \
184         geteuid \
185         getgid \
186         getegid \
187         getgrgid \
188         getgroups \
189         getgrnam \
190         getgrent \
191         getpgrp \
192         getppid \
193         getpwent \
194         getpwnam \
195         getpwuid \
196         getw \
197         getloadavg \
198         gmtime \
199     gmtime_r \
200         isatty \
201         ioctl \
202         jrand48 \
203         kill \
204         labs \
205         lcong48 \
206         link \
207         locale/big5             \
208         locale/collate          \
209         locale/collcmp          \
210         locale/euc              \
211         locale/fix_grouping     \
212         locale/gb18030          \
213         locale/gb2312           \
214         locale/gbk              \
215         locale/iswctype         \
216         locale/ldpart           \
217         locale/localeconv       \
218         locale/lmessages        \
219         locale/lmonetary        \
220         locale/lnumeric         \
221         locale/mbrtowc          \
222         locale/mbsnrtowcs       \
223         locale/mskanji          \
224         locale/none             \
225         locale/rune             \
226         locale/runetype         \
227         locale/setlocale        \
228         locale/setrunelocale    \
229         locale/table            \
230         locale/tolower          \
231         locale/toupper          \
232         locale/utf8             \
233         locale/wcrtomb          \
234         locale/wcsnrtombs       \
235         locale/wctrans          \
236         locale/wctype           \
237         localtime \
238         localtime_r \
239         lrand48 \
240         lseek \
241         malloc \
242         mkdir \
243         mknod \
244         mkstemp \
245         mktemp \
246         mktime \
247         mrand48 \
248         nrand48 \
249         on_exit \
250         open \
251         opendir \
252         pclose \
253         perror \
254         pipe \
255         popen \
256         posix_memalign \
257         printf \
258         putenv \
259         puts \
260         putw \
261         qsort \
262         raise \
263         rand \
264         random \
265         read \
266         readdir \
267         readlink \
268         realloc \
269         realloc_nocopy \
270         regex/regerror  \
271         regex/regexec   \
272         regex/regcomp   \
273         regex/regfree   \
274         remove \
275         rename \
276         rewind \
277         rewinddir \
278         rmdir \
279         scanf \
280         seed48 \
281         seekdir \
282         setbuf \
283         setenv \
284         setgid \
285         setgrent \
286         setlinebuf \
287         setpwent \
288         setuid \
289         setvbuf \
290         sigaction \
291         sigaddset \
292         sigdelset \
293         sigemptyset \
294         sigfillset \
295         sigismember \
296         signal \
297         sigpending \
298         sigprocmask \
299         sigsuspend \
300         sleep \
301         snprintf \
302         spawnv \
303         spawnvp \
304         sprintf \
305         srand48 \
306         sscanf \
307         stat \
308         stcd_l \
309         stcl_d \
310         stcl_h \
311         stcl_o \
312         stch_l \
313         stco_l \
314         stcu_d \
315         stdtime/timelocal       \
316         strftime \
317         strerror \
318         strtol \
319         strtoll \
320         strtoul \
321         strtoull \
322         symlink \
323         system \
324         telldir \
325         tempnam \
326         time \
327         times \
328         tmpfile \
329         tmpnam \
330         truncate \
331         umask \
332         ungetc \
333         unlink \
334         unsetenv \
335         updatestdio \
336         utime \
337         utimes \
338         vfprintf \
339         vfscanf \
340         vprintf \
341         vscanf \
342         vsnprintf \
343         vsprintf \
344         vsscanf \
345         wait \
346         write
348 ROM_ONLY := \
349         __assert_kernel
351 ROM_COMMON := \
352         bcmp \
353         bcopy \
354         bzero \
355         div \
356         ldiv \
357         lldiv \
358         mblen \
359         mbtowc \
360         mbstowcs \
361         memchr \
362         memcmp \
363         memcpy \
364         memmove \
365         memset \
366         stpblk \
367         stpcpy \
368         strcasecmp \
369         strcasestr \
370         strcat \
371         strchr \
372         strcmp \
373         strcpy \
374         strcspn \
375         strerror_rom \
376         strlen \
377         strlcat \
378         strlcpy \
379         strncasecmp \
380         strncat \
381         strncmp \
382         strncpy \
383         strpbrk \
384         strrchr \
385         strrev \
386         strspn \
387         strstr \
388         strtod \
389         strtok \
390         wctomb \
391         wcstombs
393 ROM_COMMON_ARCH := \
394         longjmp \
395         setjmp
397 # Objects for rom.lib, from the static build.
398 ROM_STATIC := \
399         __arosc_userdata \
400         __ctype \
401         __isinf \
402         __vcformat \
403         __vcscan \
404         abs \
405         atoi \
406         atol \
407         bsearch \
408         isinf \
409         labs \
410         qsort \
411         rand \
412         snprintf \
413         sprintf \
414         sscanf \
415         stcd_l \
416         stch_l \
417         stcl_d \
418         strtol \
419         strtoll \
420         strtoul \
421         strtoull \
422         vsnprintf \
423         vsprintf \
424         vsscanf
426 #   - The stubs are generated, and are in the shared link library.
427 STUBS    := $(wildcard $(OBJDIR)/stubs/*.o)
429 # Dependencies
430 DEPS := $(foreach f,$(COMMON),$(OBJDIR)/$(f).d) \
431         $(foreach f,$(SHARED),$(OBJDIR)/shared/$(f).d) \
432         $(OBJDIR)/shared/arosc_init.d $(OBJDIR)/shared/arosc_functable.d \
433         $(OBJDIR)/shared/arosc_endtag.d
435 COMMON_OBJ :=   $(foreach f,$(COMMON),$(OBJDIR)/$(f).o) \
436                 $(foreach f,$(COMMON_ARCH),$(OBJDIR)/arch/$(f).o) 
438 SHARED_OBJ :=   $(COMMON_OBJ) $(STUBS) $(OBJDIR)/arosc_autoinit.o
440 MODULE_OBJ :=   $(foreach f, $(SHARED), $(OBJDIR)/shared/$(f).o)
442 ROM_OBJ    :=   $(foreach f,$(ROM_ONLY),$(OBJDIR)/rom/$(f).o) \
443                 $(foreach f,$(ROM_COMMON),$(OBJDIR)/$(f).o) \
444                 $(foreach f,$(ROM_COMMON_ARCH),$(OBJDIR)/arch/$(f).o) \
445                 $(foreach f,$(ROM_STATIC),$(OBJDIR)/static/$(f).o)
447 # These are added to the link step of arosc.library
448 LIBS := -L$(AROS_LIB) -larosm -lautoinit
449 DEP_LIBS := arosm autoinit
451 #MM- linklibs-core : linklibs-clib
452 #MM- linklibs : linklibs-clib
453 #MM linklibs-clib : setup-clib includes linklibs-mlib linklibs-autoinit \
454 #MM                     clib-stubs
457 linklibs-clib-quick : linklibs-clib
459 linklibs-clib : setup-clib $(SHARED_LIB) $(ROM_LIB) $(AROS_LIBS)/$(MODULE)
461 $(OBJDIR)/libarosccommon.a: $(COMMON_OBJ)
462         %mklib_q from=$^
464 $(SHARED_LIB) : $(SHARED_OBJ)
465         %mklib_q from=$^
467 $(ROM_LIB) : $(ROM_OBJ)
468         %mklib_q from=$^
470 $(AROS_LIBS)/$(MODULE) : $(MODULE_OBJ) $(OBJDIR)/libarosccommon.a
471         %link_module_q \
472             objs="$(OBJDIR)/shared/arosc_init.o $(OBJDIR)/shared/arosc_functable.o $(MODULE_OBJ)" \
473             endtag="$(OBJDIR)/shared/arosc_endtag.o" \
474             ldflags="$(LDFLAGS) -L$(OBJDIR) $(NOSTDLIB_LDFLAGS)" \
475             libs="$(LIBS) -larosccommon"
477 $(OBJDIR)/static/%.o : %.c
478         %compile_q opt="$(CFLAGS)"
480 $(OBJDIR)/shared/%.o : %.c
481         %compile_q opt="$(CFLAGS) -DAROSC_SHARED"
483 $(OBJDIR)/rom/%.o : %.c
484         %compile_q opt="$(CFLAGS)"
486 $(OBJDIR)/%.o : %.c
487         %compile_q opt="$(CFLAGS)"
489 # Need to copy these files in from the machine dependant build.
490 $(OBJDIR)/shared/%jmp.o : $(OBJDIR)/%jmp.o
491         @$(CP) $< $@
493 # The rules to create the dependancy files.
494 $(OBJDIR)/static/%.d : %.c
495         %mkdepend_q flags=$(CFLAGS)
497 $(OBJDIR)/shared/%.d : %.c
498         %mkdepend_q flags="$(CFLAGS) -include __arosc_privdata.h"
500 $(OBJDIR)/rom/%.d : %.c
501         %mkdepend_q flags=$(CFLAGS)
503 $(OBJDIR)/%.d : %.c
504         %mkdepend_q flags=$(CFLAGS)
507 setup-clib :
508         %mkdirs_q $(AROS_INCLUDES)/sys $(OBJDIR)
509         %mkdirs_q $(OBJDIR)/static $(OBJDIR)/shared $(OBJDIR)/rom
510         %mkdirs_q $(AROS_LIB) $(AROS_LIBS)
513 check : $(TESTDIR)/snprint
515 $(TESTDIR)/snprintf : snprintf.c $(LIBDIR)/startup.o $(DEPLIBS)
516         $(CC) -DTEST $(ILDFLAGS) $(LIBDIR)/startup.o $< -o $@ $(LIBS)
519 clean ::
520         -$(RM) $(OBJDIR) *.err $(LIB)
522 %common
523 %include_deps
525 # Fix up the deps, these won't end up in $^, but they'll make it work.
526 $(AROS_LIBS)/$(MODULE) : $(OBJDIR)/shared/arosc_init.o $(OBJDIR)/shared/arosc_functable.o $(OBJDIR)/shared/arosc_endtag.o
527 $(AROS_LIBS)/$(MODULE) : $(foreach f,$(DEP_LIBS),$(AROS_LIB)/lib$(f).a)
528 $(OBJDIR)/shared/arosc_init.o $(OBJDIR)/shared/arosc_functable.o: $(AROS_INCLUDES)/sys/syscall.def