Makefile 2.5 KB
Newer Older
1
.PHONY: help check-deps install-deps tree ln submodule install build clean rebuild test format update
2

3
4
5
6
7
8
9
10
11
12
13
14
15
# Show help for each target
help: ## Show this help message
	@echo "Available targets:"
	@grep -E '^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}'

check-deps: ## Check and install required Python formatting dependencies
	@command -v isort >/dev/null 2>&1 || (echo "Installing isort..." && pip install isort)
	@command -v black >/dev/null 2>&1 || (echo "Installing black..." && pip install black)

install-deps: ## Install Python formatting tools (isort and black)
	pip install isort black

tree: ## Show project directory structure
16
	@tree --prune -I "__pycache__|*.egg-info|*.so|build|3rdparty|dist"
17

18
submodule: ## Initialize and update git submodules
19
	@git submodule update --init --recursive
20

21
ln: submodule ## Create compilation database
22
23
	@rm -rf build && bear python3 setup.py build

24
install: submodule ## Install package in development mode
25
26
	@pip install -e .

27
build: submodule ## Build and install wheel package
28
	@rm -rf dist/* || true && export MAX_JOBS=$(nproc) && python3 setup.py bdist_wheel && pip3 install dist/*whl --force-reinstall --no-deps
29

30
clean: ## Remove build artifacts
31
32
	@rm -rf build dist *.egg-info

33
rebuild: clean submodule build ## Clean and rebuild the project
34
35
	@echo "Succeed to rebuild"

36
test: ## Run all tests
37
	@find tests -name "test_*.py" | xargs -n 1 python3
38

39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
format: check-deps ## Format all source files
	@echo "Formatting source files..."
	@find src tests -name '*.cc' -o -name '*.cu' -o -name '*.cuh' -o -name '*.h' -o -name '*.hpp' | xargs clang-format -i
	@find src tests -name '*.py' | xargs isort
	@find src tests -name '*.py' | xargs black
	@pre-commit run --all-files

FILES_TO_UPDATE = src/sgl-kernel/version.py \
                 pyproject.toml

update: ## Update version numbers across project files. Usage: make update <new_version>
	@if [ -z "$(filter-out $@,$(MAKECMDGOALS))" ]; then \
		echo "Version required. Usage: make update <new_version>"; \
		exit 1; \
	fi
	@OLD_VERSION=$$(grep "version" src/sgl-kernel/version.py | cut -d '"' -f2); \
	NEW_VERSION=$(filter-out $@,$(MAKECMDGOALS)); \
	echo "Updating version from $$OLD_VERSION to $$NEW_VERSION"; \
	for file in $(FILES_TO_UPDATE); do \
		if [ "$(shell uname)" = "Darwin" ]; then \
			sed -i '' -e "s/$$OLD_VERSION/$$NEW_VERSION/g" $$file; \
		else \
			sed -i -e "s/$$OLD_VERSION/$$NEW_VERSION/g" $$file; \
		fi \
	done; \
	echo "Version update complete"

%:
	@: