* device/lib/Makefile.in: fixed parallel builds (i.e., make -jN, N>1)
[fw/sdcc] / device / lib / Makefile.in
1 #
2 #
3 #
4
5 VERSION         = @VERSION@
6 VERSIONHI       = @VERSIONHI@
7 VERSIONLO       = @VERSIONLO@
8 VERSIONP        = @VERSIONP@
9
10 SHELL           = /bin/sh
11 CPP             = @CPP@
12 INSTALL         = @INSTALL@
13 CP              = @CP@
14
15 LIB_TYPE        = @LIB_TYPE@
16
17 ifeq ($(shell uname -s),Linux)
18 CP_U    = $(CP) -u
19 else
20 CP_U    = $(CP)
21 endif
22
23 top_builddir    = @top_builddir@
24 top_srcdir      = @top_srcdir@
25 VPATH           = @srcdir@
26 srcdir          = @srcdir@
27 INCDIR          = $(top_srcdir)/device/include
28 ifndef PORTINCDIR
29 PORTINCDIR      = $(INCDIR)/mcs51
30 endif
31
32 CC              = $(top_builddir)/bin/sdcc
33 CPP             = $(top_builddir)/bin/sdcpp
34
35 prefix          = @prefix@
36 exec_prefix     = @exec_prefix@
37 bindir          = @bindir@
38 libdir          = @libdir@
39 datadir         = @datadir@
40 datarootdir     = @datarootdir@
41 includedir      = @includedir@
42 mandir          = @mandir@
43 man1dir         = $(mandir)/man1
44 man2dir         = $(mandir)/man2
45 infodir         = @infodir@
46
47 lib_dir_suffix  = @lib_dir_suffix@
48
49 sdcc_libdir     = $(DESTDIR)$(datadir)/$(lib_dir_suffix)
50
51 CPPFLAGS        = -I$(INCDIR) -I$(PORTINCDIR)
52 CFLAGS          = $(MODELFLAGS) --nostdinc --std-c99
53
54 BUILDDIR        = build
55 # Default
56 PORT            = z80
57 ifndef PORTDIR
58 PORTDIR         = $(abspath $(BUILDDIR)/$(PORT))
59 endif
60
61 OPT_DISABLE_AVR   = @OPT_DISABLE_AVR@
62 OPT_DISABLE_DS390 = @OPT_DISABLE_DS390@
63 OPT_DISABLE_DS400 = @OPT_DISABLE_DS400@
64 OPT_DISABLE_GBZ80 = @OPT_DISABLE_GBZ80@
65 OPT_DISABLE_HC08  = @OPT_DISABLE_HC08@
66 OPT_DISABLE_MCS51 = @OPT_DISABLE_MCS51@
67 OPT_DISABLE_PIC   = @OPT_DISABLE_PIC@
68 OPT_DISABLE_PIC16 = @OPT_DISABLE_PIC16@
69 OPT_DISABLE_XA51  = @OPT_DISABLE_XA51@
70 OPT_DISABLE_Z80   = @OPT_DISABLE_Z80@
71
72 SOURCES_FLOAT = $(COMMON_FLOAT) \
73   _fscmp.c \
74   _fsget1arg.c \
75   _fsget2args.c \
76   _fsnormalize.c \
77   _fsreturnval.c \
78   _fsrshift.c \
79   _fsswapargs.c \
80   _logexpf.c
81
82 SOURCES_INT = $(COMMON_INT) \
83   _divsint.c \
84   _divuint.c \
85   _modsint.c \
86   _moduint.c \
87   _mulint.c
88
89 SOURCES_LONG = $(COMMON_LONG) \
90   _divulong.c \
91   _mullong.c
92
93 SOURCES_SDCC = $(COMMON_SDCC) \
94   _autobaud.c \
95   _bp.c \
96   _decdptr.c \
97   _gptrget.c \
98   _gptrgetc.c \
99   _gptrput.c \
100   _ser.c \
101   _setjmp.c \
102   serial.c \
103   _itoa.c \
104   _ltoa.c \
105   _spx.c \
106   _startup.c \
107   _strlen.c \
108   _memmove.c \
109   _heap.c \
110   sprintf.c \
111   vprintf.c \
112   printf_fast.c \
113   printf_fast_f.c \
114   printf_tiny.c \
115   printfl.c \
116   bpx.c
117
118 SOURCES = $(SOURCES_FLOAT) $(SOURCES_INT) $(SOURCES_LONG) $(SOURCES_SDCC)
119
120 OBJECTS_FLOAT = $(SOURCES_FLOAT:%.c=$(PORT)/%.rel)
121 OBJECTS_INT = $(SOURCES_INT:%.c=$(PORT)/%.rel)
122 OBJECTS_LONG = $(SOURCES_LONG:%.c=$(PORT)/%.rel)
123 OBJECTS_SDCC = $(SOURCES_SDCC:%.c=$(PORT)/%.rel)
124
125 OBJECTS = $(OBJECTS_FLOAT) $(OBJECTS_INT) $(OBJECTS_LONG) $(OBJECTS_SDCC)
126
127 XA51_FLOAT = $(COMMON_FLOAT)
128
129 XA51_INT = $(COMMON_INT) \
130   _divsint.c \
131   _divuint.c \
132   _modsint.c \
133   _moduint.c \
134   _mulint.c
135
136 XA51_LONG = $(COMMON_LONG) \
137   _divulong.c \
138   _mullong.c
139
140 XA51_SDCC = $(COMMON_SDCC) \
141   _memmove.c \
142   _strlen.c \
143   _heap.c
144
145 XA51SOURCES = $(XA51_FLOAT) $(XA51_INT) $(XA51_LONG) $(XA51_SDCC)
146 XA51OBJECTS = $(XA51SOURCES:%.c=$(PORT)/%.rel)
147
148 ifeq ($(LIB_TYPE), SDCCLIB)
149 LIB_FILES = $(PORTDIR)/libfloat.lib $(PORTDIR)/libint.lib $(PORTDIR)/liblong.lib $(PORTDIR)/libsdcc.lib
150 else ifeq ($(LIB_TYPE), AR)
151 LIB_FILES = $(PORTDIR)/libfloat.lib $(PORTDIR)/libint.lib $(PORTDIR)/liblong.lib $(PORTDIR)/libsdcc.lib
152 else ifeq ($(LIB_TYPE), RANLIB)
153 LIB_FILES = $(PORTDIR)/libfloat.lib $(PORTDIR)/libint.lib $(PORTDIR)/liblong.lib $(PORTDIR)/libsdcc.lib
154 else
155 LIB_FILES = $(OBJECTS_FLOAT) $(OBJECTS_INT) $(OBJECTS_LONG) $(OBJECTS_SDCC) $(PORTDIR)/libfloat.lib $(PORTDIR)/libint.lib $(PORTDIR)/liblong.lib $(PORTDIR)/libsdcc.lib
156 endif
157
158 OEXT            = .rel
159
160 include $(srcdir)/incl.mk
161
162 ifeq ($(OPT_DISABLE_DS390), 0)
163 TARGETS        += model-ds390
164 endif
165
166 ifeq ($(OPT_DISABLE_DS400), 0)
167 TARGETS        += model-ds400
168 endif
169
170 ifeq ($(OPT_DISABLE_HC08), 0)
171 TARGETS        += model-hc08
172 endif
173
174 ifeq ($(OPT_DISABLE_MCS51), 0)
175 TARGETS        += models small-mcs51-stack-auto
176 endif
177
178 ifeq ($(OPT_DISABLE_PIC), 0)
179 TARGETS        += model-pic14
180 endif
181
182 ifeq ($(OPT_DISABLE_PIC16), 0)
183 TARGETS        += model-pic16
184 endif
185
186 ifeq ($(OPT_DISABLE_Z80), 0)
187 TARGETS        += model-z80
188 endif
189
190 ifeq ($(OPT_DISABLE_GBZ80), 0)
191 TARGETS        += model-gbz80
192 endif
193
194 # Compiling entire program or any subproject
195 # ------------------------------------------
196 all:
197         $(MAKE) checkconf
198         $(MAKE) $(TARGETS)
199
200 objects:
201         $(MAKE) build-dir
202         $(MAKE) $(OBJECTS)
203         $(MAKE) port-specific-objects
204         $(MAKE) $(LIB_FILES)
205         $(MAKE) clean_intermediate
206
207 models:
208         if grep '^mcs51\>' $(top_builddir)/ports.build > /dev/null; then \
209           for model in $(MODELS); do \
210             $(MAKE) MODELFLAGS="--model-$$model" PORT=$$model PORTINCDIR=$(INCDIR)/mcs51 objects; \
211           done \
212         fi
213
214 small-mcs51-stack-auto:
215         if grep '^mcs51\>' $(top_builddir)/ports.build > /dev/null; then \
216           mkdir -p small-stack-auto; cp small/Makefile small-stack-auto; \
217           $(MAKE) MODELFLAGS="--model-small --stack-auto" PORT=small-stack-auto PORTDIR=$(abspath $(BUILDDIR)/small-stack-auto) PORTINCDIR=$(INCDIR)/mcs51 objects; \
218         fi
219
220 model-mcs51-stack-auto:
221         if grep '^mcs51\>' $(top_builddir)/ports.build > /dev/null; then \
222           for model in $(MODELS); do \
223             mkdir -p $${model}-stack-auto; cp $${model}/Makefile $${model}-stack-auto; \
224             $(MAKE) MODELFLAGS="--model-$$model --stack-auto" PORT=$${model}-stack-auto PORTDIR=$(abspath $(BUILDDIR)/$${model}-stack-auto) PORTINCDIR=$(INCDIR)/mcs51 objects; \
225           done \
226         fi
227
228 model-mcs51-xstack-auto:
229         if grep '^mcs51\>' $(top_builddir)/ports.build > /dev/null; then \
230           for model in $(MODELS); do \
231             mkdir -p $${model}-xstack-auto; cp $${model}/Makefile $${model}-xstack-auto; \
232             $(MAKE) MODELFLAGS="--model-$$model --stack-auto --xstack -DUSE_FLOATS=1" PORT=$${model}-xstack-auto PORTDIR=$(abspath $(BUILDDIR)/$${model}-xstack-auto) PORTINCDIR=$(INCDIR)/mcs51 objects; \
233           done \
234         fi
235
236 model-ds390:
237         if grep '^ds390\>' $(top_builddir)/ports.build > /dev/null; then \
238           $(MAKE) MODELFLAGS="-mds390" PORT=ds390 PORTINCDIR=$(INCDIR)/mcs51 objects; \
239         fi
240
241 model-ds400:
242         if grep '^ds400\>' $(top_builddir)/ports.build > /dev/null; then \
243           $(MAKE) MODELFLAGS="-mds400" PORT=ds400 PORTINCDIR=$(INCDIR)/mcs51 objects; \
244         fi
245
246 model-xa51:
247         if grep '^xa51\>' $(top_builddir)/ports.build > /dev/null; then \
248           $(MAKE) MODELFLAGS="-mxa51" PORT=xa51 objects-xa51; \
249         fi
250
251 objects-xa51:
252         $(MAKE) build-dir
253         $(MAKE) $(XA51OBJECTS)
254         $(MAKE) port-specific-objects
255
256 $(PORTDIR)/lib$(PORT).lib: $(XA51OBJECTS)
257 ifeq ($(LIB_TYPE), SDCCLIB)
258         ../../bin/sdcclib -a $(PORTDIR)/lib$(PORT).lib $(XA51OBJECTS)
259 else ifeq ($(LIB_TYPE), AR)
260         ar -Sq $(PORTDIR)/lib$(PORT).lib $(XA51OBJECTS)
261 else ifeq ($(LIB_TYPE), RANLIB)
262         ar -Sq $(PORTDIR)/lib$(PORT).lib $(XA51OBJECTS)
263         $(top_builddir)/bin/asranlib $(PORTDIR)/lib$(PORT).lib
264 else
265         rm -f $(PORTDIR)/lib$(PORT).lib
266         for i in $(notdir $(basename $(XA51OBJECTS))); do echo $$i >> $(PORTDIR)/lib$(PORT).lib; done
267         cp $(XA51OBJECTS) $(PORTDIR)
268 endif
269
270 model-z80:
271         if grep '^z80\>' $(top_builddir)/ports.build > /dev/null; then \
272           $(MAKE) MODELFLAGS="-mz80" PORT=z80 objects-z80 OEXT=.o; \
273         fi
274
275 model-gbz80:
276         if grep '^z80\>' $(top_builddir)/ports.build > /dev/null; then \
277           $(MAKE) MODELFLAGS="-mgbz80" PORT=gbz80 objects-z80 OEXT=.o; \
278         fi
279
280 objects-z80:
281         $(MAKE) build-dir
282         $(MAKE) port-specific-objects
283         $(MAKE) clean_intermediate
284
285 model-hc08:
286         if grep '^hc08\>' $(top_builddir)/ports.build > /dev/null; then \
287           $(MAKE) MODELFLAGS="-mhc08" PORT=hc08 objects-hc08; \
288         fi
289
290 objects-hc08:
291         $(MAKE) build-dir
292         $(MAKE) port-specific-objects
293         $(MAKE) clean_intermediate
294
295 model-pic16:
296         if grep '^pic16\>' $(top_builddir)/ports.build > /dev/null; then \
297           $(MAKE) PORT=pic16 objects-pic16; \
298         fi
299
300 objects-pic16:
301         $(MAKE) build-dir
302         $(MAKE) port-specific-objects-pic16
303         $(MAKE) clean_intermediate-pic16
304
305 model-pic14:
306         if grep '^pic\>' $(top_builddir)/ports.build > /dev/null; then \
307           $(MAKE) PORT=pic objects-pic14; \
308         fi
309
310 objects-pic14:
311         $(MAKE) build-dir
312         $(MAKE) port-specific-objects-pic14
313         $(MAKE) clean_intermediate-pic14
314
315 build-dir:
316         $(MAKE) $(PORTDIR)
317         $(MAKE) $(PORT)
318
319 $(PORTDIR):
320         mkdir -p $(PORTDIR)
321
322 $(PORT):
323         mkdir -p $(PORT)
324
325 port-specific-objects:
326 ifneq ($(LIB_TYPE), LIB)
327         -if [ -f $(PORT)/Makefile ]; then \
328           $(MAKE) -C $(PORT) PORT=$(PORT); \
329         fi
330 else
331         -if [ -f $(PORT)/Makefile ]; then \
332           $(MAKE) -C $(PORT) PORT=$(PORT); \
333          fi
334 endif
335
336 port-specific-objects-pic16:
337         -if [ -f $(PORT)/Makefile ]; then \
338           $(MAKE) -C $(PORT); \
339           for i in $(PORT)/*/lib*.a; do cp -f $$i $(PORTDIR)/$$(basename $$i .a).lib; done; \
340           cp -f $(PORT)/*/crt0*.o $(PORTDIR); \
341         fi
342
343 port-specific-objects-pic14:
344         -if [ -f $(PORT)/Makefile ]; then \
345           mkdir -p $(PORT)/bin; \
346           $(MAKE) -C $(PORT); \
347           cp -f $(PORT)/bin/*.* $(PORTDIR); \
348         fi
349
350 $(LIB_FILES): $(OBJECTS_FLOAT) $(OBJECTS_INT) $(OBJECTS_LONG) $(OBJECTS_SDCC)
351 ifeq ($(LIB_TYPE), SDCCLIB)
352         ../../bin/sdcclib -a $(PORTDIR)/libfloat.lib $(OBJECTS_FLOAT)
353         ../../bin/sdcclib -a $(PORTDIR)/libint.lib $(OBJECTS_INT)
354         ../../bin/sdcclib -a $(PORTDIR)/liblong.lib $(OBJECTS_LONG)
355         ../../bin/sdcclib -a $(PORTDIR)/libsdcc.lib $(OBJECTS_SDCC)
356 else ifeq ($(LIB_TYPE), AR)
357         ar -Scq $(PORTDIR)/libfloat.lib $(OBJECTS_FLOAT)
358         ar -Scq $(PORTDIR)/libint.lib $(OBJECTS_INT)
359         ar -Scq $(PORTDIR)/liblong.lib $(OBJECTS_LONG)
360         ar -Scq $(PORTDIR)/libsdcc.lib $(OBJECTS_SDCC)
361 else ifeq ($(LIB_TYPE), RANLIB)
362         ar -Scq $(PORTDIR)/libfloat.lib $(OBJECTS_FLOAT); $(top_builddir)/bin/asranlib $(PORTDIR)/libfloat.lib
363         ar -Scq $(PORTDIR)/libint.lib $(OBJECTS_INT); $(top_builddir)/bin/asranlib $(PORTDIR)/libint.lib
364         ar -Scq $(PORTDIR)/liblong.lib $(OBJECTS_LONG); $(top_builddir)/bin/asranlib $(PORTDIR)/liblong.lib
365         ar -Scq $(PORTDIR)/libsdcc.lib $(OBJECTS_SDCC); $(top_builddir)/bin/asranlib $(PORTDIR)/libsdcc.lib
366 else
367         rm -f $(PORTDIR)/libfloat.lib
368         for i in $(notdir $(basename $(OBJECTS_FLOAT))); do echo $$i >> $(PORTDIR)/libfloat.lib; done
369         cp $(OBJECTS_FLOAT) $(PORTDIR)
370         rm -f $(PORTDIR)/libint.lib
371         for i in $(notdir $(basename $(OBJECTS_INT))); do echo $$i >> $(PORTDIR)/libint.lib; done
372         cp $(OBJECTS_INT) $(PORTDIR)
373         rm -f $(PORTDIR)/liblong.lib
374         for i in $(notdir $(basename $(OBJECTS_LONG))); do echo $$i >> $(PORTDIR)/liblong.lib; done
375         cp $(OBJECTS_LONG) $(PORTDIR)
376         rm -f $(PORTDIR)/libsdcc.lib
377         for i in $(notdir $(basename $(OBJECTS_SDCC))); do echo $$i >> $(PORTDIR)/libsdcc.lib; done
378         cp $(OBJECTS_SDCC) $(PORTDIR)
379 endif
380
381 clean_intermediate:
382         rm -f $(PORTDIR)/*.lst $(PORTDIR)/*.sym
383
384 clean_intermediate-pic16:
385         $(MAKE) -C $(PORT) clean-intermediate
386
387 clean_intermediate-pic14:
388         $(MAKE) -C $(PORT) clean-intermediate
389
390 # Compiling and installing everything and runing test
391 # ---------------------------------------------------
392 install: all installdirs
393         $(CP_U) -r $(BUILDDIR)/* $(sdcc_libdir)
394         $(CP_U) -r $(MODELS) $(srcdir)/mcs51 $(srcdir)/ds390 $(srcdir)/ds400 \
395                              $(srcdir)/gbz80 $(srcdir)/z80 $(srcdir)/hc08 \
396                              $(srcdir)/pic $(srcdir)/pic16 $(srcdir)/*.c $(sdcc_libdir)/src
397         $(CP_U) -r $(MODELS) mcs51 ds390 ds400 gbz80 z80 hc08 $(sdcc_libdir)/src
398
399         for src in $(MODELS) ds390 ds400 gbz80 z80 hc08 pic pic16; do \
400           find $(sdcc_libdir)/src/$$src -depth \
401             \( -name '*.rel' -o -name '*.dump*' -o -name '*.sym' -o -name '*.o' -o -name '*.lib' -o \
402             -name '*.lst' -o -name '*.asm' -o -name '.svn' -o -name 'autom4te.cache' -o \
403             -name 'build' -o -name 'bin' -o -name 'Makefile*' -o -name 'config*' -o \
404             -name 'depcomp' -o -name 'missing' -o -name 'install-sh' -o \
405             -name 'bootstrap.sh' \) \
406             -exec rm -rf {} + ; \
407         done
408         find $(sdcc_libdir)/src/mcs51 -depth \
409           \( -name '*.rel' -o -name '*.dump*' -o -name '*.sym' -o -name '*.o' -o -name '*.lib' -o \
410           -name '*.lst' -o -name '.svn' -o -name 'build' -o -name 'bin' -o \
411           -name 'Makefile*' \) \
412           -exec rm -rf {} +
413
414 # Deleting all the installed files
415 # --------------------------------
416 uninstall:
417         rm -rf $(sdcc_libdir)
418
419 # Performing self-test
420 # --------------------
421 check:
422
423
424 # Performing installation test
425 # ----------------------------
426 installcheck:
427
428
429 # Creating installation directories
430 # ---------------------------------
431 installdirs:
432         [ -d $(sdcc_libdir) ] || mkdir -p $(sdcc_libdir)
433         for model in $(MODELS); do \
434           [ -d $(sdcc_libdir)/$$model ] || \
435           mkdir -p $(sdcc_libdir)/$$model; \
436         done
437         for libdir in small-stack-auto ds390 ds400 hc08 pic16 pic; do \
438           [ -d $(sdcc_libdir)/$$libdir ] || mkdir -p $(sdcc_libdir)/$$libdir; \
439         done
440         mkdir -p $(sdcc_libdir)/src
441
442 # Creating dependencies
443 # ---------------------
444 dep: Makefile.dep
445
446 Makefile.dep: $(SOURCES) $(INCDIR)/*.h $(PORTINCDIR)/*.h
447         rm -f Makefile.dep
448         for i in $(filter %.c,$^); do \
449           $(CPP) -std=c99 -M $(CPPFLAGS) $$i >$${i}.dep; \
450           cat $${i}.dep >>Makefile.dep; \
451           rm $${i}.dep; \
452         done
453
454 ifeq "$(findstring $(MAKECMDGOALS),uninstall check installcheck installdirs checkconf \
455                                    clean distclean mostlyclean realclean)" ""
456   -include Makefile.dep
457 endif
458 include $(srcdir)/clean.mk
459
460 # My rules
461 # --------
462
463 .SUFFIXES: .rel .o
464
465 $(PORT)/%$(OEXT): %.c
466         $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@
467
468 # Remaking configuration
469 # ----------------------
470 checkconf:
471         @if [ -f $(top_builddir)/devel ]; then\
472           $(MAKE) -f $(srcdir)/conf.mk srcdir="$(srcdir)" top_builddir="$(top_builddir)" \
473           freshconf;\
474         fi
475
476 # End of main_in.mk/main.mk