.PHONY: help build test check clean lint \
build-rust test-rust bench-rust \
build-python test-python \
build-js test-js demo-js \
build-django test-django run-django \
build-all test-all
CARGO ?= cargo
UV ?= uv
help:
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | \
awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-18s\033[0m %s\n", $$1, $$2}'
build-rust:
$(CARGO) build --release
test-rust:
$(CARGO) test
bench-rust:
$(CARGO) bench
lint-rust:
$(CARGO) clippy -- -D warnings
$(CARGO) fmt -- --check
build-python:
cd bindings/python && $(UV) build
test-python:
cd bindings/python && $(CARGO) test --features python
build-js:
cd bindings/javascript && wasm-pack build --target web
test-js:
cd bindings/javascript && wasm-pack test --node
demo-js: build-js
@echo "Demo running at http://localhost:8081/demo/index.html"
cd bindings/javascript && python3 -m http.server 8081
DJANGO_DIR := bindings/django
DJANGO_PYTHON := .venv/bin/python
DJANGO_SETTINGS := test_settings
build-django: build-js
cd $(DJANGO_DIR) && $(UV) venv && $(UV) pip install -e .
@echo "Syncing JS/CSS assets to Django static..."
cp bindings/javascript/picker.js $(DJANGO_DIR)/npdt/static/npdt/js/picker.min.js
cp bindings/javascript/picker.css $(DJANGO_DIR)/npdt/static/npdt/css/picker.css
rm -rf $(DJANGO_DIR)/npdt/static/npdt/js/pkg
cp -r bindings/javascript/pkg $(DJANGO_DIR)/npdt/static/npdt/js/pkg
test-django:
cd $(DJANGO_DIR) && $(DJANGO_PYTHON) -m django test npdt --settings=$(DJANGO_SETTINGS) -v2
run-django:
cd $(DJANGO_DIR) && $(DJANGO_PYTHON) manage.py runserver 0.0.0.0:8000 --settings=$(DJANGO_SETTINGS)
migrate-django:
cd $(DJANGO_DIR) && $(DJANGO_PYTHON) manage.py migrate --settings=$(DJANGO_SETTINGS)
shell-django:
cd $(DJANGO_DIR) && $(DJANGO_PYTHON) manage.py shell --settings=$(DJANGO_SETTINGS)
build: build-rust
build-all: build-rust build-js build-django
test: test-rust
test-all: test-rust test-django
check: lint-rust test-rust
lint: lint-rust
clean:
$(CARGO) clean
rm -rf bindings/django/.venv/ bindings/django/build/ bindings/django/dist/
rm -rf bindings/django/*.egg-info bindings/django/test_db.sqlite3
rm -rf pkg/ target/
find . -name '*.pyc' -delete
find . -name '__pycache__' -type d -exec rm -rf {} + 2>/dev/null || true