From 80f3ecff3a576fc9c808326b52dba592f666b9d4 Mon Sep 17 00:00:00 2001 From: "Wesley R. Elsberry" Date: Wed, 17 Dec 2025 04:47:09 +0000 Subject: [PATCH] Initial Makefile --- Makefile | 146 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 Makefile diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..59a63bf --- /dev/null +++ b/Makefile @@ -0,0 +1,146 @@ +# 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 +