From bcb9628fb21d4ade200ed920de8d5cb7fa4772a4 Mon Sep 17 00:00:00 2001 From: Sergio Date: Mon, 24 Nov 2025 19:46:24 +0100 Subject: [PATCH] actualitzat release.yalm MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude corregida la ubicació de project.h canvis en create-release de release.yml CORREGIT UN PUTO ESPAI EN RELEASE.YML sadjasbndk fiuwhfiusdh sgdwehgr eriojgtoie --- .gitea/workflows/release.yml | 253 +++++++++-------------------------- .gitignore | 10 +- CMakeLists.txt | 4 +- Makefile | 78 ++++++++++- release/pollo.rc | 2 + release/pollo.res | Bin 0 -> 125088 bytes source/project.h | 9 -- 7 files changed, 146 insertions(+), 210 deletions(-) create mode 100644 release/pollo.rc create mode 100644 release/pollo.res delete mode 100644 source/project.h diff --git a/.gitea/workflows/release.yml b/.gitea/workflows/release.yml index 572dc7d..f67f8e9 100644 --- a/.gitea/workflows/release.yml +++ b/.gitea/workflows/release.yml @@ -1,14 +1,3 @@ -# Workflow para crear releases automáticos cuando se crea un tag -# -# Uso: -# git tag v0.2 -# git push --tags -# -# Esto disparará el workflow y creará un release con binarios para: -# - Linux x64 -# - Windows x64 -# - Raspberry Pi ARM64 - name: Release on: @@ -16,239 +5,117 @@ on: tags: - 'v*' -env: - SDL3_VERSION: "3.2.26" - jobs: # ============================================================================ - # BUILD LINUX x64 + # BUILD LINUX (Nativo) # ============================================================================ build-linux: runs-on: ubuntu-latest - container: - image: ubuntu:24.04 + container: ubuntu:latest steps: - name: Instalar dependencias run: | - apt-get update - apt-get install -y \ - nodejs npm \ - build-essential cmake git pkg-config \ - libgl1-mesa-dev libglu1-mesa-dev \ - libx11-dev libxext-dev libxrandr-dev libxcursor-dev \ + apt-get update && apt-get install -y \ + curl gnupg build-essential cmake git pkg-config \ + libgl1-mesa-dev libx11-dev libxext-dev libxrandr-dev libxcursor-dev \ libxi-dev libxinerama-dev libxxf86vm-dev libxss-dev \ - libasound2-dev libpulse-dev libudev-dev libdbus-1-dev \ - libwayland-dev libxkbcommon-dev - - - name: Compilar SDL3 - run: | - cd /tmp - git clone --depth 1 --branch release-${{ env.SDL3_VERSION }} https://github.com/libsdl-org/SDL.git - cd SDL - cmake -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr - cmake --build build -j$(nproc) - cmake --install build + libasound2-dev libpulse-dev libudev-dev libwayland-dev libxkbcommon-dev \ + libxtst-dev libdbus-1-dev libdrm-dev libgbm-dev \ + && curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \ + && apt-get install -y nodejs \ + && rm -rf /var/lib/apt/lists/* - name: Checkout uses: actions/checkout@v4 - - name: Generar project.h + - name: Setup SDL3 run: | - GIT_HASH=$(git rev-parse --short=7 HEAD) - RAW_VERSION=$(echo "${{ github.ref_name }}" | sed 's/^v//') - TARGET_NAME=$(awk '/^project/ {gsub(/[)(]/, " "); print $2}' CMakeLists.txt) - LONG_NAME=$(grep 'PROJECT_LONG_NAME' CMakeLists.txt | sed 's/.*"\(.*\)".*/\1/') - COPYRIGHT=$(sed -n 's/.*set(PROJECT_COPYRIGHT "\([^"]*\)".*/\1/p' CMakeLists.txt) - sed -e "s/@PROJECT_NAME@/$TARGET_NAME/g" \ - -e "s/@PROJECT_LONG_NAME@/$LONG_NAME/g" \ - -e "s/@PROJECT_VERSION@/$RAW_VERSION/g" \ - -e "s/@PROJECT_COPYRIGHT@/$COPYRIGHT/g" \ - -e "s/@GIT_HASH@/$GIT_HASH/g" \ - source/project.h.in > source/project.h + git clone https://github.com/libsdl-org/SDL.git /tmp/SDL3 \ + && cd /tmp/SDL3 \ + && mkdir build && cd build \ + && cmake .. -DCMAKE_BUILD_TYPE=Release \ + && make -j$(nproc) \ + && make install \ + && rm -rf /tmp/SDL3 - - name: Compilar pack_tool + - name: Compilar run: | - g++ -std=c++20 -Wall -Os -Isource \ - tools/pack_resources/pack_resources.cpp \ - source/core/resources/resource_pack.cpp \ - -o tools/pack_resources/pack_resources - - - name: Generar resources.pack - run: ./tools/pack_resources/pack_resources data resources.pack - - - name: Compilar para Linux - run: | - TARGET_NAME=$(awk '/^project/ {gsub(/[)(]/, " "); print $2}' CMakeLists.txt) - CPP_FILES=$(find source -name "*.cpp") - g++ $CPP_FILES \ - -Isource -DRELEASE_BUILD -DLINUX_BUILD \ - -std=c++20 -Wall -Os -ffunction-sections -fdata-sections \ - -lSDL3 -lGL \ - -o $TARGET_NAME - strip -s -R .comment -R .gnu.version $TARGET_NAME --strip-unneeded - - - name: Empaquetar release - run: | - TARGET_NAME=$(awk '/^project/ {gsub(/[)(]/, " "); print $2}' CMakeLists.txt) - VERSION="${{ github.ref_name }}" - RELEASE_NAME="${TARGET_NAME}-${VERSION}-linux-x64.tar.gz" - mkdir -p release_tmp - cp $TARGET_NAME resources.pack LICENSE README.md gamecontrollerdb.txt release_tmp/ - tar -czvf $RELEASE_NAME -C release_tmp . - echo "RELEASE_FILE=$RELEASE_NAME" >> $GITHUB_ENV + export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig + make linux_release - name: Subir artefacto uses: actions/upload-artifact@v3 with: name: linux-build - path: ${{ env.RELEASE_FILE }} + path: ./*-linux.tar.gz # ============================================================================ - # BUILD WINDOWS x64 (cross-compile con MinGW) + # BUILD WINDOWS (Cross-Compile usando el nuevo target del Makefile) # ============================================================================ build-windows: runs-on: ubuntu-latest - container: - image: ubuntu:24.04 + container: ubuntu:latest steps: - name: Instalar dependencias run: | - apt-get update - apt-get install -y nodejs npm build-essential cmake git pkg-config wget mingw-w64 zip - - - name: Descargar SDL3 para Windows - run: | - cd /tmp - wget -q https://github.com/libsdl-org/SDL/releases/download/release-${{ env.SDL3_VERSION }}/SDL3-devel-${{ env.SDL3_VERSION }}-mingw.tar.gz - tar -xzf SDL3-devel-${{ env.SDL3_VERSION }}-mingw.tar.gz - # Copiar a ubicación estándar para MinGW - cp -r SDL3-${{ env.SDL3_VERSION }}/x86_64-w64-mingw32/* /usr/x86_64-w64-mingw32/ + apt-get update && apt-get install -y \ + curl build-essential cmake git pkg-config wget zip \ + mingw-w64 g++-mingw-w64-x86-64 binutils-mingw-w64-x86-64 \ + && curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \ + && apt-get install -y nodejs \ + && rm -rf /var/lib/apt/lists/* - name: Checkout uses: actions/checkout@v4 - - name: Generar project.h + - name: Setup SDL3 (MinGW) run: | - GIT_HASH=$(git rev-parse --short=7 HEAD) - RAW_VERSION=$(echo "${{ github.ref_name }}" | sed 's/^v//') - TARGET_NAME=$(awk '/^project/ {gsub(/[)(]/, " "); print $2}' CMakeLists.txt) - LONG_NAME=$(grep 'PROJECT_LONG_NAME' CMakeLists.txt | sed 's/.*"\(.*\)".*/\1/') - COPYRIGHT=$(sed -n 's/.*set(PROJECT_COPYRIGHT "\([^"]*\)".*/\1/p' CMakeLists.txt) - sed -e "s/@PROJECT_NAME@/$TARGET_NAME/g" \ - -e "s/@PROJECT_LONG_NAME@/$LONG_NAME/g" \ - -e "s/@PROJECT_VERSION@/$RAW_VERSION/g" \ - -e "s/@PROJECT_COPYRIGHT@/$COPYRIGHT/g" \ - -e "s/@GIT_HASH@/$GIT_HASH/g" \ - source/project.h.in > source/project.h + git clone https://github.com/libsdl-org/SDL.git /tmp/SDL3 \ + && cd /tmp/SDL3 \ + && mkdir build-mingw && cd build-mingw \ + && cmake .. \ + -DCMAKE_SYSTEM_NAME=Windows \ + -DCMAKE_C_COMPILER=x86_64-w64-mingw32-gcc \ + -DCMAKE_CXX_COMPILER=x86_64-w64-mingw32-g++ \ + -DCMAKE_RC_COMPILER=x86_64-w64-mingw32-windres \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr/x86_64-w64-mingw32 \ + && make -j$(nproc) \ + && make install \ + && rm -rf /tmp/SDL3 - - name: Compilar pack_tool - run: | - g++ -std=c++20 -Wall -Os -Isource \ - tools/pack_resources/pack_resources.cpp \ - source/core/resources/resource_pack.cpp \ - -o tools/pack_resources/pack_resources - - - name: Generar resources.pack - run: ./tools/pack_resources/pack_resources data resources.pack - - - name: Compilar para Windows (cross-compile) - run: | - TARGET_NAME=$(awk '/^project/ {gsub(/[)(]/, " "); print $2}' CMakeLists.txt) - LONG_NAME=$(grep 'PROJECT_LONG_NAME' CMakeLists.txt | sed 's/.*"\(.*\)".*/\1/') - CPP_FILES=$(find source -name "*.cpp") - x86_64-w64-mingw32-g++ $CPP_FILES \ - -Isource -DRELEASE_BUILD -DWINDOWS_BUILD \ - -std=c++20 -Wall -Os -ffunction-sections -fdata-sections \ - -Wl,--gc-sections -static-libstdc++ -static-libgcc \ - -Wl,-subsystem,windows \ - -lmingw32 -lws2_32 -lSDL3 -lopengl32 \ - -o "${LONG_NAME}.exe" - x86_64-w64-mingw32-strip -s -R .comment -R .gnu.version "${LONG_NAME}.exe" --strip-unneeded - - - name: Empaquetar release - run: | - TARGET_NAME=$(awk '/^project/ {gsub(/[)(]/, " "); print $2}' CMakeLists.txt) - LONG_NAME=$(grep 'PROJECT_LONG_NAME' CMakeLists.txt | sed 's/.*"\(.*\)".*/\1/') - VERSION="${{ github.ref_name }}" - RELEASE_NAME="${TARGET_NAME}-${VERSION}-win32-x64.zip" - mkdir -p release_tmp - cp "${LONG_NAME}.exe" resources.pack LICENSE README.md gamecontrollerdb.txt release_tmp/ - # Copiar SDL3.dll - cp /usr/x86_64-w64-mingw32/bin/SDL3.dll release_tmp/ - cd release_tmp && zip -r ../$RELEASE_NAME . && cd .. - echo "RELEASE_FILE=$RELEASE_NAME" >> $GITHUB_ENV + - name: Compilar + run: make windows_cross SDL_DLL_PATH=/usr/x86_64-w64-mingw32/bin/SDL3.dll - name: Subir artefacto uses: actions/upload-artifact@v3 with: name: windows-build - path: ${{ env.RELEASE_FILE }} + path: ./*-win32-x64.zip # ============================================================================ - # BUILD RASPBERRY PI ARM64 - DESACTIVADO TEMPORALMENTE - # Cross-compilation con OpenGL requiere libGL para ARM64 que no está disponible - # Se puede habilitar usando emulación ARM64 con QEMU en el futuro - # ============================================================================ - # build-rpi: - # runs-on: ubuntu-latest - # ... (código comentado) - - # ============================================================================ - # CREAR RELEASE EN GITEA + # RELEASE # ============================================================================ create-release: needs: [build-linux, build-windows] runs-on: ubuntu-latest - container: - image: ubuntu:24.04 steps: - - name: Instalar dependencias - run: | - apt-get update -qq - apt-get install -y -qq nodejs npm git jq curl - - - name: Checkout - uses: actions/checkout@v4 - - - name: Descargar todos los artefactos - uses: actions/download-artifact@v3 + - uses: actions/download-artifact@v3 with: path: artifacts + merge-multiple: true - - name: Listar artefactos - run: find artifacts -type f + - name: setup go + uses: https://github.com/actions/setup-go@v4 + with: + go-version: '>=1.20.1' - name: Crear Release en Gitea - env: - GITEA_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - # Crear release via API de Gitea - RELEASE_RESPONSE=$(curl -s -X POST \ - -H "Authorization: token $GITEA_TOKEN" \ - -H "Content-Type: application/json" \ - -d "{\"tag_name\": \"${{ github.ref_name }}\", \"name\": \"${{ github.ref_name }}\", \"body\": \"Release ${{ github.ref_name }}\", \"draft\": false, \"prerelease\": false}" \ - "${{ github.server_url }}/api/v1/repos/${{ github.repository }}/releases") + uses: https://gitea.com/actions/release-action@main + with: + files: artifacts/* + api_key: ${{ secrets.RELEASE_TOKEN }} + tag: ${{ github.ref_name }} + generate_release_notes: true - echo "Release response: $RELEASE_RESPONSE" - RELEASE_ID=$(echo "$RELEASE_RESPONSE" | jq -r '.id') - echo "Release ID: $RELEASE_ID" - if [ "$RELEASE_ID" = "null" ] || [ -z "$RELEASE_ID" ]; then - echo "Error: No se pudo crear el release" - exit 1 - fi - - # Subir cada artefacto - for file in artifacts/**/*; do - if [ -f "$file" ]; then - filename=$(basename "$file") - echo "Subiendo: $filename" - curl -s -X POST \ - -H "Authorization: token $GITEA_TOKEN" \ - -H "Content-Type: application/octet-stream" \ - --data-binary "@$file" \ - "${{ github.server_url }}/api/v1/repos/${{ github.repository }}/releases/$RELEASE_ID/assets?name=$filename" - fi - done - - echo "Release creado: ${{ github.server_url }}/${{ github.repository }}/releases/tag/${{ github.ref_name }}" diff --git a/.gitignore b/.gitignore index aac4913..74ff84e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +# Genericos .vscode/ *.DS_Store thumbs.db @@ -11,16 +12,23 @@ desktop.ini *.app *_debug* *.Identifier -pollo* + +# Herramientas de build build/ resources.pack pollo_release/ tools/pack_resources/pack_resources tools/pack_resources/pack_resources.exe +# Archivos generados +source/project.h + # CI/CD runner data (local) docker/runner-data/ docker/config.yaml # Claude Code local settings (mantener carpeta .claude/ para comandos) .claude/settings.local.json + +# Ejecutables +pollo \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 5ac446a..dd11546 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,7 @@ # CMakeLists.txt cmake_minimum_required(VERSION 3.10) -project(pollo VERSION 0.1) +project(pollo VERSION 0.1.0) # Info del proyecto para version.h set(PROJECT_LONG_NAME "Los pollos hermanos") @@ -36,7 +36,7 @@ else() endif() # Configurar archivo de versión -configure_file(${CMAKE_SOURCE_DIR}/source/project.h.in ${CMAKE_SOURCE_DIR}/source/project.h @ONLY) +configure_file(${CMAKE_SOURCE_DIR}/source/project.h.in ${CMAKE_BINARY_DIR}/project.h @ONLY) # --- 1. LISTA EXPLÍCITA DE FUENTES --- set(APP_SOURCES diff --git a/Makefile b/Makefile index 6891060..7565281 100644 --- a/Makefile +++ b/Makefile @@ -118,7 +118,7 @@ ALL_SOURCES := $(APP_SOURCES) # ============================================================================== # INCLUDES # ============================================================================== -INCLUDES := -Isource +INCLUDES := -Isource -Ibuild # ============================================================================== # COMPILER FLAGS (OS-specific) @@ -196,7 +196,8 @@ windows_release: # Generate project.h from project.h.in @echo "Generando project.h..." - @powershell -Command "$$GIT_HASH = (git rev-parse --short=7 HEAD 2>$$null); if (-not $$GIT_HASH) { $$GIT_HASH = 'unknown' }; $$RAW_VERSION = '$(VERSION)' -replace '^v', ''; $$COPYRIGHT = (Select-String -Path 'CMakeLists.txt' -Pattern 'set\(PROJECT_COPYRIGHT \"(.+?)\"').Matches.Groups[1].Value; (Get-Content source/project.h.in) -replace '@PROJECT_NAME@', '$(TARGET_NAME)' -replace '@PROJECT_LONG_NAME@', '$(LONG_NAME)' -replace '@PROJECT_VERSION@', $$RAW_VERSION -replace '@PROJECT_COPYRIGHT@', $$COPYRIGHT -replace '@GIT_HASH@', $$GIT_HASH | Set-Content source/project.h" + @powershell if (-not (Test-Path "build")) {New-Item "build" -ItemType Directory} + @powershell -Command "$$GIT_HASH = (git rev-parse --short=7 HEAD 2>$$null); if (-not $$GIT_HASH) { $$GIT_HASH = 'unknown' }; $$RAW_VERSION = '$(VERSION)' -replace '^v', ''; $$COPYRIGHT = (Select-String -Path 'CMakeLists.txt' -Pattern 'set\(PROJECT_COPYRIGHT \"(.+?)\"').Matches.Groups[1].Value; (Get-Content source/project.h.in) -replace '@PROJECT_NAME@', '$(TARGET_NAME)' -replace '@PROJECT_LONG_NAME@', '$(LONG_NAME)' -replace '@PROJECT_VERSION@', $$RAW_VERSION -replace '@PROJECT_COPYRIGHT@', $$COPYRIGHT -replace '@GIT_HASH@', $$GIT_HASH | Set-Content build/project.h" # Crea carpeta temporal 'RELEASE_FOLDER' powershell if (Test-Path "$(RELEASE_FOLDER)") {Remove-Item "$(RELEASE_FOLDER)" -Recurse -Force} @@ -245,6 +246,7 @@ macos_release: # Generate project.h from project.h.in @echo "Generando project.h..." + @$(MKDIR) build @GIT_HASH=$$(git rev-parse --short=7 HEAD 2>/dev/null || echo "unknown"); \ RAW_VERSION=$$(echo "$(VERSION)" | sed 's/^v//'); \ COPYRIGHT=$$(sed -n 's/.*set(PROJECT_COPYRIGHT "\([^"]*\)".*/\1/p' CMakeLists.txt); \ @@ -253,7 +255,7 @@ macos_release: -e "s/@PROJECT_VERSION@/$$RAW_VERSION/g" \ -e "s/@PROJECT_COPYRIGHT@/$$COPYRIGHT/g" \ -e "s/@GIT_HASH@/$$GIT_HASH/g" \ - source/project.h.in > source/project.h + source/project.h.in > build/project.h # Elimina datos de compilaciones anteriores $(RMDIR) "$(RELEASE_FOLDER)" @@ -358,6 +360,7 @@ linux_release: # Generate project.h from project.h.in @echo "Generando project.h..." + @$(MKDIR) build @GIT_HASH=$$(git rev-parse --short=7 HEAD 2>/dev/null || echo "unknown"); \ RAW_VERSION=$$(echo "$(VERSION)" | sed 's/^v//'); \ COPYRIGHT=$$(sed -n 's/.*set(PROJECT_COPYRIGHT "\([^"]*\)".*/\1/p' CMakeLists.txt); \ @@ -366,7 +369,7 @@ linux_release: -e "s/@PROJECT_VERSION@/$$RAW_VERSION/g" \ -e "s/@PROJECT_COPYRIGHT@/$$COPYRIGHT/g" \ -e "s/@GIT_HASH@/$$GIT_HASH/g" \ - source/project.h.in > source/project.h + source/project.h.in > build/project.h # Elimina carpetas previas $(RMDIR) "$(RELEASE_FOLDER)" @@ -407,6 +410,7 @@ rpi_release: # Generate project.h from project.h.in @echo "Generando project.h..." + @$(MKDIR) build @GIT_HASH=$$(git rev-parse --short=7 HEAD 2>/dev/null || echo "unknown"); \ RAW_VERSION=$$(echo "$(VERSION)" | sed 's/^v//'); \ COPYRIGHT=$$(sed -n 's/.*set(PROJECT_COPYRIGHT "\([^"]*\)".*/\1/p' CMakeLists.txt); \ @@ -415,7 +419,7 @@ rpi_release: -e "s/@PROJECT_VERSION@/$$RAW_VERSION/g" \ -e "s/@PROJECT_COPYRIGHT@/$$COPYRIGHT/g" \ -e "s/@GIT_HASH@/$$GIT_HASH/g" \ - source/project.h.in > source/project.h + source/project.h.in > build/project.h # Elimina carpetas previas $(RMDIR) "$(RELEASE_FOLDER)" @@ -441,6 +445,70 @@ rpi_release: # Elimina la carpeta temporal $(RMDIR) "$(RELEASE_FOLDER)" +# ============================================================================== +# CROSS-COMPILATION (Linux -> Windows) +# ============================================================================== +CROSS_CXX := x86_64-w64-mingw32-g++ +CROSS_STRIP := x86_64-w64-mingw32-strip +CROSS_WINDRES := x86_64-w64-mingw32-windres +CROSS_ZIP_FILE := $(TARGET_NAME)-$(VERSION)-win32-x64.zip + +CROSS_CXXFLAGS := -std=$(CPP_STANDARD) -Wall -Os -ffunction-sections -fdata-sections \ + -Wl,--gc-sections -static-libstdc++ -static-libgcc \ + -Wl,-subsystem,windows -DWINDOWS_BUILD -DRELEASE_BUILD +CROSS_LDFLAGS := -lmingw32 -lws2_32 -lSDL3 -lopengl32 + +windows_cross: + @$(MAKE) pack_tool + @$(MAKE) resources.pack + @echo "Cross-compiling para Windows desde Linux..." + +# 1. Generar project.h + @GIT_HASH=$$(git rev-parse --short=7 HEAD 2>/dev/null || echo "unknown"); \ + RAW_VERSION=$$(echo "$(VERSION)" | sed 's/^v//'); \ + COPYRIGHT=$$(sed -n 's/.*set(PROJECT_COPYRIGHT "\([^"]*\)".*/\1/p' CMakeLists.txt); \ + sed -e "s/@PROJECT_NAME@/$(TARGET_NAME)/g" \ + -e "s/@PROJECT_LONG_NAME@/$(LONG_NAME)/g" \ + -e "s/@PROJECT_VERSION@/$$RAW_VERSION/g" \ + -e "s/@PROJECT_COPYRIGHT@/$$COPYRIGHT/g" \ + -e "s/@GIT_HASH@/$$GIT_HASH/g" \ + source/project.h.in > source/project.h + +# 2. Preparar carpetas + $(RMDIR) "$(RELEASE_FOLDER)" + $(MKDIR) "$(RELEASE_FOLDER)" + +# 3. Copiar recursos base + cp resources.pack "$(RELEASE_FOLDER)" + cp LICENSE "$(RELEASE_FOLDER)" + cp README.md "$(RELEASE_FOLDER)" + cp gamecontrollerdb.txt "$(RELEASE_FOLDER)" + +# 4. GESTIÓN DE DLLs (Aquí está la mejora) +# [cite_start]Copia las DLLs locales si existen (como en tu windows_release) [cite: 16] + @if [ -d "release/dll" ] && [ "$$(ls -A release/dll/*.dll 2>/dev/null)" ]; then \ + cp release/dll/*.dll "$(RELEASE_FOLDER)"; \ + echo "Copiadas DLLs locales desde release/dll/"; \ + fi +# Copia la DLL de SDL3 externa si se pasa como argumento (Para el CI) + @if [ -n "$(SDL_DLL_PATH)" ]; then \ + cp "$(SDL_DLL_PATH)" "$(RELEASE_FOLDER)"; \ + echo "Copiada SDL3 DLL desde $(SDL_DLL_PATH)"; \ + fi + +# 5. Compilar + @echo "Compilando recursos e icono..." + $(CROSS_WINDRES) release/$(TARGET_NAME).rc -O coff -o $(RESOURCE_FILE) + @echo "Compilando ejecutable..." + $(CROSS_CXX) $(ALL_SOURCES) $(RESOURCE_FILE) $(INCLUDES) $(CROSS_CXXFLAGS) $(CROSS_LDFLAGS) -o "$(RELEASE_FOLDER)/$(APP_NAME).exe" + $(CROSS_STRIP) -s "$(RELEASE_FOLDER)/$(APP_NAME).exe" + +# 6. Empaquetar + @echo "Empaquetando en $(CROSS_ZIP_FILE)..." + cd $(RELEASE_FOLDER) && zip -r ../$(CROSS_ZIP_FILE) . + $(RMDIR) "$(RELEASE_FOLDER)" + @echo "✓ Release de Windows (Cross) completado: $(CROSS_ZIP_FILE)" + # ============================================================================== # SETUP # ============================================================================== diff --git a/release/pollo.rc b/release/pollo.rc new file mode 100644 index 0000000..2907ea3 --- /dev/null +++ b/release/pollo.rc @@ -0,0 +1,2 @@ +// pollo.rc +IDI_ICON1 ICON "icon.ico" diff --git a/release/pollo.res b/release/pollo.res new file mode 100644 index 0000000000000000000000000000000000000000..6e6b921015eefa493534d08169cf761a797b15dc GIT binary patch literal 125088 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