# Makefile for Speculate # # Copyright: (c) 2015-2019 Rudy Matela # License: 3-Clause BSD (see the file LICENSE) # Maintainer: Rudy Matela GHCIMPORTDIRS = src:eg:test GHCFLAGS = -O2 \ $(shell grep -q "Arch Linux" /etc/lsb-release && echo -dynamic) # -Wall -Wno-name-shadowing -Wno-orphans -Wno-unused-matches # -prof -auto-all #-caf-all # When profiling is enabled, to get the cost centres with more than 6% time: # $ ./eg/arith +RTS -p -RTS # $ cat arith.prof | grep -v ' [0-5].[0-9] ......$' HADDOCKFLAGS = --no-print-missing-docs \ $(shell grep -q "Arch Linux" /etc/lsb-release && echo --optghc=-dynamic) MAXTESTS = 4000 MAXSIZE = -s4 TESTS = \ test/creason \ test/engine \ test/eval \ test/expr \ test/order \ test/reason \ test/utils \ test/stats EG = \ eg/arith \ eg/arith-negate-abs \ eg/bool \ eg/binarytree \ eg/binarytree0 \ eg/colour \ eg/digraphs \ eg/fun \ eg/list \ eg/length \ eg/zip \ eg/minus \ eg/insertsort \ eg/insertsort0 \ eg/string \ eg/oddeven \ eg/plus-abs \ eg/pretty \ eg/ratio \ eg/sets \ eg/tauts \ eg/monad \ eg/tuples \ eg/speculate-reason \ bench/arithficial \ bench/nord \ bench/unit EXTRAEG = \ eg/regexes \ eg/pretty-compact \ eg/algebraic-graphs # regexes needs regex-tdfa, which may break the build # speculate-reason output differs in different GHC versions QUICKTESTS = \ test/engine \ test/eval \ test/expr \ test/order \ test/reason QUICKEG = \ eg/arith \ eg/bool \ eg/list LIST_ALL_HSS = find src test eg bench/*.hs -name \*.hs LIST_LIB_HSS = find src -name \*.hs LIB_DEPS = base leancheck express cmdargs containers all: mk/toplibs quick-test: $(patsubst %,%.run,$(QUICKTESTS)) \ $(patsubst %,%.diff-test,$(QUICKEG)) test: all test-sdist \ $(patsubst %,%.run,$(TESTS)) \ $(patsubst %,%.diff-test,$(EG) $(wildcard bench/*-c)) test-with-extra-deps: all test test-sdist \ $(patsubst %,%.diff-test,$(EXTRAEG) $(wildcard bench/*-c)) test-sdist: ./test/sdist legacy-test: make clean && make -j8 GHC=ghc-8.2 && make quick-test -j8 GHC=ghc-8.2 make clean && make -j8 GHC=ghc-8.0 && make quick-test -j8 GHC=ghc-8.0 make clean && make -j8 GHC=ghc-7.10 && make quick-test -j8 GHC=ghc-7.10 make clean && make -j8 GHC=ghc-7.8 && make quick-test -j8 GHC=ghc-7.8 make clean && make -j8 && make slow-test -j8 test-via-cabal: cabal configure --enable-tests --enable-benchmarks --ghc-options="-dynamic -Werror" && cabal build && cabal test legacy-test-via-cabal: cabal clean && cabal-ghc-8.2 configure && cabal-ghc-8.2 test cabal clean && cabal-ghc-8.0 configure && cabal-ghc-8.0 test cabal clean && cabal-ghc-7.10 configure && cabal-ghc-7.10 test cabal clean && cabal-ghc-7.8 configure && cabal-ghc-7.8 test cabal clean && cabal test prepare-test: cabal --ignore-sandbox install regex-tdfa cmdargs leancheck algebraic-graphs pretty-compact prepare-legacy-test: \ prepare-legacy-test-8.2 \ prepare-legacy-test-8.0 \ prepare-legacy-test-7.10 \ prepare-legacy-test-7.8 prepare-legacy-test-8.2: cabal-ghc-8.2 update cabal-ghc-8.2 --ignore-sandbox install cmdargs leancheck prepare-legacy-test-8.0: cabal-ghc-8.0 update cabal-ghc-8.0 --ignore-sandbox install cmdargs leancheck prepare-legacy-test-7.10: cabal-ghc-7.10 update cabal-ghc-7.10 --ignore-sandbox install cmdargs-0.10.17 leancheck prepare-legacy-test-7.8: cabal-ghc-7.8 update cabal-ghc-7.8 --ignore-sandbox install cmdargs-0.10.17 leancheck slow-test: MAXTESTS = slow-test: MAXSIZE = slow-test: test %.run: % ./$< $(MAXTESTS) bench/%-c.diff-test: eg/% ./test/diff $(MAXSIZE) bench/$*-c bench/%-c.update-4-diff-test: % ./test/update-diff -s4 bench/$*-c bench/%-c.update-slow-diff-test: % ./test/update-diff bench/$*-c %.diff-test: % ./test/diff $(MAXSIZE) $< %.update-diff-test: % ./test/update-diff -s4 $< ./test/update-diff $< %.update-4-diff-test: % ./test/update-diff -s4 $< %.update-slow-diff-test: % ./test/update-diff $< %.update-7-diff-test: % ./test/update-diff -s7 $< update-diff-test: update-4-diff-test update-slow-diff-test update-4-diff-test: $(patsubst %,%.update-4-diff-test,$(EG) $(wildcard bench/*-c)) update-slow-diff-test: $(patsubst %,%.update-slow-diff-test,$(EG) $(wildcard bench/*-c)) bench: all $(EG) ./test/benchmark-cmp $(EG) bench/*-c save-bench: all $(EG) ./test/benchmark-save $(EG) bench/*-c memory-benchmark: all $(EG) ./test/memory-benchmark $(EG) bench/*-c qs-bench: make -sC bench/qs1 bench make -sC bench/qs2 bench qs-save-bench: make -sC bench/qs1 save-bench make -sC bench/qs2 save-bench update-listable-expr: cp -rav ../express/test/Test/ListableExpr.hs test/Test/ ghci: test/Test.ghci clean: clean-hi-o clean-haddock rm -f $(TESTS) $(EG) eg/*.dot eg/*.pdf TAGS tags mk/toplibs make clean -C bench/qs1 make clean -C bench/qs2 rm -f doc/*.html doc/*.gif doc/*.css doc/*.js doc/*.png test/Test.o: src/Test/Speculate.o # NOTE: (very hacky!) the following target allows parallel compilation (-jN) of # eg and tests programs so long as they don't share dependencies _not_ stored # in src/ and test/. Runnable binaries should depend on mk/toplibs instead of # actual Haskell source files mk/toplibs: src/Test/Speculate.o test/Test.o touch mk/toplibs hlint: hlint \ --ignore "Use import/export shortcut" \ --ignore "Use first" \ --ignore "Use second" \ --ignore "Use ***" \ src bench tests include mk/haskell.mk %-3.dot: % ./$< -gv3 > $@ %.dot: % ./$< -gv2 > $@ %-2.dot: % ./$< -gv2 > $@ %-1.dot: % ./$< -gv1 > $@ %.eps: %.dot dot -Teps $< > $@ %.pdf: %.eps epstopdf $< .PHONY: %.view %.view: %.pdf o $<