# Author:  Andres Farfan
# Date  :  26/03/2000
# Time  :  04: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):$(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 =                                    $(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 
#########################################################################

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

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




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

%_glop.vst: %_scmap.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
########################################################
%_dpr.ap: %_fpgen.vst
	$(DPR) -p -r  $(subst .ap,,$@) $(subst .vst,,$<)


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


%_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,$@)

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


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

#Specific rules
CORE = aluctrl

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

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


alu_ctrl.ap: alu_ctrl_scr.ap
	mv alu_ctrl_scr.ap alu_ctrl.ap

alu_dp.ap: alu_dp_dpr.ap
	mv alu_dp_dpr.ap alu_dp.ap


alu.vst: aluctrl.vst aludp.vst

aluctrl.vst: alu_ctrl_glop.vst
	mv alu_ctrl_glop.vst aluctrl.vst

aludp.vst: alu_dp_fpgen.vst
	mv alu_dp_fpgen.vst aludp.vst

##############################
.PHONY : clean _graal _xsch

_xsch:
	$(XSCH)
_graal:	
	$(GRAAL)

_simvbe: 
	$(ASIMUT) -b alu_ctrl aluctrl_genpat vbe

_simvst: 
	$(ASIMUT) alu_ctrl_scmap aluctrl_genpat vst

rafa_asimut:
	$(ASIMUT) -c sstack_fpgen

_asimut:
	$(ASIMUT) -c alu
	$(ASIMUT) -c aludp
	$(ASIMUT) -c aluctrl
#	$(ASIMUT) -c boole
#	$(ASIMUT) -c adder
#	$(ASIMUT) -c adder16
#	$(ASIMUT) -c alu_tristate


#################################################
# 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 $(FPGEN_LIB)/*\
	rm -f *.vst;\
	rm -f *.gds;\
	rm -f *.frr;\