# # sdcc project main Makefile # SHELL = /bin/sh VPATH = @srcdir@ srcdir = @srcdir@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXEEXT = @EXEEXT@ include Makefile.common SDCC_LIBS = support/makebin SDCC_SCRIPTS = support/scripts SDCC_DOC = doc # Parts that are not normally compiled but need to be cleaned SDCC_EXTRA = support/regression support/valdiag SDCC_PACKIHX = support/packihx SDCC_SDBINUTILS = support/sdbinutils ifneq ($(OPT_DISABLE_HC08)$(OPT_DISABLE_S08), 11) SDCC_AS += sdas/as6808 SDCC_LD += sdcc-ld6808 endif ifeq ($(OPT_DISABLE_STM8), 0) SDCC_AS += sdas/asstm8 SDCC_LD += sdcc-ldstm8 endif ifneq ($(OPT_DISABLE_DS390)$(OPT_DISABLE_DS400), 11) SDCC_AS += sdas/as8xcxxx endif ifeq ($(OPT_DISABLE_MCS51), 0) SDCC_AS += sdas/as8051 SDCC_LD += sdcc-ld8051 SDCC_MISC += debugger/mcs51 endif ifneq ($(OPT_DISABLE_Z80)$(OPT_DISABLE_Z180), 11) SDCC_AS += sdas/asz80 SDCC_LD += sdcc-ldz80 endif ifneq ($(OPT_DISABLE_R2K)$(OPT_DISABLE_R3KA), 11) SDCC_AS += sdas/asrab SDCC_LD += sdcc-ldz80 endif ifeq ($(OPT_DISABLE_TLCS90), 0) SDCC_AS += sdas/astlcs90 endif ifeq ($(OPT_DISABLE_GBZ80), 0) SDCC_AS += sdas/asgb SDCC_LD += sdcc-ldgb endif ifeq ($(OPT_DISABLE_PDK13), 0) SDCC_AS += sdas/aspdk13 SDCC_LD += sdcc-ldpdk endif ifeq ($(OPT_DISABLE_PDK14), 0) SDCC_AS += sdas/aspdk14 SDCC_LD += sdcc-ldpdk endif ifeq ($(OPT_DISABLE_PDK15), 0) SDCC_AS += sdas/aspdk15 SDCC_LD += sdcc-ldpdk endif ifeq ($(OPT_DISABLE_PDK16), 0) SDCC_AS += sdas/aspdk16 SDCC_LD += sdcc-ldpdk endif ifeq ($(OPT_DISABLE_UCSIM), 0) TARGETS += sdcc-misc SDCC_MISC += sim/ucsim PKGS += $(SDCC_MISC) endif SDCC_BINUTILS = ifeq ($(OPT_DISABLE_SDBINUTILS), 0) TARGETS += sdcc-sdbinutils PKGS += $(SDCC_SDBINUTILS) SDBINUTILS_BINS = sdar$(EXEEXT) sdranlib$(EXEEXT) sdnm$(EXEEXT) sdobjcopy$(EXEEXT) SDCC_BINUTILS = sdcc-sdbinutils endif ifeq ($(OPT_DISABLE_DEVICE_LIB), 0) TARGETS += sdcc-device-lib PKGS += device/lib ifeq ($(OPT_DISABLE_NON_FREE), 0) PKGS += device/non-free/lib endif endif ifeq ($(OPT_DISABLE_PACKIHX), 0) TARGETS += sdcc-packihx PKGS += $(SDCC_PACKIHX) endif ifeq ($(OPT_ENABLE_DOC), 1) TARGETS += sdcc-doc endif # always install docs, which don't need to be built PKGS += $(SDCC_DOC) ifeq ($(OPT_DISABLE_SDCPP), 0) SDCC_LIBS += support/cpp endif TARGETS += sdcc-libs sdcc-cc sdcc-device-inc sdcc-as sdcc-ld sdcc-scripts PKGS += $(SDCC_LIBS) src device/include ifeq ($(OPT_DISABLE_NON_FREE), 0) PKGS += device/non-free/include endif PKGS += $(SDCC_AS) sdas/linksrc $(SDCC_SCRIPTS) PORTS = $(shell cat ports.build) ALLPORTS = $(shell cat ports.all) # Compiling entire program or any subproject # ------------------------------------------ all: checkconf sdcc tini: checkconf sdcc-tini sdcc-libs: sdcc-sdbinutils for lib in $(SDCC_LIBS); do $(MAKE) -C $$lib; done sdcc-cc: sdcc-libs $(MAKE) -C src sdcc-as: $(foreach as, $(SDCC_AS), $(MAKE) -C $(as) &&) echo "Assemblers built successfully." sdcc-ld: $(MAKE) -C sdas/linksrc $(SDCC_LD) sdcc-misc: for misc in $(SDCC_MISC); do $(MAKE) -C $$misc ; done sdcc-scripts: $(MAKE) -C $(SDCC_SCRIPTS) sdcc-packihx: $(MAKE) -C $(SDCC_PACKIHX) sdcc-sdbinutils: $(MAKE) -C $(SDCC_SDBINUTILS) # in some cases (cygwin) the real binaries are in .libs for bin in $(SDBINUTILS_BINS); do \ if [ -f $(SDCC_SDBINUTILS)/binutils/.libs/$$bin ]; then \ cp $(SDCC_SDBINUTILS)/binutils/.libs/$$bin bin; \ else \ cp $(SDCC_SDBINUTILS)/binutils/$$bin bin; \ fi \ done sdcc-device-inc: $(MAKE) -C device/include ifeq ($(OPT_DISABLE_NON_FREE), 0) $(MAKE) -C device/non-free/include endif sdcc-device-lib: sdcc-cc sdcc-as sdcc-ld $(SDCC_BINUTILS) $(MAKE) -C device/lib ifeq ($(OPT_DISABLE_NON_FREE), 0) $(MAKE) -C device/non-free/lib endif sdcc-device-tini: $(MAKE) -C device/include ifeq ($(OPT_DISABLE_NON_FREE), 0) $(MAKE) -C device/non-free/include endif $(MAKE) -C device/lib model-ds390 model-ds400 # doc depends on latex and latex2html sdcc-doc: $(MAKE) -C doc sdcc: $(TARGETS) sdcc-tini: sdcc-cc sdcc-as sdcc-ld sdcc-device-tini sdcc-packihx $(MAKE) -f main.mk all # Some interesting sub rules sdcc-bin: sdcc-cc sdcc-as sdcc-ld sdcc-misc sdcc-base: sdcc-cc sdcc-as sdcc-ld # Compiling and installing everything and running test # ---------------------------------------------------- install: checkconf sdcc $(MAKE) -f main.mk install @for pkg in $(PKGS); do\ $(MAKE) -C $$pkg install ;\ done # Deleting all the installed files # -------------------------------- uninstall: $(MAKE) -f main.mk uninstall @for pkg in $(PKGS); do\ $(MAKE) -C $$pkg uninstall ;\ done # Deleting all files created by building the program # -------------------------------------------------- clean: @echo "+ Cleaning root of the project..." $(MAKE) -f $(srcdir)/clean.mk clean @echo "+ Cleaning packages in their directories..." for pkg in $(PKGS); do\ $(MAKE) -C $$pkg PORTS="$(PORTS)" EXEEXT=$(EXEEXT) clean ;\ done # Deleting all files created by configuring or building the program # ----------------------------------------------------------------- distclean: @echo "+ DistCleaning packages using clean.mk..." for pkg in $(PKGS); do\ $(MAKE) -C $$pkg PORTS="$(PORTS)" EXEEXT=$(EXEEXT) distclean ;\ done for pkg in $(SDCC_EXTRA); do \ $(MAKE) -C $$pkg distclean; \ done @echo "+ DistCleaning root of the project..." $(MAKE) -f $(srcdir)/clean.mk distclean # Like clean but some files may still exist # ----------------------------------------- mostlyclean: clean $(MAKE) -f $(srcdir)/clean.mk mostlyclean for pkg in $(PKGS); do\ $(MAKE) -C $$pkg PORTS="$(PORTS)" EXEEXT=$(EXEEXT) mostlyclean ;\ done # Deleting everything that can reconstructed by this Makefile. It deletes # everything deleted by distclean plus files created by bison, stc. # ----------------------------------------------------------------------- realclean: distclean $(MAKE) -f $(srcdir)/clean.mk realclean for pkg in $(PKGS); do\ $(MAKE) -C $$pkg PORTS="$(PORTS)" EXEEXT=$(EXEEXT) realclean ;\ done # Performing self-test # -------------------- check: # Performing installation test # ---------------------------- installcheck: # Creating dependencies # --------------------- dep: $(SDCC_LIBS) $(MAKE) -f main.mk dep @for pkg in $(PKGS); do\ $(MAKE) -C $$pkg dep ;\ done # My rules # -------- newer: distclean @if [ -f start ]; then \ tar cvf - \ `find . -newer start -type f -print` |\ gzip -9c >`date '+%m%d%H%M'`.tgz; \ else \ echo "start file not found.\n"; \ exit 1; \ fi putcopyright: 'put(c)' -s $(STARTYEAR) *.cc *.h *.y *.l # Remaking configuration # ---------------------- configure: configure.in $(SHELL) $(AUTOCONF) main.mk: $(srcdir)/main_in.mk $(srcdir)/configure.in config.status $(SHELL) ./config.status Makefiles: makefiles makefiles: config.status config.status: configure $(SHELL) ./config.status --recheck makefiles: $(SHELL) ./config.status freshconf: main.mk checkconf: @if [ -f devel ]; then\ $(MAKE) freshconf;\ fi # End of Makefile