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