.PHONY: all build test gui gui-dev gui-dist gui-deb gui-win gui-win-docker help clean # ModelRouter - single-binary gateway + optional Electron desktop GUI (embedded core) export BINARY BINARY=llmsproxy export BUILD_DIR BUILD_DIR=build export GUI_DIR GUI_DIR=cmd/gui VERSION ?= $(shell git describe --tags --dirty 2>/dev/null || echo "0.1.0") # Clean env for GUI packaging: the host may have LD_LIBRARY_PATH polluted by # third-party runtimes (e.g. /opt/cangjie) which electron-builder bakes into # the produced binary's DT_RPATH/dep resolution -> the packaged app then # SIGSEGVs inside ld.so on clean machines. Strip it for every pack step. CLEAN_PACK_ENV = env -u LD_LIBRARY_PATH all: build # ---- core binary (server users / embedded core) ---- build: @mkdir -p $(BUILD_DIR) CGO_ENABLED=1 go build -tags luajit -trimpath -o $(BUILD_DIR)/$(BINARY) ./cmd/llmsproxy @echo "Built: $(BUILD_DIR)/$(BINARY) ($(VERSION))" # ---- core distribution packages (deb + rpm + tar.gz) ----- # Server admins install these with dpkg/rpm; unlike the GUI they are the bare # gateway binary + systemd unit (with memory tuning) + Lua adapters. core-dist: ./packaging/core-dist.sh $(VERSION) .PHONY: core-dist # ---- GUI (Electron) ---- gui: @cd $(GUI_DIR) && npm start gui-dev: @cd $(GUI_DIR) && npm run dev # build the embedded core into the GUI, then run electron-builder # targets: deb + rpm + AppImage (linux); rpm needs system rpmbuild # NOTE: run in a clean env (no LD_LIBRARY_PATH pollution) so the packaged # binary does not link against host-only libs and crash on user machines. gui-dist: @cd $(GUI_DIR) && $(CLEAN_PACK_ENV) npm run dist:linux ./packaging/verify-dist.sh # deb only (for local sharing), rpm needs rpmbuild gui-deb: @cd $(GUI_DIR) && $(CLEAN_PACK_ENV) npm run dist:debian # windows nsis installer: host-built core (needs apt install gcc-mingw-w64-x86-64 + wine) gui-win: @cd $(GUI_DIR) && $(CLEAN_PACK_ENV) npm run dist:win # windows nsis installer: full cross-build in docker (self-sufficient, no host mingw) gui-win-docker: @cd $(GUI_DIR) && $(CLEAN_PACK_ENV) ./scripts/dist-win-docker.sh ./packaging/verify-dist.sh gui-dist-dir: @cd $(GUI_DIR) && $(CLEAN_PACK_ENV) npm run dist:dir test: go test ./... clean: rm -rf $(BUILD_DIR) cmd/build cmd/gui/dist cmd/gui/build/gui-dist cmd/gui/bin help: @echo "Targets:" @echo " make build build core binary (luajit)" @echo " make core-dist build core packages: deb + rpm + tar.gz (needs nfpm)" @echo " make gui run desktop GUI (dev)" @echo " make gui-dev run GUI with devtools" @echo " make gui-dist build deb + rpm + AppImage (linux)" @echo " make gui-deb build deb only" @echo " make gui-win build Windows nsis (needs host mingw + wine)" @echo " make gui-win-docker build Windows nsis all-in-docker (no host mingw needed)" @echo " make test run go tests" @echo " make clean remove build dirs and packaged installers (build/, cmd/build/, cmd/gui/dist/)"