GHC= ghc GHCFLAGS= -cpp -O2 -funbox-strict-fields -no-recomp -v0 PKG= -i.. #PKG= -package fps #GHC= /usr/obj/build/compiler/stage2/ghc-inplace #PKG= BIN= run-utests run-qtests all: prop prop-fusion-compiled prop-compiled prop-opt units-compiled fast: prop-fast everything: prop hugs prop-compiled prop-fusion-compiled runbench fusionbench wc spellcheck letter_frequency linesort fuse down-fuse inline zipwith unpack groupby run-lazybuild run-lazybuildcons # --------------------------------------------- # Boot in-place .PHONY: boot-in-place boot-in-place: cd .. && ${GHC} ${GHCFLAGS} --make Data/*hs Data/*/*hs Data/*/*/*hs # --------------------------------------------- # HUnit # compiled .PHONY: units-compiled units-compiled: @echo "Compiled, rules off" ${GHC} ${PKG} ${GHCFLAGS} -frules-off --make Units.hs -o u -package HUnit time ./u # --------------------------------------------- # QuickCheck # interpreted .PHONY: prop hugs prop:: @echo "Interpreted" runhaskell ${PKG} Properties.hs hugs:: runhugs -98 Properties.hs # interpreted fast. Just a quick check. .PHONY: prop-fast prop-fast:: runhaskell ${PKG} Properties.hs 10 # compiled .PHONY: prop-compiled prop-compiled: @echo "Compiled, rules off" ${GHC} ${PKG} ${GHCFLAGS} -frules-off --make Properties.hs -o p -package QuickCheck time ./p # rules-on .PHONY: prop-opt prop-opt: @echo "Compiled, rules on" ${GHC} ${PKG} ${GHCFLAGS} --make Properties.hs -o p -package QuickCheck time ./p # # test rewriting is correct and working. # .PHONY: prop-fusion-compiled prop-fusion-compiled: ${GHC} ${PKG} ${GHCFLAGS} --make FusionProperties.hs -o fp -package QuickCheck time ./fp # --------------------------------------------------------- # Benchmarking .PHONY: runbench runbench: bench ./bench +RTS -H64m bench:: @if [ ! -f "bigdata" ] ; then ln -s data bigdata ; fi ${GHC} ${PKG} ${GHCFLAGS} --make Bench.hs -o bench fusionbench:: ${GHC} ${PKG} ${GHCFLAGS} --make FusionBench.hs -ddump-simpl-stats -o fusionbench # --------------------------------------------------------- # Profiling .PHONY: prof prof:: @if [ ! -f "bigdata" ] ; then ln -s data bigdata ; fi ${GHC} ${PKG} ${GHCFLAGS} -prof -auto-all --make Bench.hs -o bench ./bench +RTS -H64m -p fusionprof:: @if [ ! -f "bigdata" ] ; then ln -s data bigdata ; fi ${GHC} ${PKG} ${GHCFLAGS} -prof -auto-all --make FusionBench.hs -o fusionbench ./bench +RTS -H64m -p # --------------------------------------------------------- # Small programs wc: wc.o @if [ ! -f "bigdata" ] ; then ln -s data bigdata ; fi time ./wc bigdata wc.o: wc.hs ${GHC} ${PKG} ${GHCFLAGS} -ddump-simpl-stats wc.hs -o wc spellcheck: spellcheck.o time ./spellcheck < spellcheck-input.txt spellcheck.o: spellcheck.hs ${GHC} ${PKG} ${GHCFLAGS} $< -o spellcheck letter_frequency: letter_frequency.o time ./letter_frequency < Usr.Dict.Words letter_frequency.o: letter_frequency.hs ${GHC} ${PKG} ${GHCFLAGS} $< -o letter_frequency -ddump-simpl-stats linesort: linesort.o time ./linesort < Usr.Dict.Words linesort.o: linesort.hs ${GHC} ${PKG} ${GHCFLAGS} $< -o linesort fuse: fuse.o time ./fuse < Usr.Dict.Words fuse.o: fuse.hs ${GHC} ${PKG} ${GHCFLAGS} $< -o fuse -ddump-simpl-stats down-fuse: down-fuse.o time ./down-fuse down-fuse.o: down-fuse.hs ${GHC} ${PKG} ${GHCFLAGS} $< -o ./down-fuse -ddump-simpl-stats .PHONY: run-lazybuild run-lazybuild: lazybuild time ./lazybuild 100000000 > /dev/null lazybuild: lazybuild.hs ${GHC} ${PKG} ${GHCFLAGS} --make $< -o lazybuild .PHONY: run-lazybuildcons run-lazybuildcons: lazybuildcons time ./lazybuildcons 100000000 > /dev/null lazybuildcons: lazybuildcons.hs ${GHC} ${PKG} ${GHCFLAGS} --make $< -o lazybuildcons lazylines: lazylines.o time ./lazylines < bigdata lazylines.o: lazylines.hs ${GHC} ${PKG} ${GHCFLAGS} $< -o lazylines inline: inline.o time ./inline inline.o: inline.hs ${GHC} ${PKG} ${GHCFLAGS} $< -o inline zipwith: zipwith.o time ./zipwith zipwith.o: zipwith.hs ${GHC} ${PKG} ${GHCFLAGS} -ddump-simpl-stats $< -o zipwith unpack: unpack.o time ./unpack unpack.o: unpack.hs ${GHC} ${PKG} ${GHCFLAGS} -ddump-simpl-stats $< -o unpack groupby: groupby.o time ./groupby groupby.o: groupby.hs ${GHC} ${PKG} ${GHCFLAGS} $< -o groupby # --------------------------------------------------- # Plotting graphs results: bench ./bench +RTS -H64m > results .PHONY: plot plot:: results echo -e 'set terminal png \n \ set output "results.png" \n \ set yrange [0:2] \n \ plot "results" using ($$1):($$2) with boxes, "" using ($$1):($$3) with boxes' |\ gnuplot ; xv results.png # --------------------------------------------------- # Cleaning .PHONY: clean clean: rm -f *~ *.o *.hi $(BIN) bench */*.o */*.hi */*~ rm -f wc letter_frequency spellcheck linesort fuse inline p u fp lazylines lazybuild lazybuildcons rm -f down-fuse zipwith fusionbench unpack groupby