# TARGETS:
# 
# build: build all of the benchmark programs
# test:  run all of the CPU-time tests
# diff:  run all of the "diff" tests
# count: count the lines of code of all Cyclone programs
#
# default does first three
#

PROGRAMS=cacm\
	  ncompress-4.2.4\
	  ppm\
	  cfrac\
	  tile\
	  grobner\
	  aes\
	  matxmult\
	  finger\
	  http_get\
	  http_ping\
	  http_post\
	  http_load\
	  mini_httpd-1.15c


ifndef NUMTESTS
NUMTESTS=21
endif

ifdef WINDIR
EXE=.exe
else
EXE=
endif
TIMECMD=/usr/bin/time
HIST=bin/hist$(EXE)

all: build test diff

%-all: 
	$(MAKE) $<-build
	$(MAKE) $<-test
	$(MAKE) $<-diff

build: 
	for i in $(PROGRAMS); do ($(MAKE) $$i-build) done
	for i in $(PROGRAMS); do ($(MAKE) $$i-build-nocheck) done

test: $(HIST)
	@(if [ -z "$(RUN)" ]; then \
	  RUN=`date +"%d%b%y-%H%M"`; \
	fi; \
	for i in $(PROGRAMS); do ($(MAKE) -s RUN=$$RUN $$i-test) done; \
	for i in $(PROGRAMS); do ($(MAKE) -s RUN=$$RUN $$i-cook) done)

cook: $(HIST)
	@(for i in $(PROGRAMS); do ($(MAKE) -s $$i-cook) done)

dist: $(HIST)
	@(for i in $(PROGRAMS); do ($(MAKE) -s $$i-dist) done)

diff: 
	rm -f report.diff
	for i in $(PROGRAMS); do ($(MAKE) $$i-diff ; cat $$i/report.diff >> results/report.diff) done

diff-ps: 
	for i in $(PROGRAMS); do ($(MAKE) $$i-diff-ps ) done

count:
	rm -f report.count
	for i in $(PROGRAMS); do (echo $$i; $(MAKE) -s $$i-count) done >> report.count

$(HIST): bin/cychist.cyc
	cyclone$(EXE) $(CFLAGS) -o $@ $^ -lm

clean: 
	for i in $(PROGRAMS); do ($(MAKE) $$i-clean) done
	rm -f $(HIST);
	rm -f Makefile.flags

%-build: %
	$(MAKE) EXE=$(EXE) -f ../Makefile.project -C $<  build

%-build-nocheck: %
	$(MAKE) EXE=$(EXE) -f ../Makefile.project -C $<  build-nocheck

%-test: %
	@(if [ -z "$(RUN)" ]; then \
	  RUN=`date +"%d%b%y-%H%M"`; \
	else RUN=$(RUN); fi; \
	if [ ! -d "results/$$RUN" ]; then mkdir -p results/$$RUN; fi; \
	rm -f results/last ; ln -s $$RUN results/last ; \
	echo running TEST=$< RUN=$$RUN ITERS=$(NUMTESTS);\
	$(MAKE) -s -f ../Makefile.project NUMTESTS=$(NUMTESTS) RESULTSDIR=../results/$$RUN TEST=$< -C $< test)

%-cook: %
	@(if [ -n "$(RUN)" ]; then \
	  echo cooking TEST=$< RUN=$(RUN); \
	  $(MAKE) -s RESULTSDIR=../results/$(RUN) TEST=$< -f ../Makefile.project -C $< cook; \
	else \
	  echo "Need to set RUN variable"; \
	fi)

%-dist: %
	@(if [ -n "$(RUN)" ]; then \
	  echo making distribution for TEST=$< RUN=$(RUN); \
	  $(MAKE) -s RESULTSDIR=../results/$(RUN) TEST=$< -f ../Makefile.project -C $< dist; \
	else \
	  echo "Need to set RUN variable"; \
	fi)

%-diff: %
	EXE=$(EXE) TESTNAME=$* $(MAKE) -f ../Makefile.project -C $< diff 

%-count: %
	@(TESTNAME=$$i $(MAKE) -f ../Makefile.project -C $< count)

%-diff-ps: %
	EXE=$(EXE) TESTNAME=$$i $(MAKE) -f ../Makefile.project -C $< diff-ps

%-clean: %
	$(MAKE) EXE=$(EXE) -f ../Makefile.project -C $<  clean
