# DiffSeeker Makefile # Usage: make help SHELL := /bin/sh PYTHON ?= python3 PIP ?= pip3 VENV_DIR ?= .venv VENV_PY := $(VENV_DIR)/bin/python VENV_PIP := $(VENV_DIR)/bin/pip # Default DB/CSV outputs for convenience targets OUTCSV ?= cfa-output.csv DB ?= diffseeker.db WALKDIR ?= . VOLUME ?= UNKNOWN HASH ?= sha256 RESERVE ?= 0 # Excludes can be overridden: make scan EXCLUDES=".git .svn" EXCLUDES ?= .git .svn # Docker image tags (local) PY_IMG ?= diffseeker-python:dev RS_IMG ?= diffseeker-rust:dev .DEFAULT_GOAL := help .PHONY: help help: @printf "%s\n" "DiffSeeker targets:" @printf "%s\n" "" @printf "%s\n" "Python:" @printf "%s\n" " make venv Create venv and install Python package (editable)" @printf "%s\n" " make py-install Install Python package into existing venv" @printf "%s\n" " make py-test Run Python tests" @printf "%s\n" " make py-clean Remove Python build artifacts" @printf "%s\n" " make scan Run mpchunkcfa scan -> CSV" @printf "%s\n" " make scan-db Run mpchunkcfa scan -> CSV + SQLite" @printf "%s\n" "" @printf "%s\n" "Rust:" @printf "%s\n" " make rs-build Build Rust CLI (release)" @printf "%s\n" " make rs-test Run Rust tests" @printf "%s\n" " make rs-clean Clean Rust build artifacts" @printf "%s\n" "" @printf "%s\n" "Docker:" @printf "%s\n" " make docker-python Build Python Docker image" @printf "%s\n" " make docker-rust Build Rust Docker image" @printf "%s\n" " make docker-scan Run Python scan in container (bind-mount current dir)" @printf "%s\n" "" @printf "%s\n" "Variables (override as needed):" @printf "%s\n" " WALKDIR=., VOLUME=NAME, OUTCSV=FILE.csv, DB=FILE.db, HASH=sha256, RESERVE=0" @printf "%s\n" " EXCLUDES='.git .svn'" # ------------------------- # Python environment # ------------------------- .PHONY: venv venv: $(VENV_PY) py-install $(VENV_PY): $(PYTHON) -m venv $(VENV_DIR) $(VENV_PIP) install --upgrade pip setuptools wheel .PHONY: py-install py-install: $(VENV_PY) $(VENV_PIP) install -e . .PHONY: py-test py-test: $(VENV_PY) $(VENV_PIP) install -e . $(VENV_PY) -m pytest -q python/tests .PHONY: py-clean py-clean: rm -rf build dist *.egg-info .pytest_cache find python -name "__pycache__" -type d -prune -exec rm -rf {} \; || true .PHONY: venv-clean venv-clean: rm -rf $(VENV_DIR) # ------------------------- # Convenience scan targets # ------------------------- # Build --exclude args from space-separated EXCLUDES EXCLUDE_ARGS = $(foreach e,$(EXCLUDES),--exclude $(e)) .PHONY: scan scan: $(VENV_PY) $(VENV_PIP) install -e . $(VENV_DIR)/bin/mpchunkcfa --walk "$(WALKDIR)" -V "$(VOLUME)" -c "$(OUTCSV)" --hash "$(HASH)" $(EXCLUDE_ARGS) --reserve-cores "$(RESERVE)" .PHONY: scan-db scan-db: $(VENV_PY) $(VENV_PIP) install -e . $(VENV_DIR)/bin/mpchunkcfa --walk "$(WALKDIR)" -V "$(VOLUME)" -c "$(OUTCSV)" --hash "$(HASH)" $(EXCLUDE_ARGS) --db "$(DB)" --reserve-cores "$(RESERVE)" # ------------------------- # Rust # ------------------------- .PHONY: rs-build rs-build: cargo build --release -p diffseeker_cli .PHONY: rs-test rs-test: cargo test .PHONY: rs-clean rs-clean: cargo clean # ------------------------- # Docker # ------------------------- .PHONY: docker-python docker-python: docker build -t $(PY_IMG) -f docker/Dockerfile.python . .PHONY: docker-rust docker-rust: docker build -t $(RS_IMG) -f docker/Dockerfile.rust . # Run the Python mpchunkcfa in a container, bind-mount current directory to /work # Example: # make docker-scan WALKDIR=/work VOLUME=VOL_A OUTCSV=/work/vol_a.csv .PHONY: docker-scan docker-scan: docker-python docker run --rm -it \ -v "$(PWD)":/work \ -w /work \ $(PY_IMG) \ --walk "$(WALKDIR)" -V "$(VOLUME)" -c "$(OUTCSV)" --hash "$(HASH)" $(EXCLUDE_ARGS) --reserve-cores "$(RESERVE)" # ------------------------- # Meta # ------------------------- .PHONY: all all: py-test rs-test