142 lines
4.7 KiB
CMake
142 lines
4.7 KiB
CMake
cmake_minimum_required(VERSION 3.15)
|
|
|
|
project(space-game001 CXX)
|
|
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
|
|
# Список исходных файлов
|
|
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
|
|
./src
|
|
../thirdparty1/eigen-5.0.0
|
|
../thirdparty1/boost_1_90_0
|
|
./thirdparty/libzip-1.11.3/build-emcmake/install/include
|
|
)
|
|
|
|
# Пути к либам и сами либы
|
|
target_link_directories(space-game001 PRIVATE
|
|
./thirdparty/libzip-1.11.3/build-emcmake/install/lib
|
|
)
|
|
target_link_libraries(space-game001 zip z)
|
|
|
|
|
|
set(EMSCRIPTEN_FLAGS
|
|
"-sUSE_SDL=2"
|
|
"-sUSE_SDL_IMAGE=2"
|
|
"-sUSE_LIBPNG=1"
|
|
"-pthread"
|
|
"-sUSE_PTHREADS=1"
|
|
"-fexceptions"
|
|
)
|
|
|
|
# Добавляем флаги компиляции
|
|
target_compile_options(space-game001 PRIVATE
|
|
${EMSCRIPTEN_FLAGS}
|
|
"-O2"
|
|
)
|
|
|
|
# Специфичные флаги только для линковки
|
|
set(EMSCRIPTEN_LINK_FLAGS
|
|
${EMSCRIPTEN_FLAGS} # SDL и Pthreads нужны и здесь
|
|
"-O2"
|
|
"-sPTHREAD_POOL_SIZE=4"
|
|
"-sTOTAL_MEMORY=4294967296"
|
|
"-sINITIAL_MEMORY=3221225472"
|
|
"-sMAXIMUM_MEMORY=4294967296"
|
|
"-sALLOW_MEMORY_GROWTH=1"
|
|
"--preload-file resources.zip"
|
|
)
|
|
|
|
# Используем современный target_link_options вместо set_target_properties
|
|
target_link_options(space-game001 PRIVATE ${EMSCRIPTEN_LINK_FLAGS})
|
|
|
|
# Объединяем флаги в строку и применяем к таргету
|
|
string(REPLACE ";" " " EMSCRIPTEN_LINK_FLAGS_STR "${EMSCRIPTEN_LINK_FLAGS}")
|
|
|
|
set_target_properties(space-game001 PROPERTIES
|
|
LINK_FLAGS "${EMSCRIPTEN_LINK_FLAGS_STR}"
|
|
SUFFIX ".html"
|
|
)
|
|
|
|
# Добавляем те же флаги для компиляции (pthread, exceptions и т.д.)
|
|
target_compile_options(space-game001 PRIVATE -O2 -pthread -fexceptions)
|
|
|
|
# 1. Определяем пути
|
|
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)
|
|
|
|
# 2. Создаем команду для запаковки
|
|
add_custom_command(
|
|
OUTPUT "${RESOURCES_ZIP}"
|
|
# Указываем "resources" как объект упаковки
|
|
COMMAND ${CMAKE_COMMAND} -E tar "cf" "${RESOURCES_ZIP}" --format=zip "resources"
|
|
# Запускаем из корня проекта, чтобы путь "resources" был валидным
|
|
WORKING_DIRECTORY "${RESOURCES_PARENT_DIR}"
|
|
DEPENDS "${RESOURCES_PARENT_DIR}/resources"
|
|
COMMENT "Packing resources folder into ${RESOURCES_ZIP}..."
|
|
)
|
|
|
|
# 3. Создаем таргет-пустышку, чтобы CMake знал, что нужно запустить команду
|
|
add_custom_target(pack_resources DEPENDS "${RESOURCES_ZIP}")
|
|
|
|
# 4. Делаем основной проект зависимым от архивации
|
|
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..."
|
|
)
|