-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
107 lines (84 loc) · 3.66 KB
/
Makefile
File metadata and controls
107 lines (84 loc) · 3.66 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
BINARY_NAME := same
BUILD_DIR := build
VERSION := 0.12.5
COMMIT := $(shell git rev-parse --short=7 HEAD 2>/dev/null || echo "unknown")
LDFLAGS := -ldflags "-s -w -X main.Version=$(VERSION) -X main.CommitHash=$(COMMIT)"
# CGO is required for sqlite3 + sqlite-vec
export CGO_ENABLED := 1
# Extra include path for cross-compilation (sqlite3.h)
# Also disable zig's ubsan which causes linker errors on cross-compile
CROSS_CFLAGS := -I$(CURDIR)/cgo-headers -fno-sanitize=undefined
.PHONY: all build clean test lint man precheck precheck-full provider-smoke provider-smoke-full release-candidate release-candidate-full darwin-arm64 darwin-amd64 linux-amd64 linux-arm64 windows-amd64 cross-all install
all: build
build:
go build $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME) ./cmd/same
test:
go test -race ./... -v -count=1
lint:
golangci-lint run ./...
man: build
mkdir -p docs/man
./build/same gendocs --dir docs/man
precheck:
@/usr/bin/env bash .scripts/precheck.sh
precheck-full:
@SAME_PRECHECK_SCAN=full /usr/bin/env bash .scripts/precheck.sh
provider-smoke: build
@/usr/bin/env bash .scripts/provider-smoke.sh
provider-smoke-full: build
@SAME_SMOKE_PROVIDERS=$${SAME_SMOKE_PROVIDERS:-none,ollama,openai-compatible} \
SAME_SMOKE_REQUIRED=$${SAME_SMOKE_REQUIRED:-none} \
/usr/bin/env bash .scripts/provider-smoke.sh
release-candidate: build
@/usr/bin/env bash .scripts/release-candidate.sh
release-candidate-full: build
@SAME_RC_FULL_MATRIX=1 /usr/bin/env bash .scripts/release-candidate.sh
# Native macOS arm64 build (native CC, no zig needed)
darwin-arm64:
GOOS=darwin GOARCH=arm64 go build $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME)-darwin-arm64 ./cmd/same
# macOS amd64 — requires native x86_64 toolchain or Rosetta
# On arm64 Mac, use: arch -x86_64 make darwin-amd64
darwin-amd64:
GOOS=darwin GOARCH=amd64 go build $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME)-darwin-amd64 ./cmd/same
# Linux amd64 (cross-compile with zig cc from macOS, or native on Linux)
linux-amd64:
GOOS=linux GOARCH=amd64 \
CGO_CFLAGS="$(CROSS_CFLAGS)" \
CC="zig cc -target x86_64-linux-gnu" \
CXX="zig c++ -target x86_64-linux-gnu" \
go build $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME)-linux-amd64 ./cmd/same
# Linux arm64 (cross-compile with zig cc from macOS, or native on ARM Linux)
linux-arm64:
GOOS=linux GOARCH=arm64 \
CGO_CFLAGS="$(CROSS_CFLAGS)" \
CC="zig cc -target aarch64-linux-gnu" \
CXX="zig c++ -target aarch64-linux-gnu" \
go build $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME)-linux-arm64 ./cmd/same
# Windows amd64 (cross-compile with zig cc)
windows-amd64:
GOOS=windows GOARCH=amd64 \
CGO_CFLAGS="$(CROSS_CFLAGS)" \
CC="zig cc -target x86_64-windows-gnu" \
CXX="zig c++ -target x86_64-windows-gnu" \
go build $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME)-windows-amd64.exe ./cmd/same
# Build all platform targets
cross-all: darwin-arm64 windows-amd64 linux-amd64 linux-arm64
# Install to ~/.local/bin (preferred), $GOPATH/bin, or /usr/local/bin.
# IMPORTANT: rm before cp to avoid macOS code signing cache issues —
# stale signatures on in-place replacement cause SIGKILL on Apple Silicon.
install: build
@INSTALL_DIR=""; \
if [ -d "$(HOME)/.local/bin" ]; then \
INSTALL_DIR="$(HOME)/.local/bin"; \
elif [ -n "$(GOPATH)" ]; then \
INSTALL_DIR="$(GOPATH)/bin"; \
else \
INSTALL_DIR="/usr/local/bin"; \
fi; \
rm -f "$$INSTALL_DIR/$(BINARY_NAME)"; \
cp $(BUILD_DIR)/$(BINARY_NAME) "$$INSTALL_DIR/$(BINARY_NAME)"; \
echo "Installed to $$INSTALL_DIR/$(BINARY_NAME)"
security-test:
go test ./internal/hooks/... ./internal/mcp/... ./internal/web/... ./internal/guard/... ./internal/store/... -run "Security|Injection|Sanitize|Plugin|RateLimit|Private|Traversal" -count=1 -v
clean:
rm -rf $(BUILD_DIR)