#Look for files in sources directory
VPATH = ../sources

#
# define some variables for LSF and dc_shell
#
BSUB = bsub
BSUB_JOBNAME = $@
BSUB_QUEUE = synthesis
BSUB_MEM = 1000
BSUB_RES = -R "select[maxmem>=${BSUB_MEM} && cpuf>=16.0]"
BSUB_WAIT = -K
BSUB_LOG = -o $@.lsflog -E "/bin/rm -f $@.lsflog"
BSUB_ARGS = ${BSUB_WAIT} -q ${BSUB_QUEUE} -J ${BSUB_JOBNAME} ${BSUB_RES} ${BSUB_LOG}
BSUB_CMD = ${BSUB} ${BSUB_ARGS}

DC_SHELL = dc_shell
DC_SHELL_ARGS = -tcl -f $@.tcl > $@.synlog
DC_SHELL_CMD = ${BSUB_CMD} "${DC_SHELL} ${DC_SHELL_ARGS}"

# if you are not using LSF, uncomment the following line
#DC_SHELL_CMD = ${DC_SHELL} ${DC_SHELL_ARGS}

######################################################################
# the rules

.SUFFIXES: .v .tcl .const .db .synlog .gdb

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

all: \
	hierarchical \
	simple \
	acs_pass0 acs_pass1 acs_pass2 \
	baseline \
	default

all_reports: \
	report_hierarchical \
	report_simple \
	report_pass0 report_pass1 report_pass2 \
	report_baseline \
	report_default

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

analyze:
	/bin/rm -rf work vpp
	${DC_SHELL_CMD}
	touch analyze

elaborate: analyze
	${DC_SHELL_CMD}
	touch elaborate

check_gdb: BSUB_WAIT =
check_gdb: elaborate
	${DC_SHELL_CMD}

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

simple: elaborate
	${DC_SHELL_CMD}
	${MAKE} report_simple

report_simple: BSUB_WAIT =
report_simple:
	${DC_SHELL_CMD}

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

hierarchical: BSUB_MEM = 2000
hierarchical: elaborate
	${DC_SHELL_CMD}
	${MAKE} report_hierarchical

report_hierarchical: BSUB_WAIT =
report_hierarchical:
	${DC_SHELL_CMD}

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

baseline:
	$(MAKE) -C baseline_dir -f ../Makefile.baseline
	$(MAKE) report_baseline

report_baseline: BSUB_WAIT =
report_baseline:
	${DC_SHELL_CMD}

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

default: elaborate
	mkdir default_dir
	chdir default_dir ; ln -s ../.synopsys_dc.setup
	../bin/make_hier reports/cpu.gdb.report_hierarchy \
		> default_dir/dependencies.make
	$(MAKE) -C default_dir -f ../Makefile.default
	$(MAKE) report_default

report_default: BSUB_WAIT =
report_default:
	${DC_SHELL_CMD}

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

setup_pass0:
	${DC_SHELL_CMD}

report_pass0: BSUB_WAIT =
report_pass0:
	${DC_SHELL_CMD}

acs_pass0: elaborate
	$(MAKE) setup_pass0
	$(MAKE) -f pass0/Makefile
	touch acs_pass0
	$(MAKE) report_pass0

# refine pass0

setup_pass1:
	${DC_SHELL_CMD}

report_pass1: BSUB_WAIT =
report_pass1:
	${DC_SHELL_CMD}

acs_pass1: acs_pass0
	$(MAKE) setup_pass1
	$(MAKE) -f pass1/Makefile
	touch acs_pass1
	$(MAKE) report_pass1

# recompile pass0

setup_pass2:
	${DC_SHELL_CMD}

report_pass2: BSUB_WAIT =
report_pass2:
	${DC_SHELL_CMD}

acs_pass2: acs_pass0
	$(MAKE) setup_pass2
	$(MAKE) -f pass2/Makefile
	touch acs_pass2
	$(MAKE) report_pass2

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

