
## /*          Alliance CAD System 2.0                                   */
## /*            FITPATH Package 0.0                                     */
## /*                                                                    */
## /*  Copyright(c) 93-94, MASI, CAO-VLSI Team                           */
## /*                                                                    */
## /*  Author      :          Jean-Paul CHAPUT                           */
## /*  E-mail      :      cao-vlsi@masi.ibp.fr                           */
## /* ------------------------------------------------------------------ */
## /*  makefile    :      Fitpath (Data-Path Compiler)                   */
## /* ****************************************************************** */
## /*  11/10/93:0.00:Jean-Paul CHAPUT                                    */
## /*      Installation of the ALPHA version.                            */


## ********************* Access to Print and Archiver *********************


# Access to binaries forgotten in $(MACHINE).mk
CD           =          cd
CP           =          cp
LN           =          ln
CAT          =          cat
ECHO         =          echo
CHMOD        =          chmod


## ******************* Generators  Specifics Variables ********************


# RFG, BSG and RSA includes and paths.
#LOCAL_GRFINC = -I/users/outil1/rfg/labo/$(MACHINE)/include \
										-DGRF_H='<grf603.h>'
#LOCAL_GRFLIB = -L/users/outil1/rfg/labo/$(MACHINE)/lib     \
												-lGrf603

#LOCAL_GRFINC = -I/users/outil1/rfg/dev/include -DGRF_H='<grf603.h>'
#LOCAL_GRFLIB = -L/users/outil1/rfg/dev/lib             -lGrf603
#LOCAL_GBSINC = -I/users/outil1/bsg/dev/include -DGBS_H='<gbs200.h>'
#LOCAL_GBSLIB = -L/users/outil1/bsg/dev/lib             -lGbs200

LOCAL_GRFINC = -DGRF_H='<grf603.h>'
LOCAL_GRFLIB =         -lGrf603
LOCAL_GBSINC = -DGBS_H='<gbs200.h>'
LOCAL_GBSLIB =         -lGbs200
LOCAL_RSAINC = -DRSA_H='<gga300.h>'
LOCAL_RSALIB =         -lGga300


## ********************* Alliance Specifics Variables *********************


include  $(TOP)/etc/$(MACHINE).mk

# Current alliance(MBK) includes.
LOCAL_ALCICP = -I$(ALLIANCE_INCLUDE)
LOCAL_ALCILS = -DMLO_H='<mlo404.h>'  \
			   -DMPH_H='<mph402.h>'  \
			   -DMUT_H='<mut315.h>'  \
			   -DMGN_H='<mgn319.h>'  \
			   $(LOCAL_GRFINC)       \
			   $(LOCAL_GBSINC)       \
			   $(LOCAL_RSAINC)
LOCAL_ALCINC = $(LOCAL_ALCICP) \
			   $(LOCAL_ALCILS)

# Alliance(MBK) libraries to link with
LOCAL_ALCLBP = -L$(ALLIANCE_LIB)
LOCAL_ALCLLS = -lMgn319          \
			   $(LOCAL_GRFLIB)   \
			   $(LOCAL_GBSLIB)   \
			   $(LOCAL_RSALIB)   \
			   -lMlu411          \
			   -lMlo404          \
			   -lMal404          \
			   -lMcl408          \
			   -lMel406          \
			   -lMhl402          \
			   -lMsl608          \
			   -lMvl406          \
			   -lMpu402          \
			   -lMph402          \
			   -lMap402          \
			   -lMcp401          \
			   -lMmg401          \
			   -lMut315          \
			   -lIcu201          \
			   -lIcc201          \
			   -lIca201          \
			   -lIcn201          \
			   -lm
LOCAL_ALCLIB = $(LOCAL_ALCLBP) \
			   $(LOCAL_ALCLLS)


# Standart C compilation variables.
LOCAL_CFLAGS = -g -c -D$(MACHINE) -DNOCRUNCH_FILENAME=1 -DHOME_PC
LOCAL_OFLAGS = -g -o


## ******************** Data-Path  Specifics Variables ********************


LOCAL_SCEDIR = $(SCEDIR)
# Versions of Fitpath libraries.
LOCAL_DUTVER = 000
LOCAL_DGNVER = 000
LOCAL_DMLVER = 000

