6 VERSIONHI = @VERSIONHI@
7 VERSIONLO = @VERSIONLO@
17 ifeq ($(shell uname -s),Linux)
23 top_builddir = @top_builddir@
24 top_srcdir = @top_srcdir@
27 INCDIR = $(top_srcdir)/device/include
29 PORTINCDIR = $(INCDIR)/mcs51
32 CC = $(top_builddir)/bin/sdcc
33 CPP = $(top_builddir)/bin/sdcpp
36 exec_prefix = @exec_prefix@
40 datarootdir = @datarootdir@
41 includedir = @includedir@
43 man1dir = $(mandir)/man1
44 man2dir = $(mandir)/man2
47 lib_dir_suffix = @lib_dir_suffix@
49 sdcc_libdir = $(DESTDIR)$(datadir)/$(lib_dir_suffix)
51 CPPFLAGS = -I$(INCDIR) -I$(PORTINCDIR)
52 CFLAGS = $(MODELFLAGS) --nostdinc --std-c99
58 PORTDIR = $(abspath $(BUILDDIR)/$(PORT))
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@
168 SOURCES_FLOAT = $(COMMON_FLOAT) \
178 SOURCES_INT = $(COMMON_INT) \
185 SOURCES_LONG = $(COMMON_LONG) \
189 SOURCES_SDCC = $(COMMON_SDCC) \
214 SOURCES = $(SOURCES_FLOAT) $(SOURCES_INT) $(SOURCES_LONG) $(SOURCES_SDCC)
216 OBJECTS_FLOAT = $(SOURCES_FLOAT:%.c=$(PORT)/%.rel)
217 OBJECTS_INT = $(SOURCES_INT:%.c=$(PORT)/%.rel)
218 OBJECTS_LONG = $(SOURCES_LONG:%.c=$(PORT)/%.rel)
219 OBJECTS_SDCC = $(SOURCES_SDCC:%.c=$(PORT)/%.rel)
221 OBJECTS = $(OBJECTS_FLOAT) $(OBJECTS_INT) $(OBJECTS_LONG) $(OBJECTS_SDCC)
223 Z80_FLOAT = $(COMMON_FLOAT)
225 Z80_INT = $(COMMON_INT)
227 Z80_LONG = $(COMMON_LONG) \
231 Z80_SDCC = $(COMMON_SDCC) \
238 Z80SOURCES = $(Z80_FLOAT) $(Z80_INT) $(Z80_LONG) $(Z80_SDCC)
239 Z80OBJECTS = $(Z80SOURCES:%.c=$(PORT)/%.o)
241 XA51_FLOAT = $(COMMON_FLOAT)
243 XA51_INT = $(COMMON_INT) \
250 XA51_LONG = $(COMMON_LONG) \
254 XA51_SDCC = $(COMMON_SDCC) \
259 XA51SOURCES = $(Z80_FLOAT) $(XA51_INT) $(XA51_LONG) $(XA51_SDCC)
260 XA51OBJECTS = $(XA51SOURCES:%.c=$(PORT)/%.rel)
262 HC08_FLOAT = $(COMMON_FLOAT)
264 HC08_INT = $(COMMON_INT) \
269 HC08_LONG = $(COMMON_LONG)
271 HC08_SDCC = $(COMMON_SDCC) \
282 HC08SOURCES = $(HC08_FLOAT) $(HC08_INT) $(HC08_LONG) $(HC08_SDCC)
283 HC08OBJECTS = $(patsubst %.c,$(PORT)/%.rel,$(HC08SOURCES))
287 include $(srcdir)/incl.mk
289 ifeq ($(OPT_DISABLE_DS390), 0)
290 TARGETS += model-ds390
293 ifeq ($(OPT_DISABLE_DS400), 0)
294 TARGETS += model-ds400
297 ifeq ($(OPT_DISABLE_HC08), 0)
298 TARGETS += model-hc08
301 ifeq ($(OPT_DISABLE_MCS51), 0)
302 TARGETS += models small-mcs51-stack-auto
305 ifeq ($(OPT_DISABLE_PIC), 0)
306 TARGETS += model-pic14
309 ifeq ($(OPT_DISABLE_PIC16), 0)
310 TARGETS += model-pic16
313 ifeq ($(OPT_DISABLE_Z80), 0)
317 ifeq ($(OPT_DISABLE_GBZ80), 0)
318 TARGETS += model-gbz80
321 # Compiling entire program or any subproject
322 # ------------------------------------------
323 all: checkconf $(TARGETS)
325 objects: build-dir $(OBJECTS) port-specific-objects lib-files clean_intermediate
328 if grep '^mcs51\>' $(top_builddir)/ports.build > /dev/null; then \
329 for model in $(MODELS); do \
330 $(MAKE) MODELFLAGS="--model-$$model" PORT=$$model PORTINCDIR=$(INCDIR)/mcs51 objects; \
334 small-mcs51-stack-auto:
335 if grep '^mcs51\>' $(top_builddir)/ports.build > /dev/null; then \
336 mkdir -p small-stack-auto; cp small/Makefile small-stack-auto; \
337 $(MAKE) MODELFLAGS="--model-small --stack-auto" PORT=small-stack-auto PORTDIR=$(abspath $(BUILDDIR)/small-stack-auto) PORTINCDIR=$(INCDIR)/mcs51 objects; \
340 model-mcs51-stack-auto:
341 if grep '^mcs51\>' $(top_builddir)/ports.build > /dev/null; then \
342 for model in $(MODELS); do \
343 mkdir -p $${model}-stack-auto; cp $${model}/Makefile $${model}-stack-auto; \
344 $(MAKE) MODELFLAGS="--model-$$model --stack-auto" PORT=$${model}-stack-auto PORTDIR=$(abspath $(BUILDDIR)/$${model}-stack-auto) PORTINCDIR=$(INCDIR)/mcs51 objects; \
348 model-mcs51-xstack-auto:
349 if grep '^mcs51\>' $(top_builddir)/ports.build > /dev/null; then \
350 for model in $(MODELS); do \
351 mkdir -p $${model}-xstack-auto; cp $${model}/Makefile $${model}-xstack-auto; \
352 $(MAKE) MODELFLAGS="--model-$$model --stack-auto --xstack" PORT=$${model}-xstack-auto PORTDIR=$(abspath $(BUILDDIR)/$${model}-xstack-auto) PORTINCDIR=$(INCDIR)/mcs51 objects; \
357 if grep '^ds390\>' $(top_builddir)/ports.build > /dev/null; then \
358 $(MAKE) MODELFLAGS="-mds390" PORT=ds390 PORTINCDIR=$(INCDIR)/mcs51 objects; \
362 if grep '^ds400\>' $(top_builddir)/ports.build > /dev/null; then \
363 $(MAKE) MODELFLAGS="-mds400" PORT=ds400 PORTINCDIR=$(INCDIR)/mcs51 objects; \
367 if grep '^xa51\>' $(top_builddir)/ports.build > /dev/null; then \
368 $(MAKE) MODELFLAGS="-mxa51" PORT=xa51 objects-xa51; \
371 objects-xa51: build-dir $(XA51OBJECTS) port-specific-objects
372 ifeq ($(LIB_TYPE), SDCCLIB)
373 ../../bin/sdcclib -a $(PORTDIR)/lib$(PORT).lib $(XA51OBJECTS)
374 else ifeq ($(LIB_TYPE), AR)
375 ar -Sq $(PORTDIR)/lib$(PORT).lib $(XA51OBJECTS)
376 else ifeq ($(LIB_TYPE), RANLIB)
377 ar -Sq $(PORTDIR)/lib$(PORT).lib $(XA51OBJECTS)
378 $(top_builddir)/bin/asranlib $(PORTDIR)/lib$(PORT).lib
380 rm -f $(PORTDIR)/lib$(PORT).lib
381 for i in $(notdir $(basename $(XA51OBJECTS))); do echo $$i >> $(PORTDIR)/lib$(PORT).lib; done
382 cp $(XA51OBJECTS) $(PORTDIR)
386 if grep '^z80\>' $(top_builddir)/ports.build > /dev/null; then \
387 $(MAKE) MODELFLAGS="-mz80" PORT=z80 objects-z80 OEXT=.o; \
391 if grep '^z80\>' $(top_builddir)/ports.build > /dev/null; then \
392 $(MAKE) MODELFLAGS="-mgbz80" PORT=gbz80 objects-z80 OEXT=.o; \
395 objects-z80: build-dir $(Z80OBJECTS) port-specific-objects clean_intermediate
396 ifeq ($(LIB_TYPE), SDCCLIB)
397 ../../bin/sdcclib -a $(PORTDIR)/$(PORT).lib $(Z80OBJECTS)
398 else ifeq ($(LIB_TYPE), AR)
399 ar -Sq $(PORTDIR)/$(PORT).lib $(Z80OBJECTS)
400 else ifeq ($(LIB_TYPE), RANLIB)
401 ar -Sq $(PORTDIR)/$(PORT).lib $(Z80OBJECTS)
402 $(top_builddir)/bin/asranlib $(PORTDIR)/$(PORT).lib
404 rm -f $(PORTDIR)/lib$(PORT).lib
405 for i in $(notdir $(basename $(Z80OBJECTS))); do echo $$i >> $(PORTDIR)/lib$(PORT).lib; done
406 cp $(Z80OBJECTS) $(PORTDIR)
410 if grep '^hc08\>' $(top_builddir)/ports.build > /dev/null; then \
411 $(MAKE) MODELFLAGS="-mhc08" PORT=hc08 objects-hc08; \
414 objects-hc08: build-dir $(HC08OBJECTS) port-specific-objects clean_intermediate
415 ifeq ($(LIB_TYPE), SDCCLIB)
416 ../../bin/sdcclib -a $(PORTDIR)/$(PORT).lib $(HC08OBJECTS)
417 else ifeq ($(LIB_TYPE), AR)
418 ar -Sq $(PORTDIR)/$(PORT).lib $(HC08OBJECTS)
419 else ifeq ($(LIB_TYPE), RANLIB)
420 ar -Sq $(PORTDIR)/$(PORT).lib $(HC08OBJECTS)
421 $(top_builddir)/bin/asranlib $(PORTDIR)/$(PORT).lib
423 rm -f $(PORTDIR)/lib$(PORT).lib
424 for i in $(notdir $(basename $(HC08OBJECTS))); do echo $$i >> $(PORTDIR)/lib$(PORT).lib; done
425 cp $(HC08OBJECTS) $(PORTDIR)
429 if grep '^pic16\>' $(top_builddir)/ports.build > /dev/null; then \
430 $(MAKE) PORT=pic16 objects-pic16; \
433 objects-pic16: build-dir port-specific-objects-pic16 clean_intermediate-pic16
436 if grep '^pic\>' $(top_builddir)/ports.build > /dev/null; then \
437 $(MAKE) PORT=pic objects-pic14; \
440 objects-pic14: build-dir port-specific-objects-pic14 clean_intermediate-pic14
442 build-dir: $(PORTDIR) $(PORT)
450 port-specific-objects:
451 ifneq ($(LIB_TYPE), LIB)
452 -if [ -f $(PORT)/Makefile ]; then \
453 $(MAKE) -C $(PORT) PORT=$(PORT); \
456 -if [ -f $(PORT)/Makefile ]; then \
457 $(MAKE) -C $(PORT) PORT=$(PORT); \
461 port-specific-objects-pic16:
462 -if [ -f $(PORT)/Makefile ]; then \
463 $(MAKE) -C $(PORT); \
464 for i in $(PORT)/*/lib*.a; do cp -f $$i $(PORTDIR)/$$(basename $$i .a).lib; done; \
465 cp -f $(PORT)/*/crt0*.o $(PORTDIR); \
468 port-specific-objects-pic14:
469 -if [ -f $(PORT)/Makefile ]; then \
470 mkdir -p $(PORT)/bin; \
471 $(MAKE) -C $(PORT); \
472 cp -f $(PORT)/bin/*.* $(PORTDIR); \
476 ifeq ($(LIB_TYPE), SDCCLIB)
477 ../../bin/sdcclib -a $(PORTDIR)/libfloat.lib $(OBJECTS_FLOAT)
478 ../../bin/sdcclib -a $(PORTDIR)/libint.lib $(OBJECTS_INT)
479 ../../bin/sdcclib -a $(PORTDIR)/liblong.lib $(OBJECTS_LONG)
480 ../../bin/sdcclib -a $(PORTDIR)/libsdcc.lib $(OBJECTS_SDCC)
481 else ifeq ($(LIB_TYPE), AR)
482 ar -Scq $(PORTDIR)/libfloat.lib $(OBJECTS_FLOAT)
483 ar -Scq $(PORTDIR)/libint.lib $(OBJECTS_INT)
484 ar -Scq $(PORTDIR)/liblong.lib $(OBJECTS_LONG)
485 ar -Scq $(PORTDIR)/libsdcc.lib $(OBJECTS_SDCC)
486 else ifeq ($(LIB_TYPE), RANLIB)
487 ar -Scq $(PORTDIR)/libfloat.lib $(OBJECTS_FLOAT); $(top_builddir)/bin/asranlib $(PORTDIR)/libfloat.lib
488 ar -Scq $(PORTDIR)/libint.lib $(OBJECTS_INT); $(top_builddir)/bin/asranlib $(PORTDIR)/libint.lib
489 ar -Scq $(PORTDIR)/liblong.lib $(OBJECTS_LONG); $(top_builddir)/bin/asranlib $(PORTDIR)/liblong.lib
490 ar -Scq $(PORTDIR)/libsdcc.lib $(OBJECTS_SDCC); $(top_builddir)/bin/asranlib $(PORTDIR)/libsdcc.lib
492 rm -f $(PORTDIR)/libfloat.lib
493 for i in $(notdir $(basename $(OBJECTS_FLOAT))); do echo $$i >> $(PORTDIR)/libfloat.lib; done
494 cp $(OBJECTS_FLOAT) $(PORTDIR)
495 rm -f $(PORTDIR)/libint.lib
496 for i in $(notdir $(basename $(OBJECTS_INT))); do echo $$i >> $(PORTDIR)/libint.lib; done
497 cp $(OBJECTS_INT) $(PORTDIR)
498 rm -f $(PORTDIR)/liblong.lib
499 for i in $(notdir $(basename $(OBJECTS_LONG))); do echo $$i >> $(PORTDIR)/liblong.lib; done
500 cp $(OBJECTS_LONG) $(PORTDIR)
501 rm -f $(PORTDIR)/libsdcc.lib
502 for i in $(notdir $(basename $(OBJECTS_SDCC))); do echo $$i >> $(PORTDIR)/libsdcc.lib; done
503 cp $(OBJECTS_SDCC) $(PORTDIR)
507 rm -f $(PORTDIR)/*.lst $(PORTDIR)/*.sym
509 clean_intermediate-pic16:
510 $(MAKE) -C $(PORT) clean-intermediate
512 clean_intermediate-pic14:
513 $(MAKE) -C $(PORT) clean-intermediate
515 # Compiling and installing everything and runing test
516 # ---------------------------------------------------
517 install: all installdirs
518 $(CP_U) -r $(BUILDDIR)/* $(sdcc_libdir)
519 $(CP_U) -r $(MODELS) $(srcdir)/mcs51 $(srcdir)/ds390 $(srcdir)/ds400 \
520 $(srcdir)/gbz80 $(srcdir)/z80 $(srcdir)/hc08 \
521 $(srcdir)/pic $(srcdir)/pic16 $(srcdir)/*.c $(sdcc_libdir)/src
522 $(CP_U) -r $(MODELS) mcs51 ds390 ds400 gbz80 z80 hc08 $(sdcc_libdir)/src
524 for src in $(MODELS) ds390 ds400 gbz80 z80 hc08 pic pic16; do \
525 find $(sdcc_libdir)/src/$$src -depth \
526 \( -name '*.rel' -o -name '*.dump*' -o -name '*.sym' -o -name '*.o' -o -name '*.lib' -o \
527 -name '*.lst' -o -name '*.asm' -o -name '.svn' -o -name 'autom4te.cache' -o \
528 -name 'build' -o -name 'bin' -o -name 'Makefile*' -o -name 'config*' -o \
529 -name 'depcomp' -o -name 'missing' -o -name 'install-sh' -o \
530 -name 'bootstrap.sh' \) \
531 -exec rm -rf {} + ; \
533 find $(sdcc_libdir)/src/mcs51 -depth \
534 \( -name '*.rel' -o -name '*.dump*' -o -name '*.sym' -o -name '*.o' -o -name '*.lib' -o \
535 -name '*.lst' -o -name '.svn' -o -name 'build' -o -name 'bin' -o \
536 -name 'Makefile*' \) \
539 # Deleting all the installed files
540 # --------------------------------
542 rm -rf $(sdcc_libdir)
544 # Performing self-test
545 # --------------------
549 # Performing installation test
550 # ----------------------------
554 # Creating installation directories
555 # ---------------------------------
557 [ -d $(sdcc_libdir) ] || mkdir -p $(sdcc_libdir)
558 for model in $(MODELS); do \
559 [ -d $(sdcc_libdir)/$$model ] || \
560 mkdir -p $(sdcc_libdir)/$$model; \
562 for libdir in small-stack-auto ds390 ds400 hc08 pic16 pic; do \
563 [ -d $(sdcc_libdir)/$$libdir ] || mkdir -p $(sdcc_libdir)/$$libdir; \
565 mkdir -p $(sdcc_libdir)/src
567 # Creating dependencies
568 # ---------------------
571 Makefile.dep: $(SOURCES) $(INCDIR)/*.h $(PORTINCDIR)/*.h
573 for i in $(filter %.c,$^); do \
574 $(CPP) -std=c99 -M $(CPPFLAGS) $$i >$${i}.dep; \
575 cat $${i}.dep >>Makefile.dep; \
579 ifeq "$(findstring $(MAKECMDGOALS),uninstall check installcheck installdirs checkconf \
580 clean distclean mostlyclean realclean)" ""
581 -include Makefile.dep
583 include $(srcdir)/clean.mk
590 $(PORT)/%$(OEXT): %.c
591 $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@
593 # Remaking configuration
594 # ----------------------
596 @if [ -f $(top_builddir)/devel ]; then\
597 $(MAKE) -f $(srcdir)/conf.mk srcdir="$(srcdir)" top_builddir="$(top_builddir)" \
601 # End of main_in.mk/main.mk