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