# Author:  Andres Farfan
# Date  :  26/03/2000
# Time  :  04:35

# Alliance binary access paths.
ALLIANCE_BIN =$(ALLIANCE_TOP)/bin
ALLIANCE_CELLS=$(ALLIANCE_TOP)/cells

# directorio raiz de los archivos de la tesis:
TESIS_ROOT=/home/alliance/vlsi

## ************************* Various MBK environment *************************

# Alliance leaf cells libraries paths.
# ====================================

   BSG_LIB = $(ALLIANCE_CELLS)/bsg
     SCLIB = $(ALLIANCE_CELLS)/sclib
     SXLIB = $(ALLIANCE_CELLS)/sxlib
  SC2SXLIB = $(ALLIANCE_CELLS)/sc2sxlib
   RSA_LIB = $(ALLIANCE_CELLS)/rsa
     DPLIB = $(ALLIANCE_CELLS)/dplib
     FPLIB = $(ALLIANCE_CELLS)/fplib
    PADLIB = $(ALLIANCE_CELLS)/padlib
    RFG_LIB = $(ALLIANCE_CELLS)/rfg
 FPGEN_LIB = ./mclib
  

 CTRL_CATA_LIB = $(SXLIB):$(PADLIB)
 DP_CATA_LIB = $(FPLIB):$(FPGEN_LIB):$(RSA_LIB):$(BSG_LIB):$(RFG_LIB)
 SIM_CATA_LIB = $(DP_CATA_LIB):$(SXLIB)
 
# MBK environment common to all Alliance tools.
# =============================================
#

MBK_DP  = MBK_WORK_LIB=.;           export MBK_WORK_LIB;   \
		   MBK_CATA_LIB=$(DP_CATA_LIB); export MBK_CATA_LIB;   \
		   MBK_CATAL_NAME=CATAL;     export MBK_CATAL_NAME; \
		   MBK_VDD=vdd;              export MBK_VDD;        \
		   MBK_VSS=vss;              export MBK_VSS;        \
		   MBK_SEPAR=.;              export MBK_SEPAR;      \
		   FPGEN_LIB=$(FPGEN_LIB)    export FPGEN_LIB;      \
           MBK_TARGET_LIB=$(FPLIB);  export MBK_TARGET_LIB

MBK_CTRL  = MBK_WORK_LIB=.;           export MBK_WORK_LIB;   \
		   MBK_CATA_LIB=$(CTRL_CATA_LIB); export MBK_CATA_LIB;   \
		   MBK_CATAL_NAME=CATAL;     export MBK_CATAL_NAME; \
		   MBK_VDD=vdd;              export MBK_VDD;        \
		   MBK_VSS=vss;              export MBK_VSS;        \
		   MBK_SEPAR=.;              export MBK_SEPAR;      \
           MBK_TARGET_LIB=$(SXLIB);  export MBK_TARGET_LIB

MBK_SIM  = MBK_WORK_LIB=.;           export MBK_WORK_LIB;   \
		   MBK_CATA_LIB=$(SIM_CATA_LIB); export MBK_CATA_LIB;   \
		   MBK_CATAL_NAME=CATAL;     export MBK_CATAL_NAME; \
		   MBK_VDD=vdd;              export MBK_VDD;        \
		   MBK_VSS=vss;              export MBK_VSS;        \
		   MBK_SEPAR=.;              export MBK_SEPAR

#
#
# Avalaibles MBK netlist and layout formats.
# ==========================================
#
MBK_FNE  = MBK_OUT_LO=fne; export MBK_OUT_LO; MBK_IN_LO=fne; export MBK_IN_LO
MBK_HNS  = MBK_OUT_LO=hns; export MBK_OUT_LO; MBK_IN_LO=hns; export MBK_IN_LO
MBK_CP   = MBK_OUT_PH=cp;  export MBK_OUT_PH; MBK_IN_PH=cp;  export MBK_IN_PH
MBK_VST  = MBK_OUT_LO=vst; export MBK_OUT_LO; MBK_IN_LO=vst; export MBK_IN_LO
MBK_AL   = MBK_OUT_LO=al;  export MBK_OUT_LO; MBK_IN_LO=al;  export MBK_IN_LO
MBK_AP   = MBK_OUT_PH=ap;  export MBK_OUT_PH; MBK_IN_PH=ap;  export MBK_IN_PH


