This repository was archived by the owner on Feb 22, 2026. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
151 lines (116 loc) · 4.63 KB
/
Makefile
File metadata and controls
151 lines (116 loc) · 4.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
# Media Converter Build System
# Build variables
BINARY_NAME=media-converter
MAIN_PATH=./main.go
BUILD_DIR=./build
# Go variables
GOCMD=go
GOBUILD=$(GOCMD) build
GOCLEAN=$(GOCMD) clean
GOTEST=$(GOCMD) test
GOGET=$(GOCMD) get
GOMOD=$(GOCMD) mod
# Version info
VERSION?=$(shell git describe --tags --always --dirty 2>/dev/null || echo "dev")
COMMIT?=$(shell git rev-parse --short HEAD 2>/dev/null || echo "unknown")
BUILD_TIME?=$(shell date -u +"%Y-%m-%dT%H:%M:%SZ")
# Linker flags
LDFLAGS=-ldflags "-X main.Version=$(VERSION) -X main.Commit=$(COMMIT) -X main.BuildTime=$(BUILD_TIME)"
.PHONY: all build clean test deps run help install cross-compile
## Build commands
all: clean deps test build ## Run all build steps
build: ## Build the binary
@echo "Building $(BINARY_NAME)..."
$(GOBUILD) $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME) $(MAIN_PATH)
build-local: ## Build for local development
$(GOBUILD) -o $(BINARY_NAME) $(MAIN_PATH)
install: ## Install the binary to GOPATH/bin
$(GOBUILD) $(LDFLAGS) -o $(GOPATH)/bin/$(BINARY_NAME) $(MAIN_PATH)
## Cross-compilation
cross-compile: ## Build for multiple platforms (detailed names)
@echo "Cross-compiling..."
@mkdir -p $(BUILD_DIR)
GOOS=darwin GOARCH=amd64 $(GOBUILD) $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME)-darwin-amd64 $(MAIN_PATH)
GOOS=darwin GOARCH=arm64 $(GOBUILD) $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME)-darwin-arm64 $(MAIN_PATH)
GOOS=linux GOARCH=amd64 $(GOBUILD) $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME)-linux-amd64 $(MAIN_PATH)
GOOS=linux GOARCH=arm64 $(GOBUILD) $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME)-linux-arm64 $(MAIN_PATH)
GOOS=windows GOARCH=amd64 $(GOBUILD) $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME)-windows-amd64.exe $(MAIN_PATH)
@echo "Cross-compilation complete! Binaries in $(BUILD_DIR)/"
release-binaries: ## Build release binaries with architecture-specific names for GitHub
@echo "Building release binaries..."
@mkdir -p $(BUILD_DIR)
# macOS builds
GOOS=darwin GOARCH=amd64 $(GOBUILD) $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME)-macos-intel $(MAIN_PATH)
GOOS=darwin GOARCH=arm64 $(GOBUILD) $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME)-macos-apple-silicon $(MAIN_PATH)
# Linux builds
GOOS=linux GOARCH=amd64 $(GOBUILD) $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME)-linux-amd64 $(MAIN_PATH)
GOOS=linux GOARCH=arm64 $(GOBUILD) $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME)-linux-arm64 $(MAIN_PATH)
# Windows build
GOOS=windows GOARCH=amd64 $(GOBUILD) $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME)-windows-amd64.exe $(MAIN_PATH)
@echo ""
@echo "✅ Release binaries ready in $(BUILD_DIR)/:"
@echo " • $(BINARY_NAME)-macos-intel (macOS Intel x64)"
@echo " • $(BINARY_NAME)-macos-apple-silicon (macOS M1/M2/M3/M4)"
@echo " • $(BINARY_NAME)-linux-amd64 (Linux x64)"
@echo " • $(BINARY_NAME)-linux-arm64 (Linux ARM64)"
@echo " • $(BINARY_NAME)-windows-amd64.exe (Windows x64)"
@echo ""
@echo "Ready to upload to GitHub Releases!"
## Development commands
deps: ## Download dependencies
@echo "Downloading dependencies..."
$(GOMOD) download
$(GOMOD) tidy
test: ## Run tests
@echo "Running tests..."
$(GOTEST) -v ./...
test-coverage: ## Run tests with coverage
@echo "Running tests with coverage..."
$(GOTEST) -v -race -coverprofile=coverage.out ./...
$(GOCMD) tool cover -html=coverage.out -o coverage.html
clean: ## Clean build artifacts
@echo "Cleaning..."
$(GOCLEAN)
rm -rf $(BUILD_DIR)
rm -f $(BINARY_NAME)
rm -f coverage.out coverage.html
run: build-local ## Build and run with example parameters
@echo "Running $(BINARY_NAME) in dry-run mode..."
./$(BINARY_NAME) --dry-run --help
## Release commands
release-prep: ## Prepare for release (clean, test, release-binaries)
@echo "Preparing release..."
$(MAKE) clean
$(MAKE) deps
$(MAKE) test
$(MAKE) release-binaries
@echo "Release preparation complete!"
## Docker commands (future)
docker-build: ## Build Docker image
@echo "Building Docker image..."
docker build -t $(BINARY_NAME):$(VERSION) .
## Documentation
docs: ## Generate documentation
@echo "Generating documentation..."
$(GOCMD) doc -all ./... > docs/api.md
## Linting and formatting
fmt: ## Format Go code
@echo "Formatting code..."
$(GOCMD) fmt ./...
vet: ## Run go vet
@echo "Running go vet..."
$(GOCMD) vet ./...
lint: fmt vet ## Run all linting tools
## Development workflow
dev: clean deps build-local ## Quick development build
check: fmt vet test ## Run all checks
## Help
help: ## Show this help message
@echo "Media Converter Build System"
@echo ""
@echo "Usage: make [target]"
@echo ""
@echo "Targets:"
@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf " %-20s %s\n", $$1, $$2}' $(MAKEFILE_LIST)
# Default target
.DEFAULT_GOAL := help