142 lines
4.9 KiB
CMake
142 lines
4.9 KiB
CMake
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..."
|
||
)
|