diff --git a/proj-linux/CMakeLists.txt b/proj-linux/CMakeLists.txt index 9f34485..85f1eb9 100644 --- a/proj-linux/CMakeLists.txt +++ b/proj-linux/CMakeLists.txt @@ -5,6 +5,8 @@ project(witcher001 LANGUAGES C CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) +option(STEAMSDK "Enable Steamworks SDK integration" OFF) + # =========================================== # Поиск системных зависимостей Linux # =========================================== @@ -166,8 +168,7 @@ target_include_directories(witcher001 PRIVATE ${LIBZIP_INCLUDE_DIRS} ${LUA_INCLUDE_DIRS} ${EIGEN3_INCLUDE_DIRS} - # sol2 - header-only, берем напрямую из thirdparty (если он там есть) - # или можно установить системный libsol-dev и убрать этот путь + # sol2 - header-only, берем напрямую из thirdparty "${CMAKE_CURRENT_SOURCE_DIR}/../thirdparty/sol2-3.3.0/include" ) @@ -202,6 +203,80 @@ target_link_libraries(witcher001 PRIVATE pthread ) +# =========================================== +# Интеграция Steamworks SDK (если STEAMSDK=ON) +# =========================================== +if(STEAMSDK) + message(STATUS "Steamworks SDK integration is ENABLED.") + + target_compile_definitions(witcher001 PRIVATE STEAMSDK) + + set(STEAM_SDK_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../thirdparty/steamworks_sdk_164/sdk") + + target_include_directories(witcher001 PRIVATE + "${STEAM_SDK_DIR}/public" + "${STEAM_SDK_DIR}/public/steam" + ) + + set(STEAM_LIB_DIR "${STEAM_SDK_DIR}/redistributable_bin/linux64") + set(STEAM_LIB_NAME "steam_api") + set(STEAM_SO_NAME "libsteam_api.so") + + find_library(STEAM_LIBRARY + NAMES ${STEAM_LIB_NAME} + PATHS ${STEAM_LIB_DIR} + NO_DEFAULT_PATH + ) + + if(STEAM_LIBRARY) + target_link_libraries(witcher001 PRIVATE ${STEAM_LIBRARY}) + message(STATUS "Found Steam API library: ${STEAM_LIBRARY}") + else() + message(FATAL_ERROR "Steam API library (${STEAM_LIB_NAME}) NOT found in ${STEAM_LIB_DIR}!") + endif() + + file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/steam_appid.txt" "4945840") +else() + message(STATUS "Steamworks SDK integration is DISABLED.") +endif() + +# =========================================== +# Настройка RPATH и копирование динамических библиотек +# =========================================== + +# Указываем линкеру искать .so файлы в той же папке, где лежит бинарник ($ORIGIN) +set_target_properties(witcher001 PROPERTIES + INSTALL_RPATH "$ORIGIN" + BUILD_WITH_INSTALL_RPATH TRUE +) + +# Поиск директорий, где лежат библиотеки +get_filename_component(LUA_SO_DIR ${LUA_SO_PATH} DIRECTORY) +get_filename_component(LIBZIP_SO_DIR ${LIBZIP_SO_PATH} DIRECTORY) + +add_custom_command(TARGET witcher001 POST_BUILD + COMMAND ${CMAKE_COMMAND} -E echo "Copying shared libraries with sonames..." + # Копируем библиотеки и все их симлинки (cp -P сохраняет структуру симлинков) + COMMAND sh -c "cp -P ${LUA_SO_DIR}/liblua5.4.so* '$/'" + COMMAND sh -c "cp -P ${LIBZIP_SO_DIR}/libzip.so* '$/'" +) + +# Если включен Steam, копируем libsteam_api.so и steam_appid.txt +if(STEAMSDK) + add_custom_command(TARGET witcher001 POST_BUILD + COMMAND ${CMAKE_COMMAND} -E echo "Copying Steam SDK components..." + COMMAND ${CMAKE_COMMAND} -E copy_if_different + "${STEAM_LIB_DIR}/${STEAM_SO_NAME}" + "$/${STEAM_SO_NAME}" + COMMAND ${CMAKE_COMMAND} -E copy_if_different + "${CMAKE_CURRENT_BINARY_DIR}/steam_appid.txt" + "$/steam_appid.txt" + COMMAND ${CMAKE_COMMAND} -E copy_if_different + "${CMAKE_CURRENT_BINARY_DIR}/steam_appid.txt" + "${CMAKE_BINARY_DIR}/steam_appid.txt" + ) +endif() + # =========================================== # Копирование ресурсов после сборки # =========================================== @@ -210,8 +285,6 @@ set(RUNTIME_RESOURCE_DIRS "audio" ) -# В Linux (при использовании Make/Ninja) бинарник обычно создается в CMAKE_BINARY_DIR. -# Копируем ресурсы рядом с исполняемым файлом. foreach(resdir IN LISTS RUNTIME_RESOURCE_DIRS) add_custom_command(TARGET witcher001 POST_BUILD COMMAND ${CMAKE_COMMAND} -E echo "Copying ${resdir} to binary dir..." @@ -219,4 +292,4 @@ foreach(resdir IN LISTS RUNTIME_RESOURCE_DIRS) "${CMAKE_SOURCE_DIR}/../${resdir}" "${CMAKE_BINARY_DIR}/${resdir}" ) -endforeach() +endforeach() \ No newline at end of file