SPB Git

spb/zyquo-router Public MIT

One local endpoint, every AI provider — a private OpenAI-compatible LLM gateway for your Mac (170 models, 12 providers).

Swift 95.7% Python 2.3% Shell 1.2% Makefile 0.9%
3.9 KB · 92 lines make
Raw Blame History
1#2#  Makefile3#  Zyquo Router4#5#  Author: Simon-Pierre Boucher6#  Mail: contact@spboucher.ai7#8#  make / make dev  → release build, assemble dist/Zyquo Router.app, ad-hoc sign (fast local iteration)9#  make release     → universal binary, Developer ID sign, notarize, staple (Phase 8)10#  make icon        → regenerate AppIcon.icns from assets/icon/zyquo-router.svg (Phase 5)11#  make test        → swift test12#  make clean       → remove build products13#14#  Unlike Zyquo Cloud (CLT-only machine), full Xcode is installed here, so the15#  SwiftUI macro plugins ship with the toolchain and no SDKROOT pin is needed.16#1718APP_NAME      := Zyquo Router19EXEC_NAME     := ZyquoRouter20BUNDLE_ID     := com.zyquo.router21VERSION       := 1.0.022BUILD_NUM     := 123MIN_MACOS     := 13.024DIST          := dist25APP_DIR       := $(DIST)/$(APP_NAME).app26IDENTITY      := Developer ID Application: Simon-Pierre Boucher (3YM54G49SN)27NOTARY_PROFILE:= MacLustr-Notarize28ENTITLEMENTS  := Resources/ZyquoRouter.entitlements2930.PHONY: dev build bundle release universal icon test clean run3132dev: build bundle33	@echo "=== Ad-hoc signing (dev) ==="34	codesign --force --deep --sign - "$(APP_DIR)"35	codesign --verify --deep --strict "$(APP_DIR)"36	@echo "Packaged: $(APP_DIR) — launch with: open \"$(APP_DIR)\""3738build:39	swift build -c release4041test:42	swift test4344run: dev45	open "$(APP_DIR)"4647bundle:48	@echo "=== Assembling $(APP_DIR) ==="49	rm -rf "$(APP_DIR)"50	mkdir -p "$(APP_DIR)/Contents/MacOS" "$(APP_DIR)/Contents/Resources"51	cp .build/release/$(EXEC_NAME) "$(APP_DIR)/Contents/MacOS/$(EXEC_NAME)"52	@for b in .build/release/*.bundle; do [ -e "$$b" ] && cp -R "$$b" "$(APP_DIR)/Contents/Resources/" || true; done53	@if [ -f Resources/AppIcon.icns ]; then cp Resources/AppIcon.icns "$(APP_DIR)/Contents/Resources/AppIcon.icns"; fi54	@for r in Resources/MenuBarIcon.png Resources/MenuBarIcon@2x.png; do [ -f "$$r" ] && cp "$$r" "$(APP_DIR)/Contents/Resources/" || true; done55	@if [ -f docs/API.md ]; then cp docs/API.md "$(APP_DIR)/Contents/Resources/API.md"; fi56	scripts/write-info-plist.sh "$(APP_DIR)" "$(APP_NAME)" "$(EXEC_NAME)" "$(BUNDLE_ID)" "$(VERSION)" "$(BUILD_NUM)" "$(MIN_MACOS)"5758# Both arch builds land in .build/<triple>/Release; each slice is copied aside59# before lipo so the second build cannot clobber the first.60universal:61	@echo "=== Building universal binary (arm64 + x86_64) ==="62	mkdir -p .build/universal63	swift build -c release --arch arm6464	cp .build/arm64-apple-macosx/release/$(EXEC_NAME) .build/universal/$(EXEC_NAME).arm64 2>/dev/null || \65		cp .build/out/Products/Release/$(EXEC_NAME) .build/universal/$(EXEC_NAME).arm6466	swift build -c release --arch x86_6467	cp .build/x86_64-apple-macosx/release/$(EXEC_NAME) .build/universal/$(EXEC_NAME).x86_64 2>/dev/null || \68		cp .build/out/Products/Release/$(EXEC_NAME) .build/universal/$(EXEC_NAME).x86_6469	lipo -create \70		.build/universal/$(EXEC_NAME).arm64 \71		.build/universal/$(EXEC_NAME).x86_64 \72		-output .build/universal/$(EXEC_NAME)73	lipo -archs .build/universal/$(EXEC_NAME)7475release: universal76	@echo "=== Assembling $(APP_DIR) (universal) ==="77	rm -rf "$(APP_DIR)"78	mkdir -p "$(APP_DIR)/Contents/MacOS" "$(APP_DIR)/Contents/Resources"79	cp .build/universal/$(EXEC_NAME) "$(APP_DIR)/Contents/MacOS/$(EXEC_NAME)"80	@for b in .build/arm64-apple-macosx/release/*.bundle; do [ -e "$$b" ] && cp -R "$$b" "$(APP_DIR)/Contents/Resources/" || true; done81	@if [ -f Resources/AppIcon.icns ]; then cp Resources/AppIcon.icns "$(APP_DIR)/Contents/Resources/AppIcon.icns"; fi82	@for r in Resources/MenuBarIcon.png Resources/MenuBarIcon@2x.png; do [ -f "$$r" ] && cp "$$r" "$(APP_DIR)/Contents/Resources/" || true; done83	@if [ -f docs/API.md ]; then cp docs/API.md "$(APP_DIR)/Contents/Resources/API.md"; fi84	scripts/write-info-plist.sh "$(APP_DIR)" "$(APP_NAME)" "$(EXEC_NAME)" "$(BUNDLE_ID)" "$(VERSION)" "$(BUILD_NUM)" "$(MIN_MACOS)"85	scripts/notarize.sh "$(APP_DIR)" "$(IDENTITY)" "$(NOTARY_PROFILE)" "$(ENTITLEMENTS)"8687icon:88	scripts/generate-icon.sh8990clean:91	rm -rf .build $(DIST)92