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