# Standart settings for Fitpath includes.
LOCAL_FITIDP = -I$(HOME)/dev/include
LOCAL_FITIMP = -I$(HOME)/labo/$(MACHINE)/include
LOCAL_FITILS = -DDML_H='<dml$(LOCAL_DMLVER).h>' \
			   -DDGN_H='<dgn$(LOCAL_DGNVER).h>' \
			   -DDUT_H='<dut$(LOCAL_DUTVER).h>'
LOCAL_FITINC = -I../include $(LOCAL_FITILS)

# Standarts settings for Fitpath libraries.
LOCAL_FITLDP = -L$(HOME)/dev/lib
LOCAL_FITLMP = -L$(HOME)/labo/$(MACHINE)/lib
LOCAL_FITLLS =     -lDml$(LOCAL_DMLVER) \
				   -lDgn$(LOCAL_DGNVER)
LOCAL_FITLIB = -L../lib $(LOCAL_FITLLS)


## ************************ Distribution Rule *****************************


# Default goal.
distrib: all
	@$(TOUCH) distrib;               \
	 if [ -f ../lib/INSTALLED ];     \
	 then                            \
		 $(RM) ../lib/INSTALLED;     \
	 else                            \
		 exit 0;                     \
	 fi;                             \
	 if [ -f ../include/INSTALLED ]; \
	 then                            \
		 $(RM) ../include/INSTALLED; \
	 else                            \
		 exit 0;                     \
	 fi;


all: rdml


## ****************** Fitpath Devellopement Goal (rdev) *******************


rdev: rdck


## ********************** Data-path  UTilities (DUT) **********************


## Compilation of Data-path UTilities.
## (associated librarie : DgnVVV)
rdut: ../lib/libDgn$(LOCAL_DGNVER).a(support.o) \
	 ../include/dut$(LOCAL_DUTVER).h

# Compilation and archivage of module "support.c".
../lib/libDgn$(LOCAL_DGNVER).a(support.o): dut/support.h \
										   dut/support.c
	$(CC) $(LOCAL_CFLAGS) $(LOCAL_FITINC)                        \
						  $(LOCAL_ALCINC)                        \
						  						  dut/support.c; \
	$(AR) $(ARFLAGS) ../lib/libDgn$(LOCAL_DGNVER).a   support.o; \
	$(RANLIB)        ../lib/libDgn$(LOCAL_DGNVER).a;             \
	$(RM) support.o

../include/dut$(LOCAL_DUTVER).h: dut/support.h
	$(CP) dut/support.h ../include/dut$(LOCAL_DUTVER).h


## ********************** Data-path GeNerators (DGN) **********************


# Default value for recursion.
LOCAL_DGNNAM = none
# Data-path GeNerators list.
LOCAL_DGNLST =   inv                             \
				 and2       nand2    and3  nand3 \
				  or2        nor2     or3   nor3 \
				 xor2       xnor2                \
				 nor2mask                        \
				xnor2mask                        \
				nand2mask                        \
				nmux2cs     mux2cs               \
			                mux3cd               \
				buse       nbuse                 \
			   const                             \
				 nul                             \
				pl1        npl1                  \
				pms                              \
				pdff        pdfft


## Compilation of Data-path GeNerators.
## (associated library : DgnVVV)
rdgn: rdut $(LOCAL_DGNLST)


inv:      ;$(MAKE) -f ./Makefile LOCAL_DGNNAM=inv       rGEN
and2:     ;$(MAKE) -f ./Makefile LOCAL_DGNNAM=and2      rGEN
and3:     ;$(MAKE) -f ./Makefile LOCAL_DGNNAM=and3      rGEN
nand2:    ;$(MAKE) -f ./Makefile LOCAL_DGNNAM=nand2     rGEN
nand3:    ;$(MAKE) -f ./Makefile LOCAL_DGNNAM=nand3     rGEN
or2:      ;$(MAKE) -f ./Makefile LOCAL_DGNNAM=or2       rGEN
or3:      ;$(MAKE) -f ./Makefile LOCAL_DGNNAM=or3       rGEN
nor2:     ;$(MAKE) -f ./Makefile LOCAL_DGNNAM=nor2      rGEN
nor3:     ;$(MAKE) -f ./Makefile LOCAL_DGNNAM=nor3      rGEN
xor2:     ;$(MAKE) -f ./Makefile LOCAL_DGNNAM=xor2      rGEN
xnor2:    ;$(MAKE) -f ./Makefile LOCAL_DGNNAM=xnor2     rGEN

