Fixed binary search: no more infinite loops when vendor is unknown.
[tangerine.git] / compiler / clib / mmakefile.src
blob38b3584cac6d2bbe8d8d87a9e83e8e357a8ce7b1
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 -I$(SRCDIR)/rom/exec -I$(GENDIR)/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         __get_default_file \
104         __env \
105         __exitfunc \
106         __ioerr2errno \
107         __open \
108         __rand48 \
109         __spawnv \
110         __stat \
111         __stdio \
112         __upath \
113         __vcformat \
114         __vcscan \
115         __vfork \
116         abort \
117         abs \
118         access \
119         asctime \
120         asctime_r \
121         atexit \
122         atof \
123         atoi \
124         atol \
125         basename \
126         bsearch \
127         calloc \
128         chdir \
129         chmod \
130         chown \
131         clearerr \
132         ctime \
133         ctime_r \
134         clock \
135         close \
136         closedir \
137         creat \
138         difftime \
139         dirfd \
140         dirname \
141         drand48 \
142         dup \
143         dup2 \
144         endgrent \
145         endpwent \
146         erand48 \
147         execl \
148         execlp \
149         execv \
150         execve \
151         execvp \
152         __exec \
153         exit \
154         _exit \
155     fchdir \
156         fchmod \
157         fchown \
158         fclose \
159         fcntl \
160         fdopen \
161         feof \
162         ferror \
163         fflush \
164         fgetc \
165         fgetpos \
166         fgets \
167         fileno \
168         flock \
169         fopen \
170         fprintf \
171         fscanf \
172         fsync \
173         fputc \
174         fputs \
175         fread \
176         free \
177         freopen \
178         fseek \
179         fsetpos \
180         fstat \
181         ftell \
182         ftime \
183         ftruncate \
184         fwrite \
185         gcvt \
186         getc \
187         getchar \
188         getcwd \
189         getenv \
190         getfsstat \
191         statfs \
192         getpid \
193         gettimeofday \
194         getuid \
195         geteuid \
196         getgid \
197         getegid \
198         getgrgid \
199         getgroups \
200         getgrnam \
201         getgrent \
202         getlogin \
203         getpgrp \
204         getppid \
205         getpwent \
206         getpwnam \
207         getpwuid \
208         gets \
209         getw \
210         getloadavg \
211         gmtime \
212     gmtime_r \
213         isatty \
214         ioctl \
215         jrand48 \
216         kill \
217         labs \
218         lcong48 \
219         link \
220         locale/big5             \
221         locale/collate          \
222         locale/collcmp          \
223         locale/euc              \
224         locale/fix_grouping     \
225         locale/gb18030          \
226         locale/gb2312           \
227         locale/gbk              \
228         locale/iswctype         \
229         locale/ldpart           \
230         locale/localeconv       \
231         locale/lmessages        \
232         locale/lmonetary        \
233         locale/lnumeric         \
234         locale/mbrlen           \
235         locale/mbrtowc          \
236         locale/mbsinit          \
237         locale/mbsnrtowcs       \
238         locale/mskanji          \
239         locale/none             \
240         locale/rune             \
241         locale/runetype         \
242         locale/setlocale        \
243         locale/setrunelocale    \
244         locale/table            \
245         locale/tolower          \
246         locale/toupper          \
247         locale/utf8             \
248         locale/wcrtomb          \
249         locale/wcsnrtombs       \
250         locale/wctrans          \
251         locale/wctype           \
252         localtime \
253         localtime_r \
254         lrand48 \
255         lseek \
256         malloc \
257         mkdir \
258         mknod \
259         mkstemp \
260         mktemp \
261         mktime \
262         mrand48 \
263         nrand48 \
264         on_exit \
265         open \
266         opendir \
267         pclose \
268         perror \
269         pipe \
270         popen \
271         posix_memalign \
272         printf \
273         putenv \
274         putc \
275         puts \
276         putw \
277         qsort \
278         raise \
279         rand \
280         random \
281         read \
282         readdir \
283         readlink \
284         realloc \
285         realloc_nocopy \
286         regex/regerror  \
287         regex/regexec   \
288         regex/regcomp   \
289         regex/regfree   \
290         remove \
291         rename \
292         rewind \
293         rewinddir \
294         rmdir \
295         scanf \
296         seed48 \
297         seekdir \
298         setbuf \
299         setenv \
300         setgid \
301         setgrent \
302         setlinebuf \
303         setpwent \
304         setuid \
305         setvbuf \
306         sharecontextwithchild \
307         sigaction \
308         sigaddset \
309         sigdelset \
310         sigemptyset \
311         sigfillset \
312         sigismember \
313         signal \
314         sigpending \
315         sigprocmask \
316         sigsuspend \
317         sleep \
318         snprintf \
319         spawnv \
320         spawnvp \
321         sprintf \
322         srand48 \
323         sscanf \
324         stat \
325         stcd_l \
326         stcl_d \
327         stcl_h \
328         stcl_o \
329         stch_l \
330         stco_l \
331         stcu_d \
332         stdtime/timelocal       \
333         strftime \
334         strerror \
335         strptime \
336         strtoimax \
337         strtol \
338         strtoll \
339         strtoul \
340         strtoull \
341         strtoumax \
342         symlink \
343         system \
344         telldir \
345         tempnam \
346         time \
347         times \
348         tmpfile \
349         tmpnam \
350         truncate \
351         ttyname \
352         umask \
353         ungetc \
354         uname \
355         unlink \
356         unsetenv \
357         updatestdio \
358         usleep \
359         utime \
360         utimes \
361         vfprintf \
362         vfscanf \
363         vprintf \
364         vscanf \
365         vsnprintf \
366         vsprintf \
367         vsscanf \
368         wait \
369         waitpid \
370         write
372 SHARED_ARCH := \
373     vfork \
374     vfork_longjmp
376 ROM_ONLY := \
377         __assert_kernel
379 ROM_COMMON := \
380         bcmp \
381         bcopy \
382         bzero \
383         div \
384         ldiv \
385         lldiv \
386         mblen \
387         mbtowc \
388         mbstowcs \
389         memchr \
390         memcmp \
391         memcpy \
392         memmove \
393         memset \
394         stpblk \
395         stpcpy \
396         strcasecmp \
397         strcasestr \
398         strcat \
399         strchr \
400         strcmp \
401         strcpy \
402         strcspn \
403         strerror_rom \
404         strlen \
405         strlcat \
406         strlcpy \
407         strncasecmp \
408         strncat \
409         strncmp \
410         strncpy \
411         strpbrk \
412         strrchr \
413         strrev \
414         strspn \
415         strstr \
416         strtod \
417         strtok \
418         wctomb \
419         wcstombs
421 ROM_COMMON_ARCH := \
422         longjmp \
423         setjmp
425 # Objects for rom.lib, from the static build.
426 ROM_STATIC := \
427         __arosc_userdata \
428         __ctype \
429         __isinf \
430         __vcformat \
431         __vcscan \
432         abs \
433         atoi \
434         atol \
435         bsearch \
436         isinf \
437         labs \
438         qsort \
439         rand \
440         snprintf \
441         sprintf \
442         sscanf \
443         stcd_l \
444         stch_l \
445         stcl_d \
446         strtol \
447         strtoll \
448         strtoul \
449         strtoull \
450         vsnprintf \
451         vsprintf \
452         vsscanf
454 #   - The stubs are generated, and are in the shared link library.
455 STUBS    := $(wildcard $(OBJDIR)/stubs/*.o)
457 # Dependencies
458 DEPS := $(foreach f,$(COMMON),$(OBJDIR)/$(f).d) \
459         $(foreach f,$(SHARED),$(OBJDIR)/shared/$(f).d) \
460         $(OBJDIR)/shared/arosc_init.d $(OBJDIR)/shared/arosc_functable.d \
461         $(OBJDIR)/shared/arosc_endtag.d
463 COMMON_OBJ :=   $(foreach f,$(COMMON),$(OBJDIR)/$(f).o) \
464                 $(foreach f,$(COMMON_ARCH),$(OBJDIR)/arch/$(f).o) 
466 SHARED_OBJ :=   $(COMMON_OBJ) $(STUBS) $(OBJDIR)/arosc_autoinit.o
468 MODULE_OBJ :=   $(foreach f, $(SHARED), $(OBJDIR)/shared/$(f).o) \
469                 $(foreach f,$(SHARED_ARCH),$(OBJDIR)/shared/arch/$(f).o) 
471 ROM_OBJ    :=   $(foreach f,$(ROM_ONLY),$(OBJDIR)/rom/$(f).o) \
472                 $(foreach f,$(ROM_COMMON),$(OBJDIR)/$(f).o) \
473                 $(foreach f,$(ROM_COMMON_ARCH),$(OBJDIR)/arch/$(f).o) \
474                 $(foreach f,$(ROM_STATIC),$(OBJDIR)/static/$(f).o)
476 # These are added to the link step of arosc.library
477 LIBS := -lgcc -L$(AROS_LIB) -larosm -lautoinit
478 DEP_LIBS := arosm autoinit
480 #MM- linklibs-core : linklibs-clib
481 #MM- linklibs : linklibs-clib
482 #MM linklibs-clib : setup-clib includes linklibs-mlib linklibs-autoinit \
483 #MM                     clib-stubs
486 linklibs-clib-quick : linklibs-clib
488 linklibs-clib : setup-clib $(SHARED_LIB) $(ROM_LIB) $(AROS_LIBS)/$(MODULE)
490 $(OBJDIR)/libarosccommon.a: $(COMMON_OBJ)
491         %mklib_q from=$^
493 $(SHARED_LIB) : $(SHARED_OBJ)
494         %mklib_q from=$^
496 $(ROM_LIB) : $(ROM_OBJ)
497         %mklib_q from=$^
499 $(AROS_LIBS)/$(MODULE) : $(MODULE_OBJ) $(OBJDIR)/libarosccommon.a
500         %link_module_q \
501             objs="$(OBJDIR)/shared/arosc_init.o $(OBJDIR)/shared/arosc_functable.o $(MODULE_OBJ)" \
502             endtag="$(OBJDIR)/shared/arosc_endtag.o" \
503             ldflags="$(LDFLAGS) -L$(OBJDIR) $(NOSTDLIB_LDFLAGS)" \
504             libs="$(LIBS) -larosccommon"
506 $(OBJDIR)/static/%.o : %.c
507         %compile_q opt="$(CFLAGS) -DAROSC_STATIC"
509 $(OBJDIR)/shared/%.o : %.c
510         %compile_q opt="$(CFLAGS) -DAROSC_SHARED"
512 $(OBJDIR)/rom/%.o : %.c
513         %compile_q opt="$(CFLAGS)"
515 $(OBJDIR)/%.o : %.c
516         %compile_q opt="$(CFLAGS)"
518 # Need to copy these files in from the machine dependant build.
519 $(OBJDIR)/shared/%jmp.o : $(OBJDIR)/%jmp.o
520         @$(CP) $< $@
522 # The rules to create the dependancy files.
523 $(OBJDIR)/static/%.d : %.c
524         %mkdepend_q flags=$(CFLAGS)
526 $(OBJDIR)/shared/%.d : %.c
527         %mkdepend_q flags="$(CFLAGS) -include __arosc_privdata.h"
529 $(OBJDIR)/rom/%.d : %.c
530         %mkdepend_q flags=$(CFLAGS)
532 $(OBJDIR)/%.d : %.c
533         %mkdepend_q flags=$(CFLAGS)
536 setup-clib :
537         %mkdirs_q $(AROS_INCLUDES)/sys $(OBJDIR)
538         %mkdirs_q $(OBJDIR)/static $(OBJDIR)/shared $(OBJDIR)/rom
539         %mkdirs_q $(AROS_LIB) $(AROS_LIBS)
542 check : $(TESTDIR)/snprint
544 $(TESTDIR)/snprintf : snprintf.c $(LIBDIR)/startup.o $(DEPLIBS)
545         $(CC) -DTEST $(ILDFLAGS) $(LIBDIR)/startup.o $< -o $@ $(LIBS)
548 clean ::
549         -$(RM) $(OBJDIR) *.err $(LIB)
551 %common
552 %include_deps
554 # Fix up the deps, these won't end up in $^, but they'll make it work.
555 $(AROS_LIBS)/$(MODULE) : $(OBJDIR)/shared/arosc_init.o $(OBJDIR)/shared/arosc_functable.o $(OBJDIR)/shared/arosc_endtag.o
556 $(AROS_LIBS)/$(MODULE) : $(foreach f,$(DEP_LIBS),$(AROS_LIB)/lib$(f).a)
557 $(OBJDIR)/shared/arosc_init.o $(OBJDIR)/shared/arosc_functable.o: $(AROS_INCLUDES)/sys/syscall.def