include header.mk

#
# ------------------------------------------------------------------------
# Our parallel make rule
#

.PHONY: all $(DIRS)

all: boot start $(DIRS)
	@echo "nobench run finished at "`date` >>  bench.results
	$(MAKE) publish

$(DIRS): boot start
	$(MAKE) --directory=$@

.PHONY: start
start: boot
	@echo "nobench run started at "`date` >  bench.results
	@./bin/versions $(COMPILERS)          >  versions.db

#
# Do a single test only, useful when concentrating optimisation effort...
#
$(patsubst %, %/$(shell basename %), ${DIRS}): boot
	@echo "nobench run started at "`date` >  bench.results
	@./bin/versions $(COMPILERS)          >> bench.results
	@./bin/versions $(COMPILERS)          >  versions.db
	@./bin/arch                           >> bench.results
	@( cd `dirname $@` ; $(MAKE) ) | tee bench.log
	@echo "nobench run finished at "`date` >> bench.results

#
# ------------------------------------------------------------------------
# generating initial test data
#

# all scripts
SCRIPTS=bin/versions \
        bin/gen-report \
        bin/timeout \
        bin/bench \
        bin/sumcol-gen \
        bin/fasta-gen

# all data files to generate
DATAS=imaginary/sumcol/sumcol.input \
      spectral/sorting/sorting.input \
      real/rsa/rsa.input \
      spectral/regex-dna/regex-dna.input \
      spectral/k-nucleotide/k-nucleotide.input \
      spectral/reverse-complement/reverse-complement.input \
      imaginary/jl_rsa/jl_rsa.stdin
#
# ------------------------------------------------------------------------
# Getting started
#

.PHONY: boot
boot: $(DATAS) bin/gen-report bin/bench bin/timeout bin/versions
	chmod +x bin/arch

#
# build system scripts
#

bin/versions: bin/versions.hs
	cd bin && $(GHC) -O versions.hs -o versions
bin/timeout: bin/timeout.hs
	cd bin && $(GHC) -O -threaded -o timeout timeout.hs --make
bin/bench: bin/bench.hs
	cd bin && $(GHC) -O -o bench bench.hs --make
bin/gen-report: bin/gen-report.hs
	cd bin && $(GHC) -O --make -o gen-report gen-report.hs 

#
# data generating scripts
#

bin/sumcol-gen: bin/sumcol-gen.hs
	cd bin && $(GHC) -O -o sumcol-gen sumcol-gen.hs 
bin/fasta-gen: bin/fasta-gen.hs
	cd bin && $(GHC) -O -o fasta-gen fasta-gen.hs 

#
# particular data file generation rules
#
# around 100M (!!)
imaginary/sumcol/sumcol.input: bin/sumcol-gen
	bin/sumcol-gen 20000000 > imaginary/sumcol/sumcol.input
imaginary/jl_rsa/jl_rsa.stdin: bin/fasta-gen
	head -5000 $(WORDS) > imaginary/jl_rsa/jl_rsa.stdin
real/rsa/rsa.input: bin/fasta-gen
	head -5000 $(WORDS) > real/rsa/rsa.input
spectral/regex-dna/regex-dna.input: bin/fasta-gen
	bin/fasta-gen 250000 > spectral/regex-dna/regex-dna.input
spectral/k-nucleotide/k-nucleotide.input: bin/fasta-gen
	bin/fasta-gen 250000 > spectral/k-nucleotide/k-nucleotide.input
spectral/reverse-complement/reverse-complement.input: bin/fasta-gen
	bin/fasta-gen 500000 > spectral/reverse-complement/reverse-complement.input
spectral/sorting/sorting.input:
	head -5000 $(WORDS) > spectral/sorting/sorting.input


#
# ------------------------------------------------------------------------
# Generating rules
#
# publish
results.html::
	PUBLISH_URL="$(PUBLISH_URL)" && export PUBLISH_URL && ( find $(DIRS) -name '*.db' | xargs bin/gen-report) > results.html

#
# ------------------------------------------------------------------------
# Publishing
#
.PHONY: publish
publish: results.html
	@if [ "$(PUBLISH)" = "YES" ] ; then $(PUBLISH_CMD); else echo "Not publishing" ; fi

#
# ------------------------------------------------------------------------
# Cleaning
#
# Note this is a recursive make call. It jumps down into a test
# directory, runs 'make clean', which runs the 'clean' target in
# footer.mk
#
clean:
	find . -name '*.o'  -exec rm -f {} \;
	find . -name '*.hi' -exec rm -f {} \;
	for t in $(DIRS) ; do ( cd $$t ; $(MAKE) clean ) ; done
	rm -f bench.* *~
	cd bin && rm -f bench timeout sumcol-gen fasta-gen *.hi *.o *~

