# CHORUS Multi-Binary Makefile # Builds chorus-agent, chorus-hap, and seqthink-wrapper binaries # Build configuration BINARY_NAME_AGENT = chorus-agent BINARY_NAME_HAP = chorus-hap BINARY_NAME_COMPAT = chorus BINARY_NAME_SEQTHINK = seqthink-wrapper VERSION ?= 0.5.40 COMMIT_HASH ?= $(shell git rev-parse --short HEAD 2>/dev/null || echo "unknown") BUILD_DATE ?= $(shell date -u '+%Y-%m-%d_%H:%M:%S') # Go build flags LDFLAGS = -ldflags "-X main.version=$(VERSION) -X main.commitHash=$(COMMIT_HASH) -X main.buildDate=$(BUILD_DATE)" BUILD_FLAGS = -v $(LDFLAGS) # Directories BUILD_DIR = build CMD_DIR = cmd # Default target .PHONY: all all: clean build # Build all binaries (including compatibility wrapper) .PHONY: build build: build-agent build-hap build-compat # Build autonomous agent binary .PHONY: build-agent build-agent: @echo "๐Ÿค– Building CHORUS autonomous agent..." @mkdir -p $(BUILD_DIR) GOWORK=off go build -mod=mod $(BUILD_FLAGS) -o $(BUILD_DIR)/$(BINARY_NAME_AGENT) ./$(CMD_DIR)/agent @echo "โœ… Agent binary built: $(BUILD_DIR)/$(BINARY_NAME_AGENT)" # Build human agent portal binary .PHONY: build-hap build-hap: @echo "๐Ÿ‘ค Building CHORUS human agent portal..." @mkdir -p $(BUILD_DIR) GOWORK=off go build -mod=mod $(BUILD_FLAGS) -o $(BUILD_DIR)/$(BINARY_NAME_HAP) ./$(CMD_DIR)/hap @echo "โœ… HAP binary built: $(BUILD_DIR)/$(BINARY_NAME_HAP)" # Build compatibility wrapper (deprecated) .PHONY: build-compat build-compat: @echo "โš ๏ธ Building CHORUS compatibility wrapper (deprecated)..." @mkdir -p $(BUILD_DIR) GOWORK=off go build -mod=mod $(BUILD_FLAGS) -o $(BUILD_DIR)/$(BINARY_NAME_COMPAT) ./$(CMD_DIR)/chorus @echo "โœ… Compatibility wrapper built: $(BUILD_DIR)/$(BINARY_NAME_COMPAT)" # Build Sequential Thinking age-encrypted wrapper .PHONY: build-seqthink build-seqthink: @echo "๐Ÿ” Building Sequential Thinking wrapper..." @mkdir -p $(BUILD_DIR) GOWORK=off go build -mod=mod $(BUILD_FLAGS) -o $(BUILD_DIR)/$(BINARY_NAME_SEQTHINK) ./$(CMD_DIR)/seqthink-wrapper @echo "โœ… SeqThink wrapper built: $(BUILD_DIR)/$(BINARY_NAME_SEQTHINK)" # Test compilation without building .PHONY: test-compile test-compile: @echo "๐Ÿ” Testing compilation of both binaries..." go build -o /dev/null ./$(CMD_DIR)/agent go build -o /dev/null ./$(CMD_DIR)/hap @echo "โœ… Both binaries compile successfully" # Run tests .PHONY: test test: @echo "๐Ÿงช Running tests..." go test -v ./... # Clean build artifacts .PHONY: clean clean: @echo "๐Ÿงน Cleaning build artifacts..." rm -rf $(BUILD_DIR) @echo "โœ… Clean complete" # Install both binaries to GOPATH/bin .PHONY: install install: build @echo "๐Ÿ“ฆ Installing binaries to GOPATH/bin..." cp $(BUILD_DIR)/$(BINARY_NAME_AGENT) $(shell go env GOPATH)/bin/ cp $(BUILD_DIR)/$(BINARY_NAME_HAP) $(shell go env GOPATH)/bin/ @echo "โœ… Binaries installed" # Development helpers .PHONY: run-agent run-agent: build-agent @echo "๐Ÿš€ Running CHORUS agent..." ./$(BUILD_DIR)/$(BINARY_NAME_AGENT) .PHONY: run-hap run-hap: build-hap @echo "๐Ÿš€ Running CHORUS HAP..." ./$(BUILD_DIR)/$(BINARY_NAME_HAP) # Docker builds # NOTE: Always use Dockerfile.ubuntu for production builds! # Dockerfile.simple.DEPRECATED uses Alpine which is incompatible with glibc-linked binaries .PHONY: docker-agent docker-agent: @echo "๐Ÿณ Building Docker image for CHORUS agent..." docker build -f Dockerfile.ubuntu -t chorus-agent:$(VERSION) . @echo "โš ๏ธ IMPORTANT: Production images MUST use Dockerfile.ubuntu (glibc compatibility)" .PHONY: docker-hap docker-hap: @echo "๐Ÿณ Building Docker image for CHORUS HAP..." docker build -f docker/Dockerfile.hap -t chorus-hap:$(VERSION) . .PHONY: docker-seqthink docker-seqthink: @echo "๐Ÿ” Building Docker image for Sequential Thinking wrapper..." docker build -f deploy/seqthink/Dockerfile -t seqthink-wrapper:$(VERSION) . .PHONY: docker docker: docker-agent docker-hap docker-seqthink # Help .PHONY: help help: @echo "CHORUS Multi-Binary Build System" @echo "" @echo "Targets:" @echo " all - Clean and build all binaries (default)" @echo " build - Build all binaries" @echo " build-agent - Build autonomous agent binary only" @echo " build-hap - Build human agent portal binary only" @echo " build-seqthink - Build Sequential Thinking wrapper only" @echo " test-compile - Test that binaries compile" @echo " test - Run tests" @echo " clean - Remove build artifacts" @echo " install - Install binaries to GOPATH/bin" @echo " run-agent - Build and run agent" @echo " run-hap - Build and run HAP" @echo " docker - Build Docker images for all binaries" @echo " docker-agent - Build Docker image for agent only" @echo " docker-hap - Build Docker image for HAP only" @echo " docker-seqthink - Build Docker image for SeqThink wrapper only" @echo " help - Show this help" @echo "" @echo "Environment Variables:" @echo " VERSION - Version string (default: 0.5.28)" @echo " COMMIT_HASH - Git commit hash (auto-detected)" @echo " BUILD_DATE - Build timestamp (auto-generated)"