nor2mask: ;$(MAKE) -f ./Makefile LOCAL_DGNNAM=nor2mask  rGEN
xnor2mask:;$(MAKE) -f ./Makefile LOCAL_DGNNAM=xnor2mask rGEN
nand2mask:;$(MAKE) -f ./Makefile LOCAL_DGNNAM=nand2mask rGEN

nmux2cs:  ;$(MAKE) -f ./Makefile LOCAL_DGNNAM=nmux2cs   rGEN
mux2cs:   ;$(MAKE) -f ./Makefile LOCAL_DGNNAM=mux2cs    rGEN
mux3cd:   ;$(MAKE) -f ./Makefile LOCAL_DGNNAM=mux3cd    rGEN

buse:     ;$(MAKE) -f ./Makefile LOCAL_DGNNAM=buse      rGEN
nbuse:    ;$(MAKE) -f ./Makefile LOCAL_DGNNAM=nbuse     rGEN

const:    ;$(MAKE) -f ./Makefile LOCAL_DGNNAM=const     rGEN
nul:      ;$(MAKE) -f ./Makefile LOCAL_DGNNAM=nul       rGEN

pl1:      ;$(MAKE) -f ./Makefile LOCAL_DGNNAM=pl1       rGEN
npl1:     ;$(MAKE) -f ./Makefile LOCAL_DGNNAM=npl1      rGEN
pms:      ;$(MAKE) -f ./Makefile LOCAL_DGNNAM=pms       rGEN
pdff:     ;$(MAKE) -f ./Makefile LOCAL_DGNNAM=pdff      rGEN
pdfft:    ;$(MAKE) -f ./Makefile LOCAL_DGNNAM=pdfft     rGEN


## ********************** Rules for Generator Update **********************


## Generic rules for updating any of the generators.
## (update: module, library, mini-generator and header)
rGEN: ../bin/$(LOCAL_DGNNAM)g ../include/dgn$(LOCAL_DGNVER).h

# Generators compilation rules.
# RQ: "$(LOCAL_DGNNAM).o" is archived in "DgnVVV", thus we can avoid to
#     put it on the compiler command line.
../bin/$(LOCAL_DGNNAM)g: \
	../lib/libDgn$(LOCAL_DGNVER).a(support.o)          \
	../lib/libDgn$(LOCAL_DGNVER).a($(LOCAL_DGNNAM).o)  \
							   dgn/$(LOCAL_DGNNAM)g.c
	$(CC) $(LOCAL_CFLAGS)        $(LOCAL_FITINC)     \
								 $(LOCAL_ALCINC)     \
					         dgn/$(LOCAL_DGNNAM)g.c;
	$(CC) $(LOCAL_OFLAGS) ../bin/$(LOCAL_DGNNAM)g    \
				                 $(LOCAL_DGNNAM)g.o  \
				   -L../lib -lDgn$(LOCAL_DGNVER)     \
					             $(LOCAL_ALCLIB);    \
	$(RM)   		             $(LOCAL_DGNNAM)g.o

# Module compilation and archivage rule.
../lib/libDgn$(LOCAL_DGNVER).a($(LOCAL_DGNNAM).o): \
						   dgn/$(LOCAL_DGNNAM).c   \
						   dgn/$(LOCAL_DGNNAM).h   \
						   dgn/dplimits.h          \
						   dut/support.h
	$(CC) $(LOCAL_CFLAGS)         $(LOCAL_FITINC)    \
								  $(LOCAL_ALCINC)    \
							  dgn/$(LOCAL_DGNNAM).c; \
	$(AR) $(ARFLAGS) ../lib/libDgn$(LOCAL_DGNVER).a  $(LOCAL_DGNNAM).o; \
	$(RANLIB)        ../lib/libDgn$(LOCAL_DGNVER).a; \
	$(RM)                         $(LOCAL_DGNNAM).o

