From 39da7b3e32d6dbb3352e5e1dde19abd4a81d1b8a Mon Sep 17 00:00:00 2001 From: Ivan Savenko Date: Wed, 27 Mar 2024 19:30:07 +0200 Subject: [PATCH] Added option to build minimal vcmi library as needed by lobby --- CMakeLists.txt | 5 + lib/CMakeLists.txt | 183 ++++++++++++++++++++----------------- lib/json/JsonValidator.cpp | 2 + 3 files changed, 107 insertions(+), 83 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index da3e68598..ed961f298 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -44,6 +44,7 @@ option(ENABLE_LUA "Enable compilation of LUA scripting module" OFF) option(ENABLE_TRANSLATIONS "Enable generation of translations for launcher and editor" ON) option(ENABLE_NULLKILLER_AI "Enable compilation of Nullkiller AI library" ON) option(ENABLE_GITVERSION "Enable Version.cpp with Git commit hash" ON) +option(ENABLE_MINIMAL_LIB "Build only core parts of vcmi library that are required for game lobby" OFF) # Compilation options @@ -248,6 +249,10 @@ if(ENABLE_SINGLE_APP_BUILD) add_definitions(-DENABLE_SINGLE_APP_BUILD) endif() +if(ENABLE_MINIMAL_LIB) + add_definitions(-DENABLE_MINIMAL_LIB) +endif() + if(APPLE_IOS) set(CMAKE_MACOSX_RPATH 1) set(CMAKE_OSX_DEPLOYMENT_TARGET 12.0) diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 5a0fbbdf3..03ee1fb9f 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -1,6 +1,48 @@ set(lib_SRCS StdInc.cpp + filesystem/AdapterLoaders.cpp + filesystem/CArchiveLoader.cpp + filesystem/CBinaryReader.cpp + filesystem/CCompressedStream.cpp + filesystem/CFileInputStream.cpp + filesystem/CFilesystemLoader.cpp + filesystem/CMemoryBuffer.cpp + filesystem/CMemoryStream.cpp + filesystem/CZipLoader.cpp + filesystem/CZipSaver.cpp + filesystem/FileInfo.cpp + filesystem/Filesystem.cpp + filesystem/MinizipExtensions.cpp + filesystem/ResourcePath.cpp + + json/JsonNode.cpp + json/JsonParser.cpp + json/JsonRandom.cpp + json/JsonUtils.cpp + json/JsonValidator.cpp + json/JsonWriter.cpp + + logging/CBasicLogConfigurator.cpp + logging/CLogger.cpp + logging/VisualLogger.cpp + + network/NetworkConnection.cpp + network/NetworkHandler.cpp + network/NetworkServer.cpp + + vstd/DateUtils.cpp + vstd/StringUtils.cpp + + CConfigHandler.cpp + CConsoleHandler.cpp + CThreadHelper.cpp + TextOperations.cpp + VCMIDirs.cpp +) + +set(lib_MAIN_SRCS + battle/AccessibilityInfo.cpp battle/BattleAction.cpp battle/BattleAttackInfo.cpp @@ -46,38 +88,13 @@ set(lib_SRCS events/PlayerGotTurn.cpp events/TurnStarted.cpp - filesystem/AdapterLoaders.cpp - filesystem/CArchiveLoader.cpp - filesystem/CBinaryReader.cpp - filesystem/CCompressedStream.cpp - filesystem/CFileInputStream.cpp - filesystem/CFilesystemLoader.cpp - filesystem/CMemoryBuffer.cpp - filesystem/CMemoryStream.cpp - filesystem/CZipLoader.cpp - filesystem/CZipSaver.cpp - filesystem/FileInfo.cpp - filesystem/Filesystem.cpp - filesystem/MinizipExtensions.cpp - filesystem/ResourcePath.cpp - json/JsonBonus.cpp - json/JsonNode.cpp - json/JsonParser.cpp - json/JsonRandom.cpp - json/JsonUtils.cpp - json/JsonValidator.cpp - json/JsonWriter.cpp gameState/CGameState.cpp gameState/CGameStateCampaign.cpp gameState/InfoAboutArmy.cpp gameState/TavernHeroesPool.cpp - logging/CBasicLogConfigurator.cpp - logging/CLogger.cpp - logging/VisualLogger.cpp - mapObjectConstructors/AObjectTypeHandler.cpp mapObjectConstructors/CBankInstanceConstructor.cpp mapObjectConstructors/CObjectClassesHandler.cpp @@ -128,10 +145,6 @@ set(lib_SRCS modding/IdentifierStorage.cpp modding/ModUtility.cpp - network/NetworkConnection.cpp - network/NetworkHandler.cpp - network/NetworkServer.cpp - networkPacks/NetPacksLib.cpp pathfinder/CGPathNode.cpp @@ -225,9 +238,6 @@ set(lib_SRCS spells/effects/RemoveObstacle.cpp spells/effects/Sacrifice.cpp - vstd/DateUtils.cpp - vstd/StringUtils.cpp - ArtifactUtils.cpp BasicTypes.cpp BattleFieldHandler.cpp @@ -236,8 +246,6 @@ set(lib_SRCS CArtifactInstance.cpp CBonusTypeHandler.cpp CBuildingHandler.cpp - CConfigHandler.cpp - CConsoleHandler.cpp CCreatureHandler.cpp CCreatureSet.cpp CGameInfoCallback.cpp @@ -249,7 +257,6 @@ set(lib_SRCS CScriptingModule.cpp CSkillHandler.cpp CStack.cpp - CThreadHelper.cpp CTownHandler.cpp GameSettings.cpp IGameCallback.cpp @@ -264,12 +271,14 @@ set(lib_SRCS RoadHandler.cpp ScriptHandler.cpp TerrainHandler.cpp - TextOperations.cpp TurnTimerInfo.cpp - VCMIDirs.cpp VCMI_Lib.cpp ) +if (NOT ENABLE_MINIMAL_LIB) + list(APPEND lib_SRCS ${lib_MAIN_SRCS}) +endif() + # Version.cpp is a generated file if(ENABLE_GITVERSION) list(APPEND lib_SRCS ${CMAKE_BINARY_DIR}/Version.cpp) @@ -280,14 +289,61 @@ endif() set(lib_HEADERS ../include/vstd/CLoggerBase.h + ../include/vstd/DateUtils.h + ../include/vstd/StringUtils.h ../Global.h ../AUTHORS.h StdInc.h + filesystem/AdapterLoaders.h + filesystem/CArchiveLoader.h + filesystem/CBinaryReader.h + filesystem/CCompressedStream.h + filesystem/CFileInputStream.h + filesystem/CFilesystemLoader.h + filesystem/CInputOutputStream.h + filesystem/CInputStream.h + filesystem/CMemoryBuffer.h + filesystem/CMemoryStream.h + filesystem/COutputStream.h + filesystem/CStream.h + filesystem/CZipLoader.h + filesystem/CZipSaver.h + filesystem/FileInfo.h + filesystem/Filesystem.h + filesystem/ISimpleResourceLoader.h + filesystem/MinizipExtensions.h + filesystem/ResourcePath.h + + json/JsonBonus.h + json/JsonFormatException.h + json/JsonNode.h + json/JsonParser.h + json/JsonRandom.h + json/JsonUtils.h + json/JsonValidator.h + json/JsonWriter.h + + logging/CBasicLogConfigurator.h + logging/CLogger.h + logging/VisualLogger.h + + network/NetworkConnection.h + network/NetworkDefines.h + network/NetworkHandler.h + network/NetworkInterface.h + network/NetworkServer.h + + CConfigHandler.h + CConsoleHandler.h + CThreadHelper.h + TextOperations.h + VCMIDirs.h +) + +set(lib_MAIN_HEADERS ../include/vstd/ContainerUtils.h ../include/vstd/RNG.h - ../include/vstd/DateUtils.h - ../include/vstd/StringUtils.h ../include/vcmi/events/AdventureEvents.h ../include/vcmi/events/ApplyDamage.h @@ -385,35 +441,6 @@ set(lib_HEADERS events/PlayerGotTurn.h events/TurnStarted.h - filesystem/AdapterLoaders.h - filesystem/CArchiveLoader.h - filesystem/CBinaryReader.h - filesystem/CCompressedStream.h - filesystem/CFileInputStream.h - filesystem/CFilesystemLoader.h - filesystem/CInputOutputStream.h - filesystem/CInputStream.h - filesystem/CMemoryBuffer.h - filesystem/CMemoryStream.h - filesystem/COutputStream.h - filesystem/CStream.h - filesystem/CZipLoader.h - filesystem/CZipSaver.h - filesystem/FileInfo.h - filesystem/Filesystem.h - filesystem/ISimpleResourceLoader.h - filesystem/MinizipExtensions.h - filesystem/ResourcePath.h - - json/JsonBonus.h - json/JsonFormatException.h - json/JsonNode.h - json/JsonParser.h - json/JsonRandom.h - json/JsonUtils.h - json/JsonValidator.h - json/JsonWriter.h - gameState/CGameState.h gameState/CGameStateCampaign.h gameState/EVictoryLossCheckResult.h @@ -423,10 +450,6 @@ set(lib_HEADERS gameState/TavernSlot.h gameState/QuestInfo.h - logging/CBasicLogConfigurator.h - logging/CLogger.h - logging/VisualLogger.h - mapObjectConstructors/AObjectTypeHandler.h mapObjectConstructors/CBankInstanceConstructor.h mapObjectConstructors/CDefaultObjectTypeHandler.h @@ -487,12 +510,6 @@ set(lib_HEADERS modding/ModUtility.h modding/ModVerificationInfo.h - network/NetworkConnection.h - network/NetworkDefines.h - network/NetworkHandler.h - network/NetworkInterface.h - network/NetworkServer.h - networkPacks/ArtifactLocation.h networkPacks/BattleChanges.h networkPacks/Component.h @@ -622,8 +639,6 @@ set(lib_HEADERS CArtifactInstance.h CBonusTypeHandler.h CBuildingHandler.h - CConfigHandler.h - CConsoleHandler.h CCreatureHandler.h CCreatureSet.h CGameInfoCallback.h @@ -640,7 +655,6 @@ set(lib_HEADERS CSoundBase.h CStack.h CStopWatch.h - CThreadHelper.h CTownHandler.h ExtraOptionsInfo.h FunctionList.h @@ -667,14 +681,16 @@ set(lib_HEADERS ScopeGuard.h StartInfo.h TerrainHandler.h - TextOperations.h TurnTimerInfo.h UnlockGuard.h - VCMIDirs.h vcmi_endian.h VCMI_Lib.h ) +if (NOT ENABLE_MINIMAL_LIB) + list(APPEND lib_HEADERS ${lib_MAIN_HEADERS}) +endif() + assign_source_group(${lib_SRCS} ${lib_HEADERS}) if(ENABLE_STATIC_LIBS) @@ -682,6 +698,7 @@ if(ENABLE_STATIC_LIBS) else() add_library(vcmi SHARED ${lib_SRCS} ${lib_HEADERS}) endif() + set_target_properties(vcmi PROPERTIES COMPILE_DEFINITIONS "VCMI_DLL=1") target_link_libraries(vcmi PUBLIC minizip::minizip ZLIB::ZLIB diff --git a/lib/json/JsonValidator.cpp b/lib/json/JsonValidator.cpp index e2134c0f8..fd4b67d49 100644 --- a/lib/json/JsonValidator.cpp +++ b/lib/json/JsonValidator.cpp @@ -422,6 +422,7 @@ static std::string additionalPropertiesCheck(JsonValidator & validator, const Js static bool testFilePresence(const std::string & scope, const ResourcePath & resource) { +#ifndef ENABLE_MINIMAL_LIB std::set allowedScopes; if(scope != ModScope::scopeBuiltin() && !scope.empty()) // all real mods may have dependencies { @@ -441,6 +442,7 @@ static bool testFilePresence(const std::string & scope, const ResourcePath & res if (CResourceHandler::get(entry)->existsResource(resource)) return true; } +#endif return false; }