sources_X10:
	for num in 0 1 2 3 4 5 6 7 8 9 ; do \
	  rm -rf ../sources_X/sources_N$${num} ; \
	  mkdir ../sources_X/sources_N$${num} ; \
	  for file in ../sources_X/sources_XXX/* ; do \
	    sed -e "s/_XXX/_N$${num}/g" \
	       ../sources_X/sources_XXX/`basename $${file}` \
	       > ../sources_X/sources_N$${num}/`basename $${file}` ; \
	  done ; \
	done

analyze_X10: sources_X10 analyze
	${DC_SHELL_CMD}
	touch analyze_X10

elaborate_X2: analyze_X10
	${DC_SHELL_CMD}
	touch elaborate_X2

elaborate_X5 : BSUB_MEM = 3000
elaborate_X5 : analyze_X10
	${DC_SHELL_CMD}
	touch elaborate_X5

elaborate_X10 : BSUB_MEM = 3000
elaborate_X10: analyze_X10
	${DC_SHELL_CMD}
	touch elaborate_X10

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

simple_X2: elaborate_X2
	${DC_SHELL_CMD}
	${MAKE} report_simple_X2

report_simple_X2: BSUB_WAIT =
report_simple_X2:
	${DC_SHELL_CMD}

simple_X5: elaborate_X5
	${DC_SHELL_CMD}
	${MAKE} report_simple_X5

report_simple_X5: BSUB_WAIT =
report_simple_X5:
	${DC_SHELL_CMD}

simple_X10: BSUB_MEM = 3000
simple_X10: elaborate_X10
	${DC_SHELL_CMD}
	${MAKE} report_simple_X10

report_simple_X10: BSUB_WAIT =
report_simple_X10:
	${DC_SHELL_CMD}

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

hierarchical_X2: BSUB_MEM = 4000
hierarchical_X2: elaborate_X2
	${DC_SHELL_CMD}
	${MAKE} report_hierarchical_X2

report_hierarchical_X2: BSUB_WAIT =
report_hierarchical_X2:
	${DC_SHELL_CMD}

hierarchical_X5: BSUB_MEM = 4000
hierarchical_X5: elaborate_X5
	${DC_SHELL_CMD}
	${MAKE} report_hierarchical_X5

report_hierarchical_X5: BSUB_MEM = 2000
report_hierarchical_X5: BSUB_WAIT =
report_hierarchical_X5:
	${DC_SHELL_CMD}

hierarchical_X10: BSUB_MEM = 4000
hierarchical_X10: elaborate_X10
	${DC_SHELL_CMD}
	${MAKE} report_hierarchical_X10

report_hierarchical_X10: BSUB_MEM = 2000
report_hierarchical_X10: BSUB_WAIT =
report_hierarchical_X10:
	${DC_SHELL_CMD}

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

default_X2: elaborate_X2
	mkdir default_X2_dir
	chdir default_X2_dir ; ln -s ../.synopsys_dc.setup
	../bin/make_hier reports/cpu_X2.gdb.report_hierarchy \
		> default_X2_dir/dependencies.make
	$(MAKE) -C default_X2_dir -f ../Makefile.default
	$(MAKE) report_default_X2

report_default_X2: BSUB_WAIT =
report_default_X2:
	${DC_SHELL_CMD}

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

default_X5: elaborate_X5 elaborate_X2
	mkdir default_X5_dir
	chdir default_X5_dir ; ln -s ../.synopsys_dc.setup
	../bin/make_hier reports/cpu_X5.gdb.report_hierarchy \
		> default_X5_dir/dependencies.make
	$(MAKE) -C default_X5_dir -f ../Makefile.default
	$(MAKE) report_default_X5

report_default_X5: BSUB_WAIT =
report_default_X5:
	${DC_SHELL_CMD}

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

default_X10: elaborate_X10 elaborate_X5 elaborate_X2
	mkdir default_X10_dir
	chdir default_X10_dir ; ln -s ../.synopsys_dc.setup
	../bin/make_hier reports/cpu_X10.gdb.report_hierarchy \
		> default_X10_dir/dependencies.make
	$(MAKE) -C default_X10_dir -f ../Makefile.default
	$(MAKE) report_default_X10

report_default_X10: BSUB_WAIT =
report_default_X10:
	${DC_SHELL_CMD}

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

setup_pass0_X2: BSUB_MEM = 2000
setup_pass0_X2:
	${DC_SHELL_CMD}

report_pass0_X2: BSUB_WAIT =
report_pass0_X2:
	${DC_SHELL_CMD}

acs_pass0_X2: elaborate_X2
	$(MAKE) setup_pass0_X2
	$(MAKE) -f pass0_X2/Makefile
	touch acs_pass0_X2
	$(MAKE) report_pass0_X2

# refine pass0_X2

setup_pass1_X2: BSUB_MEM = 2000
setup_pass1_X2:
	${DC_SHELL_CMD}

report_pass1_X2: BSUB_WAIT =
report_pass1_X2:
	${DC_SHELL_CMD}

acs_pass1_X2: acs_pass0_X2
	$(MAKE) setup_pass1_X2
	$(MAKE) -f pass1_X2/Makefile
	touch acs_pass1_X2
	$(MAKE) report_pass1_X2

# recompile pass0_X2

setup_pass2_X2: BSUB_MEM = 2000
setup_pass2_X2:
	${DC_SHELL_CMD}

report_pass2_X2: BSUB_WAIT =
report_pass2_X2:
	${DC_SHELL_CMD}

acs_pass2_X2: acs_pass0_X2
	$(MAKE) setup_pass2_X2
	$(MAKE) -f pass2_X2/Makefile
	touch acs_pass2_X2
	$(MAKE) report_pass2_X2

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

setup_pass0_X5: BSUB_MEM = 3000
setup_pass0_X5:
	${DC_SHELL_CMD}

report_pass0_X5: BSUB_WAIT =
report_pass0_X5:
	${DC_SHELL_CMD}

acs_pass0_X5: elaborate_X5
	$(MAKE) setup_pass0_X5
	$(MAKE) -f pass0_X5/Makefile
	touch acs_pass0_X5
	$(MAKE) report_pass0_X5

# refine pass0_X5

setup_pass1_X5: BSUB_MEM = 2000
setup_pass1_X5:
	${DC_SHELL_CMD}

report_pass1_X5: BSUB_WAIT =
report_pass1_X5:
	${DC_SHELL_CMD}

acs_pass1_X5: acs_pass0_X5
	$(MAKE) setup_pass1_X5
	$(MAKE) -f pass1_X5/Makefile
	touch acs_pass1_X5
	$(MAKE) report_pass1_X5

# recompile pass0_X5

setup_pass2_X5: BSUB_MEM = 2000
setup_pass2_X5:
	${DC_SHELL_CMD}

report_pass2_X5: BSUB_WAIT =
report_pass2_X5:
	${DC_SHELL_CMD}

acs_pass2_X5: acs_pass0_X5
	$(MAKE) setup_pass2_X5
	$(MAKE) -f pass2_X5/Makefile
	touch acs_pass2_X5
	$(MAKE) report_pass2_X5

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

setup_pass0_X10: BSUB_MEM = 3000
setup_pass0_X10:
	${DC_SHELL_CMD}

report_pass0_X10: BSUB_WAIT =
report_pass0_X10:
	${DC_SHELL_CMD}

acs_pass0_X10: elaborate_X10
	$(MAKE) setup_pass0_X10
	$(MAKE) -f pass0_X10/Makefile
	touch acs_pass0_X10
	$(MAKE) report_pass0_X10

# refine pass0_X10

setup_pass1_X10: BSUB_MEM = 2000
setup_pass1_X10:
	${DC_SHELL_CMD}

report_pass1_X10: BSUB_WAIT =
report_pass1_X10:
	${DC_SHELL_CMD}

acs_pass1_X10: acs_pass0_X10
	$(MAKE) setup_pass1_X10
	$(MAKE) -f pass1_X10/Makefile
	touch acs_pass1_X10
	$(MAKE) report_pass1_X10

# recompile pass0_X10

setup_pass2_X10: BSUB_MEM = 2000
setup_pass2_X10:
	${DC_SHELL_CMD}

report_pass2_X10: BSUB_WAIT =
report_pass2_X10:
	${DC_SHELL_CMD}

acs_pass2_X10: acs_pass0_X10
	$(MAKE) setup_pass2_X10
	$(MAKE) -f pass2_X10/Makefile
	touch acs_pass2_X10
	$(MAKE) report_pass2_X10

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