forked from purescript/purescript
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Makefile
63 lines (46 loc) · 2.43 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package = purescript
exe_target = purs
stack_yaml = STACK_YAML="stack.yaml"
stack = $(stack_yaml) stack
help: ## Print documentation
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
ghcid: ## Run ghcid to quickly reload code on save.
ghcid --command "stack ghci purescript:lib purescript:test:tests --ghci-options -fno-code"
ghcid-test: ## Run ghcid to quickly reload code and run tests on save.
ghcid --command "stack ghci purescript:lib purescript:test:tests --ghci-options -fobject-code" \
--test "Main.main"
build: ## Build the package.
$(stack) build $(package)
build-dirty: ## Force recompilation of the entire package.
$(stack) build --ghc-options=-fforce-recomp $(package)
run: ## Run the compiler.
$(stack) build --fast && $(stack) exec -- $(exe_target)
install: ## Install the executables to stack's path
$(stack) install
ghci: ## Open GHCi with the PureScript library
$(stack) ghci $(package):lib
test: ## Run the tests.
$(stack) test --fast $(package)
test-ghci: ## Open GHCi with the test suite loaded.
$(stack) ghci $(package):test:$(package)-tests
# If you want to profile a particular test, such
# as LargeSumType.purs, add -p to the test arguments like so:
# stack test --executable-profiling --ta '-p LargeSum +RTS -pj -RTS'
# Also, you'll need flamegraph.pl and ghc-prof-aeson-flamegraph
# (cf. dev-deps), I git cloned the FlameGraph repository and
# symlinked the Perl script into my path.
# Open the SVG with your browser, you can reload the browser when you
# rerun the profiled test run.
test-profiling: ## Run the tests, with profiling enabled. Also builds a flamegraph of the test.
$(stack) test --executable-profiling --ta '+RTS -pj -RTS' $(package)
cat tests.prof | stack exec ghc-prof-aeson-flamegraph | flamegraph.pl > tests.svg
bench: ## Run benchmarks for PureScript
$(stack) bench $(package)
# if you want these to be globally available run it outside of purescript
# but incompatibilities might arise between ghcid and the version of GHC
# you're using to build PureScript.
dev-deps: ## Install helpful development tools.
stack install ghcid ghc-prof-aeson-flamegraph
license-generator: ## Update dependencies in LICENSE
$(stack) ls dependencies --flag purescript:RELEASE | stack license-generator/generate.hs > LICENSE
.PHONY : build build-dirty run install ghci test test-ghci test-profiling ghcid dev-deps license-generator