#
SHELL = /bin/sh
-AUTOCONF = autoconf
PRJDIR = .
-PKGS = support/gc support/cpp \
- src as/mcs51 debugger/mcs51 \
- device/include device/lib sim/mcs51
-PRJS = sim/mcs51
-PORTS = mcs51 z80
-srcdir = .
+include $(PRJDIR)/Makefile.common
+SDCC_MISC = debugger/mcs51 sim/ucsim
+SDCC_LIBS = support/cpp2 support/makebin
+SDCC_DOC = doc
+
+# Parts that are not normally compiled but need to be cleaned
+SDCC_EXTRA = support/regression
+
+SDCC_ASLINK = as/mcs51 as link as/hc08
+SDCC_PACKIHX = packihx
+SDCC_LIBRARIAN = support/librarian
+
+TARGETS = sdcc-libs sdcc-cc sdcc-aslink sdcc-doc
+
+PKGS = $(SDCC_LIBS) src $(SDCC_ASLINK) $(SDCC_DOC)
+
+ifneq ($(OPT_ENABLE_UCSIM), no)
+TARGETS += sdcc-misc
+PKGS += $(SDCC_MISC)
+endif
+
+ifneq ($(OPT_ENABLE_DEVICE_LIB_BUILD), no)
+TARGETS += sdcc-device
+PKGS += device/include device/lib
+endif
+
+ifneq ($(OPT_ENABLE_PACKIHX), no)
+TARGETS += sdcc-packihx
+PKGS += $(SDCC_PACKIHX)
+endif
+
+TARGETS += sdcc-librarian
+PKGS += $(SDCC_LIBRARIAN)
+
+PKGS_TINI = $(SDCC_LIBS) $(SDCC_ASLINK) \
+ src device/include $(SDCC_PACKIHX) $(SDCC_LIBRARIAN)
+PORTS = $(shell cat ports.build)
+ALLPORTS = $(shell cat ports.all)
# Compiling entire program or any subproject
# ------------------------------------------
-all: checkconf
- for pkg in $(PKGS); do $(MAKE) -C $$pkg; done
+all: checkconf sdcc
+
+tini: checkconf sdcc-tini
+
+sdcc-libs:
+ for lib in $(SDCC_LIBS); do $(MAKE) -C $$lib; done
+
+sdcc-cc: sdcc-libs
+ $(MAKE) -C src
+
+sdcc-aslink:
+ for as in $(SDCC_ASLINK); do $(MAKE) -C $$as; done
+
+sdcc-misc:
+ for misc in $(SDCC_MISC); do $(MAKE) -C $$misc; done
+
+sdcc-packihx:
+ $(MAKE) -C $(SDCC_PACKIHX)
+
+sdcc-librarian:
+ $(MAKE) -C $(SDCC_LIBRARIAN)
+
+sdcc-device: sdcc-cc sdcc-aslink
+ $(MAKE) -C device/include
+ $(MAKE) -C device/lib
+
+sdcc-device-tini:
+ $(MAKE) -C device/include
+ $(MAKE) -C device/lib modelDS390
+
+# Empty for now, as doc depends on latex and latex2html
+sdcc-doc:
+
+sdcc: $(TARGETS)
+
+sdcc-tini: sdcc-cc sdcc-aslink sdcc-device-tini sdcc-packihx sdcc-librarian
$(MAKE) -f main.mk all
+# Some interesting sub rules
+sdcc-bin: sdcc-cc sdcc-aslink sdcc-misc
+
+sdcc-base: sdcc-cc sdcc-aslink
# Compiling and installing everything and runing test
# ---------------------------------------------------
$(MAKE) -C $$pkg install ;\
done
+install-tini:
+ $(MAKE) -f main.mk install
+ @for pkg in $(PKGS_TINI); do\
+ $(MAKE) -C $$pkg install ;\
+ done
+ $(MAKE) -C device/lib installDS390
+
+
# Deleting all the installed files
# --------------------------------
$(MAKE) -f clean.mk clean
@echo "+ Cleaning packages in their directories..."
for pkg in $(PKGS); do\
- $(MAKE) PORTS="$(PORTS)" -C $$pkg clean ;\
- done
- @echo "+ Cleaning sub-projects using Makefile..."
- for prj in $(PRJS); do\
- $(MAKE) -C $$prj clean ;\
+ $(MAKE) PORTS="$(PORTS)" EXEEXT=$(EXEEXT) -C $$pkg -f clean.mk clean ;\
done
-
# Deleting all files created by configuring or building the program
# -----------------------------------------------------------------
distclean:
$(MAKE) -f clean.mk distclean
@echo "+ DistCleaning packages using clean.mk..."
for pkg in $(PKGS); do\
- $(MAKE) -C $$pkg -f clean.mk PORTS="$(PORTS)" distclean ;\
+ $(MAKE) -C $$pkg PORTS="$(PORTS)" EXEEXT=$(EXEEXT) -f clean.mk distclean ;\
done
- @echo "+ DistCleaning sub-projects using Makefile..."
- for prj in $(PRJS); do\
- $(MAKE) -C $$prj distclean ;\
+ for pkg in $(SDCC_EXTRA); do \
+ $(MAKE) -C $$pkg clean; \
done
-
# Like clean but some files may still exist
# -----------------------------------------
mostlyclean: clean
$(MAKE) -f clean.mk mostlyclean
for pkg in $(PKGS); do\
- $(MAKE) -C $$pkg -f clean.mk PORTS="$(PORTS)" mostlyclean ;\
- done
- for prj in $(PRJS); do\
- $(MAKE) -C $$prj mostlyclean ;\
+ $(MAKE) -C $$pkg -f clean.mk PORTS="$(PORTS)" EXEEXT=$(EXEEXT) mostlyclean ;\
done
realclean: distclean
$(MAKE) -f clean.mk realclean
for pkg in $(PKGS); do\
- $(MAKE) -C $$pkg -f clean.mk PORTS="$(PORTS)" realclean ;\
- done
- for prj in $(PRJS); do\
- $(MAKE) -C $$prj realclean ;\
+ $(MAKE) -C $$pkg -f clean.mk PORTS="$(PORTS)" EXEEXT=$(EXEEXT) realclean ;\
done