Major refactoring to multi-platform code

This commit is contained in:
Vladislav Khorev committed 2026-01-11 19:59:58 +03:00
1 parent a08ee412a6
commit c347545d0e
1154 files changed
+287 -142311

No files matched your search

+37 -37
View File
@@ -1,11 +1,23 @@
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
@@ -30,86 +42,74 @@ set(SOURCES
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
../thirdparty/eigen-5.0.0
../thirdparty/boost_1_90_0
)
# Пути к либам и сами либы
target_link_directories(space-game001 PRIVATE
./thirdparty/libzip-1.11.3/build-emcmake/install/lib
)
target_link_libraries(space-game001 zip z)
# Сборка 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
target_compile_options(space-game001 PRIVATE ${EMSCRIPTEN_FLAGS} "-O2")
set(EMSCRIPTEN_LINK_FLAGS
${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})
# Объединяем флаги в строку и применяем к таргету
# Для совместимости со старыми версиями 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"
)
# Добавляем те же флаги для компиляции (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")