#=======================================================================
# 6.375 Makefile for bsc-compile
#-----------------------------------------------------------------------
# $Id: Makefile,v 1.2 2007/03/21 22:27:03 jrk Exp $
#

default : all

basedir  = ../..

#--------------------------------------------------------------------
# Sources
#--------------------------------------------------------------------

# Library components

bsvclibdir = $(MIT6375_HOME)/install/bsvclib
bsvclibsrcs = \
	$(bsvclibdir)/BFIFO.bsv \
	$(bsvclibdir)/Trace.bsv \
	$(bsvclibdir)/IClientServer.bsv \
	$(bsvclibdir)/mkClientServerLatency.bsv \
	$(bsvclibdir)/GetPutExt.bsv \
        $(bsvclibdir)/PrimEHR.bsv \
        $(bsvclibdir)/EHR2.bsv \
        $(bsvclibdir)/EHR6.bsv \
	$(bsvclibdir)/SFIFO.bsv \

# Bluespec sources

toplevel_module = mkCoreTH

srcdir = $(basedir)/src-bpred-ehr
bsvsrcs = \
	$(srcdir)/SFIFO_EHR.bsv \
	$(srcdir)/ProcTypes.bsv \
	$(srcdir)/MemTypes.bsv \
	$(srcdir)/ICache.bsv \
	$(srcdir)/ICore.bsv \
	$(srcdir)/IProc.bsv \
	$(srcdir)/IMemArb.bsv \
	$(srcdir)/IMainMem.bsv \
	$(srcdir)/IBHT.bsv \
	$(srcdir)/mkBHT.bsv \
	$(srcdir)/mkCore.bsv \
	$(srcdir)/mkProc.bsv \
	$(srcdir)/mkInstCacheBlocking.bsv \
	$(srcdir)/mkDataCacheBlocking.bsv \
	$(srcdir)/mkMemArb.bsv \
	$(srcdir)/mkMainMem.bsv \
	$(srcdir)/mkCoreTH.bsv \

#--------------------------------------------------------------------
# Build rules
#--------------------------------------------------------------------

BSC_COMP = bsc
BSC_OPTS = -u -show-module-use -verilog -keep-fires -relax-method-earliness -aggressive-conditions

# Copy over the bluespec source

$(notdir $(bsvsrcs)) : % : $(srcdir)/%
	cp $< .

$(notdir $(bsvclibsrcs)) : % : $(bsvclibdir)/%
	cp $< .

# Run the bluespec compiler

bsv_TH_vsrc = $(toplevel_module).v
$(bsv_TH_vsrc) $(bsv_lib_use) : $(notdir $(bsvsrcs) $(bsvclibsrcs))
	$(BSC_COMP) $(BSC_OPTS) -g $(toplevel_module) $(toplevel_module).bsv

compile : $(toplevel_module).v

# Create a schedule file

schedule_rpt = schedule.rpt
$(schedule_rpt) : $(notdir $(bsvsrcs) $(bsvclibsrcs))
	rm -rf *.v
	$(BSC_COMP) $(BSC_OPTS) -show-schedule -show-rule-rel \* \* -g $(toplevel_module) \
                $(toplevel_module).bsv >& $(schedule_rpt)

junk += $(notdir $(bsvsrcs)) $(notdir $(bsvclibsrcs)) \
	    $(schedule_rpt) *.use *.bi *.bo *.v bsc.log

#--------------------------------------------------------------------
# Default make target
#--------------------------------------------------------------------

all : compile

#--------------------------------------------------------------------
# Clean up
#--------------------------------------------------------------------

clean :
	rm -rf $(junk) *~ \#* 
