From 67fb0148ae2b2d1e4ecf26899d8891c34f9d8a3d Mon Sep 17 00:00:00 2001 From: Kylesoda <249518290+kylesoda@users.noreply.github.com> Date: Thu, 16 Apr 2026 11:51:05 -0500 Subject: [PATCH] feat: add Makefile for building binaries across platforms --- .gitignore | 1 + Makefile | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+) create mode 100644 Makefile diff --git a/.gitignore b/.gitignore index 32ba812..2f4fbe8 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ *.dll *.so *.dylib +bin/ # Test binary, built with `go test -c` *.test diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..394f4e5 --- /dev/null +++ b/Makefile @@ -0,0 +1,80 @@ +.PHONY: build build-linux build-windows build-all clean help + +# Variables +BINARY_NAME=go-migrate +CMD_PATH=./cmd/go_migrate +OUTPUT_DIR=bin +VERSION?=$(shell git describe --tags --always --dirty 2>/dev/null || echo "dev") +BUILD_TIME=$(shell date -u '+%Y-%m-%d_%H:%M:%S') +GIT_COMMIT=$(shell git rev-parse --short HEAD 2>/dev/null || echo "unknown") + +# Flags de compilación +LD_FLAGS=-ldflags="-s -w -X main.Version=$(VERSION) -X main.BuildTime=$(BUILD_TIME) -X main.GitCommit=$(GIT_COMMIT)" + +# Default: compilar para el SO actual +build: build-$(OS) + +ifeq ($(OS),Windows_NT) +build-native: build-windows +else +build-native: build-linux +endif + +# Compilar para Linux (sin CGO para máxima compatibilidad) +build-linux: + @echo "Compilando para Linux..." + @mkdir -p $(OUTPUT_DIR) + CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build \ + $(LD_FLAGS) \ + -o $(OUTPUT_DIR)/$(BINARY_NAME)-linux-amd64 \ + $(CMD_PATH) + @echo "Binario creado: $(OUTPUT_DIR)/$(BINARY_NAME)-linux-amd64" + +# Compilar para Windows +build-windows: + @echo "Compilando para Windows..." + @mkdir -p $(OUTPUT_DIR) + CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build \ + $(LD_FLAGS) \ + -o $(OUTPUT_DIR)/$(BINARY_NAME)-windows-amd64.exe \ + $(CMD_PATH) + @echo "Binario creado: $(OUTPUT_DIR)/$(BINARY_NAME)-windows-amd64.exe" + +# Compilar para ambas plataformas +build-all: build-linux build-windows + @echo "" + @echo "Binarios compilados:" + @ls -lh $(OUTPUT_DIR)/$(BINARY_NAME)* + +# Compilar para Linux arm64 (opcional, para Raspberry Pi, etc.) +build-linux-arm64: + @echo "Compilando para Linux ARM64..." + @mkdir -p $(OUTPUT_DIR) + CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build \ + $(LD_FLAGS) \ + -o $(OUTPUT_DIR)/$(BINARY_NAME)-linux-arm64 \ + $(CMD_PATH) + @echo "Binario creado: $(OUTPUT_DIR)/$(BINARY_NAME)-linux-arm64" + +# Limpiar binarios +clean: + @echo "Limpiando binarios..." + @rm -rf $(OUTPUT_DIR) + @echo "Limpieza completada" + +# Ayuda +help: + @echo "Comandos disponibles:" + @echo "" + @echo " make build - Compilar para el SO actual (Linux/Windows)" + @echo " make build-linux - Compilar para Linux x86_64" + @echo " make build-windows - Compilar para Windows x86_64" + @echo " make build-linux-arm64 - Compilar para Linux ARM64 (opcional)" + @echo " make build-all - Compilar para Linux y Windows" + @echo " make clean - Eliminar binarios compilados" + @echo " make help - Mostrar esta ayuda" + @echo "" + @echo "Ejemplos de uso:" + @echo " make build-all # Crear binarios para ambas plataformas" + @echo " make build-linux OS= # Crear solo para Linux" + @echo ""