6 VERSIONHI = @VERSIONHI@
7 VERSIONLO = @VERSIONLO@
16 ifeq ($(shell uname -s),Linux)
22 top_builddir = @top_builddir@
23 top_srcdir = @top_srcdir@
26 INCDIR = $(top_srcdir)/device/include
28 PORTINCDIR = $(INCDIR)/mcs51
31 CC = $(top_builddir)/bin/sdcc
32 CPP = $(top_builddir)/bin/sdcpp
35 exec_prefix = @exec_prefix@
39 datarootdir = @datarootdir@
40 includedir = @includedir@
42 man1dir = $(mandir)/man1
43 man2dir = $(mandir)/man2
46 lib_dir_suffix = @lib_dir_suffix@
48 sdcc_libdir = $(DESTDIR)$(datadir)/$(lib_dir_suffix)
50 CPPFLAGS = -I$(INCDIR) -I$(PORTINCDIR)
51 CFLAGS = $(MODELFLAGS) --nostdinc --std-c99
57 PORTDIR = $(BUILDDIR)/$(PORT)
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@
71 SOURCES_FLOAT = $(COMMON_FLOAT) \
81 SOURCES_INT = $(COMMON_INT) \
88 SOURCES_LONG = $(COMMON_LONG) \
92 SOURCES_SDCC = $(COMMON_SDCC) \
117 SOURCES = $(SOURCES_FLOAT) $(SOURCES_INT) $(SOURCES_LONG) $(SOURCES_SDCC)
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)
124 OBJECTS = $(OBJECTS_FLOAT) $(OBJECTS_INT) $(OBJECTS_LONG) $(OBJECTS_SDCC)
126 XA51_FLOAT = $(COMMON_FLOAT)
128 XA51_INT = $(COMMON_INT) \
135 XA51_LONG = $(COMMON_LONG) \
139 XA51_SDCC = $(COMMON_SDCC) \
144 XA51SOURCES = $(XA51_FLOAT) $(XA51_INT) $(XA51_LONG) $(XA51_SDCC)
145 XA51OBJECTS = $(XA51SOURCES:%.c=$(PORT)/%.rel)
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
154 LIB_FILES = $(OBJECTS_FLOAT) $(OBJECTS_INT) $(OBJECTS_LONG) $(OBJECTS_SDCC) $(PORTDIR)/libfloat.lib $(PORTDIR)/libint.lib $(PORTDIR)/liblong.lib $(PORTDIR)/libsdcc.lib
159 include $(srcdir)/incl.mk
161 ifeq ($(OPT_DISABLE_DS390), 0)
162 TARGETS += model-ds390
165 ifeq ($(OPT_DISABLE_DS400), 0)
166 TARGETS += model-ds400
169 ifeq ($(OPT_DISABLE_HC08), 0)
170 TARGETS += model-hc08
173 ifeq ($(OPT_DISABLE_MCS51), 0)
174 TARGETS += models small-mcs51-stack-auto
177 ifeq ($(OPT_DISABLE_PIC), 0)
178 TARGETS += model-pic14
181 ifeq ($(OPT_DISABLE_PIC16), 0)
182 TARGETS += model-pic16
185 ifeq ($(OPT_DISABLE_Z80), 0)
189 ifeq ($(OPT_DISABLE_GBZ80), 0)
190 TARGETS += model-gbz80
193 # Compiling entire program or any subproject
194 # ------------------------------------------
202 $(MAKE) port-specific-objects
204 $(MAKE) clean_intermediate
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; \
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; \
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; \
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; \
236 if grep '^ds390\>' $(top_builddir)/ports.build > /dev/null; then \
237 $(MAKE) MODELFLAGS="-mds390" PORT=ds390 PORTINCDIR=$(INCDIR)/mcs51 objects; \
241 if grep '^ds400\>' $(top_builddir)/ports.build > /dev/null; then \
242 $(MAKE) MODELFLAGS="-mds400" PORT=ds400 PORTINCDIR=$(INCDIR)/mcs51 objects; \
246 if grep '^xa51\>' $(top_builddir)/ports.build > /dev/null; then \
247 $(MAKE) MODELFLAGS="-mxa51" PORT=xa51 objects-xa51; \
252 $(MAKE) $(XA51OBJECTS)
253 $(MAKE) port-specific-objects
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
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)
270 if grep '^z80\>' $(top_builddir)/ports.build > /dev/null; then \
271 $(MAKE) MODELFLAGS="-mz80" PORT=z80 objects-z80 OEXT=.o; \
275 if grep '^z80\>' $(top_builddir)/ports.build > /dev/null; then \
276 $(MAKE) MODELFLAGS="-mgbz80" PORT=gbz80 objects-z80 OEXT=.o; \
281 $(MAKE) port-specific-objects
282 $(MAKE) clean_intermediate
285 if grep '^hc08\>' $(top_builddir)/ports.build > /dev/null; then \
286 $(MAKE) MODELFLAGS="-mhc08" PORT=hc08 objects-hc08; \
291 $(MAKE) port-specific-objects
292 $(MAKE) clean_intermediate
295 if grep '^pic16\>' $(top_builddir)/ports.build > /dev/null; then \
296 $(MAKE) PORT=pic16 objects-pic16; \
301 $(MAKE) port-specific-objects-pic16
302 $(MAKE) clean_intermediate-pic16
305 if grep '^pic\>' $(top_builddir)/ports.build > /dev/null; then \
306 $(MAKE) PORT=pic objects-pic14; \
311 $(MAKE) port-specific-objects-pic14
312 $(MAKE) clean_intermediate-pic14
324 port-specific-objects:
325 ifneq ($(LIB_TYPE), LIB)
326 -if [ -f $(PORT)/Makefile ]; then \
327 $(MAKE) -C $(PORT) PORT=$(PORT); \
330 -if [ -f $(PORT)/Makefile ]; then \
331 $(MAKE) -C $(PORT) PORT=$(PORT); \
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); \
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); \
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
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)
381 rm -f $(PORTDIR)/*.lst $(PORTDIR)/*.sym
383 clean_intermediate-pic16:
384 $(MAKE) -C $(PORT) clean-intermediate
386 clean_intermediate-pic14:
387 $(MAKE) -C $(PORT) clean-intermediate
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
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 {} + ; \
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*' \) \
413 # Deleting all the installed files
414 # --------------------------------
416 rm -rf $(sdcc_libdir)
418 # Performing self-test
419 # --------------------
423 # Performing installation test
424 # ----------------------------
428 # Creating installation directories
429 # ---------------------------------
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; \
436 for libdir in small-stack-auto ds390 ds400 hc08 pic16 pic; do \
437 [ -d $(sdcc_libdir)/$$libdir ] || mkdir -p $(sdcc_libdir)/$$libdir; \
439 mkdir -p $(sdcc_libdir)/src
441 # Creating dependencies
442 # ---------------------
445 Makefile.dep: $(SOURCES) $(INCDIR)/*.h $(PORTINCDIR)/*.h
447 for i in $(filter %.c,$^); do \
448 $(CPP) -std=c99 -M $(CPPFLAGS) $$i >$${i}.dep; \
449 cat $${i}.dep >>Makefile.dep; \
453 ifeq "$(findstring $(MAKECMDGOALS),uninstall check installcheck installdirs checkconf \
454 clean distclean mostlyclean realclean)" ""
455 -include Makefile.dep
457 include $(srcdir)/clean.mk
464 $(PORT)/%$(OEXT): %.c
465 $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@
467 # Remaking configuration
468 # ----------------------
470 @if [ -f $(top_builddir)/devel ]; then\
471 $(MAKE) -f $(srcdir)/conf.mk srcdir="$(srcdir)" top_builddir="$(top_builddir)" \
475 # End of main_in.mk/main.mk