type5 is much more first principles based, so we get a lot of weird quirks removed: - FromLiteral no longer needs to understand AST - Type unifications works more like Haskell - Function types are just ordinary types, saving a lot of manual busywork and more.
51 lines
1.9 KiB
Makefile
51 lines
1.9 KiB
Makefile
TEST_FILES := tests
|
|
WAT2WASM := venv/bin/python wat2wasm.py
|
|
|
|
%.wat: %.py $(shell find phasm -name '*.py') venv/.done
|
|
venv/bin/python -m phasm $< $@
|
|
|
|
%.wat.html: %.wat
|
|
venv/bin/pygmentize -l wat -O full -f html $^ -o $@
|
|
|
|
%.py.html: %.py
|
|
venv/bin/pygmentize -l py -O full -f html $^ -o $@
|
|
|
|
%.wasm: %.wat
|
|
$(WAT2WASM) $^ -o $@
|
|
|
|
examples: venv/.done $(subst .py,.wasm,$(wildcard examples/*.py)) $(subst .py,.wat.html,$(wildcard examples/*.py)) $(subst .py,.py.html,$(wildcard examples/*.py))
|
|
venv/bin/python3 -m http.server --directory examples
|
|
|
|
test: venv/.done $(subst .json,.py,$(subst /generator_,/test_generated_,$(wildcard tests/integration/test_lang/generator_*.json)))
|
|
venv/bin/pytest $(TEST_FILES) $(TEST_FLAGS)
|
|
|
|
lint: venv/.done
|
|
venv/bin/ruff check phasm tests
|
|
|
|
typecheck: venv/.done
|
|
venv/bin/mypy --strict phasm wat2wasm.py tests/integration/helpers.py tests/integration/memory.py tests/integration/runners.py
|
|
|
|
venv/.done: requirements.txt
|
|
python3.12 -m venv venv
|
|
venv/bin/python3 -m pip install wheel pip --upgrade
|
|
venv/bin/python3 -m pip install -r $^
|
|
touch $@
|
|
|
|
tests/integration/test_lang/test_generated_%.py: venv/.done tests/integration/test_lang/generator.py tests/integration/test_lang/generator.md tests/integration/test_lang/generator_%.json
|
|
venv/bin/python3 tests/integration/test_lang/generator.py tests/integration/test_lang/generator.md tests/integration/test_lang/generator_$*.json > $@
|
|
|
|
clean-examples:
|
|
rm -f examples/*.wat examples/*.wasm examples/*.wat.html examples/*.py.html
|
|
|
|
clean-generated-tests:
|
|
rm -f tests/integration/test_lang/test_generated_*.py
|
|
|
|
.SECONDARY: # Keep intermediate files
|
|
|
|
.PHONY: examples
|
|
|
|
# So generally the right thing to do is to delete the target file if the recipe fails after beginning to change the file.
|
|
# make will do this if .DELETE_ON_ERROR appears as a target.
|
|
# This is almost always what you want make to do, but it is not historical practice; so for compatibility, you must explicitly request it.
|
|
.DELETE_ON_ERROR:
|