# Makefile for express # # Copyright: (c) 2015-2021 Rudy Matela # License: 3-Clause BSD (see the file LICENSE) # Maintainer: Rudy Matela TESTS = \ test/main \ test/core \ test/map \ test/instances \ test/fixtures \ test/express \ test/express-derive \ test/name \ test/name-derive \ test/utils \ test/canon \ test/match \ test/hole \ test/fold \ test/show \ test/ord \ test/triexpr \ test/listable EGS = BENCHS = \ eg/u-extrapolate \ eg/u-speculate \ eg/u-conjure \ bench/compare \ bench/match-list \ bench/match-noop \ bench/match-triexpr \ bench/pairs \ bench/sort \ bench/tiers \ $(EGS) GHCIMPORTDIRS = src:test GHCFLAGS = -O2 $(shell grep -q "Arch Linux" /etc/lsb-release && echo -dynamic) HUGSIMPORTDIRS = .:./src:./test:./etc/hugs-backports:/usr/lib/hugs/packages/*:../leancheck/src HUGSFLAGS = -98 -h32M RUNPARAMETERS = LIB_DEPS = base template-haskell INSTALL_DEPS = leancheck all: mk/toplibs all-all: mk/All.o test: $(patsubst %,%.run,$(TESTS)) test-sdist diff-test slow-test: RUNPARAMETERS=50400 slow-test: test %.run: % ./$< $(RUNPARAMETERS) .PHONY: bench bench: $(patsubst %,%.bench,$(BENCHS)) @mkdir -p bench/runtime/$$HOSTNAME ./bench/versions | tee bench/runtime/$$HOSTNAME/versions .PHONY: %.bench %.bench: % @mkdir -p bench/runtime/$$HOSTNAME/$< @rmdir bench/runtime/$$HOSTNAME/$< @printf "%-20s " $< @/usr/bin/time -f%e ./$< 2>&1 >/dev/null | tee bench/runtime/$$HOSTNAME/$<.runtime clean: clean-hi-o clean-haddock rm -f $(TESTS) $(BENCHS) $(EGS) mk/toplibs ghci: mk/All.ghci hugs: src/Data/Express/Core.hugs hugs-test: \ test/typecheck.runhugs install: @echo "use \`cabal install' instead" test-sdist: ./test/sdist test-via-cabal: cabal configure --enable-tests --enable-benchmarks --ghc-options="$(GHCFLAGS) -O0" cabal build cabal test main test-via-stack: stack test express:test:main --ghc-options="$(GHCFLAGS) -O0" --system-ghc --no-install-ghc --no-terminal diff-test: $(patsubst %,%.diff-test,$(BENCHS)) update-diff-test: $(patsubst %,%.update-diff-test,$(BENCHS)) %.diff-test: % ./$< | diff -rud test/model/$<.out - %.update-diff-test: % ./$< > test/model/$<.out test-via-everything: test test-via-cabal test-via-stack legacy-test: # needs ghc-8.8 .. ghc-7.8 installed as such make clean && make test -j GHC=ghc-8.8 make clean && make test -j GHC=ghc-8.6 make clean && make test -j GHC=ghc-8.4 make clean && make test -j GHC=ghc-8.2 make clean && make test -j GHC=ghc-8.0 make clean && make test -j GHC=ghc-7.10 make clean && make test -j GHC=ghc-7.8 make clean && make test -j legacy-test-via-cabal: # needs similarly named cabal wrappers cabal clean && cabal-ghc-8.8 configure && cabal-ghc-8.8 test cabal clean && cabal-ghc-8.6 configure && cabal-ghc-8.6 test cabal clean && cabal-ghc-8.4 configure && cabal-ghc-8.4 test 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: cabal update cabal install $(ALL_DEPS) --lib prepare-legacy-test: cabal update cabal-ghc-8.8 install $(ALL_DEPS) --lib cabal-ghc-8.6 install $(ALL_DEPS) --lib cabal-ghc-8.4 install $(ALL_DEPS) --lib cabal-ghc-8.2 install $(ALL_DEPS) --lib cabal-ghc-8.0 install $(ALL_DEPS) --lib cabal-ghc-7.10 v1-install $(ALL_DEPS) cabal-ghc-7.8 v1-install $(ALL_DEPS) # (v2-) library installation is supported on GHC 8.0+ only) hlint: hlint \ --ignore "Use import/export shortcut" \ --ignore "Redundant bracket" \ . markdown: README.html %.html: %.md pandoc $< -o $@ # NOTE: (very hacky!) the following target allows parallel compilation (-jN) of # eg and test 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: mk/Toplibs.o touch mk/toplibs include mk/haskell.mk