5fc4f4791d0427cab6a45009b42c5d23c069e82b
[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: checkconf $(TARGETS)
197
198 objects: build-dir $(OBJECTS) port-specific-objects $(LIB_FILES) clean_intermediate
199
200 models:
201         if grep '^mcs51\>' $(top_builddir)/ports.build > /dev/null; then \
202           for model in $(MODELS); do \
203             $(MAKE) MODELFLAGS="--model-$$model" PORT=$$model PORTINCDIR=$(INCDIR)/mcs51 objects; \
204           done \
205         fi
206
207 small-mcs51-stack-auto:
208         if grep '^mcs51\>' $(top_builddir)/ports.build > /dev/null; then \
209           mkdir -p small-stack-auto; cp small/Makefile small-stack-auto; \
210           $(MAKE) MODELFLAGS="--model-small --stack-auto" PORT=small-stack-auto PORTDIR=$(abspath $(BUILDDIR)/small-stack-auto) PORTINCDIR=$(INCDIR)/mcs51 objects; \
211         fi
212
213 model-mcs51-stack-auto:
214         if grep '^mcs51\>' $(top_builddir)/ports.build > /dev/null; then \
215           for model in $(MODELS); do \
216             mkdir -p $${model}-stack-auto; cp $${model}/Makefile $${model}-stack-auto; \
217             $(MAKE) MODELFLAGS="--model-$$model --stack-auto" PORT=$${model}-stack-auto PORTDIR=$(abspath $(BUILDDIR)/$${model}-stack-auto) PORTINCDIR=$(INCDIR)/mcs51 objects; \
218           done \
219         fi
220
221 model-mcs51-xstack-auto:
222         if grep '^mcs51\>' $(top_builddir)/ports.build > /dev/null; then \
223           for model in $(MODELS); do \
224             mkdir -p $${model}-xstack-auto; cp $${model}/Makefile $${model}-xstack-auto; \
225             $(MAKE) MODELFLAGS="--model-$$model --stack-auto --xstack -DUSE_FLOATS=1" PORT=$${model}-xstack-auto PORTDIR=$(abspath $(BUILDDIR)/$${model}-xstack-auto) PORTINCDIR=$(INCDIR)/mcs51 objects; \
226           done \
227         fi
228
229 model-ds390:
230         if grep '^ds390\>' $(top_builddir)/ports.build > /dev/null; then \
231           $(MAKE) MODELFLAGS="-mds390" PORT=ds390 PORTINCDIR=$(INCDIR)/mcs51 objects; \
232         fi
233
234 model-ds400:
235         if grep '^ds400\>' $(top_builddir)/ports.build > /dev/null; then \
236           $(MAKE) MODELFLAGS="-mds400" PORT=ds400 PORTINCDIR=$(INCDIR)/mcs51 objects; \
237         fi
238
239 model-xa51:
240         if grep '^xa51\>' $(top_builddir)/ports.build > /dev/null; then \
241           $(MAKE) MODELFLAGS="-mxa51" PORT=xa51 objects-xa51; \
242         fi
243
244 objects-xa51: build-dir $(XA51OBJECTS) port-specific-objects
245
246 $(PORTDIR)/lib$(PORT).lib: $(XA51OBJECTS)
247 ifeq ($(LIB_TYPE), SDCCLIB)
248         ../../bin/sdcclib -a $(PORTDIR)/lib$(PORT).lib $(XA51OBJECTS)
249 else ifeq ($(LIB_TYPE), AR)
250         ar -Sq $(PORTDIR)/lib$(PORT).lib $(XA51OBJECTS)
251 else ifeq ($(LIB_TYPE), RANLIB)
252         ar -Sq $(PORTDIR)/lib$(PORT).lib $(XA51OBJECTS)
253         $(top_builddir)/bin/asranlib $(PORTDIR)/lib$(PORT).lib
254 else
255         rm -f $(PORTDIR)/lib$(PORT).lib
256         for i in $(notdir $(basename $(XA51OBJECTS))); do echo $$i >> $(PORTDIR)/lib$(PORT).lib; done
257         cp $(XA51OBJECTS) $(PORTDIR)
258 endif
259
260 model-z80:
261         if grep '^z80\>' $(top_builddir)/ports.build > /dev/null; then \
262           $(MAKE) MODELFLAGS="-mz80" PORT=z80 objects-z80 OEXT=.o; \
263         fi
264
265 model-gbz80:
266         if grep '^z80\>' $(top_builddir)/ports.build > /dev/null; then \
267           $(MAKE) MODELFLAGS="-mgbz80" PORT=gbz80 objects-z80 OEXT=.o; \
268         fi
269
270 objects-z80: build-dir port-specific-objects clean_intermediate
271
272 model-hc08:
273         if grep '^hc08\>' $(top_builddir)/ports.build > /dev/null; then \
274           $(MAKE) MODELFLAGS="-mhc08" PORT=hc08 objects-hc08; \
275         fi
276
277 objects-hc08: build-dir port-specific-objects clean_intermediate
278
279 model-pic16:
280         if grep '^pic16\>' $(top_builddir)/ports.build > /dev/null; then \
281           $(MAKE) PORT=pic16 objects-pic16; \
282         fi
283
284 objects-pic16: build-dir port-specific-objects-pic16 clean_intermediate-pic16
285
286 model-pic14:
287         if grep '^pic\>' $(top_builddir)/ports.build > /dev/null; then \
288           $(MAKE) PORT=pic objects-pic14; \
289         fi
290
291 objects-pic14: build-dir port-specific-objects-pic14 clean_intermediate-pic14
292
293 build-dir: $(PORTDIR) $(PORT)
294
295 $(PORTDIR):
296         mkdir -p $(PORTDIR)
297
298 $(PORT):
299         mkdir -p $(PORT)
300
301 port-specific-objects:
302 ifneq ($(LIB_TYPE), LIB)
303         -if [ -f $(PORT)/Makefile ]; then \
304           $(MAKE) -C $(PORT) PORT=$(PORT); \
305         fi
306 else
307         -if [ -f $(PORT)/Makefile ]; then \
308           $(MAKE) -C $(PORT) PORT=$(PORT); \
309          fi
310 endif
311
312 port-specific-objects-pic16:
313         -if [ -f $(PORT)/Makefile ]; then \
314           $(MAKE) -C $(PORT); \
315           for i in $(PORT)/*/lib*.a; do cp -f $$i $(PORTDIR)/$$(basename $$i .a).lib; done; \
316           cp -f $(PORT)/*/crt0*.o $(PORTDIR); \
317         fi
318
319 port-specific-objects-pic14:
320         -if [ -f $(PORT)/Makefile ]; then \
321           mkdir -p $(PORT)/bin; \
322           $(MAKE) -C $(PORT); \
323           cp -f $(PORT)/bin/*.* $(PORTDIR); \
324         fi
325
326 $(LIB_FILES): $(OBJECTS_FLOAT) $(OBJECTS_INT) $(OBJECTS_LONG) $(OBJECTS_SDCC)
327 ifeq ($(LIB_TYPE), SDCCLIB)
328         ../../bin/sdcclib -a $(PORTDIR)/libfloat.lib $(OBJECTS_FLOAT)
329         ../../bin/sdcclib -a $(PORTDIR)/libint.lib $(OBJECTS_INT)
330         ../../bin/sdcclib -a $(PORTDIR)/liblong.lib $(OBJECTS_LONG)
331         ../../bin/sdcclib -a $(PORTDIR)/libsdcc.lib $(OBJECTS_SDCC)
332 else ifeq ($(LIB_TYPE), AR)
333         ar -Scq $(PORTDIR)/libfloat.lib $(OBJECTS_FLOAT)
334         ar -Scq $(PORTDIR)/libint.lib $(OBJECTS_INT)
335         ar -Scq $(PORTDIR)/liblong.lib $(OBJECTS_LONG)
336         ar -Scq $(PORTDIR)/libsdcc.lib $(OBJECTS_SDCC)
337 else ifeq ($(LIB_TYPE), RANLIB)
338         ar -Scq $(PORTDIR)/libfloat.lib $(OBJECTS_FLOAT); $(top_builddir)/bin/asranlib $(PORTDIR)/libfloat.lib
339         ar -Scq $(PORTDIR)/libint.lib $(OBJECTS_INT); $(top_builddir)/bin/asranlib $(PORTDIR)/libint.lib
340         ar -Scq $(PORTDIR)/liblong.lib $(OBJECTS_LONG); $(top_builddir)/bin/asranlib $(PORTDIR)/liblong.lib
341         ar -Scq $(PORTDIR)/libsdcc.lib $(OBJECTS_SDCC); $(top_builddir)/bin/asranlib $(PORTDIR)/libsdcc.lib
342 else
343         rm -f $(PORTDIR)/libfloat.lib
344         for i in $(notdir $(basename $(OBJECTS_FLOAT))); do echo $$i >> $(PORTDIR)/libfloat.lib; done
345         cp $(OBJECTS_FLOAT) $(PORTDIR)
346         rm -f $(PORTDIR)/libint.lib
347         for i in $(notdir $(basename $(OBJECTS_INT))); do echo $$i >> $(PORTDIR)/libint.lib; done
348         cp $(OBJECTS_INT) $(PORTDIR)
349         rm -f $(PORTDIR)/liblong.lib
350         for i in $(notdir $(basename $(OBJECTS_LONG))); do echo $$i >> $(PORTDIR)/liblong.lib; done
351         cp $(OBJECTS_LONG) $(PORTDIR)
352         rm -f $(PORTDIR)/libsdcc.lib
353         for i in $(notdir $(basename $(OBJECTS_SDCC))); do echo $$i >> $(PORTDIR)/libsdcc.lib; done
354         cp $(OBJECTS_SDCC) $(PORTDIR)
355 endif
356
357 clean_intermediate:
358         rm -f $(PORTDIR)/*.lst $(PORTDIR)/*.sym
359
360 clean_intermediate-pic16:
361         $(MAKE) -C $(PORT) clean-intermediate
362
363 clean_intermediate-pic14:
364         $(MAKE) -C $(PORT) clean-intermediate
365
366 # Compiling and installing everything and runing test
367 # ---------------------------------------------------
368 install: all installdirs
369         $(CP_U) -r $(BUILDDIR)/* $(sdcc_libdir)
370         $(CP_U) -r $(MODELS) $(srcdir)/mcs51 $(srcdir)/ds390 $(srcdir)/ds400 \
371                              $(srcdir)/gbz80 $(srcdir)/z80 $(srcdir)/hc08 \
372                              $(srcdir)/pic $(srcdir)/pic16 $(srcdir)/*.c $(sdcc_libdir)/src
373         $(CP_U) -r $(MODELS) mcs51 ds390 ds400 gbz80 z80 hc08 $(sdcc_libdir)/src
374
375         for src in $(MODELS) ds390 ds400 gbz80 z80 hc08 pic pic16; do \
376           find $(sdcc_libdir)/src/$$src -depth \
377             \( -name '*.rel' -o -name '*.dump*' -o -name '*.sym' -o -name '*.o' -o -name '*.lib' -o \
378             -name '*.lst' -o -name '*.asm' -o -name '.svn' -o -name 'autom4te.cache' -o \
379             -name 'build' -o -name 'bin' -o -name 'Makefile*' -o -name 'config*' -o \
380             -name 'depcomp' -o -name 'missing' -o -name 'install-sh' -o \
381             -name 'bootstrap.sh' \) \
382             -exec rm -rf {} + ; \
383         done
384         find $(sdcc_libdir)/src/mcs51 -depth \
385           \( -name '*.rel' -o -name '*.dump*' -o -name '*.sym' -o -name '*.o' -o -name '*.lib' -o \
386           -name '*.lst' -o -name '.svn' -o -name 'build' -o -name 'bin' -o \
387           -name 'Makefile*' \) \
388           -exec rm -rf {} +
389
390 # Deleting all the installed files
391 # --------------------------------
392 uninstall:
393         rm -rf $(sdcc_libdir)
394
395 # Performing self-test
396 # --------------------
397 check:
398
399
400 # Performing installation test
401 # ----------------------------
402 installcheck:
403
404
405 # Creating installation directories
406 # ---------------------------------
407 installdirs:
408         [ -d $(sdcc_libdir) ] || mkdir -p $(sdcc_libdir)
409         for model in $(MODELS); do \
410           [ -d $(sdcc_libdir)/$$model ] || \
411           mkdir -p $(sdcc_libdir)/$$model; \
412         done
413         for libdir in small-stack-auto ds390 ds400 hc08 pic16 pic; do \
414           [ -d $(sdcc_libdir)/$$libdir ] || mkdir -p $(sdcc_libdir)/$$libdir; \
415         done
416         mkdir -p $(sdcc_libdir)/src
417
418 # Creating dependencies
419 # ---------------------
420 dep: Makefile.dep
421
422 Makefile.dep: $(SOURCES) $(INCDIR)/*.h $(PORTINCDIR)/*.h
423         rm -f Makefile.dep
424         for i in $(filter %.c,$^); do \
425           $(CPP) -std=c99 -M $(CPPFLAGS) $$i >$${i}.dep; \
426           cat $${i}.dep >>Makefile.dep; \
427           rm $${i}.dep; \
428         done
429
430 ifeq "$(findstring $(MAKECMDGOALS),uninstall check installcheck installdirs checkconf \
431                                    clean distclean mostlyclean realclean)" ""
432   -include Makefile.dep
433 endif
434 include $(srcdir)/clean.mk
435
436 # My rules
437 # --------
438
439 .SUFFIXES: .rel .o
440
441 $(PORT)/%$(OEXT): %.c
442         $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@
443
444 # Remaking configuration
445 # ----------------------
446 checkconf:
447         @if [ -f $(top_builddir)/devel ]; then\
448           $(MAKE) -f $(srcdir)/conf.mk srcdir="$(srcdir)" top_builddir="$(top_builddir)" \
449           freshconf;\
450         fi
451
452 # End of main_in.mk/main.mk