catala/Makefile

338 lines
11 KiB
Makefile
Raw Normal View History

2021-03-19 19:36:09 +03:00
help : Makefile
@sed -n 's/^#> //p' $<
2020-08-07 18:37:28 +03:00
ROOT_DIR:=$(shell dirname $(realpath $(firstword $(MAKEFILE_LIST))))
# Export all variables to sub-make
export
2020-05-13 15:17:19 +03:00
##########################################
# Dependencies
##########################################
2020-04-20 09:35:22 +03:00
EXECUTABLES = man2html virtualenv python3 colordiff node pygmentize nodejs npm ninja pandoc
2020-05-13 15:53:53 +03:00
K := $(foreach exec,$(EXECUTABLES),\
$(if $(shell which $(exec)),some string,$(warning [WARNING] No "$(exec)" executable found. \
Please install this executable for everything to work smoothly)))
2022-03-09 19:00:53 +03:00
dependencies-ocaml:
2022-02-04 16:39:34 +03:00
opam install . --deps-only --with-doc --with-test --yes
2020-04-26 19:42:42 +03:00
2022-03-09 19:00:53 +03:00
dependencies-ocaml-with-z3:
opam install . z3 --deps-only --with-doc --with-test --yes
2021-06-21 12:54:56 +03:00
dependencies-js:
$(MAKE) -C $(FRENCH_LAW_JS_LIB_DIR) dependencies
init-submodules:
2020-04-17 14:02:15 +03:00
git submodule update --init
2021-06-21 12:54:56 +03:00
#> dependencies : Install the Catala OCaml, JS and Git dependencies
dependencies: dependencies-ocaml dependencies-js init-submodules
2022-03-09 19:06:25 +03:00
dependencies-with-z3: dependencies-ocaml-with-z3 dependencies-js init-submodules
2020-05-13 15:17:19 +03:00
##########################################
# Catala compiler rules
##########################################
2021-06-21 12:39:06 +03:00
COMPILER_DIR=compiler
BUILD_SYSTEM_DIR=build_system
2021-06-21 12:39:06 +03:00
2020-04-20 09:35:22 +03:00
format:
2021-02-28 20:18:01 +03:00
dune build @fmt --auto-promote 2> /dev/null | true
2020-04-20 09:35:22 +03:00
#> build_dev : Builds the Catala compiler, without formatting code
build_dev:
dune build @update-parser-messages --auto-promote | true
dune build $(COMPILER_DIR)/catala.exe
dune build $(BUILD_SYSTEM_DIR)/clerk.exe
#> build : Builds the Catala compiler
build:
2021-03-15 13:12:24 +03:00
dune build @update-parser-messages --auto-promote | true
2020-12-21 20:26:01 +03:00
@$(MAKE) --no-print-directory format
2021-06-21 12:39:06 +03:00
dune build $(COMPILER_DIR)/catala.exe
dune build $(BUILD_SYSTEM_DIR)/clerk.exe
2020-04-19 17:30:18 +03:00
#> js_build : Builds the Web-compatible JS versions of the Catala compiler
2021-01-16 20:06:22 +03:00
js_build:
dune build $(COMPILER_DIR)/catala.bc.js --profile release
dune build $(COMPILER_DIR)/catala_web_interpreter.bc.js --profile release
2021-01-05 16:35:04 +03:00
#> doc : Generates the HTML OCaml documentation
2021-02-01 22:24:50 +03:00
doc:
2020-05-23 00:02:48 +03:00
dune build @doc
2020-12-14 20:09:38 +03:00
ln -sf $(PWD)/_build/default/_doc/_html/index.html doc/odoc.html
2020-05-23 00:02:48 +03:00
2020-12-14 20:09:38 +03:00
install:
2021-01-05 16:35:04 +03:00
dune build @install
2020-04-16 18:47:35 +03:00
2020-05-13 15:17:19 +03:00
##########################################
2020-08-19 00:16:27 +03:00
# Syntax highlighting rules
2020-05-13 15:17:19 +03:00
##########################################
2020-03-08 05:30:37 +03:00
2020-04-27 10:57:13 +03:00
SYNTAX_HIGHLIGHTING_FR=${CURDIR}/syntax_highlighting/fr
SYNTAX_HIGHLIGHTING_EN=${CURDIR}/syntax_highlighting/en
2021-05-09 23:55:50 +03:00
SYNTAX_HIGHLIGHTING_PL=${CURDIR}/syntax_highlighting/pl
2021-02-28 20:18:01 +03:00
pygmentize_fr: $(SYNTAX_HIGHLIGHTING_FR)/set_up_pygments.sh
chmod +x $<
2021-03-02 20:27:39 +03:00
sudo $<
2021-02-28 20:18:01 +03:00
pygmentize_en: $(SYNTAX_HIGHLIGHTING_EN)/set_up_pygments.sh
2020-04-19 17:30:18 +03:00
chmod +x $<
2021-03-02 20:27:39 +03:00
sudo $<
2020-04-19 17:30:18 +03:00
2021-05-09 23:55:50 +03:00
pygmentize_pl: $(SYNTAX_HIGHLIGHTING_PL)/set_up_pygments.sh
chmod +x $<
sudo $<
#> pygments : Extends your pygmentize executable with Catala lexers
2021-05-10 20:05:18 +03:00
pygments: pygmentize_fr pygmentize_en pygmentize_pl
2020-04-27 10:57:13 +03:00
atom_fr: ${CURDIR}/syntax_highlighting/fr/setup_atom.sh
chmod +x $<
$<
2020-04-20 09:35:22 +03:00
2020-04-27 10:57:13 +03:00
atom_en: ${CURDIR}/syntax_highlighting/en/setup_atom.sh
2020-04-26 21:59:04 +03:00
chmod +x $<
$<
2021-05-09 23:55:50 +03:00
atom_pl: ${CURDIR}/syntax_highlighting/pl/setup_atom.sh
chmod +x $<
$<
#> atom : Installs Catala syntax highlighting for Atom
atom: atom_fr atom_en atom_pl
2020-04-26 21:59:04 +03:00
2020-08-19 00:16:27 +03:00
vscode_fr: ${CURDIR}/syntax_highlighting/fr/setup_vscode.sh
chmod +x $<
$<
vscode_en: ${CURDIR}/syntax_highlighting/en/setup_vscode.sh
chmod +x $<
$<
2021-05-16 21:14:35 +03:00
# TODO
# vscode_pl: ${CURDIR}/syntax_highlighting/pl/setup_vscode.sh
# chmod +x $<
# $<
2021-05-09 23:55:50 +03:00
#> vscode : Installs Catala syntax highlighting for VSCode
vscode: vscode_fr vscode_en
2020-08-19 00:16:27 +03:00
2020-05-13 15:17:19 +03:00
##########################################
2021-06-25 11:50:49 +03:00
# Literate programming and examples
2020-05-13 15:17:19 +03:00
##########################################
EXAMPLES_DIR=examples
ALLOCATIONS_FAMILIALES_DIR=$(EXAMPLES_DIR)/allocations_familiales
CODE_GENERAL_IMPOTS_DIR=$(EXAMPLES_DIR)/code_general_impots
US_TAX_CODE_DIR=$(EXAMPLES_DIR)/us_tax_code
TUTORIAL_EN_DIR=$(EXAMPLES_DIR)/tutorial_en
TUTORIEL_FR_DIR=$(EXAMPLES_DIR)/tutoriel_fr
2021-05-13 15:01:34 +03:00
POLISH_TAXES_DIR=$(EXAMPLES_DIR)/polish_taxes
2021-03-02 20:27:39 +03:00
literate_allocations_familiales: build
2020-12-10 20:21:48 +03:00
$(MAKE) -C $(ALLOCATIONS_FAMILIALES_DIR) allocations_familiales.tex
$(MAKE) -C $(ALLOCATIONS_FAMILIALES_DIR) allocations_familiales.html
2021-03-02 20:27:39 +03:00
literate_code_general_impots: build
2020-12-10 20:21:48 +03:00
$(MAKE) -C $(CODE_GENERAL_IMPOTS_DIR) code_general_impots.tex
$(MAKE) -C $(CODE_GENERAL_IMPOTS_DIR) code_general_impots.html
2021-03-02 20:27:39 +03:00
literate_us_tax_code: build
2020-12-10 20:21:48 +03:00
$(MAKE) -C $(US_TAX_CODE_DIR) us_tax_code.tex
$(MAKE) -C $(US_TAX_CODE_DIR) us_tax_code.html
2020-05-17 19:51:00 +03:00
2021-03-02 20:27:39 +03:00
literate_tutorial_en: build
$(MAKE) -C $(TUTORIAL_EN_DIR) tutorial_en.tex
$(MAKE) -C $(TUTORIAL_EN_DIR) tutorial_en.html
2021-03-02 20:27:39 +03:00
literate_tutoriel_fr: build
$(MAKE) -C $(TUTORIEL_FR_DIR) tutoriel_fr.tex
$(MAKE) -C $(TUTORIEL_FR_DIR) tutoriel_fr.html
2020-04-19 17:30:18 +03:00
2021-05-13 15:01:34 +03:00
literate_polish_taxes: build
$(MAKE) -C $(POLISH_TAXES_DIR) polish_taxes.tex
$(MAKE) -C $(POLISH_TAXES_DIR) polish_taxes.html
2021-03-11 16:41:14 +03:00
#> literate_examples : Builds the .tex and .html versions of the examples code. Needs pygments to be installed and patched with Catala.
literate_examples: literate_allocations_familiales literate_code_general_impots \
2021-05-13 15:01:34 +03:00
literate_us_tax_code literate_tutorial_en literate_tutoriel_fr literate_polish_taxes
2021-01-28 20:30:01 +03:00
##########################################
2021-02-01 22:09:16 +03:00
# French law library
2021-01-28 20:30:01 +03:00
##########################################
2021-06-25 11:50:49 +03:00
#-----------------------------------------
# OCaml
#-----------------------------------------
2021-06-25 11:50:49 +03:00
FRENCH_LAW_OCAML_LIB_DIR=french_law/ocaml
2021-01-30 20:00:49 +03:00
$(FRENCH_LAW_OCAML_LIB_DIR)/law_source/allocations_familiales.ml:
CATALA_OPTS="$(CATALA_OPTS) -O -t" $(MAKE) -C $(ALLOCATIONS_FAMILIALES_DIR) allocations_familiales.ml
cp -f $(ALLOCATIONS_FAMILIALES_DIR)/allocations_familiales.ml $@
2021-01-28 20:30:01 +03:00
$(FRENCH_LAW_OCAML_LIB_DIR)/law_source/unit_tests/tests_allocations_familiales.ml:
CATALA_OPTS="$(CATALA_OPTS) -O -t" $(MAKE) -s -C $(ALLOCATIONS_FAMILIALES_DIR) tests/tests_allocations_familiales.ml
cp -f $(ALLOCATIONS_FAMILIALES_DIR)/tests/tests_allocations_familiales.ml $@
2021-02-03 12:53:21 +03:00
2021-06-21 12:39:06 +03:00
#> generate_french_law_library_ocaml : Generates the French law library OCaml sources from Catala
generate_french_law_library_ocaml:\
$(FRENCH_LAW_OCAML_LIB_DIR)/law_source/allocations_familiales.ml \
$(FRENCH_LAW_OCAML_LIB_DIR)/law_source/unit_tests/tests_allocations_familiales.ml
2021-04-03 14:44:11 +03:00
$(MAKE) format
2021-02-03 12:53:21 +03:00
2021-06-21 12:39:06 +03:00
#> build_french_law_library_ocaml : Builds the OCaml French law library
build_french_law_library_ocaml: generate_french_law_library_ocaml format
dune build $(FRENCH_LAW_OCAML_LIB_DIR)/api.a
run_french_law_library_benchmark_ocaml: generate_french_law_library_ocaml
dune exec --profile release $(FRENCH_LAW_OCAML_LIB_DIR)/bench.exe
2021-02-01 22:09:16 +03:00
2021-06-25 01:47:12 +03:00
run_french_law_library_ocaml_tests: build_french_law_library_ocaml
dune exec $(FRENCH_LAW_OCAML_LIB_DIR)/law_source/unit_tests/run_tests.exe
2021-06-25 11:50:49 +03:00
#-----------------------------------------
# JS
#-----------------------------------------
FRENCH_LAW_JS_LIB_DIR=french_law/js
2021-06-21 12:39:06 +03:00
run_french_law_library_benchmark_js: build_french_law_library_js
2021-06-21 12:54:56 +03:00
$(MAKE) -C $(FRENCH_LAW_JS_LIB_DIR) bench
#> build_french_law_library_js : Builds the JS version of the OCaml French law library
2021-06-21 12:39:06 +03:00
build_french_law_library_js: generate_french_law_library_ocaml format
dune build --profile release $(FRENCH_LAW_OCAML_LIB_DIR)/api_web.bc.js
cp -f $(ROOT_DIR)/_build/default/$(FRENCH_LAW_OCAML_LIB_DIR)/api_web.bc.js $(FRENCH_LAW_JS_LIB_DIR)/french_law.js
2021-02-01 22:09:16 +03:00
2021-06-25 11:50:49 +03:00
#-----------------------------------------
# Python
#-----------------------------------------
FRENCH_LAW_PYTHON_LIB_DIR=french_law/python
$(FRENCH_LAW_PYTHON_LIB_DIR)/src/allocations_familiales.py:
2021-06-25 11:50:49 +03:00
CATALA_OPTS="$(CATALA_OPTS) -O -t" $(MAKE) -C $(ALLOCATIONS_FAMILIALES_DIR) allocations_familiales.py
cp -f $(ALLOCATIONS_FAMILIALES_DIR)/allocations_familiales.py $@
#> generate_french_law_library_python : Generates the French law library Python sources from Catala
2021-06-22 19:16:47 +03:00
generate_french_law_library_python:\
$(FRENCH_LAW_PYTHON_LIB_DIR)/src/allocations_familiales.py
2021-06-24 23:55:27 +03:00
. $(FRENCH_LAW_PYTHON_LIB_DIR)/env/bin/activate ;\
$(MAKE) -C $(FRENCH_LAW_PYTHON_LIB_DIR) format
2021-10-01 17:31:50 +03:00
#> type_french_law_library_python : Types the French law library Python sources with mypy
2021-06-24 19:17:54 +03:00
type_french_law_library_python: generate_french_law_library_python
. $(FRENCH_LAW_PYTHON_LIB_DIR)/env/bin/activate ;\
$(MAKE) -C $(FRENCH_LAW_PYTHON_LIB_DIR) type
2021-06-25 01:56:08 +03:00
run_french_law_library_benchmark_python: type_french_law_library_python
2021-06-25 01:47:12 +03:00
. $(FRENCH_LAW_PYTHON_LIB_DIR)/env/bin/activate ;\
2021-06-26 18:09:47 +03:00
$(MAKE) -C $(FRENCH_LAW_PYTHON_LIB_DIR) bench
2021-06-25 01:47:12 +03:00
2021-06-25 11:50:49 +03:00
##########################################
# High-level test and benchmarks commands
##########################################
CATALA_OPTS?=
2022-01-11 14:51:34 +03:00
CLERK_OPTS?=
CATALA_BIN=_build/default/compiler/catala.exe
CLERK_BIN=_build/default/build_system/clerk.exe
CLERK=$(CLERK_BIN) --exe $(CATALA_BIN) \
$(CLERK_OPTS) $(if $(CATALA_OPTS),--catala-opts=$(CATALA_OPTS),)
2022-01-11 14:51:34 +03:00
2021-06-25 11:50:49 +03:00
.FORCE:
test_suite: .FORCE
2022-01-11 14:51:34 +03:00
@$(CLERK) test tests
2021-06-25 11:50:49 +03:00
test_examples: .FORCE
2022-01-11 14:51:34 +03:00
@$(CLERK) test examples
2021-06-25 11:50:49 +03:00
test_clerk: .FORCE
cd $(BUILD_SYSTEM_DIR) && dune test
2022-02-15 22:46:03 +03:00
2021-06-25 11:50:49 +03:00
#> tests : Run interpreter tests
tests: test_suite test_examples test_clerk
2021-06-25 11:50:49 +03:00
#> tests_ocaml : Run OCaml unit tests for the Catala-generated code
tests_ocaml: run_french_law_library_ocaml_tests
#> bench_ocaml : Run OCaml benchmarks for the Catala-generated code
bench_ocaml: run_french_law_library_benchmark_ocaml
#> bench_js : Run JS benchmarks for the Catala-generated code
bench_js: run_french_law_library_benchmark_js
#> bench_python : Run Python benchmarks for the Catala-generated code
bench_python: run_french_law_library_benchmark_python
2020-05-13 15:17:19 +03:00
##########################################
# Website assets
##########################################
2021-06-21 12:39:06 +03:00
grammar.html: $(COMPILER_DIR)/surface/parser.mly
obelisk html -o $@ $<
2021-06-21 12:39:06 +03:00
catala.html: $(COMPILER_DIR)/utils/cli.ml
dune exec $(COMPILER_DIR)/catala.exe -- --help=groff | man2html | sed -e '1,8d' \
2020-05-17 19:51:00 +03:00
| tac | sed "1,20d" | tac > $@
2020-05-05 18:04:53 +03:00
#> website-assets : Builds all the assets necessary for the Catala website
website-assets: doc literate_examples grammar.html catala.html build_french_law_library_js
2020-05-13 14:52:20 +03:00
2020-05-13 15:17:19 +03:00
##########################################
# Misceallenous
##########################################
2021-06-21 12:39:06 +03:00
#> all : Run all make commands
2021-06-24 19:17:54 +03:00
all: \
2022-04-11 12:01:20 +03:00
build js_build doc website-assets\
2021-06-24 19:30:54 +03:00
tests \
2021-06-24 19:17:54 +03:00
generate_french_law_library_ocaml build_french_law_library_ocaml \
2021-06-24 19:30:54 +03:00
tests_ocaml bench_ocaml \
2021-06-24 19:17:54 +03:00
build_french_law_library_js \
2021-06-24 19:30:54 +03:00
bench_js \
2021-06-25 01:56:08 +03:00
generate_french_law_library_python type_french_law_library_python\
bench_python
2021-06-24 19:17:54 +03:00
2020-05-13 15:17:19 +03:00
#> clean : Clean build artifacts
2020-04-20 09:35:22 +03:00
clean:
dune clean
$(MAKE) -C $(ALLOCATIONS_FAMILIALES_DIR) clean
$(MAKE) -C $(US_TAX_CODE_DIR) clean
2021-01-16 20:06:22 +03:00
$(MAKE) -C $(TUTORIEL_FR_DIR) clean
$(MAKE) -C $(TUTORIAL_EN_DIR) clean
2021-05-13 15:01:34 +03:00
$(MAKE) -C $(POLISH_TAXES_DIR) clean
$(MAKE) -C $(CODE_GENERAL_IMPOTS_DIR) clean
2020-04-19 17:30:18 +03:00
2020-04-13 19:57:24 +03:00
inspect:
2021-05-09 23:55:50 +03:00
gitinspector -f ml,mli,mly,iro,tex,catala,catala_en,catala_pl,catala_fr,md,fst,mld --grading
2020-04-20 20:37:16 +03:00
2022-01-11 14:51:34 +03:00
#> help_clerk : Display the clerk man page
help_clerk:
$(CLERK_BIN) --help
#> help_catala : Display the catala man page
help_catala:
$(CATALA_BIN) --help
2020-05-13 15:17:19 +03:00
##########################################
2020-04-20 20:37:16 +03:00
# Special targets
2020-05-13 15:17:19 +03:00
##########################################
.PHONY: inspect clean all literate_examples english allocations_familiales pygments \
install build_dev build doc format dependencies dependencies-ocaml \
catala.html help