1
1
mirror of https://github.com/anoma/juvix.git synced 2024-12-02 10:47:32 +03:00
juvix/Makefile

241 lines
5.6 KiB
Makefile
Raw Normal View History

PWD=$(CURDIR)
PREFIX="$(PWD)/.stack-work/prefix"
UNAME := $(shell uname)
2022-04-04 18:44:08 +03:00
HLINTQUIET :=
ASSETS = seating-mascot.051c86a.svg \
Seating_Tara_smiling.svg \
teaching-mascot.f828959.svg
ORGFILES = $(shell find docs/org -type f -name '*.org')
MDFILES:=$(patsubst docs/org/%,docs/md/%,$(ORGFILES:.org=.md))
EXAMPLEMILESTONE=examples/milestone
EXAMPLEHTMLOUTPUT=_docs/examples/html
EXAMPLES= HelloWorld/HelloWorld.juvix \
Collatz/Collatz.juvix \
Fibonacci/Fibonacci.juvix \
Hanoi/Hanoi.juvix \
PascalsTriangle/PascalsTriangle.juvix \
TicTacToe/CLI/TicTacToe.juvix \
ValidityPredicates/SimpleFungibleToken.juvix
EXAMPLE_WEBAPP_OUTPUT=_docs/examples/webapp
WEBAPP_EXAMPLES=TicTacToe/Web/TicTacToe.juvix
ORGTOMDPRG ?=pandoc
ORGOPTS=--from org --to markdown_strict -s -o $@
ifeq ($(UNAME), Darwin)
THREADS := $(shell sysctl -n hw.logicalcpu)
else ifeq ($(UNAME), Linux)
THREADS := $(shell nproc)
else
THREADS := $(shell echo %NUMBER_OF_PROCESSORS%)
endif
all: install
2022-11-03 11:38:09 +03:00
clean: clean-runtime
@stack clean --full
@rm -rf .hie
@rm -rf _docs
2022-08-15 13:20:38 +03:00
@rm -rf docs/md
2022-11-03 11:38:09 +03:00
.PHONY: clean-runtime
clean-runtime: clean-juvix-build
2022-11-03 11:38:09 +03:00
@cd runtime && make clean
.PHONY: clean-juvix-build
clean-juvix-build:
@find . -type d -name '.juvix-build' | xargs rm -rf
repl:
@stack ghci Juvix:lib
# ------------------------------------------------------------------------------
# -- The Juvix Book
# ------------------------------------------------------------------------------
# -- EXAMPLES
.PHONY: html-examples
html-examples: $(EXAMPLES)
$(EXAMPLES):
$(eval OUTPUTDIR=$(EXAMPLEHTMLOUTPUT)/$(dir $@))
@mkdir -p ${OUTPUTDIR}
@juvix html $(EXAMPLEMILESTONE)/$@ --recursive --output-dir=$(CURDIR)/${OUTPUTDIR} --print-metadata
.PHONY: webapp-examples
webapp-examples: $(WEBAPP_EXAMPLES)
$(WEBAPP_EXAMPLES):
$(eval OUTPUTDIR=$(EXAMPLE_WEBAPP_OUTPUT)/$(dir $@))
@mkdir -p ${OUTPUTDIR}
@juvix compile -t wasm -r standalone $(EXAMPLEMILESTONE)/$@
@cp $(dir $(EXAMPLEMILESTONE)/$@)* ${OUTPUTDIR}
# -- MDBook
docs/md/README.md : README.org
@mkdir -p docs/md
@${ORGTOMDPRG} README.org ${ORGOPTS}
docs/md/changelog.md : changelog.org
2022-07-25 19:42:24 +03:00
@mkdir -p docs/md
@${ORGTOMDPRG} changelog.org ${ORGOPTS}
docs/md/%.md : docs/org/%.org
@echo "Processing ... $@"
@mkdir -p $(dir $@)
${ORGTOMDPRG} $? ${ORGOPTS}
.PHONY: markdown-files
markdown-files: docs/md/README.md docs/md/changelog.md $(MDFILES)
.PHONY: markdown-docs
markdown-docs: markdown-files
@echo "copying assets ..."
@mkdir -p docs/md/assets
@cp -v $(addprefix assets/,$(ASSETS)) docs/md/assets
@mdbook build
.PHONY: serve-docs
serve-docs: markdown-files
@mdbook serve --open
# -- Codebase Documentation
.PHONY : haddock
haddock :
@cabal --docdir=docs/ --htmldir=docs/ haddock --enable-documentation
# ------------------------------------------------------------------------------
# -- Codebase Health
# ------------------------------------------------------------------------------
ORMOLUFILES = $(shell git ls-files '*.hs' '*.hs-boot' | grep -v '^contrib/')
ORMOLUFLAGS?=--no-cabal
ORMOLUMODE?=inplace
2022-11-03 11:38:09 +03:00
.PHONY: format
format: clang-format
@stack exec -- ormolu ${ORMOLUFLAGS} \
--ghc-opt -XStandaloneDeriving \
--ghc-opt -XUnicodeSyntax \
--ghc-opt -XDerivingStrategies \
--ghc-opt -XMultiParamTypeClasses \
--ghc-opt -XTemplateHaskell \
--ghc-opt -XImportQualifiedPost \
--mode ${ORMOLUMODE} \
$(ORMOLUFILES)
2022-11-03 11:38:09 +03:00
.PHONY: clang-format
clang-format:
@cd runtime && make format
.PHONY: check-ormolu
check-ormolu: export ORMOLUMODE = check
check-ormolu:
@make -s format
.PHONY : hlint
hlint :
@hlint src app test ${HLINTQUIET}
PRECOMMIT := $(shell command -v pre-commit 2> /dev/null)
.PHONY : install-pre-commit
install-pre-commit :
@$(if $(PRECOMMIT),, pip install pre-commit)
.PHONY : pre-commit
pre-commit :
@pre-commit run --all-files
# ------------------------------------------------------------------------------
# -- Build-Install-Test-Release
# ------------------------------------------------------------------------------
MAKEAUXFLAGS?=-s
MAKE=make ${MAKEAUXFLAGS}
2022-11-03 11:38:09 +03:00
STACKFLAGS?=--jobs $(THREADS)
STACKTESTFLAGS?=--ta --hide-successes --ta --ansi-tricks=false
SHELLTESTFLAGS?=--color --diff -a --hide-successes
Add C code generation backend (#68) * [cbackend] Adds an AST for C This should cover enough C to implement the microjuvix backend. * [cbackend] Add C serializer using language-c library We may decide to write our own serializer for the C AST but this demonstrates that the C AST is sufficient at least. * [cbackend] Declarations will always be typed * [cbackend] Add CPP support to AST * [cbackend] Rename some names for clarity * [cbackend] Add translation of InductiveDef to C * [cbackend] Add CLI for C backend * [cbackend] Add stdbool.h to file header * [cbackend] Allow Cpp and Verbatim code inline * [cbackend] Add a newline after printing C * [cbackend] Support foreign blocks * [cbackend] Add support for axioms * [cbackend] Remove code examples * [cbackend] wip FunctionDef including Expressions * [parser] Support esacping '}' inside a foreign block * [cbackend] Add support for patterns in functions * [cbackend] Add foreign C support to HelloWorld.mjuvix * hlint fixes * More hlint fixes not picked up by pre-commit * [cbackend] Remove CompileStatement from MonoJuvix * [cbackend] Add support for compile blocks * [cbackend] Move compileInfo extraction to MonoJuvixResult * [minihaskell] Fix compile block support * [chore] Remove ununsed isBackendSupported function * [chore] Remove unused imports * [cbackend] Use a Reader for pattern bindings * [cbackend] Fix compiler warnings * [cbackend] Add support for nested patterns * [cbackend] Use functions to instantiate argument names * [cbackend] Add non-exhaustive pattern error message * [cbackend] Adds test for c to WASM compile and execution * [cbackend] Add links to test dependencies in quickstart * [cbackend] Add test with inductive types and patterns * [cbackend] Fix indentation * [cbackend] Remove ExpressionTyped case https://github.com/heliaxdev/minijuvix/issues/79 * [lexer] Fix lexing of \ inside a foreign block * [cbackend] PR review fixes * [chore] Remove unused import * [cbackend] Rename CJuvix to MiniC * [cbackend] Rename MonoJuvixToC to MonoJuvixToMiniC * [cbackend] Add test for polymorphic function * [cbackend] Add module for string literals
2022-05-05 16:12:17 +03:00
.PHONY: check
check: clean
@${MAKE} build
@${MAKE} install
@${MAKE} test
@${MAKE} test-shell
@${MAKE} format
@${MAKE} pre-commit
# -- Build requirements
.PHONY: submodules
submodules:
@git submodule sync
@git submodule update --init --recursive
2022-11-03 11:38:09 +03:00
.PHONY: build
build: submodules runtime
stack build ${STACKFLAGS}
2022-11-03 11:38:09 +03:00
.PHONY: fast-build
fast-build: submodules runtime
stack build --fast ${STACKFLAGS}
.PHONY: runtime
runtime:
cd runtime && make -j 4
# -- Install
2022-03-23 14:13:28 +03:00
.PHONY : install
2022-11-03 11:38:09 +03:00
install: runtime submodules
@stack install ${STACKFLAGS}
2022-11-03 11:38:09 +03:00
.PHONY : fast-install
fast-install: runtime submodules
@stack install --fast ${STACKFLAGS}
# -- Testing
.PHONY : test
test: build
@stack test ${STACKFLAGS} ${STACKTESTFLAGS}
2022-11-03 11:38:09 +03:00
.PHONY : fast-test
fast-test: fast-build
@stack test --fast ${STACKFLAGS} ${STACKTESTFLAGS}
2022-11-03 11:38:09 +03:00
.PHONY : test-skip-slow
test-skip-slow:
@stack test ${STACKFLAGS} ${STACKTESTFLAGS} --ta '-p "! /slow tests/"'
2022-04-05 20:57:21 +03:00
2022-11-03 11:38:09 +03:00
.PHONY : fast-test-skip-slow
fast-test-skip-slow:
@stack test --fast ${STACKFLAGS} ${STACKTESTFLAGS} --ta '-p "! /slow tests/"'
2022-11-03 11:38:09 +03:00
SHELLTEST := $(shell command -v shelltest 2> /dev/null)
.PHONY : test-shell
test-shell : install
@$(if $(SHELLTEST),, stack install shelltestrunner)
shelltest ${SHELLTESTFLAGS} tests
# -- Release
.PHONY : changelog-updates
changelog-updates :
@github_changelog_generator
@pandoc CHANGELOG.md --from markdown --to org -o UPDATES-FOR-CHANGELOG.org
2023-01-05 19:48:26 +03:00
.PHONY : bench
bench: runtime submodules
@stack bench