Files
concrete/frontends/concrete-python/Makefile

166 lines
3.8 KiB
Makefile

PYTHON=python
PIP=$(PYTHON) -m pip
COMPILER_BUILD_DIRECTORY ?= $(PWD)/../../compilers/concrete-compiler/compiler/build
BINDINGS_DIRECTORY=${COMPILER_BUILD_DIRECTORY}/tools/concretelang/python_packages/concretelang_core/
RUNTIME_LIBRARY=${COMPILER_BUILD_DIRECTORY}/lib/libConcretelangRuntime.so
.ONESHELL:
.PHONY:
.SILENT:
# =====
# Setup
# =====
venv:
$(PYTHON) -m venv .venv
. .venv/bin/activate
$(PIP) install -r requirements.dev.txt
$(PIP) install -r requirements.txt
@echo
@echo "The new environment is automatically activated with locals cp & bindings for makefile targets."
@echo "You can have the same activation in a terminal using:"
@echo 'eval $$(make cp_activate)'
cp_activate:
@echo "echo 'Activating virtual env and local concrete-python and local compiler bindings' ;"
@echo "export PATH=$(PWD)/.venv/bin:$$PATH;"
@echo "export LD_PRELOAD=$(RUNTIME_LIBRARY);"
@echo "export PYTHONPATH=$(BINDINGS_DIRECTORY);"
licenses:
bash scripts/versioning/summary.sh
# =======
# Testing
# =======
pytest: pytest-single pytest-multi
pytest-single:
export LD_PRELOAD=$(RUNTIME_LIBRARY)
export PYTHONPATH=$(BINDINGS_DIRECTORY)
# test single precision, mono params
pytest tests -svv -n auto \
--precision=single \
--strategy=mono \
--key-cache "${KEY_CACHE_DIRECTORY}" \
-m "${PYTEST_MARKERS}"
pytest-multi:
export LD_PRELOAD=$(RUNTIME_LIBRARY)
export PYTHONPATH=$(BINDINGS_DIRECTORY)
# test multi precision, multi params
pytest tests -svv -n auto \
--precision=multi \
--strategy=multi \
--cov=concrete \
--cov-fail-under=100 \
--cov-report=term-missing:skip-covered \
--key-cache "${KEY_CACHE_DIRECTORY}" \
-m "${PYTEST_MARKERS}"
pytest-gpu:
export LD_PRELOAD=$(RUNTIME_LIBRARY)
export PYTHONPATH=$(BINDINGS_DIRECTORY)
# test single precision
pytest tests -svv -n0 --use_gpu \
--key-cache "${KEY_CACHE_DIRECTORY}" \
-m "${PYTEST_MARKERS}"
# test multi precision
pytest tests -svv -n0 --use_gpu \
--precision=multi \
--cov=concrete \
--cov-fail-under=100 \
--cov-report=term-missing:skip-covered \
--key-cache "${KEY_CACHE_DIRECTORY}" \
-m "${PYTEST_MARKERS}"
# ==========
# Formatting
# ==========
format:
bash scripts/format/formatter.sh \
--dir concrete \
--dir examples \
--dir scripts \
--dir tests
sanitize-notebooks:
$(PYTHON) scripts/notebook/sanitizer.py docs
conformance: format sanitize-notebooks
# =======
# Linting
# =======
check-format:
bash scripts/format/formatter.sh --check \
--dir concrete \
--dir examples \
--dir scripts \
--dir tests
check-sanitize-notebooks:
$(PYTHON) scripts/notebook/sanitizer.py docs --check
mypy:
mypy concrete examples scripts tests --ignore-missing-imports
pydocstyle:
pydocstyle concrete --convention google --add-ignore=D1,D200,D202,D212,D402 --add-select=D401
pylint:
pylint --rcfile=.pylintrc concrete
pylint --rcfile=.pylintrc examples --disable=C0103,C0114,C0115,C0116,E0401,R1721
pylint --rcfile=.pylintrc scripts
pylint --rcfile=.pylintrc tests --disable=C0301,W0108
ruff:
ruff concrete/ examples/ scripts/ tests/
pcc: check-format check-sanitize-notebooks mypy pydocstyle pylint ruff
# ============
# Distribution
# ============
OS=undefined
ifeq ($(shell uname), Linux)
OS=linux
else ifeq ($(shell uname), Darwin)
OS=darwin
endif
clear-whls:
rm -rf dist
build-whl:
mkdir -p dist
$(PIP) wheel --no-deps -w dist .
patch-whl-linux:
GLIBC_VER=$(shell ldd --version | head -n 1 | grep -o '[^ ]*$$'|head|tr '.' '_'); \
for PLATFORM in manylinux_$${GLIBC_VER}_x86_64 linux_x86_64; do \
if $(PYTHON) -m auditwheel repair -w dist --plat $$PLATFORM dist/*.whl; then \
echo Success for $$PLATFORM; \
break; \
else \
echo No repair with $$PLATFORM; \
fi \
done
patch-whl-darwin:
delocate-wheel -v dist/*macosx*.whl
whl: clear-whls build-whl patch-whl-$(OS)