From 583d901162067e931447d4cc864860ac5472a7fd Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Thu, 14 May 2026 17:26:06 +0200 Subject: [PATCH] binari i recursos a build/, targets en kebab --- CMakeLists.txt | 29 ++++++++--- Makefile | 80 ++++++++++++++++++------------ tools/shaders/compile_shader.cmake | 8 ++- 3 files changed, 74 insertions(+), 43 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 66165b3..168c67e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -295,13 +295,6 @@ elseif(UNIX AND NOT APPLE) target_compile_definitions(${PROJECT_NAME} PRIVATE LINUX_BUILD) endif() -# Especificar la ubicación del ejecutable -if(EMSCRIPTEN) - set_target_properties(${PROJECT_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) -else() - set_target_properties(${PROJECT_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}) -endif() - # --- 5. STATIC ANALYSIS TARGETS --- find_program(CLANG_TIDY_EXE NAMES clang-tidy) @@ -419,7 +412,7 @@ if(NOT EMSCRIPTEN) # Regeneració automàtica de resources.pack en cada build si canvia data/. file(GLOB_RECURSE DATA_FILES CONFIGURE_DEPENDS "${CMAKE_SOURCE_DIR}/data/*") - set(RESOURCE_PACK "${CMAKE_SOURCE_DIR}/resources.pack") + set(RESOURCE_PACK "${CMAKE_BINARY_DIR}/resources.pack") add_custom_command( OUTPUT ${RESOURCE_PACK} @@ -434,4 +427,24 @@ if(NOT EMSCRIPTEN) add_custom_target(resource_pack ALL DEPENDS ${RESOURCE_PACK}) add_dependencies(${PROJECT_NAME} resource_pack) + + # --- CÒPIA DE gamecontrollerdb.txt AL COSTAT DEL BINARI --- + # SDL_AddGamepadMappingsFromFile només llegeix del filesystem real (no del + # pack), així que el fitxer ha de viure al directori del binari. Es copia + # només si existeix per no fallar la build d'algú que encara no ha fet + # `make controllerdb`. + if(EXISTS "${CMAKE_SOURCE_DIR}/gamecontrollerdb.txt") + set(CONTROLLER_DB "${CMAKE_BINARY_DIR}/gamecontrollerdb.txt") + add_custom_command( + OUTPUT ${CONTROLLER_DB} + COMMAND ${CMAKE_COMMAND} -E copy_if_different + "${CMAKE_SOURCE_DIR}/gamecontrollerdb.txt" + "${CONTROLLER_DB}" + DEPENDS "${CMAKE_SOURCE_DIR}/gamecontrollerdb.txt" + COMMENT "Copiant gamecontrollerdb.txt → build/" + VERBATIM + ) + add_custom_target(controller_db ALL DEPENDS ${CONTROLLER_DB}) + add_dependencies(${PROJECT_NAME} controller_db) + endif() endif() diff --git a/Makefile b/Makefile index 6ce1231..2c9265f 100644 --- a/Makefile +++ b/Makefile @@ -2,16 +2,13 @@ # DIRECTORIES # ============================================================================== DIR_ROOT := $(dir $(abspath $(MAKEFILE_LIST))) +BUILDDIR := build # ============================================================================== # TARGET NAMES # ============================================================================== TARGET_NAME := coffee_crisis_arcade_edition -ifeq ($(OS),Windows_NT) - TARGET_FILE := $(DIR_ROOT)$(TARGET_NAME).exe -else - TARGET_FILE := $(DIR_ROOT)$(TARGET_NAME) -endif +TARGET_FILE := $(BUILDDIR)/$(TARGET_NAME) APP_NAME := Coffee Crisis Arcade Edition DIST_DIR := dist RELEASE_FOLDER := dist/_tmp @@ -61,7 +58,7 @@ endif # WINDOWS-SPECIFIC VARIABLES # ============================================================================== ifeq ($(OS),Windows_NT) - WIN_TARGET_FILE := $(DIR_ROOT)$(APP_NAME) + WIN_TARGET_FILE := $(BUILDDIR)/$(APP_NAME) WIN_RELEASE_FILE := $(RELEASE_FOLDER)/$(APP_NAME) # Escapa apòstrofs per a PowerShell (duplica ' → ''). Sense això, APP_NAMEs # com "JailDoctor's Dilemma" trencarien el parsing de -Destination '...'. @@ -134,17 +131,28 @@ debug: @cmake $(CMAKE_GEN) -S . -B build -DCMAKE_BUILD_TYPE=Debug -DGIT_HASH=$(GIT_HASH) @cmake --build build +run: all + @./$(TARGET_FILE) + +run-debug: debug + @./$(TARGET_FILE) + +clean: + @rm -rf $(BUILDDIR) + +rebuild: clean all + # ============================================================================== # RELEASE AUTOMÁTICO (detecta SO) # ============================================================================== release: ifeq ($(OS),Windows_NT) - @"$(MAKE)" _windows_release + @"$(MAKE)" _windows-release else ifeq ($(UNAME_S),Darwin) - @$(MAKE) _macos_release + @$(MAKE) _macos-release else - @$(MAKE) _linux_release + @$(MAKE) _linux-release endif endif @@ -154,12 +162,12 @@ endif pack: @cmake $(CMAKE_GEN) -S . -B build -DCMAKE_BUILD_TYPE=Release -DGIT_HASH=$(GIT_HASH) @cmake --build build --target pack_resources - @./build/pack_resources data resources.pack + @./build/pack_resources data build/resources.pack # ============================================================================== # REGLAS PARA COMPILACIÓN DE SHADERS (multiplataforma via cmake) # ============================================================================== -compile_shaders: +compile-shaders: ifdef GLSLC @cmake -D GLSLC=$(GLSLC) -D SHADERS_DIR=$(SHADERS_DIR) -D HEADERS_DIR=$(HEADERS_DIR) -P $(SHADER_CMAKE) else @@ -169,7 +177,7 @@ endif # ============================================================================== # COMPILACIÓN PARA WINDOWS (RELEASE) # ============================================================================== -_windows_release: +_windows-release: @$(MAKE) pack @echo off @echo Creando release para Windows - Version: $(VERSION) @@ -185,13 +193,13 @@ _windows_release: # 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)'" + @powershell -Command "Copy-Item -Path 'build/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_PS).exe'" + @powershell -Command "Copy-Item -Path '$(TARGET_FILE).exe' -Destination '$(WIN_RELEASE_FILE_PS).exe'" strip -s -R .comment -R .gnu.version "$(WIN_RELEASE_FILE).exe" --strip-unneeded # Crea el fichero .zip @@ -205,7 +213,7 @@ _windows_release: # ============================================================================== # COMPILACIÓN PARA MACOS (RELEASE) # ============================================================================== -_macos_release: +_macos-release: @$(MAKE) pack @echo "Creando release para macOS - Version: $(VERSION)" @@ -247,7 +255,7 @@ _macos_release: # 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 build/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" @@ -337,7 +345,7 @@ _macos_release: # ============================================================================== # COMPILACIÓN PARA LINUX (RELEASE) # ============================================================================== -_linux_release: +_linux-release: @$(MAKE) pack @echo "Creando release para Linux - Version: $(VERSION)" @@ -351,7 +359,7 @@ _linux_release: # Copia ficheros cp -R config "$(RELEASE_FOLDER)" - cp resources.pack "$(RELEASE_FOLDER)" + cp build/resources.pack "$(RELEASE_FOLDER)" cp LICENSE "$(RELEASE_FOLDER)" cp README.md "$(RELEASE_FOLDER)" cp "$(TARGET_FILE)" "$(RELEASE_FILE)" @@ -387,21 +395,21 @@ wasm: ssh maverick 'cd /home/sergio/gitea/web_jailgames && ./deploy.sh' @echo "Deployed to maverick" -# Versió Debug del build wasm: build local sense deploy. Sortida a dist/wasm_debug/. -wasm_debug: +# Versió Debug del build wasm: build local sense deploy. Sortida a dist/wasm-debug/. +wasm-debug: @echo "Compilando WebAssembly Debug - Version: $(VERSION) ($(GIT_HASH))" docker run --rm \ --user $(shell id -u):$(shell id -g) \ -v $(DIR_ROOT):/src \ -w /src \ emscripten/emsdk:latest \ - bash -c "emcmake cmake -S . -B build/wasm_debug -DCMAKE_BUILD_TYPE=Debug -DGIT_HASH=$(GIT_HASH) && cmake --build build/wasm_debug" - $(MKDIR) "$(DIST_DIR)/wasm_debug" - cp build/wasm_debug/$(TARGET_NAME).html $(DIST_DIR)/wasm_debug/ - cp build/wasm_debug/$(TARGET_NAME).js $(DIST_DIR)/wasm_debug/ - cp build/wasm_debug/$(TARGET_NAME).wasm $(DIST_DIR)/wasm_debug/ - cp build/wasm_debug/$(TARGET_NAME).data $(DIST_DIR)/wasm_debug/ - @echo "Output: $(DIST_DIR)/wasm_debug/" + bash -c "emcmake cmake -S . -B build/wasm-debug -DCMAKE_BUILD_TYPE=Debug -DGIT_HASH=$(GIT_HASH) && cmake --build build/wasm-debug" + $(MKDIR) "$(DIST_DIR)/wasm-debug" + cp build/wasm-debug/$(TARGET_NAME).html $(DIST_DIR)/wasm-debug/ + cp build/wasm-debug/$(TARGET_NAME).js $(DIST_DIR)/wasm-debug/ + cp build/wasm-debug/$(TARGET_NAME).wasm $(DIST_DIR)/wasm-debug/ + cp build/wasm-debug/$(TARGET_NAME).data $(DIST_DIR)/wasm-debug/ + @echo "Output: $(DIST_DIR)/wasm-debug/" # ============================================================================== # CODE QUALITY (delegados a cmake) @@ -438,7 +446,7 @@ controllerdb: # ============================================================================== # REGLAS ESPECIALES # ============================================================================== -show_version: +show-version: @echo "Version actual: $(VERSION)" help: @@ -449,14 +457,18 @@ help: @echo " make - Compilar con cmake (Release)" @echo " make debug - Compilar con cmake (Debug)" @echo "" + @echo " Ejecucion:" + @echo " make run - Compilar (Release) y ejecutar" + @echo " make run-debug - Compilar (Debug) y ejecutar" + @echo "" @echo " Release:" @echo " make release - Crear release (detecta SO automaticamente)" @echo " make wasm - Crear build WebAssembly (requiere Docker) en dist/wasm" - @echo " make wasm_debug - Build WebAssembly Debug local (sin deploy)" + @echo " make wasm-debug - Build WebAssembly Debug local (sin deploy)" @echo "" @echo " Herramientas:" - @echo " make compile_shaders - Compilar shaders SPIR-V" - @echo " make pack - Empaquetar recursos a resources.pack" + @echo " make compile-shaders - Compilar shaders SPIR-V" + @echo " make pack - Empaquetar recursos a $(BUILDDIR)/resources.pack" @echo "" @echo " Calidad de codigo:" @echo " make format - Formatear codigo con clang-format" @@ -466,7 +478,9 @@ help: @echo " make cppcheck - Analisis estatico con cppcheck" @echo "" @echo " Otros:" - @echo " make show_version - Mostrar version actual ($(VERSION))" + @echo " make clean - Borrar carpeta $(BUILDDIR)/" + @echo " make rebuild - clean + all" + @echo " make show-version - Mostrar version actual ($(VERSION))" @echo " make help - Mostrar esta ayuda" -.PHONY: all debug release _windows_release _macos_release _linux_release wasm wasm_debug pack compile_shaders format format-check tidy tidy-fix cppcheck controllerdb show_version help +.PHONY: all debug run run-debug clean rebuild release _windows-release _macos-release _linux-release wasm wasm-debug pack compile-shaders format format-check tidy tidy-fix cppcheck controllerdb show-version help diff --git a/tools/shaders/compile_shader.cmake b/tools/shaders/compile_shader.cmake index 0c94703..8913f41 100644 --- a/tools/shaders/compile_shader.cmake +++ b/tools/shaders/compile_shader.cmake @@ -11,9 +11,13 @@ cmake_minimum_required(VERSION 3.10) -get_filename_component(SRC_NAME "${SRC}" NAME_WE) +# Nom intermedi únic per stage (vert/frag/comp) per evitar col·lisions en +# builds paral·lels: postfx.vert i postfx.frag generarien el mateix +# `postfx.spv` si féssim servir el nom del SRC. Usem el del OUT_H, que ja +# inclou el stage (p.ex. `postfx_frag_spv.h` → `postfx_frag_spv.spv`). get_filename_component(OUT_DIR "${OUT_H}" DIRECTORY) -set(OUT_SPV "${OUT_DIR}/${SRC_NAME}.spv") +get_filename_component(OUT_NAME "${OUT_H}" NAME_WE) +set(OUT_SPV "${OUT_DIR}/${OUT_NAME}.spv") # Compilar GLSL → SPIR-V if(DEFINED STAGE AND NOT STAGE STREQUAL "")