cmake_minimum_required(VERSION 3.15) # Фикс для Ninja на Windows if(NOT CMAKE_MAKE_PROGRAM AND WIN32) set(POTENTIAL_NINJA "${CMAKE_CURRENT_SOURCE_DIR}/ninja/ninja.exe") if(EXISTS "${POTENTIAL_NINJA}") set(CMAKE_MAKE_PROGRAM "${POTENTIAL_NINJA}" CACHE FILEPATH "Path to ninja" FORCE) endif() endif() project(space-game001 CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) # --- АВТО-ЗАГРУЗКА ЗАВИСИМОСТЕЙ --- include("${CMAKE_CURRENT_SOURCE_DIR}/../cmake/FetchDependencies.cmake") # Теперь гарантированно есть папка ../thirdparty со всеми исходниками # Список исходных файлов (без изменений) set(SOURCES ../src/main.cpp ../src/Game.cpp ../src/Environment.cpp ../src/BoneAnimatedModel.cpp ../src/TextModel.cpp ../src/Projectile.cpp ../src/SparkEmitter.cpp ../src/UiManager.cpp ../src/render/Renderer.cpp ../src/render/ShaderManager.cpp ../src/render/TextureManager.cpp ../src/render/FrameBuffer.cpp ../src/render/OpenGlExtensions.cpp ../src/utils/Utils.cpp ../src/utils/TaskManager.cpp ../src/utils/Perlin.cpp ../src/planet/PlanetData.cpp ../src/planet/PlanetObject.cpp ../src/planet/StoneObject.cpp ) add_executable(space-game001 ${SOURCES}) # Настройка путей к инклудам (используем скачанные исходники) target_include_directories(space-game001 PRIVATE ../src ../thirdparty/eigen-5.0.0 ../thirdparty/boost_1_90_0 ) # Сборка libzip через add_subdirectory (Emscripten соберет её из исходников) # Опции для либзипа, чтобы он не искал лишнего в системе set(ENABLE_GNUTLS OFF CACHE BOOL "" FORCE) set(ENABLE_OPENSSL OFF CACHE BOOL "" FORCE) set(ENABLE_WINDOWS_CRYPTO OFF CACHE BOOL "" FORCE) set(ENABLE_COMMONCRYPTO OFF CACHE BOOL "" FORCE) add_subdirectory("../thirdparty/libzip-1.11.4" libzip-build) # Линковка: # 'zip' берется из add_subdirectory # 'z' - это системный zlib Emscripten-а (флаг -sUSE_ZLIB=1 добавим ниже) target_link_libraries(space-game001 PRIVATE zip z) # Эмскриптен-флаги set(EMSCRIPTEN_FLAGS "-sUSE_SDL=2" "-sUSE_SDL_IMAGE=2" "-sUSE_LIBPNG=1" "-sUSE_ZLIB=1" # Добавили zlib порт "-pthread" "-sUSE_PTHREADS=1" "-fexceptions" ) target_compile_options(space-game001 PRIVATE ${EMSCRIPTEN_FLAGS} "-O2") set(EMSCRIPTEN_LINK_FLAGS ${EMSCRIPTEN_FLAGS} "-O2" "-sPTHREAD_POOL_SIZE=4" "-sALLOW_MEMORY_GROWTH=1" "--preload-file resources.zip" ) # Применяем настройки линковки target_link_options(space-game001 PRIVATE ${EMSCRIPTEN_LINK_FLAGS}) # Для совместимости со старыми версиями CMake, если target_link_options недостаточно string(REPLACE ";" " " EMSCRIPTEN_LINK_FLAGS_STR "${EMSCRIPTEN_LINK_FLAGS}") set_target_properties(space-game001 PROPERTIES LINK_FLAGS "${EMSCRIPTEN_LINK_FLAGS_STR}" SUFFIX ".html" ) # --- Ресурсы и Деплой (без изменений) --- set(RESOURCES_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../resources") set(RESOURCES_ZIP "${CMAKE_CURRENT_BINARY_DIR}/resources.zip") get_filename_component(RESOURCES_PARENT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/.." ABSOLUTE) add_custom_command( OUTPUT "${RESOURCES_ZIP}" COMMAND ${CMAKE_COMMAND} -E tar "cf" "${RESOURCES_ZIP}" --format=zip "resources" WORKING_DIRECTORY "${RESOURCES_PARENT_DIR}" DEPENDS "${RESOURCES_PARENT_DIR}/resources" ) add_custom_target(pack_resources DEPENDS "${RESOURCES_ZIP}") add_dependencies(space-game001 pack_resources) # Определяем путь к директории установки (относительно папки билда) set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/public") # 1. Устанавливаем основной HTML файл install(TARGETS space-game001 RUNTIME DESTINATION . ) # 2. Устанавливаем сопутствующие файлы (JS, WASM и сгенерированный архив данных) # Emscripten создает их в той же папке, что и таргет install(FILES "${CMAKE_CURRENT_BINARY_DIR}/space-game001.js" "${CMAKE_CURRENT_BINARY_DIR}/space-game001.wasm" "${CMAKE_CURRENT_BINARY_DIR}/space-game001.data" DESTINATION . ) install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/space-game001plain.html" DESTINATION . ) # Если вам все еще нужен сам resources.zip отдельно в папке public: #install(FILES "${RESOURCES_ZIP}" DESTINATION .) add_custom_command(TARGET space-game001 POST_BUILD COMMAND ${CMAKE_COMMAND} --install . WORKING_DIRECTORY "${CMAKE_BINARY_DIR}" COMMENT "Automatically deploying to public directory..." )