# Termdoku - Makefile for cross-platform builds # Project configuration BINARY_NAME=termdoku VERSION?=1.0.1 BUILD_DIR=dist CMD_DIR=cmd/termdoku MAIN_FILE=$(CMD_DIR)/main.go GOCMD=go GOBUILD=$(GOCMD) build GOCLEAN=$(GOCMD) clean GOTEST=$(GOCMD) test GOMOD=$(GOCMD) mod GOVET=$(GOCMD) vet GOFMT=$(GOCMD) fmt LDFLAGS=-ldflags "-s -w -X main.version=$(VERSION)" CURRENT_OS:=$(shell go env GOOS) CURRENT_ARCH:=$(shell go env GOARCH) COLOR_RESET=\033[0m COLOR_BOLD=\033[1m COLOR_DIM=\033[2m COLOR_RED=\033[31m COLOR_GREEN=\033[32m COLOR_YELLOW=\033[33m COLOR_BLUE=\033[34m COLOR_MAGENTA=\033[35m COLOR_CYAN=\033[36m COLOR_WHITE=\033[37m SYMBOL_CHECK=✓ SYMBOL_CROSS=✗ SYMBOL_ARROW=→ SYMBOL_STAR=★ .PHONY: all build clean test vet fmt help .PHONY: build-linux build-darwin build-windows build-freebsd .PHONY: build-all build-linux-all build-darwin-all build-windows-all .PHONY: install deps run coverage benchmark lint check watch dev .PHONY: release version info size all: clean build ## help: Display this help message help: @echo "" @echo "$(COLOR_BOLD)$(COLOR_CYAN)╔═══════════════════════════════════════════════════════════╗$(COLOR_RESET)" @echo "$(COLOR_BOLD)$(COLOR_CYAN)║$(COLOR_RESET) $(COLOR_BOLD)$(COLOR_MAGENTA)$(SYMBOL_STAR) Termdoku - Makefile Targets $(SYMBOL_STAR)$(COLOR_RESET) $(COLOR_BOLD)$(COLOR_CYAN)║$(COLOR_RESET)" @echo "$(COLOR_BOLD)$(COLOR_CYAN)╚═══════════════════════════════════════════════════════════╝$(COLOR_RESET)" @echo "" @echo "$(COLOR_BOLD)$(COLOR_WHITE)$(SYMBOL_ARROW) Main Targets:$(COLOR_RESET)" @echo " $(COLOR_GREEN)$(SYMBOL_CHECK) build$(COLOR_RESET) Build for current platform ($(COLOR_CYAN)$(CURRENT_OS)/$(CURRENT_ARCH)$(COLOR_RESET))" @echo " $(COLOR_GREEN)$(SYMBOL_CHECK) build-all$(COLOR_RESET) Build for all supported platforms" @echo " $(COLOR_GREEN)$(SYMBOL_CHECK) run$(COLOR_RESET) Run the application" @echo " $(COLOR_GREEN)$(SYMBOL_CHECK) dev$(COLOR_RESET) Run in development mode (with auto-rebuild)" @echo " $(COLOR_GREEN)$(SYMBOL_CHECK) test$(COLOR_RESET) Run all tests" @echo " $(COLOR_GREEN)$(SYMBOL_CHECK) clean$(COLOR_RESET) Remove build artifacts" @echo " $(COLOR_GREEN)$(SYMBOL_CHECK) install$(COLOR_RESET) Install to GOPATH/bin" @echo "" @echo "$(COLOR_BOLD)$(COLOR_WHITE)$(SYMBOL_ARROW) Platform-Specific Builds:$(COLOR_RESET)" @echo " $(COLOR_YELLOW)$(SYMBOL_ARROW) build-linux$(COLOR_RESET) Build for Linux amd64" @echo " $(COLOR_YELLOW)$(SYMBOL_ARROW) build-linux-all$(COLOR_RESET) Build for all Linux architectures" @echo " $(COLOR_YELLOW)$(SYMBOL_ARROW) build-darwin$(COLOR_RESET) Build for macOS amd64" @echo " $(COLOR_YELLOW)$(SYMBOL_ARROW) build-darwin-all$(COLOR_RESET) Build for all macOS architectures" @echo " $(COLOR_YELLOW)$(SYMBOL_ARROW) build-windows$(COLOR_RESET) Build for Windows amd64" @echo " $(COLOR_YELLOW)$(SYMBOL_ARROW) build-windows-all$(COLOR_RESET) Build for all Windows architectures" @echo " $(COLOR_YELLOW)$(SYMBOL_ARROW) build-freebsd$(COLOR_RESET) Build for FreeBSD amd64" @echo "" @echo "$(COLOR_BOLD)$(COLOR_WHITE)$(SYMBOL_ARROW) Development & Quality:$(COLOR_RESET)" @echo " $(COLOR_BLUE)$(SYMBOL_ARROW) deps$(COLOR_RESET) Download and tidy dependencies" @echo " $(COLOR_BLUE)$(SYMBOL_ARROW) fmt$(COLOR_RESET) Format code with gofmt" @echo " $(COLOR_BLUE)$(SYMBOL_ARROW) vet$(COLOR_RESET) Run go vet for code analysis" @echo " $(COLOR_BLUE)$(SYMBOL_ARROW) lint$(COLOR_RESET) Run golangci-lint (if installed)" @echo " $(COLOR_BLUE)$(SYMBOL_ARROW) check$(COLOR_RESET) Run fmt, vet, and lint" @echo " $(COLOR_BLUE)$(SYMBOL_ARROW) coverage$(COLOR_RESET) Run tests with coverage report" @echo " $(COLOR_BLUE)$(SYMBOL_ARROW) benchmark$(COLOR_RESET) Run benchmarks" @echo "" @echo "$(COLOR_BOLD)$(COLOR_WHITE)$(SYMBOL_ARROW) Release & Info:$(COLOR_RESET)" @echo " $(COLOR_MAGENTA)$(SYMBOL_ARROW) release$(COLOR_RESET) Create release builds with checksums" @echo " $(COLOR_MAGENTA)$(SYMBOL_ARROW) version$(COLOR_RESET) Display version information" @echo " $(COLOR_MAGENTA)$(SYMBOL_ARROW) info$(COLOR_RESET) Display project information" @echo " $(COLOR_MAGENTA)$(SYMBOL_ARROW) size$(COLOR_RESET) Show binary sizes" @echo "" @echo "$(COLOR_DIM)Run 'make ' to execute a target$(COLOR_RESET)" @echo "" ## build: Build binary for current platform build: @echo "" @echo "$(COLOR_BOLD)$(COLOR_CYAN)┌───────────────────────────────────────────────────────────┐$(COLOR_RESET)" @echo "$(COLOR_BOLD)$(COLOR_CYAN)│$(COLOR_RESET) $(COLOR_BOLD)$(COLOR_GREEN)Building $(BINARY_NAME)$(COLOR_RESET) $(COLOR_BOLD)$(COLOR_CYAN)│$(COLOR_RESET)" @echo "$(COLOR_BOLD)$(COLOR_CYAN)└───────────────────────────────────────────────────────────┘$(COLOR_RESET)" @echo "$(COLOR_CYAN)$(SYMBOL_ARROW) Target Platform:$(COLOR_RESET) $(COLOR_YELLOW)$(CURRENT_OS)/$(CURRENT_ARCH)$(COLOR_RESET)" @echo "$(COLOR_CYAN)$(SYMBOL_ARROW) Version:$(COLOR_RESET) $(COLOR_YELLOW)$(VERSION)$(COLOR_RESET)" @echo "$(COLOR_CYAN)$(SYMBOL_ARROW) Output:$(COLOR_RESET) $(COLOR_YELLOW)$(BUILD_DIR)/$(BINARY_NAME)$(COLOR_RESET)" @echo "" @mkdir -p $(BUILD_DIR) @echo "$(COLOR_DIM)Compiling...$(COLOR_RESET)" @$(GOBUILD) $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME) $(MAIN_FILE) @echo "" @echo "$(COLOR_BOLD)$(COLOR_GREEN)$(SYMBOL_CHECK) Build complete!$(COLOR_RESET)" @ls -lh $(BUILD_DIR)/$(BINARY_NAME) | awk '{print "$(COLOR_DIM)Size: " $$5 "$(COLOR_RESET)"}' @echo "" ## run: Run the application run: @echo "" @echo "$(COLOR_BOLD)$(COLOR_MAGENTA)$(SYMBOL_STAR) Running $(BINARY_NAME)...$(COLOR_RESET)" @echo "" @$(GOCMD) run $(MAIN_FILE) ## clean: Remove build artifacts clean: @echo "" @echo "$(COLOR_YELLOW)$(SYMBOL_ARROW) Cleaning build artifacts...$(COLOR_RESET)" @$(GOCLEAN) @rm -rf $(BUILD_DIR) @echo "$(COLOR_GREEN)$(SYMBOL_CHECK) Clean complete$(COLOR_RESET)" @echo "" ## test: Run tests test: @echo "" @echo "$(COLOR_BOLD)$(COLOR_BLUE)$(SYMBOL_ARROW) Running tests...$(COLOR_RESET)" @echo "" @$(GOTEST) -v ./... @echo "" @echo "$(COLOR_GREEN)$(SYMBOL_CHECK) Tests complete$(COLOR_RESET)" @echo "" ## vet: Run go vet vet: @echo "" @echo "$(COLOR_BLUE)$(SYMBOL_ARROW) Running go vet...$(COLOR_RESET)" @$(GOVET) ./... @echo "$(COLOR_GREEN)$(SYMBOL_CHECK) Vet complete$(COLOR_RESET)" @echo "" ## fmt: Format code fmt: @echo "" @echo "$(COLOR_BLUE)$(SYMBOL_ARROW) Formatting code...$(COLOR_RESET)" @$(GOFMT) ./... @echo "$(COLOR_GREEN)$(SYMBOL_CHECK) Format complete$(COLOR_RESET)" @echo "" ## deps: Download dependencies deps: @echo "" @echo "$(COLOR_BLUE)$(SYMBOL_ARROW) Downloading dependencies...$(COLOR_RESET)" @$(GOMOD) download @$(GOMOD) tidy @echo "$(COLOR_GREEN)$(SYMBOL_CHECK) Dependencies updated$(COLOR_RESET)" @echo "" ## install: Install binary to GOPATH/bin install: @echo "" @echo "$(COLOR_GREEN)$(SYMBOL_ARROW) Installing $(BINARY_NAME)...$(COLOR_RESET)" @$(GOCMD) install $(LDFLAGS) $(CMD_DIR) @echo "$(COLOR_GREEN)$(SYMBOL_CHECK) Installed to $(COLOR_CYAN)$(shell go env GOPATH)/bin/$(BINARY_NAME)$(COLOR_RESET)" @echo "" # ============================================================================ # Platform-specific builds # ============================================================================ ## build-linux: Build for Linux amd64 build-linux: @echo "" @echo "$(COLOR_CYAN)$(SYMBOL_ARROW) Building for $(COLOR_YELLOW)Linux amd64$(COLOR_RESET)..." @mkdir -p $(BUILD_DIR) @GOOS=linux GOARCH=amd64 $(GOBUILD) $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME)-linux-amd64 $(MAIN_FILE) @echo "$(COLOR_GREEN)$(SYMBOL_CHECK) Built: $(COLOR_DIM)$(BUILD_DIR)/$(BINARY_NAME)-linux-amd64$(COLOR_RESET)" @echo "" ## build-linux-all: Build for all Linux architectures build-linux-all: @echo "" @echo "$(COLOR_BOLD)$(COLOR_CYAN)$(SYMBOL_ARROW) Building for all Linux architectures...$(COLOR_RESET)" @mkdir -p $(BUILD_DIR) @echo " $(COLOR_DIM)Building amd64...$(COLOR_RESET)" @GOOS=linux GOARCH=amd64 $(GOBUILD) $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME)-linux-amd64 $(MAIN_FILE) @echo " $(COLOR_DIM)Building arm64...$(COLOR_RESET)" @GOOS=linux GOARCH=arm64 $(GOBUILD) $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME)-linux-arm64 $(MAIN_FILE) @echo " $(COLOR_DIM)Building 386...$(COLOR_RESET)" @GOOS=linux GOARCH=386 $(GOBUILD) $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME)-linux-386 $(MAIN_FILE) @echo " $(COLOR_DIM)Building arm...$(COLOR_RESET)" @GOOS=linux GOARCH=arm $(GOBUILD) $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME)-linux-arm $(MAIN_FILE) @echo "$(COLOR_GREEN)$(SYMBOL_CHECK) Built all Linux binaries$(COLOR_RESET)" @echo "" ## build-darwin: Build for macOS amd64 build-darwin: @echo "" @echo "$(COLOR_CYAN)$(SYMBOL_ARROW) Building for $(COLOR_YELLOW)macOS amd64$(COLOR_RESET)..." @mkdir -p $(BUILD_DIR) @GOOS=darwin GOARCH=amd64 $(GOBUILD) $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME)-darwin-amd64 $(MAIN_FILE) @echo "$(COLOR_GREEN)$(SYMBOL_CHECK) Built: $(COLOR_DIM)$(BUILD_DIR)/$(BINARY_NAME)-darwin-amd64$(COLOR_RESET)" @echo "" ## build-darwin-all: Build for all macOS architectures build-darwin-all: @echo "" @echo "$(COLOR_BOLD)$(COLOR_CYAN)$(SYMBOL_ARROW) Building for all macOS architectures...$(COLOR_RESET)" @mkdir -p $(BUILD_DIR) @echo " $(COLOR_DIM)Building amd64...$(COLOR_RESET)" @GOOS=darwin GOARCH=amd64 $(GOBUILD) $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME)-darwin-amd64 $(MAIN_FILE) @echo " $(COLOR_DIM)Building arm64...$(COLOR_RESET)" @GOOS=darwin GOARCH=arm64 $(GOBUILD) $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME)-darwin-arm64 $(MAIN_FILE) @echo "$(COLOR_GREEN)$(SYMBOL_CHECK) Built all macOS binaries$(COLOR_RESET)" @echo "" ## build-windows: Build for Windows amd64 build-windows: @echo "" @echo "$(COLOR_CYAN)$(SYMBOL_ARROW) Building for $(COLOR_YELLOW)Windows amd64$(COLOR_RESET)..." @mkdir -p $(BUILD_DIR) @GOOS=windows GOARCH=amd64 $(GOBUILD) $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME)-windows-amd64.exe $(MAIN_FILE) @echo "$(COLOR_GREEN)$(SYMBOL_CHECK) Built: $(COLOR_DIM)$(BUILD_DIR)/$(BINARY_NAME)-windows-amd64.exe$(COLOR_RESET)" @echo "" ## build-windows-all: Build for all Windows architectures build-windows-all: @echo "" @echo "$(COLOR_BOLD)$(COLOR_CYAN)$(SYMBOL_ARROW) Building for all Windows architectures...$(COLOR_RESET)" @mkdir -p $(BUILD_DIR) @echo " $(COLOR_DIM)Building amd64...$(COLOR_RESET)" @GOOS=windows GOARCH=amd64 $(GOBUILD) $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME)-windows-amd64.exe $(MAIN_FILE) @echo " $(COLOR_DIM)Building arm64...$(COLOR_RESET)" @GOOS=windows GOARCH=arm64 $(GOBUILD) $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME)-windows-arm64.exe $(MAIN_FILE) @echo " $(COLOR_DIM)Building 386...$(COLOR_RESET)" @GOOS=windows GOARCH=386 $(GOBUILD) $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME)-windows-386.exe $(MAIN_FILE) @echo "$(COLOR_GREEN)$(SYMBOL_CHECK) Built all Windows binaries$(COLOR_RESET)" @echo "" ## build-freebsd: Build for FreeBSD amd64 build-freebsd: @echo "" @echo "$(COLOR_CYAN)$(SYMBOL_ARROW) Building for $(COLOR_YELLOW)FreeBSD amd64$(COLOR_RESET)..." @mkdir -p $(BUILD_DIR) @GOOS=freebsd GOARCH=amd64 $(GOBUILD) $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME)-freebsd-amd64 $(MAIN_FILE) @echo "$(COLOR_GREEN)$(SYMBOL_CHECK) Built: $(COLOR_DIM)$(BUILD_DIR)/$(BINARY_NAME)-freebsd-amd64$(COLOR_RESET)" @echo "" ## build-all: Build for all major platforms build-all: build-linux-all build-darwin-all build-windows-all build-freebsd @echo "" @echo "$(COLOR_BOLD)$(COLOR_GREEN)╔═══════════════════════════════════════════════════════════╗$(COLOR_RESET)" @echo "$(COLOR_BOLD)$(COLOR_GREEN)║$(COLOR_RESET) $(COLOR_BOLD)$(SYMBOL_CHECK) All builds complete!$(COLOR_RESET) $(COLOR_BOLD)$(COLOR_GREEN)║$(COLOR_RESET)" @echo "$(COLOR_BOLD)$(COLOR_GREEN)╚═══════════════════════════════════════════════════════════╝$(COLOR_RESET)" @echo "" @echo "$(COLOR_BOLD)$(COLOR_CYAN)Build Artifacts:$(COLOR_RESET)" @ls -lh $(BUILD_DIR) | tail -n +2 | awk '{print " $(COLOR_YELLOW)" $$9 "$(COLOR_RESET) $(COLOR_DIM)(" $$5 ")$(COLOR_RESET)"}' @echo "" # ============================================================================ # Release targets # ============================================================================ ## release: Create release builds with checksums release: clean build-all @echo "" @echo "$(COLOR_MAGENTA)$(SYMBOL_ARROW) Generating checksums...$(COLOR_RESET)" @cd $(BUILD_DIR) && sha256sum * > checksums.txt @echo "$(COLOR_GREEN)$(SYMBOL_CHECK) Release build complete with checksums$(COLOR_RESET)" @echo "" @echo "$(COLOR_BOLD)$(COLOR_CYAN)Checksums:$(COLOR_RESET)" @cat $(BUILD_DIR)/checksums.txt | awk '{print " $(COLOR_DIM)" $$1 "$(COLOR_RESET) $(COLOR_YELLOW)" $$2 "$(COLOR_RESET)"}' @echo "" # ============================================================================ # Development & Quality targets # ============================================================================ ## coverage: Run tests with coverage report coverage: @echo "" @echo "$(COLOR_BOLD)$(COLOR_BLUE)$(SYMBOL_ARROW) Running tests with coverage...$(COLOR_RESET)" @echo "" @$(GOTEST) -coverprofile=coverage.out ./... @echo "" @echo "$(COLOR_CYAN)$(SYMBOL_ARROW) Coverage Summary:$(COLOR_RESET)" @$(GOCMD) tool cover -func=coverage.out | tail -n 1 @echo "" @echo "$(COLOR_DIM)Run 'go tool cover -html=coverage.out' to view detailed coverage$(COLOR_RESET)" @echo "" ## benchmark: Run benchmarks benchmark: @echo "" @echo "$(COLOR_BOLD)$(COLOR_YELLOW)$(SYMBOL_ARROW) Running benchmarks...$(COLOR_RESET)" @echo "" @$(GOTEST) -bench=. -benchmem ./... @echo "" ## lint: Run golangci-lint lint: @echo "" @echo "$(COLOR_BLUE)$(SYMBOL_ARROW) Running linter...$(COLOR_RESET)" @if command -v golangci-lint >/dev/null 2>&1; then \ golangci-lint run ./...; \ echo "$(COLOR_GREEN)$(SYMBOL_CHECK) Lint complete$(COLOR_RESET)"; \ else \ echo "$(COLOR_YELLOW)$(SYMBOL_CROSS) golangci-lint not installed$(COLOR_RESET)"; \ echo "$(COLOR_DIM)Install with: go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest$(COLOR_RESET)"; \ fi @echo "" ## check: Run fmt, vet, and lint check: fmt vet lint @echo "" @echo "$(COLOR_BOLD)$(COLOR_GREEN)$(SYMBOL_CHECK) All checks complete!$(COLOR_RESET)" @echo "" ## dev: Run in development mode (auto-rebuild on changes) dev: @echo "" @echo "$(COLOR_BOLD)$(COLOR_MAGENTA)$(SYMBOL_STAR) Development Mode$(COLOR_RESET)" @echo "$(COLOR_DIM)Watching for changes... (Ctrl+C to stop)$(COLOR_RESET)" @echo "" @if command -v air >/dev/null 2>&1; then \ air; \ else \ echo "$(COLOR_YELLOW)$(SYMBOL_CROSS) 'air' not installed, running without hot reload$(COLOR_RESET)"; \ echo "$(COLOR_DIM)Install with: go install github.com/cosmtrek/air@latest$(COLOR_RESET)"; \ echo ""; \ $(GOCMD) run $(MAIN_FILE); \ fi # ============================================================================ # Info targets # ============================================================================ ## version: Display version information version: @echo "" @echo "$(COLOR_BOLD)$(COLOR_CYAN)Version Information:$(COLOR_RESET)" @echo " $(COLOR_YELLOW)$(BINARY_NAME)$(COLOR_RESET) version $(COLOR_GREEN)$(VERSION)$(COLOR_RESET)" @echo " Go version: $(COLOR_DIM)$(shell go version)$(COLOR_RESET)" @echo "" ## info: Display project information info: @echo "" @echo "$(COLOR_BOLD)$(COLOR_CYAN)╔═══════════════════════════════════════════════════════════╗$(COLOR_RESET)" @echo "$(COLOR_BOLD)$(COLOR_CYAN)║$(COLOR_RESET) $(COLOR_BOLD)$(COLOR_MAGENTA)Project Information$(COLOR_RESET) $(COLOR_BOLD)$(COLOR_CYAN)║$(COLOR_RESET)" @echo "$(COLOR_BOLD)$(COLOR_CYAN)╚═══════════════════════════════════════════════════════════╝$(COLOR_RESET)" @echo "" @echo " $(COLOR_CYAN)$(SYMBOL_ARROW) Project:$(COLOR_RESET) $(COLOR_YELLOW)$(BINARY_NAME)$(COLOR_RESET)" @echo " $(COLOR_CYAN)$(SYMBOL_ARROW) Version:$(COLOR_RESET) $(COLOR_GREEN)$(VERSION)$(COLOR_RESET)" @echo " $(COLOR_CYAN)$(SYMBOL_ARROW) Build Dir:$(COLOR_RESET) $(COLOR_DIM)$(BUILD_DIR)$(COLOR_RESET)" @echo " $(COLOR_CYAN)$(SYMBOL_ARROW) Main File:$(COLOR_RESET) $(COLOR_DIM)$(MAIN_FILE)$(COLOR_RESET)" @echo " $(COLOR_CYAN)$(SYMBOL_ARROW) Go Version:$(COLOR_RESET) $(COLOR_DIM)$(shell go version | awk '{print $$3}')$(COLOR_RESET)" @echo " $(COLOR_CYAN)$(SYMBOL_ARROW) Current OS:$(COLOR_RESET) $(COLOR_YELLOW)$(CURRENT_OS)$(COLOR_RESET)" @echo " $(COLOR_CYAN)$(SYMBOL_ARROW) Current Arch:$(COLOR_RESET) $(COLOR_YELLOW)$(CURRENT_ARCH)$(COLOR_RESET)" @echo "" ## size: Show binary sizes size: @echo "" @echo "$(COLOR_BOLD)$(COLOR_CYAN)Binary Sizes:$(COLOR_RESET)" @if [ -d "$(BUILD_DIR)" ] && [ -n "$$(ls -A $(BUILD_DIR) 2>/dev/null)" ]; then \ for file in $(BUILD_DIR)/*; do \ if [ -f "$$file" ] && [ "$$(basename $$file)" != "checksums.txt" ]; then \ size=$$(ls -lh "$$file" | awk '{print $$5}'); \ name=$$(basename "$$file"); \ echo " $(COLOR_YELLOW)$$name$(COLOR_RESET) $(COLOR_DIM)- $$size$(COLOR_RESET)"; \ fi; \ done; \ else \ echo " $(COLOR_RED)$(SYMBOL_CROSS) No binaries found. Run 'make build' first.$(COLOR_RESET)"; \ fi @echo ""