Files

121 lines
4.7 KiB
Makefile

# Makefile
.PHONY: build-all build-amd64 build-arm64 build-armhf build-386 clean help
APP_NAME = audio-recorder
VERSION = $(shell git describe --tags --always --dirty 2>/dev/null || echo "dev")
BUILD_TIME = $(shell date -u '+%Y-%m-%d_%H:%M:%S')
LDFLAGS = -ldflags="-s -w -X main.Version=$(VERSION) -X main.BuildTime=$(BUILD_TIME)"
# Цвета для вывода
GREEN = \033[0;32m
RED = \033[0;31m
NC = \033[0m
all: build-all
# AMD64 (x86_64) - для обычных ПК и серверов
build-amd64:
@echo "$(GREEN)Building for AMD64 (x86_64)...$(NC)"
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build $(LDFLAGS) -o $(APP_NAME)-amd64
@echo "$(GREEN)✅ Done: $(APP_NAME)-amd64$(NC)"
@ls -lh $(APP_NAME)-amd64
@file $(APP_NAME)-amd64
# ARM64 (aarch64) - для Raspberry Pi 4/5, Orange Pi Zero 2W, Apple Silicon
build-arm64:
@echo "$(GREEN)Building for ARM64 (aarch64)...$(NC)"
GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build $(LDFLAGS) -o $(APP_NAME)-arm64
@echo "$(GREEN)✅ Done: $(APP_NAME)-arm64$(NC)"
@ls -lh $(APP_NAME)-arm64
@file $(APP_NAME)-arm64
# ARMHF (armv7l) - для старых Raspberry Pi 2/3, Orange Pi PC
build-armhf:
@echo "$(GREEN)Building for ARMHF (armv7l)...$(NC)"
GOOS=linux GOARCH=arm GOARM=7 CGO_ENABLED=0 go build $(LDFLAGS) -o $(APP_NAME)-armhf
@echo "$(GREEN)✅ Done: $(APP_NAME)-armhf$(NC)"
@ls -lh $(APP_NAME)-armhf
@file $(APP_NAME)-armhf
# ARMv6 (armv6l) - для Raspberry Pi Zero, Raspberry Pi 1
build-armv6:
@echo "$(GREEN)Building for ARMv6 (armv6l)...$(NC)"
GOOS=linux GOARCH=arm GOARM=6 CGO_ENABLED=0 go build $(LDFLAGS) -o $(APP_NAME)-armv6
@echo "$(GREEN)✅ Done: $(APP_NAME)-armv6$(NC)"
@ls -lh $(APP_NAME)-armv6
# 32-bit x86 - для старых 32-битных систем
build-386:
@echo "$(GREEN)Building for 386 (32-bit x86)...$(NC)"
GOOS=linux GOARCH=386 CGO_ENABLED=0 go build $(LDFLAGS) -o $(APP_NAME)-386
@echo "$(GREEN)✅ Done: $(APP_NAME)-386$(NC)"
@ls -lh $(APP_NAME)-386
# Windows AMD64
build-windows:
@echo "$(GREEN)Building for Windows AMD64...$(NC)"
GOOS=windows GOARCH=amd64 CGO_ENABLED=0 go build $(LDFLAGS) -o $(APP_NAME)-windows-amd64.exe
@echo "$(GREEN)✅ Done: $(APP_NAME)-windows-amd64.exe$(NC)"
@ls -lh $(APP_NAME)-windows-amd64.exe
# macOS AMD64 (Intel)
build-darwin-amd64:
@echo "$(GREEN)Building for macOS AMD64 (Intel)...$(NC)"
GOOS=darwin GOARCH=amd64 CGO_ENABLED=0 go build $(LDFLAGS) -o $(APP_NAME)-darwin-amd64
@echo "$(GREEN)✅ Done: $(APP_NAME)-darwin-amd64$(NC)"
@ls -lh $(APP_NAME)-darwin-amd64
# macOS ARM64 (Apple Silicon M1/M2)
build-darwin-arm64:
@echo "$(GREEN)Building for macOS ARM64 (Apple Silicon)...$(NC)"
GOOS=darwin GOARCH=arm64 CGO_ENABLED=0 go build $(LDFLAGS) -o $(APP_NAME)-darwin-arm64
@echo "$(GREEN)✅ Done: $(APP_NAME)-darwin-arm64$(NC)"
@ls -lh $(APP_NAME)-darwin-arm64
# Сборка всех Linux архитектур
build-linux: build-amd64 build-arm64 build-armhf build-armv6 build-386
@echo "$(GREEN)✅ All Linux builds complete!$(NC)"
# Сборка всех архитектур
build-all: build-linux build-windows build-darwin-amd64 build-darwin-arm64
@echo "$(GREEN)✅ All builds complete!$(NC)"
# Очистка
clean:
@echo "$(GREEN)Cleaning...$(NC)"
rm -f $(APP_NAME)-*
@echo "$(GREEN)✅ Clean complete$(NC)"
# Упаковка в архив для каждой архитектуры
package:
@echo "$(GREEN)Creating packages...$(NC)"
mkdir -p packages
for arch in amd64 arm64 armhf armv6 386; do \
if [ -f "$(APP_NAME)-$$arch" ]; then \
mkdir -p packages/$(APP_NAME)-$$arch; \
cp $(APP_NAME)-$$arch packages/$(APP_NAME)-$$arch/; \
cp -r static packages/$(APP_NAME)-$$arch/; \
cd packages && tar -czf $(APP_NAME)-$$arch.tar.gz $(APP_NAME)-$$arch && cd ..; \
rm -rf packages/$(APP_NAME)-$$arch; \
echo "$(GREEN)✅ Created $(APP_NAME)-$$arch.tar.gz$(NC)"; \
fi \
done
rm -rf packages
@echo "$(GREEN)✅ Packaging complete!$(NC)"
# Помощь
help:
@echo "Available targets:"
@echo " make build-amd64 - Build for Linux AMD64 (x86_64)"
@echo " make build-arm64 - Build for Linux ARM64 (aarch64)"
@echo " make build-armhf - Build for Linux ARMHF (armv7l)"
@echo " make build-armv6 - Build for Linux ARMv6 (Raspberry Pi Zero)"
@echo " make build-386 - Build for Linux 386 (32-bit x86)"
@echo " make build-windows - Build for Windows AMD64"
@echo " make build-darwin-amd64 - Build for macOS Intel"
@echo " make build-darwin-arm64 - Build for macOS Apple Silicon"
@echo " make build-linux - Build all Linux architectures"
@echo " make build-all - Build all architectures"
@echo " make clean - Remove all binaries"
@echo " make package - Create tar.gz packages"
@echo " make help - Show this help"