# Check consticency of header file "dgnVVV.h" with "$(LOCAL_DGNNAM).h".
../include/dgn$(LOCAL_DGNVER).h:  dgn/$(LOCAL_DGNNAM).h
	$(RM) -f                         dgn$(LOCAL_DGNVER).h; \
	$(CAT)       dgn/H.dgn        >  dgn$(LOCAL_DGNVER).h; \
	$(ECHO) "#ifndef  _DGN_"      >> dgn$(LOCAL_DGNVER).h; \
	$(ECHO) "#define  _DGN_"      >> dgn$(LOCAL_DGNVER).h; \
	for header in dplimits $(LOCAL_DGNLST);                \
	do                                                     \
		$(CAT)   dgn/$${header}.h >> dgn$(LOCAL_DGNVER).h; \
	done;                                                  \
	$(ECHO) "#endif"              >> dgn$(LOCAL_DGNVER).h; \
	$(MV)                            dgn$(LOCAL_DGNVER).h  \
						  ../include/dgn$(LOCAL_DGNVER).h;


## ******************** Data-path Macro-Language (DML) ********************


## Compilation of Data-path Macro-Language.
## (associated library : DmlVVV)
rdml: rdgn ../lib/libDml$(LOCAL_DMLVER).a(FpgenMBK.o)     \
		   ../lib/libDml$(LOCAL_DMLVER).a(FpgenMGN.o)     \
		  ../include/dml$(LOCAL_DGNVER).h                 \
								   ../bin/fpgen           \
							   ../include/fpgen.h

# Compilation and archivage of module "FpgenMBK.c".
../lib/libDml$(LOCAL_DMLVER).a(FpgenMBK.o): dml/FpgenMBK.c \
											dml/FpgenMBK.h \
											dml/FpgenMGN.h \
											dut/support.h  \
		   ../include/dgn$(LOCAL_DGNVER).h
	$(CC) $(LOCAL_CFLAGS) $(LOCAL_FITINC)                       \
						  $(LOCAL_ALCINC)                       \
						  $(LOCAL_GRFINC)                       \
						  $(LOCAL_GBSINC)                       \
						  $(LOCAL_RSAINC)                       \
											    dml/FpgenMBK.c; \
	$(AR) $(ARFLAGS) ../lib/libDml$(LOCAL_DMLVER).a FpgenMBK.o; \
	$(RANLIB)        ../lib/libDml$(LOCAL_DMLVER).a;            \
	$(RM) FpgenMBK.o

# Compilation and archivage of module "FpgenMGN.c".
../lib/libDml$(LOCAL_DMLVER).a(FpgenMGN.o): dml/FpgenMGN.c \
											dml/FpgenMBK.h \
											dml/FpgenMGN.h \
											dut/support.h  \
		   ../include/dgn$(LOCAL_DGNVER).h
	$(CC) $(LOCAL_CFLAGS) $(LOCAL_FITINC)                       \
						  $(LOCAL_ALCINC)                       \
											    dml/FpgenMGN.c; \
	$(AR) $(ARFLAGS) ../lib/libDml$(LOCAL_DMLVER).a FpgenMGN.o; \
	$(RANLIB)        ../lib/libDml$(LOCAL_DMLVER).a;            \
	$(RM) FpgenMGN.o

../include/dml$(LOCAL_DGNVER).h: dml/FpgenMGN.h
	$(CP) dml/FpgenMGN.h ../include/dml$(LOCAL_DGNVER).h

../include/fpgen.h: ../include/dut$(LOCAL_DUTVER).h \
					../include/dgn$(LOCAL_DGNVER).h \
					../include/dml$(LOCAL_DMLVER).h
	 $(CAT)     dml/H.fpgen                    >  ../include/fpgen.h; \
	$(ECHO) "#ifndef _FPGEN_"                  >> ../include/fpgen.h; \
	$(ECHO) "#define _FPGEN_"                  >> ../include/fpgen.h; \
	$(ECHO) "#include  <dut$(LOCAL_DUTVER).h>" >> ../include/fpgen.h; \
	$(ECHO) "#include  <dgn$(LOCAL_DGNVER).h>" >> ../include/fpgen.h; \
	$(ECHO) "#include  <dml$(LOCAL_DMLVER).h>" >> ../include/fpgen.h; \
	$(ECHO) "#endif"                           >> ../include/fpgen.h;

