# Author:  Andres Farfan
# Date  :  17/05/2000
# Time  :  03:35

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


## ************************* 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
FPGEN_LIB = ./mclib

 CTRL_CATA_LIB = $(SXLIB):$(PADLIB)
 DP_CATA_LIB = $(FPLIB):$(FPGEN_LIB):$(RSA_LIB):$(BSG_LIB)
 SIM_CATA_LIB = $(DP_CATA_LIB):$(CTRL_CATA_LIB)
 
# 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.
# ================================================
#
   ASIMUT = $(MBK_SIM);                         $(ALLIANCE_BIN)/asimut
      BBR = $(MBK_SIM);			        $(ALLIANCE_BIN)/bbr
      BOP = $(MBK_CTRL); $(MBK_VST); $(MBK_AP); $(ALLIANCE_BIN)/bop
     DRUC = $(MBK_SIM);                         $(ALLIANCE_BIN)/druc
     DPR  = $(MBK_DP);			        $(ALLIANCE_BIN)/dpr      
     FPGEN = $(MBK_DP); $(MBK_VST); $(MBK_AP);  $(ALLIANCE_BIN)/fpgen          
   GENPAT = $(MBK_SIM);                         $(ALLIANCE_BIN)/genpat
   GENLIB = $(MBK_CTRL);                        $(ALLIANCE_BIN)/genlib
     GLOP = $(MBK_CTRL); $(MBK_VST);            $(ALLIANCE_BIN)/glop
    GRAAL = $(MBK_SIM);			        $(ALLIANCE_BIN)/graal
     LVX  = $(MBK_SIM);			        $(ALLIANCE_BIN)/lvx    
     LYNX = $(MBK_SIM);  $(MBK_AL);             $(ALLIANCE_BIN)/lynx      
    SCMAP = $(MBK_CTRL); $(MBK_VST); $(MBK_AP); $(ALLIANCE_BIN)/scmap
      SCR = $(MBK_CTRL); $(MBK_VST); $(MBK_AP); $(ALLIANCE_BIN)/scr
    XSCH  = $(MBK_SIM);			        $(ALLIANCE_BIN)/xsch 

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

################################
# Validation
################################
%.drc: %.ap
	$(DRUC) $(subst .ap,,$<)

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

%.lvx: %.al %.vst
	$(LVX) vst al $(subst .al,,$<) $(subst .al,,$<) -f 

###################################################
# Routing the Core - This is not necessary
###################################################
%.bbr: %.vst %.ap
	$(BBR) $(subst .bbr,,$@) -v -o  $(subst .bbr,,$@) vdd 12 vss 12

%core.ap: %core_genlib.c %dp.ap %ctrl.ap
	$(GENLIB) $(subst .c,,$<)



###################################################
# Routing the Control Block
###################################################
%ctrl.ap: %ctrl.vst
	$(SCR) -p -r -i 1000 -o $(subst .ap,,$@)  $(subst .vst,,$<)

%ctrl.vst: %ctrlscmap.vst
	$(GLOP) -g $(subst .vst,,$<) $(subst .vst,,$@)

%scmap.vst: %bop.vbe
	$(SCMAP) $(subst .vbe,,$<) $(subst .vst,,$@)

%bop.vbe: %.vbe
	$(BOP) -o $(subst .vbe,,$<) $(subst .vbe,,$@)


########################################################
# Routing the Datapath
########################################################
# $(subst .ap,,$@)
%dp.ap: %dp.vst
	$(DPR) -V -o -p -i 10000 -r  $(subst .ap,,$@)   $(subst .vst,,$<)


%dp.vst: %dp_fpgen.c
	$(FPGEN) -v  $(subst .c,,$<)




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


##############################
#Specific rules
##############################
CORE = extbus
CELLS = 
SUBCIR = extbusregs.vst extbustris.vst

.SECONDARY:  $(CORE).vst $(CORE).ap


vst.pat: $(CORE)_genpat.pat $(CORE).vst
	$(ASIMUT) $(CORE) $(CORE)_genpat vst

vbe.pat: $(CORE)_genpat.pat $(CORE).vbe
	$(ASIMUT) -b $(CORE) $(CORE)_genpat vbe;\

alucore.vst: aludp.vst aluctrl.vst

##############################
# PHONY TARGETS
##############################
.PHONY : clean graal xsch

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


#################################################
# Remove generated files                        # 
#################################################	
clean:
	rm -f *.ap;\
	rm -f *.al;\
	rm -f *.rep;\
	rm -f *.ttx;\
	rm -f *.drc;\
	rm -f *.cif;\
	rm -f *.pat;\
	rm -f *.gds;\
	rm -f $(FPGEN_LIB)/*;\
	rm -f $(CELLS);\
	rm -f $(SUBCIR);\
