AUTOCONF = autoconf
PRJDIR = .
-PKGS = support/gc support/cpp \
- src as/mcs51 debugger/mcs51 \
- device/include device/lib sim/mcs51
-PRJS = sim/mcs51
+SDCC_MISC = debugger/mcs51 sim/ucsim
+SDCC_LIBS = support/cpp
+SDCC_ASLINK = as/mcs51 as link
-srcdir = .
+PKGS = $(SDCC_MISC) $(SDCC_LIBS) $(SDCC_ASLINK) \
+ src device/include device/lib
+
+PORTS = mcs51 z80
+srcdir = .
# Compiling entire program or any subproject
# ------------------------------------------
-all: checkconf
- for pkg in $(PKGS); do $(MAKE) -C $$pkg; done
+all: checkconf sdcc
+
+sdcc-libs:
+ifeq ($(CROSS_LIBGC),1)
+ $(MAKE) -C support/gc -f Makefile.cross
+else
+ $(MAKE) -C support/gc
+endif
+ 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-device:
+ $(MAKE) -C device/include
+ $(MAKE) -C device/lib
+
+sdcc: sdcc-cc sdcc-aslink sdcc-misc sdcc-device
$(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
# ---------------------------------------------------
install:
$(MAKE) -f main.mk install
@for pkg in $(PKGS); do\
- CURDIR=`pwd`;\
- cd $$pkg && $(MAKE) install; cd $(CURDIR);\
+ $(MAKE) -C $$pkg install ;\
done
uninstall:
$(MAKE) -f main.mk uninstall
@for pkg in $(PKGS); do\
- CURDIR=`pwd`;\
- cd cmd && $(MAKE) uninstall; cd $(CURDIR);\
+ $(MAKE) -C $$pkg uninstall ;\
done
# Deleting all files created by building the program
# --------------------------------------------------
clean:
+ @echo "+ Cleaning root of the project..."
$(MAKE) -f clean.mk clean
- for pkg in $(PKGS); do $(MAKE) -C $$pkg clean; done
- @for prj in $(PRJS); do\
- CURDIR=`pwd`;\
- cd $$prj && $(MAKE) clean; cd $(CURDIR);\
+ @echo "+ Cleaning packages in their directories..."
+ for pkg in $(PKGS); do\
+ $(MAKE) PORTS="$(PORTS)" -C $$pkg clean ;\
done
# Deleting all files created by configuring or building the program
# -----------------------------------------------------------------
-distclean: clean
+distclean:
+ @echo "+ DistCleaning root of the project..."
$(MAKE) -f clean.mk distclean
- @for pkg in $(PKGS); do\
- CURDIR=`pwd`;\
- cd $$pkg && $(MAKE) -f clean.mk distclean; cd $(CURDIR);\
- done
- @for prj in $(PRJS); do\
- cd $$prj && $(MAKE) distclean; cd ..;\
+ @echo "+ DistCleaning packages using clean.mk..."
+ for pkg in $(PKGS); do\
+ $(MAKE) -C $$pkg -f clean.mk PORTS="$(PORTS)" distclean ;\
done
# -----------------------------------------
mostlyclean: clean
$(MAKE) -f clean.mk mostlyclean
- @for pkg in $(PKGS); do\
- CURDIR=`pwd`;\
- cd $$pkg && $(MAKE) -f clean.mk mostlyclean; cd $(CURDIR);\
- done
- @for prj in $(PRJS); do\
- CURDIR=`pwd`;\
- cd $$prj && $(MAKE) mostlyclean; cd $(CURDIR);\
+ for pkg in $(PKGS); do\
+ $(MAKE) -C $$pkg -f clean.mk PORTS="$(PORTS)" mostlyclean ;\
done
# -----------------------------------------------------------------------
realclean: distclean
$(MAKE) -f clean.mk realclean
- @for pkg in $(PKGS); do\
- CURDIR=`pwd`;\
- cd $$pkg && $(MAKE) -f clean.mk realclean; cd $(CURDIR);\
- done
- @for prj in $(PRJS); do\
- CURDIR=`pwd`;\
- cd $$prj && $(MAKE) realclean; cd $(CURDIR);\
+ for pkg in $(PKGS); do\
+ $(MAKE) -C $$pkg -f clean.mk PORTS="$(PORTS)" realclean ;\
done
dep:
$(MAKE) -f main.mk dep
@for pkg in $(PKGS); do\
- CURDIR=`pwd`;\
- cd $$pkg && $(MAKE) dep; cd $(CURDIR);\
+ $(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