463 lines
21 KiB
Makefile
463 lines
21 KiB
Makefile
# ==============================================================================
|
|
# DIRECTORIES
|
|
# ==============================================================================
|
|
DIR_ROOT := $(dir $(abspath $(MAKEFILE_LIST)))
|
|
DIR_TOOLS := $(addsuffix /, $(DIR_ROOT)tools)
|
|
|
|
# ==============================================================================
|
|
# TARGET NAMES
|
|
# ==============================================================================
|
|
TARGET_NAME := coffee_crisis_arcade_edition
|
|
TARGET_FILE := $(DIR_ROOT)$(TARGET_NAME)
|
|
APP_NAME := Coffee Crisis Arcade Edition
|
|
DIST_DIR := dist
|
|
RELEASE_FOLDER := dist/_tmp
|
|
RELEASE_FILE := $(RELEASE_FOLDER)/$(TARGET_NAME)
|
|
RESOURCE_FILE := release/windows/coffee.res
|
|
|
|
# ==============================================================================
|
|
# TOOLS
|
|
# ==============================================================================
|
|
DIR_PACK_TOOL := $(DIR_TOOLS)pack_resources
|
|
SHADER_SCRIPT := $(DIR_ROOT)tools/shaders/compile_spirv.sh
|
|
|
|
# ==============================================================================
|
|
# VERSION (fecha actual)
|
|
# ==============================================================================
|
|
ifeq ($(OS),Windows_NT)
|
|
VERSION := $(shell powershell -Command "Get-Date -Format 'yyyy-MM-dd'")
|
|
else
|
|
VERSION := $(shell date +%Y-%m-%d)
|
|
endif
|
|
|
|
# ==============================================================================
|
|
# SHELL (Windows usa cmd.exe)
|
|
# ==============================================================================
|
|
ifeq ($(OS),Windows_NT)
|
|
SHELL := cmd.exe
|
|
endif
|
|
|
|
# ==============================================================================
|
|
# WINDOWS-SPECIFIC VARIABLES
|
|
# ==============================================================================
|
|
ifeq ($(OS),Windows_NT)
|
|
WIN_TARGET_FILE := $(DIR_ROOT)$(APP_NAME)
|
|
WIN_RELEASE_FILE := $(RELEASE_FOLDER)/$(APP_NAME)
|
|
else
|
|
WIN_TARGET_FILE := $(TARGET_FILE)
|
|
WIN_RELEASE_FILE := $(RELEASE_FILE)
|
|
endif
|
|
|
|
# ==============================================================================
|
|
# RELEASE NAMES
|
|
# ==============================================================================
|
|
WINDOWS_RELEASE := $(DIST_DIR)/$(TARGET_NAME)-$(VERSION)-win32-x64.zip
|
|
MACOS_INTEL_RELEASE := $(DIST_DIR)/$(TARGET_NAME)-$(VERSION)-macos-intel.dmg
|
|
MACOS_APPLE_SILICON_RELEASE := $(DIST_DIR)/$(TARGET_NAME)-$(VERSION)-macos-apple-silicon.dmg
|
|
LINUX_RELEASE := $(DIST_DIR)/$(TARGET_NAME)-$(VERSION)-linux.tar.gz
|
|
RASPI_RELEASE := $(DIST_DIR)/$(TARGET_NAME)-$(VERSION)-raspberry.tar.gz
|
|
|
|
# ==============================================================================
|
|
# PLATAFORMA
|
|
# ==============================================================================
|
|
ifeq ($(OS),Windows_NT)
|
|
FixPath = $(subst /,\\,$1)
|
|
RM := del /Q
|
|
MKDIR := mkdir
|
|
else
|
|
FixPath = $1
|
|
RMFILE := rm -f
|
|
RMDIR := rm -rdf
|
|
MKDIR := mkdir -p
|
|
UNAME_S := $(shell uname -s)
|
|
endif
|
|
|
|
# ==============================================================================
|
|
# COMPILACIÓN CON CMAKE
|
|
# ==============================================================================
|
|
all:
|
|
@cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
|
|
@cmake --build build
|
|
|
|
debug:
|
|
@cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug
|
|
@cmake --build build
|
|
|
|
# ==============================================================================
|
|
# RELEASE AUTOMÁTICO (detecta SO)
|
|
# ==============================================================================
|
|
release:
|
|
ifeq ($(OS),Windows_NT)
|
|
@"$(MAKE)" windows_release
|
|
else
|
|
ifeq ($(UNAME_S),Darwin)
|
|
@$(MAKE) macos_release
|
|
else
|
|
@$(MAKE) linux_release
|
|
endif
|
|
endif
|
|
|
|
# ==============================================================================
|
|
# REGLAS PARA HERRAMIENTA DE EMPAQUETADO Y RESOURCES.PACK
|
|
# ==============================================================================
|
|
pack_tool:
|
|
@$(MAKE) -C $(DIR_PACK_TOOL)
|
|
|
|
resources.pack: pack_tool
|
|
@$(MAKE) -C $(DIR_PACK_TOOL) pack
|
|
|
|
# ==============================================================================
|
|
# COMPILACIÓN DE SHADERS
|
|
# ==============================================================================
|
|
spirv:
|
|
@echo "Compilando shaders SPIR-V..."
|
|
$(SHADER_SCRIPT)
|
|
|
|
# ==============================================================================
|
|
# COMPILACIÓN PARA WINDOWS (RELEASE)
|
|
# ==============================================================================
|
|
windows_release:
|
|
@$(MAKE) resources.pack
|
|
@echo off
|
|
@echo Creando release para Windows - Version: $(VERSION)
|
|
|
|
# Compila con cmake
|
|
@cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
|
|
@cmake --build build
|
|
|
|
# Crea carpeta de distribución y carpeta temporal 'RELEASE_FOLDER'
|
|
@powershell -Command "if (-not (Test-Path '$(DIST_DIR)')) {New-Item '$(DIST_DIR)' -ItemType Directory}"
|
|
@powershell -Command "if (Test-Path '$(RELEASE_FOLDER)') {Remove-Item '$(RELEASE_FOLDER)' -Recurse -Force}"
|
|
@powershell -Command "if (-not (Test-Path '$(RELEASE_FOLDER)')) {New-Item '$(RELEASE_FOLDER)' -ItemType Directory}"
|
|
|
|
# Copia la carpeta 'config' y el archivo 'resources.pack'
|
|
@powershell -Command "Copy-Item -Path 'config' -Destination '$(RELEASE_FOLDER)' -recurse -Force"
|
|
@powershell -Command "Copy-Item -Path 'resources.pack' -Destination '$(RELEASE_FOLDER)'"
|
|
|
|
# Copia los ficheros que estan en la raíz del proyecto
|
|
@powershell -Command "Copy-Item 'LICENSE' -Destination '$(RELEASE_FOLDER)'"
|
|
@powershell -Command "Copy-Item 'README.md' -Destination '$(RELEASE_FOLDER)'"
|
|
@powershell -Command "Copy-Item 'release\windows\dll\*.dll' -Destination '$(RELEASE_FOLDER)'"
|
|
@powershell -Command "Copy-Item -Path '$(TARGET_FILE)' -Destination '\"$(WIN_RELEASE_FILE).exe\"'"
|
|
strip -s -R .comment -R .gnu.version "$(WIN_RELEASE_FILE).exe" --strip-unneeded
|
|
|
|
# Crea el fichero .zip
|
|
@powershell -Command "if (Test-Path '$(WINDOWS_RELEASE)') {Remove-Item '$(WINDOWS_RELEASE)'}"
|
|
@powershell -Command "Compress-Archive -Path '$(RELEASE_FOLDER)/*' -DestinationPath '$(WINDOWS_RELEASE)'"
|
|
@echo Release creado: $(WINDOWS_RELEASE)
|
|
|
|
# Elimina la carpeta temporal 'RELEASE_FOLDER'
|
|
@powershell -Command "if (Test-Path '$(RELEASE_FOLDER)') {Remove-Item '$(RELEASE_FOLDER)' -Recurse -Force}"
|
|
|
|
# ==============================================================================
|
|
# COMPILACIÓN PARA MACOS (RELEASE)
|
|
# ==============================================================================
|
|
macos_release:
|
|
@$(MAKE) resources.pack
|
|
@echo "Creando release para macOS - Version: $(VERSION)"
|
|
|
|
# Verificar e instalar create-dmg si es necesario
|
|
@which create-dmg > /dev/null || (echo "Instalando create-dmg..." && brew install create-dmg)
|
|
|
|
# Compila la versión para procesadores Intel con cmake
|
|
@cmake -S . -B build/intel -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_ARCHITECTURES=x86_64 -DCMAKE_OSX_DEPLOYMENT_TARGET=10.15
|
|
@cmake --build build/intel
|
|
|
|
# Elimina datos de compilaciones anteriores
|
|
$(RMDIR) "$(RELEASE_FOLDER)"
|
|
$(RMFILE) tmp.dmg
|
|
$(RMFILE) "$(DIST_DIR)"/rw.*
|
|
$(RMFILE) "$(MACOS_INTEL_RELEASE)"
|
|
$(RMFILE) "$(MACOS_APPLE_SILICON_RELEASE)"
|
|
|
|
# Crea la carpeta de distribución y la carpeta temporal con las carpetas obligatorias para una app macOS
|
|
$(MKDIR) "$(DIST_DIR)"
|
|
$(MKDIR) "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Frameworks"
|
|
$(MKDIR) "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/MacOS"
|
|
$(MKDIR) "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Resources"
|
|
|
|
# Copia carpetas y ficheros
|
|
cp -R config "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Resources"
|
|
cp resources.pack "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Resources"
|
|
cp -R release/macos/frameworks/SDL3.xcframework/macos-arm64_x86_64/SDL3.framework "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Frameworks"
|
|
cp release/icons/*.icns "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Resources"
|
|
cp release/macos/Info.plist "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents"
|
|
cp LICENSE "$(RELEASE_FOLDER)"
|
|
cp README.md "$(RELEASE_FOLDER)"
|
|
|
|
# Copia el ejecutable Intel al bundle
|
|
cp "$(TARGET_FILE)" "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/MacOS/$(TARGET_NAME)"
|
|
|
|
# Firma la aplicación
|
|
codesign --deep --force --sign - --timestamp=none "$(RELEASE_FOLDER)/$(APP_NAME).app"
|
|
|
|
# Empaqueta el .dmg de la versión Intel con create-dmg
|
|
@echo "Creando DMG Intel con iconos de 96x96..."
|
|
create-dmg \
|
|
--volname "$(APP_NAME)" \
|
|
--window-pos 200 120 \
|
|
--window-size 720 300 \
|
|
--icon-size 96 \
|
|
--text-size 12 \
|
|
--icon "$(APP_NAME).app" 278 102 \
|
|
--icon "LICENSE" 441 102 \
|
|
--icon "README.md" 604 102 \
|
|
--app-drop-link 115 102 \
|
|
--hide-extension "$(APP_NAME).app" \
|
|
"$(MACOS_INTEL_RELEASE)" \
|
|
"$(RELEASE_FOLDER)" || true
|
|
@echo "Release Intel creado: $(MACOS_INTEL_RELEASE)"
|
|
|
|
# Compila la versión para procesadores Apple Silicon con cmake
|
|
@cmake -S . -B build/arm -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_ARCHITECTURES=arm64 -DCMAKE_OSX_DEPLOYMENT_TARGET=11.0
|
|
@cmake --build build/arm
|
|
cp "$(TARGET_FILE)" "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/MacOS/$(TARGET_NAME)"
|
|
|
|
# Firma la aplicación
|
|
codesign --deep --force --sign - --timestamp=none "$(RELEASE_FOLDER)/$(APP_NAME).app"
|
|
|
|
# Empaqueta el .dmg de la versión Apple Silicon con create-dmg
|
|
@echo "Creando DMG Apple Silicon con iconos de 96x96..."
|
|
create-dmg \
|
|
--volname "$(APP_NAME)" \
|
|
--window-pos 200 120 \
|
|
--window-size 720 300 \
|
|
--icon-size 96 \
|
|
--text-size 12 \
|
|
--icon "$(APP_NAME).app" 278 102 \
|
|
--icon "LICENSE" 441 102 \
|
|
--icon "README.md" 604 102 \
|
|
--app-drop-link 115 102 \
|
|
--hide-extension "$(APP_NAME).app" \
|
|
"$(MACOS_APPLE_SILICON_RELEASE)" \
|
|
"$(RELEASE_FOLDER)" || true
|
|
@echo "Release Apple Silicon creado: $(MACOS_APPLE_SILICON_RELEASE)"
|
|
|
|
# Elimina las carpetas temporales
|
|
$(RMDIR) "$(RELEASE_FOLDER)"
|
|
$(RMDIR) build/intel
|
|
$(RMDIR) build/arm
|
|
$(RMFILE) "$(DIST_DIR)"/rw.*
|
|
|
|
# ==============================================================================
|
|
# COMPILACIÓN PARA LINUX (RELEASE)
|
|
# ==============================================================================
|
|
linux_release:
|
|
@$(MAKE) resources.pack
|
|
@echo "Creando release para Linux - Version: $(VERSION)"
|
|
|
|
# Compila con cmake
|
|
@cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
|
|
@cmake --build build
|
|
|
|
# Elimina carpeta temporal previa y la recrea (crea dist/ si no existe)
|
|
$(RMDIR) "$(RELEASE_FOLDER)"
|
|
$(MKDIR) "$(RELEASE_FOLDER)"
|
|
|
|
# Copia ficheros
|
|
cp -R config "$(RELEASE_FOLDER)"
|
|
cp resources.pack "$(RELEASE_FOLDER)"
|
|
cp LICENSE "$(RELEASE_FOLDER)"
|
|
cp README.md "$(RELEASE_FOLDER)"
|
|
cp "$(TARGET_FILE)" "$(RELEASE_FILE)"
|
|
strip -s -R .comment -R .gnu.version "$(RELEASE_FILE)" --strip-unneeded
|
|
|
|
# Empaqueta ficheros
|
|
$(RMFILE) "$(LINUX_RELEASE)"
|
|
tar -czvf "$(LINUX_RELEASE)" -C "$(RELEASE_FOLDER)" .
|
|
@echo "Release creado: $(LINUX_RELEASE)"
|
|
|
|
# Elimina la carpeta temporal
|
|
$(RMDIR) "$(RELEASE_FOLDER)"
|
|
|
|
# ==============================================================================
|
|
# COMPILACIÓN PARA LINUX (RELEASE CON INTEGRACIÓN DESKTOP)
|
|
# ==============================================================================
|
|
linux_release_desktop:
|
|
@$(MAKE) resources.pack
|
|
@echo "Creando release con integracion desktop para Linux - Version: $(VERSION)"
|
|
|
|
# Compila con cmake
|
|
@cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
|
|
@cmake --build build
|
|
|
|
# Elimina carpetas previas y recrea (crea dist/ si no existe)
|
|
$(RMDIR) "$(RELEASE_FOLDER)"
|
|
|
|
# Crea la estructura de directorios estándar para Linux
|
|
$(MKDIR) "$(RELEASE_FOLDER)/$(TARGET_NAME)"
|
|
$(MKDIR) "$(RELEASE_FOLDER)/$(TARGET_NAME)/bin"
|
|
$(MKDIR) "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/applications"
|
|
$(MKDIR) "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/icons/hicolor/256x256/apps"
|
|
$(MKDIR) "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/$(TARGET_NAME)"
|
|
|
|
# Copia ficheros del juego
|
|
cp -R config "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/$(TARGET_NAME)/"
|
|
cp resources.pack "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/$(TARGET_NAME)/"
|
|
cp LICENSE "$(RELEASE_FOLDER)/$(TARGET_NAME)/"
|
|
cp README.md "$(RELEASE_FOLDER)/$(TARGET_NAME)/"
|
|
|
|
# Copia el ejecutable
|
|
cp "$(TARGET_FILE)" "$(RELEASE_FOLDER)/$(TARGET_NAME)/bin/$(TARGET_NAME)"
|
|
strip -s -R .comment -R .gnu.version "$(RELEASE_FOLDER)/$(TARGET_NAME)/bin/$(TARGET_NAME)" --strip-unneeded
|
|
|
|
# Crea el archivo .desktop
|
|
@echo '[Desktop Entry]' > "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/applications/$(TARGET_NAME).desktop"
|
|
@echo 'Version=1.0' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/applications/$(TARGET_NAME).desktop"
|
|
@echo 'Type=Application' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/applications/$(TARGET_NAME).desktop"
|
|
@echo 'Name=$(APP_NAME)' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/applications/$(TARGET_NAME).desktop"
|
|
@echo 'Comment=Arcade action game - defend Earth from alien invasion!' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/applications/$(TARGET_NAME).desktop"
|
|
@echo 'Exec=/opt/$(TARGET_NAME)/bin/$(TARGET_NAME)' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/applications/$(TARGET_NAME).desktop"
|
|
@echo 'Icon=$(TARGET_NAME)' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/applications/$(TARGET_NAME).desktop"
|
|
@echo 'Path=/opt/$(TARGET_NAME)/share/$(TARGET_NAME)' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/applications/$(TARGET_NAME).desktop"
|
|
@echo 'Terminal=false' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/applications/$(TARGET_NAME).desktop"
|
|
@echo 'StartupNotify=true' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/applications/$(TARGET_NAME).desktop"
|
|
@echo 'Categories=Game;ArcadeGame;' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/applications/$(TARGET_NAME).desktop"
|
|
@echo 'Keywords=arcade;action;shooter;retro;' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/applications/$(TARGET_NAME).desktop"
|
|
|
|
# Copia el icono (si existe) y lo redimensiona si es necesario
|
|
@if [ -f "release/icons/icon.png" ]; then \
|
|
if command -v magick >/dev/null 2>&1; then \
|
|
magick "release/icons/icon.png" -resize 256x256 "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/icons/hicolor/256x256/apps/$(TARGET_NAME).png"; \
|
|
echo "Icono redimensionado de release/icons/icon.png (usando ImageMagick)"; \
|
|
elif command -v convert >/dev/null 2>&1; then \
|
|
convert "release/icons/icon.png" -resize 256x256 "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/icons/hicolor/256x256/apps/$(TARGET_NAME).png"; \
|
|
echo "Icono redimensionado de release/icons/icon.png (usando ImageMagick legacy)"; \
|
|
elif command -v ffmpeg >/dev/null 2>&1; then \
|
|
ffmpeg -i "release/icons/icon.png" -vf scale=256:256 "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/icons/hicolor/256x256/apps/$(TARGET_NAME).png" -y -loglevel quiet; \
|
|
echo "Icono redimensionado de release/icons/icon.png (usando ffmpeg)"; \
|
|
else \
|
|
cp "release/icons/icon.png" "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/icons/hicolor/256x256/apps/$(TARGET_NAME).png"; \
|
|
echo "Icono copiado sin redimensionar (instalar ImageMagick o ffmpeg para redimensionado automatico)"; \
|
|
fi; \
|
|
else \
|
|
echo "Advertencia: No se encontró release/icons/icon.png - crear icono manualmente"; \
|
|
fi
|
|
|
|
# Crea script de instalación
|
|
@echo '#!/bin/bash' > "$(RELEASE_FOLDER)/$(TARGET_NAME)/install.sh"
|
|
@echo 'echo "Instalando $(APP_NAME)..."' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/install.sh"
|
|
@echo 'sudo mkdir -p /opt/$(TARGET_NAME)' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/install.sh"
|
|
@echo 'sudo cp -R bin /opt/$(TARGET_NAME)/' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/install.sh"
|
|
@echo 'sudo cp -R share /opt/$(TARGET_NAME)/' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/install.sh"
|
|
@echo 'sudo cp LICENSE /opt/$(TARGET_NAME)/' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/install.sh"
|
|
@echo 'sudo cp README.md /opt/$(TARGET_NAME)/' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/install.sh"
|
|
@echo 'sudo mkdir -p /usr/share/applications' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/install.sh"
|
|
@echo 'sudo mkdir -p /usr/share/icons/hicolor/256x256/apps' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/install.sh"
|
|
@echo 'sudo cp /opt/$(TARGET_NAME)/share/applications/$(TARGET_NAME).desktop /usr/share/applications/' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/install.sh"
|
|
@echo 'sudo cp /opt/$(TARGET_NAME)/share/icons/hicolor/256x256/apps/$(TARGET_NAME).png /usr/share/icons/hicolor/256x256/apps/' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/install.sh"
|
|
@echo 'sudo update-desktop-database /usr/share/applications 2>/dev/null || true' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/install.sh"
|
|
@echo 'sudo gtk-update-icon-cache /usr/share/icons/hicolor 2>/dev/null || true' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/install.sh"
|
|
@echo 'echo "$(APP_NAME) instalado correctamente!"' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/install.sh"
|
|
@echo 'echo "Ya puedes encontrarlo en el menu de aplicaciones en la categoria Juegos."' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/install.sh"
|
|
chmod +x "$(RELEASE_FOLDER)/$(TARGET_NAME)/install.sh"
|
|
|
|
# Crea script de desinstalación
|
|
@echo '#!/bin/bash' > "$(RELEASE_FOLDER)/$(TARGET_NAME)/uninstall.sh"
|
|
@echo 'echo "Desinstalando $(APP_NAME)..."' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/uninstall.sh"
|
|
@echo 'sudo rm -rf /opt/$(TARGET_NAME)' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/uninstall.sh"
|
|
@echo 'sudo rm -f /usr/share/applications/$(TARGET_NAME).desktop' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/uninstall.sh"
|
|
@echo 'sudo rm -f /usr/share/icons/hicolor/256x256/apps/$(TARGET_NAME).png' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/uninstall.sh"
|
|
@echo 'sudo update-desktop-database /usr/share/applications 2>/dev/null || true' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/uninstall.sh"
|
|
@echo 'sudo gtk-update-icon-cache /usr/share/icons/hicolor 2>/dev/null || true' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/uninstall.sh"
|
|
@echo 'echo "$(APP_NAME) desinstalado correctamente."' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/uninstall.sh"
|
|
chmod +x "$(RELEASE_FOLDER)/$(TARGET_NAME)/uninstall.sh"
|
|
|
|
# Empaqueta ficheros
|
|
$(RMFILE) "$(DIST_DIR)/$(TARGET_NAME)-$(VERSION)-linux-desktop.tar.gz"
|
|
tar -czvf "$(DIST_DIR)/$(TARGET_NAME)-$(VERSION)-linux-desktop.tar.gz" -C "$(RELEASE_FOLDER)" .
|
|
@echo "Release con integracion desktop creado: $(DIST_DIR)/$(TARGET_NAME)-$(VERSION)-linux-desktop.tar.gz"
|
|
@echo "Para instalar: extraer y ejecutar ./$(TARGET_NAME)/install.sh"
|
|
|
|
# Elimina la carpeta temporal
|
|
$(RMDIR) "$(RELEASE_FOLDER)"
|
|
|
|
# ==============================================================================
|
|
# COMPILACIÓN PARA RASPBERRY PI (RELEASE)
|
|
# ==============================================================================
|
|
raspi_release:
|
|
@$(MAKE) resources.pack
|
|
@echo "Creando release para Raspberry Pi - Version: $(VERSION)"
|
|
|
|
# Compila con cmake
|
|
@cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
|
|
@cmake --build build
|
|
|
|
# Elimina carpetas previas y recrea (crea dist/ si no existe)
|
|
$(RMDIR) "$(RELEASE_FOLDER)"
|
|
$(MKDIR) "$(RELEASE_FOLDER)"
|
|
|
|
# Copia ficheros
|
|
cp -R config "$(RELEASE_FOLDER)"
|
|
cp resources.pack "$(RELEASE_FOLDER)"
|
|
cp LICENSE "$(RELEASE_FOLDER)"
|
|
cp README.md "$(RELEASE_FOLDER)"
|
|
cp "$(TARGET_FILE)" "$(RELEASE_FILE)"
|
|
strip -s -R .comment -R .gnu.version "$(RELEASE_FILE)" --strip-unneeded
|
|
|
|
# Empaqueta ficheros
|
|
$(RMFILE) "$(RASPI_RELEASE)"
|
|
tar -czvf "$(RASPI_RELEASE)" -C "$(RELEASE_FOLDER)" .
|
|
@echo "Release creado: $(RASPI_RELEASE)"
|
|
|
|
# Elimina la carpeta temporal
|
|
$(RMDIR) "$(RELEASE_FOLDER)"
|
|
|
|
# ==============================================================================
|
|
# CODE QUALITY (delegados a cmake)
|
|
# ==============================================================================
|
|
format:
|
|
@cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
|
|
@cmake --build build --target format
|
|
|
|
format-check:
|
|
@cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
|
|
@cmake --build build --target format-check
|
|
|
|
tidy:
|
|
@cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
|
|
@cmake --build build --target tidy
|
|
|
|
tidy-fix:
|
|
@cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
|
|
@cmake --build build --target tidy-fix
|
|
|
|
# ==============================================================================
|
|
# REGLAS ESPECIALES
|
|
# ==============================================================================
|
|
show_version:
|
|
@echo "Version actual: $(VERSION)"
|
|
|
|
help:
|
|
@echo "Makefile para Coffee Crisis Arcade Edition"
|
|
@echo "Comandos disponibles:"
|
|
@echo ""
|
|
@echo " Compilacion:"
|
|
@echo " make - Compilar con cmake (Release)"
|
|
@echo " make debug - Compilar con cmake (Debug)"
|
|
@echo ""
|
|
@echo " Release:"
|
|
@echo " make release - Crear release (detecta SO automaticamente)"
|
|
@echo " make windows_release - Crear release para Windows"
|
|
@echo " make linux_release - Crear release basico para Linux"
|
|
@echo " make linux_release_desktop - Crear release con integracion desktop para Linux"
|
|
@echo " make macos_release - Crear release para macOS"
|
|
@echo " make raspi_release - Crear release para Raspberry Pi"
|
|
@echo ""
|
|
@echo " Herramientas:"
|
|
@echo " make spirv - Compilar shaders SPIR-V"
|
|
@echo " make pack_tool - Compilar herramienta de empaquetado"
|
|
@echo " make resources.pack - Generar pack de recursos desde data/"
|
|
@echo ""
|
|
@echo " Calidad de codigo:"
|
|
@echo " make format - Formatear codigo con clang-format"
|
|
@echo " make format-check - Verificar formato sin modificar"
|
|
@echo " make tidy - Analisis estatico con clang-tidy"
|
|
@echo " make tidy-fix - Analisis estatico con auto-fix"
|
|
@echo ""
|
|
@echo " Otros:"
|
|
@echo " make show_version - Mostrar version actual ($(VERSION))"
|
|
@echo " make help - Mostrar esta ayuda"
|
|
|
|
.PHONY: all debug release windows_release macos_release linux_release linux_release_desktop raspi_release pack_tool resources.pack spirv format format-check tidy tidy-fix show_version help
|