Makefile 2.88 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
# 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)
13
	pip install scikit-build-core isort black
14
15

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
	@rm -rf build && mkdir build && cd build && cmake .. -DCMAKE_EXPORT_COMPILE_COMMANDS=YES -DCMAKE_POLICY_VERSION_MINIMUM=3.5
23

24

25
install: submodule ## Install package in development mode
26
	@pip install -e . --no-build-isolation
27

28
build: install-deps submodule ## Build and install wheel package
29
	@rm -rf dist/* || true && export MAX_JOBS=$(nproc) && CMAKE_POLICY_VERSION_MINIMUM=3.5 CMAKE_BUILD_PARALLEL_LEVEL=$(nproc) uv build --wheel -Cbuild-dir=build . --verbose --color=always --no-build-isolation && pip3 install dist/*whl --force-reinstall --no-deps
30

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

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

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

40
41
format: check-deps ## Format all source files
	@echo "Formatting source files..."
42
43
44
	@find csrc tests -name '*.cc' -o -name '*.cu' -o -name '*.cuh' -o -name '*.h' -o -name '*.hpp' | xargs clang-format -i
	@find python tests -name '*.py' | xargs isort
	@find python tests -name '*.py' | xargs black
45
46
	@pre-commit run --all-files

47
FILES_TO_UPDATE = python/sgl_kernel/version.py \
48
                 pyproject.toml \
49
                 pyproject_rocm.toml \
50
                 pyproject_cpu.toml \
51
                 ../docker/Dockerfile.blackwell
52
53
54
55
56
57

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
58
	@OLD_VERSION=$$(grep "version" python/sgl_kernel/version.py | cut -d '"' -f2); \
59
60
61
62
63
64
65
66
67
68
69
70
71
	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"

%:
	@: