.PHONY: build clean tidy run serve build-all build-linux build-darwin build-windows build-with-ble BINARY_NAME=opencode-monitor VERSION=$(shell git describe --tags --always --dirty 2>/dev/null || echo "dev") GO?=go build: $(GO) mod tidy $(GO) build -ldflags "-X main.Version=$(VERSION)" -o bin/$(BINARY_NAME) ./cmd/monitor clean: rm -rf bin/ dist/ tidy: $(GO) mod tidy run: build ./bin/$(BINARY_NAME) monitor --ports 4096 serve: build ./bin/$(BINARY_NAME) serve --addr :8080 monitor-with-api: build ./bin/$(BINARY_NAME) monitor --ports 4096 --api-addr :8080 config-list: build ./bin/$(BINARY_NAME) config list config-set: build ./bin/$(BINARY_NAME) config set --broker tcp://127.0.0.1:1883 build-all: build-linux build-darwin build-windows build-linux: @echo "Building for Linux..." @mkdir -p dist GOOS=linux GOARCH=amd64 $(GO) build -ldflags "-X main.Version=$(VERSION)" -o dist/$(BINARY_NAME)-linux-amd64 ./cmd/monitor GOOS=linux GOARCH=arm64 $(GO) build -ldflags "-X main.Version=$(VERSION)" -o dist/$(BINARY_NAME)-linux-arm64 ./cmd/monitor build-darwin: @echo "Building for macOS..." @mkdir -p dist GOOS=darwin GOARCH=amd64 $(GO) build -ldflags "-X main.Version=$(VERSION)" -o dist/$(BINARY_NAME)-darwin-amd64 ./cmd/monitor GOOS=darwin GOARCH=arm64 $(GO) build -ldflags "-X main.Version=$(VERSION)" -o dist/$(BINARY_NAME)-darwin-arm64 ./cmd/monitor build-windows: @echo "Building for Windows..." @mkdir -p dist GOOS=windows GOARCH=amd64 $(GO) build -ldflags "-X main.Version=$(VERSION)" -o dist/$(BINARY_NAME)-windows-amd64.exe ./cmd/monitor GOOS=windows GOARCH=arm64 $(GO) build -ldflags "-X main.Version=$(VERSION)" -o dist/$(BINARY_NAME)-windows-arm64.exe ./cmd/monitor release: build-all @echo "Creating release archives..." @cd dist && tar -czf $(BINARY_NAME)-linux-amd64.tar.gz $(BINARY_NAME)-linux-amd64 @cd dist && tar -czf $(BINARY_NAME)-linux-arm64.tar.gz $(BINARY_NAME)-linux-arm64 @cd dist && tar -czf $(BINARY_NAME)-darwin-amd64.tar.gz $(BINARY_NAME)-darwin-amd64 @cd dist && tar -czf $(BINARY_NAME)-darwin-arm64.tar.gz $(BINARY_NAME)-darwin-arm64 @cd dist && zip -q $(BINARY_NAME)-windows-amd64.zip $(BINARY_NAME)-windows-amd64.exe @cd dist && zip -q $(BINARY_NAME)-windows-arm64.zip $(BINARY_NAME)-windows-arm64.exe @echo "Release archives created in dist/" build-with-ble: @echo "Step 1: Building BLE relay with PyInstaller..." python -m PyInstaller --onefile --name ble_relay --distpath bin --specpath build --workpath build scripts/ble_relay.py @echo "Step 2: Copying BLE relay for embedding..." cp bin/ble_relay cmd/monitor/ble_relay @echo "Step 3: Building Go binary with BLE embedded..." $(GO) mod tidy $(GO) build -tags ble -ldflags "-X main.Version=$(VERSION)" -o bin/$(BINARY_NAME) ./cmd/monitor @echo "Step 4: Cleaning up..." rm -f cmd/monitor/ble_relay @echo "Done: bin/$(BINARY_NAME)"