# Installation and configuration of Fpgen's batch
# (similar to Genlib)
../bin/fpgen: dml/B.fpgen      \
		 ../include/fpgen.h
	 $(ECHO) "#!/bin/tcsh -f"                            >  fpgen.tmp; \
	 $(ECHO) 'setenv LOCAL_ALCICP    "$(LOCAL_ALCICP)"'  >> fpgen.tmp; \
	 $(ECHO) 'setenv LOCAL_ALCLBP    "$(LOCAL_ALCLBP)"'  >> fpgen.tmp; \
	 $(ECHO) 'setenv LOCAL_ALCLLS    "$(LOCAL_ALCLLS)"'  >> fpgen.tmp; \
	 $(ECHO) 'setenv LOCAL_FITLDP    "$(LOCAL_FITLDP)"'  >> fpgen.tmp; \
	 $(ECHO) 'setenv LOCAL_FITLMP    "$(LOCAL_FITLMP)"'  >> fpgen.tmp; \
	 $(ECHO) 'setenv LOCAL_FITLLS    "$(LOCAL_FITLLS)"'  >> fpgen.tmp; \
	 $(ECHO) 'setenv LOCAL_FITIDP    "$(LOCAL_FITIDP)"'  >> fpgen.tmp; \
	 $(ECHO) 'setenv LOCAL_FITIMP    "$(LOCAL_FITIMP)"'  >> fpgen.tmp; \
	 $(ECHO) 'setenv       ALCVER "$(ALLIANCE_VERSION)"' >> fpgen.tmp; \
	 $(ECHO) 'setenv       CC              "$(CC)"'      >> fpgen.tmp; \
	 $(ECHO) 'setenv       RM              "$(RM)"'      >> fpgen.tmp; \
	 $(ECHO) 'setenv       ECHO          "$(ECHO)"'      >> fpgen.tmp; \
	  $(CAT)   dml/B.fpgen                               >> fpgen.tmp; \
	$(CHMOD) a+x     fpgen.tmp;                                        \
	   $(MV)         fpgen.tmp ../bin/fpgen


## ******************** Data-path Placer Router (DCK) *********************


## Compilation of Data-Path placer router.
rdpr: rdml

../bin/dpr: dpr/B.dpr
	 $(ECHO) "#!/bin/tcsh -f"                        >  dpr.tmp; \
	 $(ECHO) 'setenv  ALCVER  "$(ALLIANCE_VERSION)"' >> dpr.tmp; \
	 $(ECHO) 'setenv  RM               "$(RM)"'      >> dpr.tmp; \
	 $(ECHO) 'setenv  ECHO           "$(ECHO)"'      >> dpr.tmp; \
	  $(CAT)   dpr/B.dpr                             >> dpr.tmp; \
	$(CHMOD) a+x     dpr.tmp;                                    \
	   $(MV)         dpr.tmp ../bin/dpr;


## *********************** Data-path ChecKer (DCK) ************************


## Compilation of the programs neededs for the check phasis.
rdck: rdpr ../bin/dpwrap

# Physical figure wraper utility.
../bin/dpwrap: dck/dpwrap.c
	$(CC) $(LOCAL_CFLAGS)                  \
		  $(LOCAL_ALCINC)                  \
							 dck/dpwrap.c; \
	$(CC) $(LOCAL_OFLAGS) ../bin/dpwrap    \
								 dpwrap.o  \
		  $(LOCAL_ALCLIB);                 \
	$(RM) dpwrap.o


## ******************** Delete all the generated files *********************


## Deletion of all the generaded files.
## (in order to perform a complete recompilation)
clean: rdel_inc rdel_obj rdel_lib rdel_bin rdel_dist
rdel:  rdel_inc rdel_obj rdel_lib rdel_bin rdel_FpGen


rdel_inc:
	$(RM) -f  ../include/*.h

rdel_obj:
	$(RM) -rf *.o

rdel_lib:
	$(RM) -rf ../lib/*.a

rdel_bin:
	$(RM) -rf ../bin/*

rdel_dist:
	$(RM) -rf distrib

rdel_FpGen:
	$(RM) -f ../bench/FpGen/*.grr; \
	$(RM) -f ../bench/FpGen/*.err; \
	$(RM) -f ../bench/FpGen/*.dpr; \
	$(RM) -f ../bench/FpGen/*.vst; \
	$(RM) -f ../bench/FpGen/*.al;  \
	$(RM) -f ../bench/FpGen/*.ap;  \
	$(RM) -f ../bench/FpGen/*.cp


