-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
190 lines (131 loc) · 7.38 KB
/
Makefile
File metadata and controls
190 lines (131 loc) · 7.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
LAURUS_VERSION ?= $(shell cargo metadata --no-deps --format-version=1 | jq -r '.packages[] | select(.name=="laurus") | .version')
USER_AGENT ?= $(shell curl --version | head -n1 | awk '{print $1"/"$2}')
USER ?= $(shell whoami)
HOSTNAME ?= $(shell hostname)
# ── Python venv ─────────────────────────────────────────────────────────────
PYTHON_VENV_DIR := laurus-python/.venv
PYTHON := $(PYTHON_VENV_DIR)/bin/python
PIP := $(PYTHON_VENV_DIR)/bin/pip
MATURIN := $(PYTHON_VENV_DIR)/bin/maturin
PYTEST := $(PYTHON_VENV_DIR)/bin/pytest
.DEFAULT_GOAL := help
help: ## Show help
@echo "Available targets:"
@grep -E '^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf " %-30s %s\n", $$1, $$2}'
# ── Python venv setup ───────────────────────────────────────────────────────
$(PYTHON_VENV_DIR):
python3 -m venv $(PYTHON_VENV_DIR)
$(PIP) install --quiet --upgrade pip
venv: $(PYTHON_VENV_DIR) ## Create laurus-python venv and install dev dependencies
$(PIP) install --quiet maturin pytest
venv-clean: ## Remove the laurus-python venv
rm -rf $(PYTHON_VENV_DIR)
# ── Clean ──────────────────────────────────────────────────────────────────
clean: venv-clean ## Clean all build artifacts (including venv)
cargo clean
# ── Format ─────────────────────────────────────────────────────────────────
format: ## Format all crates
cargo fmt
format-laurus: ## Format laurus
cargo fmt -p laurus
format-laurus-cli: ## Format laurus-cli
cargo fmt -p laurus-cli
format-laurus-server: ## Format laurus-server
cargo fmt -p laurus-server
format-laurus-mcp: ## Format laurus-mcp
cargo fmt -p laurus-mcp
format-laurus-python: ## Format laurus-python
cargo fmt -p laurus-python
format-laurus-nodejs: ## Format laurus-nodejs
cargo fmt -p laurus-nodejs
format-laurus-wasm: ## Format laurus-wasm
cargo fmt -p laurus-wasm
format-laurus-ruby: ## Format laurus-ruby
cargo fmt -p laurus-ruby
format-laurus-php: ## Format laurus-php
cargo fmt -p laurus-php
# ── Lint ───────────────────────────────────────────────────────────────────
lint: ## Lint all crates
cargo clippy --workspace --all-targets -- -D warnings
lint-laurus: ## Lint laurus
cargo clippy -p laurus --all-targets -- -D warnings
lint-laurus-cli: ## Lint laurus-cli
cargo clippy -p laurus-cli --all-targets -- -D warnings
lint-laurus-server: ## Lint laurus-server
cargo clippy -p laurus-server --all-targets -- -D warnings
lint-laurus-mcp: ## Lint laurus-mcp
cargo clippy -p laurus-mcp --all-targets -- -D warnings
lint-laurus-python: ## Lint laurus-python
cargo clippy -p laurus-python -- -D warnings
lint-laurus-nodejs: ## Lint laurus-nodejs
cargo clippy -p laurus-nodejs -- -D warnings
lint-laurus-wasm: ## Lint laurus-wasm (wasm32 target)
cargo clippy -p laurus-wasm --target wasm32-unknown-unknown -- -D warnings
lint-laurus-ruby: ## Lint laurus-ruby
cargo clippy -p laurus-ruby -- -D warnings
lint-laurus-php: ## Lint laurus-php
cargo clippy -p laurus-php -- -D warnings
# ── Test ───────────────────────────────────────────────────────────────────
test: ## Test all crates
cargo test --workspace
test-laurus: ## Test laurus
cargo test -p laurus
test-laurus-cli: ## Test laurus-cli
cargo test -p laurus-cli
test-laurus-server: ## Test laurus-server
cargo test -p laurus-server
test-laurus-mcp: ## Test laurus-mcp
cargo test -p laurus-mcp
test-laurus-python: venv ## Test laurus-python (Rust unit tests + Python pytest)
cargo test -p laurus-python
cd laurus-python && VIRTUAL_ENV=$(abspath $(PYTHON_VENV_DIR)) $(abspath $(MATURIN)) develop --quiet && $(abspath $(PYTEST)) tests/ -v
test-laurus-nodejs: ## Test laurus-nodejs
cd laurus-nodejs && npm run build:debug && npm test
test-laurus-ruby: ## Test laurus-ruby (Rust unit tests + Ruby minitest)
cargo test -p laurus-ruby
cd laurus-ruby && bundle install --quiet && bundle exec rake compile && bundle exec ruby -Ilib -Itest -e 'Dir["test/test_*.rb"].each { |f| require_relative f }'
test-laurus-php: ## Test laurus-php (build + PHPUnit)
ifeq ($(shell uname -s),Darwin)
RUSTFLAGS="-C link-args=-Wl,-undefined,dynamic_lookup" cargo build -p laurus-php --release
else
cargo build -p laurus-php --release
endif
cd laurus-php && composer install --quiet && php -d extension=../target/release/liblaurus_php.so vendor/bin/phpunit tests/LaurusTest.php
test-laurus-wasm: ## Build-test laurus-wasm (wasm32 target)
cargo build -p laurus-wasm --target wasm32-unknown-unknown
# ── Build ──────────────────────────────────────────────────────────────────
build: ## Build all crates (release, all features)
cargo build --release --all-features
build-laurus: ## Build laurus (release)
cargo build -p laurus --release
build-laurus-cli: ## Build laurus-cli (release)
cargo build -p laurus-cli --release
build-laurus-server: ## Build laurus-server (release)
cargo build -p laurus-server --release
build-laurus-mcp: ## Build laurus-mcp (release)
cargo build -p laurus-mcp --release
build-laurus-python: venv ## Build laurus-python wheel (release)
cd laurus-python && VIRTUAL_ENV=$(abspath $(PYTHON_VENV_DIR)) $(abspath $(MATURIN)) build --release
build-laurus-nodejs: ## Build laurus-nodejs (release)
cd laurus-nodejs && npm run build
build-laurus-ruby: ## Build laurus-ruby gem (release)
cd laurus-ruby && bundle install --quiet && bundle exec rake compile
build-laurus-php: ## Build laurus-php (release)
ifeq ($(shell uname -s),Darwin)
RUSTFLAGS="-C link-args=-Wl,-undefined,dynamic_lookup" cargo build -p laurus-php --release
else
cargo build -p laurus-php --release
endif
build-laurus-wasm: ## Build laurus-wasm (wasm-pack, --target web)
cd laurus-wasm && wasm-pack build --target web --release
# ── Benchmark ──────────────────────────────────────────────────────────────
bench: ## Benchmark the project
cargo bench --bench bench
# ── Tag & Publish ──────────────────────────────────────────────────────────
tag: ## Make a new tag for the current version
git tag v$(LAURUS_VERSION)
git push origin v$(LAURUS_VERSION)
publish: ## Publish the crate to crates.io
ifeq ($(shell curl -s -XGET -H "User-Agent: $(USER_AGENT) ($(USER)@$(HOSTNAME))" https://crates.io/api/v1/crates/laurus | jq -r 'select(.versions != null) | .versions[].num' 2>/dev/null | grep -Fx "$(LAURUS_VERSION)"),)
(cd laurus && cargo package && cargo publish)
endif