GHC=ghc GHCFLAGS=-fno-warn-missing-methods -O2 -fvia-C -funbox-strict-fields -optc-O3 -fexcess-precision -optc-ffast-math -funfolding-keeness-factor=10 OCAMLOPT=ocamlopt OCAMLOPTFLAGS=-rectypes -inline 100 -ffast-math -ccopt -O3 CXX=g++ CXXFLAGS=-O3 -ffast-math TIME=/usr/bin/time -p ARGS=9 512 .PHONY: all all: @echo Pick a target, "'make statsfile'" collects statistics statsfile: *.hs *.ml *.cxx display make stats > stats.tmp 2>&1 grep '^user' stats.tmp | ./display > statsfile .PHONY: stats stats: time1 count1 time2 count2 time3 count3 time4 count4 time5 count5 count: Count.hs $(GHC) --make Count.hs -o count display: Display.hs $(GHC) --make -fcontext-stack=100 Display.hs -o display .PHONY: compile compile: ray1_hs ray2_hs ray3_hs ray4_hs ray5_hs .PHONY: clean clean: rm -rf ray*_* *.o *.hi *.cmi *.cmx *.cpp *~ *.png count display stats.tmp ############### ray1_hs: ray1.hs $(GHC) $(GHCFLAGS) ray1.hs -o ray1_hs ray1_ml: ray1.ml $(OCAMLOPT) $(OCAMLOPTFLAGS) ray1.ml -o ray1_ml ray1_cxx: ray1.cxx $(CXX) $(CXXFLAGS) ray1.cxx -o ray1_cxx .PHONY: time1 time1: ray1_hs ray1_ml ray1_cxx $(TIME) ./ray1_hs $(ARGS) > pic1_hs.png $(TIME) ./ray1_ml $(ARGS) > pic1_ml.png $(TIME) ./ray1_cxx $(ARGS) > pic1_cxx.png cmp pic1_hs.png pic1_ml.png cmp pic1_cxx.png pic1_ml.png .PHONY: count1 count1: count ./count ray1.hs ray1.ml ray1.cxx ############### ray2_hs: ray2.hs $(GHC) $(GHCFLAGS) ray2.hs -o ray2_hs ray2_ml: ray2.ml $(OCAMLOPT) $(OCAMLOPTFLAGS) ray2.ml -o ray2_ml ray2_cxx: ray2.cxx $(CXX) $(CXXFLAGS) ray2.cxx -o ray2_cxx .PHONY: time2 time2: ray2_hs ray2_ml ray2_cxx $(TIME) ./ray2_hs $(ARGS) > pic2_hs.png $(TIME) ./ray2_ml $(ARGS) > pic2_ml.png $(TIME) ./ray2_cxx $(ARGS) > pic2_cxx.png cmp pic2_hs.png pic2_ml.png cmp pic2_cxx.png pic2_ml.png .PHONY: count2 count2: count ./count ray2.hs ray2.ml ray2.cxx ############### ray3_hs: ray3.hs $(GHC) $(GHCFLAGS) ray3.hs -o ray3_hs ray3_ml: ray3.ml $(OCAMLOPT) $(OCAMLOPTFLAGS) ray3.ml -o ray3_ml ray3_cxx: ray3.cxx $(CXX) $(CXXFLAGS) ray3.cxx -o ray3_cxx .PHONY: time3 time3: ray3_hs ray3_ml ray3_cxx $(TIME) ./ray3_hs $(ARGS) > pic3_hs.png $(TIME) ./ray3_ml $(ARGS) > pic3_ml.png $(TIME) ./ray3_cxx $(ARGS) > pic3_cxx.png cmp pic3_hs.png pic3_ml.png cmp pic3_cxx.png pic3_ml.png .PHONY: count3 count3: count ./count ray3.hs ray3.ml ray3.cxx ############### ray4_hs: ray4.hs $(GHC) $(GHCFLAGS) ray4.hs -o ray4_hs ray4_ml: ray4.ml $(OCAMLOPT) $(OCAMLOPTFLAGS) ray4.ml -o ray4_ml ray4_cxx: ray4.cxx $(CXX) $(CXXFLAGS) ray4.cxx -o ray4_cxx .PHONY: time4 time4: ray4_hs ray4_ml ray4_cxx $(TIME) ./ray4_hs $(ARGS) > pic4_hs.png $(TIME) ./ray4_ml $(ARGS) > pic4_ml.png $(TIME) ./ray4_cxx $(ARGS) > pic4_cxx.png cmp pic4_hs.png pic4_ml.png cmp pic4_cxx.png pic4_ml.png .PHONY: count4 count4: count ./count ray4.hs ray4.ml ray4.cxx ############### ray5_hs: ray5.hs $(GHC) $(GHCFLAGS) ray5.hs -o ray5_hs ray5_ml: ray5.ml $(OCAMLOPT) $(OCAMLOPTFLAGS) ray5.ml -o ray5_ml ray5_cxx: ray5.cxx $(CXX) $(CXXFLAGS) ray5.cxx -o ray5_cxx .PHONY: time5 time5: ray5_hs ray5_ml ray5_cxx $(TIME) ./ray5_hs $(ARGS) > pic5_hs.png $(TIME) ./ray5_ml $(ARGS) > pic5_ml.png $(TIME) ./ray5_cxx $(ARGS) > pic5_cxx.png cmp pic5_hs.png pic5_ml.png cmp pic5_cxx.png pic5_ml.png .PHONY: count5 count5: count ./count ray5.hs ray5.ml ray5.cxx