refactor makefile

This commit is contained in:
Hongrui Fang 2022-08-11 05:10:25 +08:00
parent ed98172d04
commit 14aacf206f
No known key found for this signature in database
GPG key ID: 1E0454204FC7D755

View file

@ -1,12 +1,31 @@
# This really ought to be `/usr/bin/env bash`, but nix flakes don't like that. # This really ought to be `/usr/bin/env bash`, but nix flakes don't like that.
SHELL := /bin/sh SHELL := /bin/sh
.PHONY: hoogle format haddock usage tag format_nix format_haskell format_check lint ps_bridge bench bench_check scripts .PHONY: hoogle format haddock usage tag format_nix format_haskell format_check \
lint refactor ps_bridge bench bench_check scripts test build ci
AGORA_TARGETS := agora agora-bench agora-purescript-bridge agora-scripts agora-specs agora-test agora-testlib SOURCE_FILES := $(shell git ls-tree -r HEAD --full-tree --name-only)
SOURCE_FILES := $(wildcard $(SOURCE_FILES))
HASKELL_SOURCES := $(filter %.hs,$(SOURCE_FILES))
CABAL_SOURCES := $(filter %.cabal,$(SOURCE_FILES))
NIX_SOURCES := $(filter %.nix,$(SOURCE_FILES))
FORMAT_EXTENSIONS := -o -XQuasiQuotes -o -XTemplateHaskell -o -XTypeApplications \
-o -XImportQualifiedPost -o -XPatternSynonyms -o -XOverloadedRecordDot
HLINT_EXTS := -XQuasiQuotes
THREADS ?= 8
PS_BRIDGE_OUTPUT_DIR ?= agora-purescript-bridge/
BENCH_OUTPUT ?= bench.csv
TEST_CASE_TIMEOUT ?= 100
usage: usage:
@echo "usage: make <command> [OPTIONS]" @echo "usage: [env [<variable>=<value> ...]] make <command> [OPTIONS]"
@echo
@echo "Available variables:"
@echo " THREADS -- The number of threads for building the project"
@echo " PS_BRIDGE_OUTPUT_DIR -- The output directory of the purescript bridge"
@echo " BENCH_OUTPUT -- The output file of the benchmark report"
@echo " TEST_CASE_TIMEOUT -- Timeout for individual tests. Default unit: s"
@echo @echo
@echo "Available commands:" @echo "Available commands:"
@echo " hoogle -- Start local hoogle" @echo " hoogle -- Start local hoogle"
@ -21,8 +40,13 @@ usage:
@echo " bench -- Generate bench report bench.csv" @echo " bench -- Generate bench report bench.csv"
@echo " bench_check -- Check if bench report is up-to-date" @echo " bench_check -- Check if bench report is up-to-date"
@echo " scripts -- Run the agora script server (dev mode)" @echo " scripts -- Run the agora script server (dev mode)"
@echo " ci -- Run all the CI checks"
hoogle: requires_nix_shell:
@ [ "$(IN_NIX_SHELL)" ] || echo "The $(MAKECMDGOALS) target must be run from inside a nix shell"
@ [ "$(IN_NIX_SHELL)" ] || (echo " run 'nix develop' first" && false)
hoogle: requires_nix_shell
pkill hoogle || true pkill hoogle || true
hoogle generate --local=haddock --database=hoo/local.hoo hoogle generate --local=haddock --database=hoo/local.hoo
hoogle server --local -p 8081 >> /dev/null & hoogle server --local -p 8081 >> /dev/null &
@ -30,39 +54,48 @@ hoogle:
format: format_haskell format_nix format: format_haskell format_nix
format_nix: format_nix: requires_nix_shell
git ls-tree -r HEAD --full-tree --name-only | grep -E '.*\.nix' | xargs nixpkgs-fmt nixpkgs-fmt $(NIX_SOURCES)
FORMAT_EXTENSIONS := -o -XQuasiQuotes -o -XTemplateHaskell -o -XTypeApplications -o -XImportQualifiedPost -o -XPatternSynonyms -o -XOverloadedRecordDot format_haskell: requires_nix_shell
format_haskell: fourmolu $(FORMAT_EXTENSIONS) -m inplace $(HASKELL_SOURCES)
find -name '*.hs' -not -path './dist-*/*' | xargs fourmolu $(FORMAT_EXTENSIONS) -m inplace cabal-fmt -i $(CABAL_SOURCES)
git ls-tree -r HEAD --full-tree --name-only | grep -E '.*\.cabal' | xargs cabal-fmt -i
format_check: format_check: requires_nix_shell
find -name '*.hs' \ fourmolu $(FORMAT_EXTENSIONS) -m check $(HASKELL_SOURCES)
-not -path './dist*/*' \ nixpkgs-fmt --check $(NIX_SOURCES)
-not -path './haddock/*' \ cabal-fmt --check $(CABAL_SOURCES)
| xargs fourmolu $(FORMAT_EXTENSIONS) -m check
haddock: haddock: requires_nix_shell
cabal haddock --haddock-html --haddock-hoogle --builddir=haddock cabal haddock --haddock-html --haddock-hoogle --builddir=haddock
tag: tag: requires_nix_shell
hasktags -x $(AGORA_TARGETS) hasktags -x $(HASKELL_SOURCES)
lint: lint: requires_nix_shell
hlint $(AGORA_TARGETS) hlint $(HLINT_EXTS) $(HASKELL_SOURCES)
PS_BRIDGE_OUTPUT_DIR := agora-purescript-bridge/ refactor: requires_nix_shell
ps_bridge: for src in $(HASKELL_SOURCES) ; do \
hlint $(HLINT_EXTS) --refactor --refactor-options='-i -s' $$src ;\
done
ps_bridge: requires_nix_shell
cabal run exe:agora-purescript-bridge -- -o $(PS_BRIDGE_OUTPUT_DIR) cabal run exe:agora-purescript-bridge -- -o $(PS_BRIDGE_OUTPUT_DIR)
BENCH_OUTPUT = "bench.csv" bench: requires_nix_shell
bench:
cabal run agora-bench -- -o $(BENCH_OUTPUT) cabal run agora-bench -- -o $(BENCH_OUTPUT)
bench_check: bench_check: requires_nix_shell
cabal -v0 new-run agora-bench | diff bench.csv - cabal -v0 new-run agora-bench | diff bench.csv -
scripts: scripts: requires_nix_shell
cabal run agora-scripts -- -c cabal run agora-scripts -- -c
test: requires_nix_shell
cabal test --test-options="--hide-successes -t $(TEST_CASE_TIMEOUT) -j$(THREADS)"
build: requires_nix_shell
cabal build -j$(THREADS)
ci: format_check lint build bench_check test haddock