mirror of
https://github.com/anoma/juvix.git
synced 2024-12-02 10:47:32 +03:00
22027f137c
This PR redefines the `html` command unifying our previous subcommands for the HTML backend. You should use the command in the following way to obtain the same results as before: - `juvix html src.juvix` -> `juvix html src.juvix --only-source` - `juvix dev doc src.juvix` -> `juvix html src.juvix` - Other fixes here include the flag `--non-recursive`, which replaces the previous behavior in that we now generate all the HTML recursively by default. - The flag `--no-print-metadata` is now called `--no-footer` - Also, another change introduced by this PR is asset handling; for example, with our canonical Juvix program, the new output is organized as follows. ``` juvix html HelloWorld.juvix --only-source && tree html/ Copying assets files to test/html/assets Writing HelloWorld.html html/ ├── assets │ ├── css │ │ ├── linuwial.css │ │ ├── source-ayu-light.css │ │ └── source-nord.css │ ├── images │ │ ├── tara-magicien.png │ │ ├── tara-seating.svg │ │ ├── tara-smiling.png │ │ ├── tara-smiling.svg │ │ ├── tara-teaching.png │ │ └── tara-teaching.svg │ └── js │ ├── highlight.js │ └── tex-chtml.js └── HelloWorld.html ├── Stdlib.Data.Bool.html ├── Stdlib.Data.List.html ├── Stdlib.Data.Maybe.html ├── Stdlib.Data.Nat.html ├── Stdlib.Data.Ord.html ├── Stdlib.Data.Product.html ├── Stdlib.Data.String.html ├── Stdlib.Function.html ├── Stdlib.Prelude.html └── Stdlib.System.IO.html ``` In addition, for the vscode-plugin, this PR adds two flags, `--prefix-assets` and `--prefix-url`, for which one provides input to help vscode find resource locations and Juvix files. PS. Make sure to run `make clean` the first time you run `make install` for the first time.
244 lines
5.6 KiB
Makefile
244 lines
5.6 KiB
Makefile
PWD=$(CURDIR)
|
|
PREFIX="$(PWD)/.stack-work/prefix"
|
|
UNAME := $(shell uname)
|
|
HLINTQUIET :=
|
|
|
|
|
|
IMAGES = $(shell find assets/images -type f)
|
|
|
|
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
|
|
|
|
images:
|
|
echo $(IMAGES)
|
|
|
|
all: install
|
|
|
|
clean: clean-runtime
|
|
@stack clean --full
|
|
@rm -rf .hie
|
|
@rm -rf _docs
|
|
@rm -rf docs/md
|
|
|
|
.PHONY: clean-runtime
|
|
clean-runtime: clean-juvix-build
|
|
@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
|
|
@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/images
|
|
@cp -v $(IMAGES) docs/md/assets/images/
|
|
@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
|
|
|
|
.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)
|
|
|
|
.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}
|
|
|
|
STACKFLAGS?=--jobs $(THREADS)
|
|
STACKTESTFLAGS?=--ta --hide-successes --ta --ansi-tricks=false
|
|
SMOKEFLAGS?=--color --diff=git
|
|
|
|
.PHONY: check
|
|
check: clean
|
|
@${MAKE} build
|
|
@${MAKE} install
|
|
@${MAKE} test
|
|
@${MAKE} smoke
|
|
@${MAKE} format
|
|
@${MAKE} pre-commit
|
|
|
|
# -- Build requirements
|
|
|
|
.PHONY: submodules
|
|
submodules:
|
|
@git submodule sync
|
|
@git submodule update --init --recursive
|
|
|
|
.PHONY: build
|
|
build: submodules runtime
|
|
stack build ${STACKFLAGS}
|
|
|
|
.PHONY: fast-build
|
|
fast-build: submodules runtime
|
|
stack build --fast ${STACKFLAGS}
|
|
|
|
.PHONY: runtime
|
|
runtime:
|
|
cd runtime && make -j 4 -s
|
|
|
|
# -- Install
|
|
|
|
.PHONY : install
|
|
install: runtime submodules
|
|
@stack install ${STACKFLAGS}
|
|
|
|
.PHONY : fast-install
|
|
fast-install: runtime submodules
|
|
@stack install --fast ${STACKFLAGS}
|
|
|
|
# -- Testing
|
|
|
|
.PHONY : test
|
|
test: build
|
|
@stack test ${STACKFLAGS} ${STACKTESTFLAGS}
|
|
|
|
.PHONY : fast-test
|
|
fast-test: fast-build
|
|
@stack test --fast ${STACKFLAGS} ${STACKTESTFLAGS}
|
|
|
|
.PHONY : test-skip-slow
|
|
test-skip-slow:
|
|
@stack test ${STACKFLAGS} ${STACKTESTFLAGS} --ta '-p "! /slow tests/"'
|
|
|
|
.PHONY : fast-test-skip-slow
|
|
fast-test-skip-slow:
|
|
@stack test --fast ${STACKFLAGS} ${STACKTESTFLAGS} --ta '-p "! /slow tests/"'
|
|
|
|
SMOKE := $(shell command -v smoke 2> /dev/null)
|
|
|
|
.PHONY : smoke
|
|
smoke: install
|
|
@$(if $(SMOKE),, $(error "Smoke not found, please install it from https://github.com/SamirTalwar/smoke"))
|
|
@find tests/smoke -type f -name '*.smoke.yaml' \
|
|
-exec sh -c "echo -n 'Running {}'; echo ; ${SMOKE} ${SMOKEFLAGS} {}" \;
|
|
|
|
# -- Release
|
|
|
|
.PHONY : changelog-updates
|
|
changelog-updates :
|
|
@github_changelog_generator
|
|
@pandoc CHANGELOG.md --from markdown --to org -o UPDATES-FOR-CHANGELOG.org
|
|
|
|
.PHONY : bench
|
|
bench: runtime submodules
|
|
@stack bench
|