# Alliance Tools with the correct MBK environment.
# ================================================
#
      BOP = $(MBK_CTRL); $(MBK_VST); $(MBK_AP); $(ALLIANCE_BIN)/bop
    SCMAP = $(MBK_CTRL); $(MBK_VST); $(MBK_AP); $(ALLIANCE_BIN)/scmap
      SCR = $(MBK_CTRL); $(MBK_VST); $(MBK_AP); $(ALLIANCE_BIN)/scr
      SCRDP = $(MBK_DP); $(MBK_VST); $(MBK_AP); $(ALLIANCE_BIN)/scr
     RSA  =                                    $(ALLIANCE_BIN)/rsa
   GENPAT = $(MBK_SIM);                        $(ALLIANCE_BIN)/genpat
   GENLIB = $(MBK_CTRL);                        $(ALLIANCE_BIN)/genlib
   ASIMUT = $(MBK_SIM);                        $(ALLIANCE_BIN)/asimut
     GLOP = $(MBK_CTRL); $(MBK_VST);             $(ALLIANCE_BIN)/glop
     DRUC = $(MBK_SIM);                          $(ALLIANCE_BIN)/druc
     LYNX = $(MBK_SIM); $(MBK_AL);           $(ALLIANCE_BIN)/lynx
      LVX = 				       $(ALLIANCE_BIN)/lvx
     XSCH = $(MBK_CTRL);                        $(ALLIANCE_BIN)/xsch
     FPGEN = $(MBK_DP); $(MBK_VST); $(MBK_AP); $(ALLIANCE_BIN)/fpgen
     DPR  = $(MBK_DP);			       $(ALLIANCE_BIN)/dpr
    GRAAL = $(MBK_SIM);			       $(ALLIANCE_BIN)/graal
    XSCH  = $(MBK_SIM);			       $(ALLIANCE_BIN)/xsch 
# Programa que abre vst's y corrige problemas del puerto inout en registros
# (c) 2000, SOB
  PATCHER = $(TESIS_ROOT)/programs/out2inout
  
#########################################################################

################################
# Validation
################################

%.drc: %.ap
	$(DRUC) $(subst .drc,,$@)

%.al: %.ap
	$(LYNX) -v -f $(subst .ap,,$<) $(subst .al,,$@)

%.lvx:
	$(LVX) al vst $(subst .lvx,,$@) $(subst dpr.lvx,fpgen,$@)

%_genpat.pat: %_genpat.c
	$(GENPAT) -v $(subst .c,,$<)

%_pat:
#	$(ASIMUT) $(subst pat,fpgen,$@) $(subst pat,genpat,$@) $(subst pat,simu,$@)
	$(ASIMUT) $(subst pat,fpgen,$@) $(subst pat,genpat,$@) $(subst pat,simu,$@)

%_test:
	$(ASIMUT) -c $(subst test,fpgen,$@)


########################################################
# Routing the Datapath
########################################################
%_dpr.ap: %_fpgen.vst
	$(DPR) -p  -r  $(subst .ap,,$@) $(subst .vst,,$<)

%_fpgen.vst: %_fpgen.c
	$(FPGEN) -v --keep-exec  $(subst .c,,$<)
#	$(PATCHER)

%_fpgenraw.vst: %_fpgen.c
	$(FPGEN) -v  $(subst .c,,$<)

%_patch: %_fpgen.vst
	$(PATCHER)

##############################

.PHONY : clean _graal _xsch

xsch:
	$(XSCH)
graal:	
	$(GRAAL)

#################################################
# Remove generated files                        # 
#################################################	
clean:
	mv fixed.ap fixed.naf
	rm -f *.ap;\
	rm -f *.vst;\
	rm -f *.al;\
	rm -f *.rep;\
	rm -f *.ttx;\
	rm -f *.drc;\
	rm -f *.cif;\
	rm -f *.pat;\
	rm -f $(FPGEN_LIB)/*\
	rm -f *.gds;\
	rm -f *.frr;\
	mv fixed.naf fixed.ap