147 lines
3.9 KiB
Makefile
147 lines
3.9 KiB
Makefile
# 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
|
|
|