refactor: JA_Sound_t RAII — buffer amb unique_ptr + SDLFreeDeleter, elimina JA_NewSound
This commit is contained in:
@@ -80,8 +80,22 @@ set(APP_SOURCES
|
||||
|
||||
# Configuración de SDL3
|
||||
# En macOS bundle mode usamos el xcframework (universal arm64+x86_64).
|
||||
# En el resto de casos, o en macOS sin bundle, usamos SDL3 del sistema via find_package.
|
||||
if(APPLE AND MACOS_BUNDLE)
|
||||
# En emscripten compilamos SDL3 desde source con FetchContent (no hi ha paquet de sistema).
|
||||
# En el resto de casos, usamos SDL3 del sistema via find_package.
|
||||
if(EMSCRIPTEN)
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(
|
||||
SDL3
|
||||
GIT_REPOSITORY https://github.com/libsdl-org/SDL.git
|
||||
GIT_TAG release-3.4.4
|
||||
GIT_SHALLOW TRUE
|
||||
)
|
||||
set(SDL_SHARED OFF CACHE BOOL "" FORCE)
|
||||
set(SDL_STATIC ON CACHE BOOL "" FORCE)
|
||||
set(SDL_TEST_LIBRARY OFF CACHE BOOL "" FORCE)
|
||||
FetchContent_MakeAvailable(SDL3)
|
||||
message(STATUS "SDL3: compilat des de source per a Emscripten (FetchContent)")
|
||||
elseif(APPLE AND MACOS_BUNDLE)
|
||||
set(SDL3_XCFRAMEWORK_SLICE "${CMAKE_SOURCE_DIR}/release/macos/frameworks/SDL3.xcframework/macos-arm64_x86_64")
|
||||
message(STATUS "SDL3: usando xcframework (${SDL3_XCFRAMEWORK_SLICE})")
|
||||
else()
|
||||
@@ -89,8 +103,8 @@ else()
|
||||
message(STATUS "SDL3 encontrado: ${SDL3_INCLUDE_DIRS}")
|
||||
endif()
|
||||
|
||||
# --- COMPILACIÓ SHADERS SPIR-V (Linux/Windows — macOS usa Metal) ---
|
||||
if(NOT APPLE)
|
||||
# --- COMPILACIÓ SHADERS SPIR-V (Linux/Windows — macOS usa Metal, Emscripten no suporta SDL3 GPU) ---
|
||||
if(NOT APPLE AND NOT EMSCRIPTEN)
|
||||
find_program(GLSLC_EXE NAMES glslc)
|
||||
|
||||
set(SHADERS_DIR "${CMAKE_SOURCE_DIR}/data/shaders")
|
||||
@@ -137,15 +151,25 @@ if(NOT APPLE)
|
||||
endforeach()
|
||||
message(STATUS "glslc no trobat — usant headers SPIR-V precompilats")
|
||||
endif()
|
||||
elseif(EMSCRIPTEN)
|
||||
message(STATUS "Emscripten: shaders SPIR-V omesos (SDL3 GPU no suportat a WebGL2)")
|
||||
else()
|
||||
message(STATUS "macOS: shaders SPIR-V omesos (usa Metal)")
|
||||
endif()
|
||||
|
||||
# --- EJECUTABLE ---
|
||||
add_executable(${PROJECT_NAME} ${APP_SOURCES})
|
||||
# A emscripten excloïm sdl3gpu_shader.cpp — SDL3 GPU no suporta WebGL2, i el
|
||||
# fallback SDL_Renderer de Screen (amb NO_SHADERS) fa tota la presentació.
|
||||
if(EMSCRIPTEN)
|
||||
set(APP_SOURCES_WASM ${APP_SOURCES})
|
||||
list(REMOVE_ITEM APP_SOURCES_WASM source/core/rendering/sdl3gpu/sdl3gpu_shader.cpp)
|
||||
add_executable(${PROJECT_NAME} ${APP_SOURCES_WASM})
|
||||
else()
|
||||
add_executable(${PROJECT_NAME} ${APP_SOURCES})
|
||||
endif()
|
||||
|
||||
# Shaders han de compilar-se abans que l'executable (Linux/Windows amb glslc)
|
||||
if(NOT APPLE AND GLSLC_EXE)
|
||||
if(NOT APPLE AND NOT EMSCRIPTEN AND GLSLC_EXE)
|
||||
add_dependencies(${PROJECT_NAME} shaders)
|
||||
endif()
|
||||
|
||||
@@ -176,10 +200,30 @@ target_compile_options(${PROJECT_NAME} PRIVATE $<$<CONFIG:RELEASE>:-Os -ffunctio
|
||||
# --- CONFIGURACIÓN POR PLATAFORMA ---
|
||||
if(WIN32)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE mingw32)
|
||||
elseif(EMSCRIPTEN)
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE EMSCRIPTEN_BUILD NO_SHADERS)
|
||||
# -fexceptions: SDL3 i fkyaml llancen std::exception; sense això, `throw`
|
||||
# acaba en `abort()`. També requerit al link per congruència ABI.
|
||||
target_compile_options(${PROJECT_NAME} PRIVATE -fexceptions)
|
||||
target_link_options(${PROJECT_NAME} PRIVATE
|
||||
"SHELL:--preload-file ${CMAKE_SOURCE_DIR}/data@/data"
|
||||
-fexceptions
|
||||
-sALLOW_MEMORY_GROWTH=1
|
||||
-sMAX_WEBGL_VERSION=2
|
||||
-sINITIAL_MEMORY=67108864
|
||||
-sASSERTIONS=1
|
||||
# ASYNCIFY permet que Emscripten gestione yields durant la precarga
|
||||
# d'assets. El main loop del joc ja usa SDL3 Callback API i no depén
|
||||
# d'Asyncify — però el preloader del `.data` sí.
|
||||
-sASYNCIFY=1
|
||||
)
|
||||
set_target_properties(${PROJECT_NAME} PROPERTIES SUFFIX ".html")
|
||||
endif()
|
||||
|
||||
# Ejecutable en la raíz del proyecto
|
||||
set_target_properties(${PROJECT_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR})
|
||||
# Ejecutable en la raíz del proyecto (solo nativos). A Emscripten queda dins build/.
|
||||
if(NOT EMSCRIPTEN)
|
||||
set_target_properties(${PROJECT_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR})
|
||||
endif()
|
||||
|
||||
# --- CLANG-FORMAT TARGETS ---
|
||||
find_program(CLANG_FORMAT_EXE NAMES clang-format)
|
||||
|
||||
Reference in New Issue
Block a user