From b49f95e1e9746e6a0717dd1f798b3af0961417c7 Mon Sep 17 00:00:00 2001 From: Ovahlord Date: Mon, 9 Oct 2023 21:40:38 +0200 Subject: [PATCH] Build: added support for unity builds in most projects except for StormLib, ZLib and Scripts --- cmake/options.cmake | 2 +- cmake/showoptions.cmake | 6 ++++++ dep/MinHook/CMakeLists.txt | 9 +++++++++ dep/bzip2/CMakeLists.txt | 9 +++++++++ dep/efsw/CMakeLists.txt | 9 +++++++++ dep/fmt/CMakeLists.txt | 9 +++++++++ dep/g3dlite/CMakeLists.txt | 9 +++++++++ dep/gsoap/CMakeLists.txt | 9 +++++++++ dep/jemalloc/CMakeLists.txt | 9 +++++++++ dep/libzmq/CMakeLists.txt | 9 +++++++++ dep/recastnavigation/Detour/CMakeLists.txt | 9 +++++++++ dep/recastnavigation/Recast/CMakeLists.txt | 9 +++++++++ dep/zmqpp/CMakeLists.txt | 9 +++++++++ src/common/CMakeLists.txt | 9 +++++++++ src/server/bnetserver/CMakeLists.txt | 9 +++++++++ src/server/database/CMakeLists.txt | 9 +++++++++ src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp | 2 +- src/server/game/CMakeLists.txt | 9 +++++++++ src/server/game/Warden/WardenMac.cpp | 4 ++-- src/server/shared/CMakeLists.txt | 9 +++++++++ src/server/shared/DataStores/DBCDatabaseLoader.cpp | 4 ++-- src/server/worldserver/CMakeLists.txt | 9 +++++++++ src/tools/client_launcher/CMakeLists.txt | 9 +++++++++ src/tools/client_patcher/CMakeLists.txt | 9 +++++++++ src/tools/connection_patcher/CMakeLists.txt | 9 +++++++++ src/tools/map_extractor/CMakeLists.txt | 9 +++++++++ src/tools/mmaps_generator/CMakeLists.txt | 9 +++++++++ src/tools/vmap4_extractor/CMakeLists.txt | 9 +++++++++ 28 files changed, 219 insertions(+), 6 deletions(-) diff --git a/cmake/options.cmake b/cmake/options.cmake index 0466ff574a1..8c13e295ea7 100644 --- a/cmake/options.cmake +++ b/cmake/options.cmake @@ -51,4 +51,4 @@ set(WITH_SOURCE_TREE "hierarchical" CACHE STRING "Build the source tree for I set_property(CACHE WITH_SOURCE_TREE PROPERTY STRINGS no flat hierarchical hierarchical-folders) option(WITHOUT_GIT "Disable the GIT testing routines" 0) option(BUILD_TESTING "Build test suite" 0) - +option(UNITY_BUILDS "Enables the unity build mode which combines multiple source files into buckets to speed up build time" 0) diff --git a/cmake/showoptions.cmake b/cmake/showoptions.cmake index fbf27a069a4..cd493049230 100644 --- a/cmake/showoptions.cmake +++ b/cmake/showoptions.cmake @@ -38,6 +38,12 @@ else() message("* Build unit tests : No (default)") endif() +if(UNITY_BUILDS) + message("* Unity build enabled : Yes") +else() + message("* Unity build enabled : No (default)") +endif() + if(USE_COREPCH) message("* Build core w/PCH : Yes (default)") else() diff --git a/dep/MinHook/CMakeLists.txt b/dep/MinHook/CMakeLists.txt index a6bf5c00c49..6646b4e1c9b 100644 --- a/dep/MinHook/CMakeLists.txt +++ b/dep/MinHook/CMakeLists.txt @@ -55,3 +55,12 @@ else() set_target_properties(minhook PROPERTIES POSTFIX "") set_target_properties(minhook PROPERTIES DEBUG_POSTFIX "d") endif() + +if(UNITY_BUILDS) + set_target_properties(minhook + PROPERTIES UNITY_BUILD ON) + set_target_properties(minhook + PROPERTIES + UNITY_BUILD_MODE BATCH + UNITY_BUILD_BATCH_SIZE 2) +endif() diff --git a/dep/bzip2/CMakeLists.txt b/dep/bzip2/CMakeLists.txt index 5885bb3160c..1fbdf16d01b 100644 --- a/dep/bzip2/CMakeLists.txt +++ b/dep/bzip2/CMakeLists.txt @@ -41,3 +41,12 @@ else() FOLDER "dep") endif() + +if(UNITY_BUILDS) + set_target_properties(bzip2 + PROPERTIES UNITY_BUILD ON) + set_target_properties(bzip2 + PROPERTIES + UNITY_BUILD_MODE BATCH + UNITY_BUILD_BATCH_SIZE 8) +endif() diff --git a/dep/efsw/CMakeLists.txt b/dep/efsw/CMakeLists.txt index 03f6c153115..c39c7ae7410 100644 --- a/dep/efsw/CMakeLists.txt +++ b/dep/efsw/CMakeLists.txt @@ -88,3 +88,12 @@ if (BUILD_SHARED_LIBS) else () add_library(efsw INTERFACE IMPORTED GLOBAL) endif () + +if(UNITY_BUILDS) + set_target_properties(efsw + PROPERTIES UNITY_BUILD ON) + set_target_properties(efsw + PROPERTIES + UNITY_BUILD_MODE BATCH + UNITY_BUILD_BATCH_SIZE 8) +endif() diff --git a/dep/fmt/CMakeLists.txt b/dep/fmt/CMakeLists.txt index d96b5dbde75..63061221d10 100644 --- a/dep/fmt/CMakeLists.txt +++ b/dep/fmt/CMakeLists.txt @@ -61,3 +61,12 @@ set_target_properties(fmt PROPERTIES FOLDER "dep") + +if(UNITY_BUILDS) + set_target_properties(fmt + PROPERTIES UNITY_BUILD ON) + set_target_properties(fmt + PROPERTIES + UNITY_BUILD_MODE BATCH + UNITY_BUILD_BATCH_SIZE 8) +endif() diff --git a/dep/g3dlite/CMakeLists.txt b/dep/g3dlite/CMakeLists.txt index 90d2280cc7b..4197f653ab6 100644 --- a/dep/g3dlite/CMakeLists.txt +++ b/dep/g3dlite/CMakeLists.txt @@ -71,3 +71,12 @@ set_target_properties(g3dlib PROPERTIES FOLDER "dep") + +if(UNITY_BUILDS) + set_target_properties(g3dlib + PROPERTIES UNITY_BUILD ON) + set_target_properties(g3dlib + PROPERTIES + UNITY_BUILD_MODE BATCH + UNITY_BUILD_BATCH_SIZE 8) +endif() diff --git a/dep/gsoap/CMakeLists.txt b/dep/gsoap/CMakeLists.txt index 853e7cb8a8f..eee1e1a69ed 100644 --- a/dep/gsoap/CMakeLists.txt +++ b/dep/gsoap/CMakeLists.txt @@ -27,6 +27,15 @@ set_target_properties(gsoap FOLDER "dep") +if(UNITY_BUILDS) + set_target_properties(gsoap + PROPERTIES UNITY_BUILD ON) + set_target_properties(gsoap + PROPERTIES + UNITY_BUILD_MODE BATCH + UNITY_BUILD_BATCH_SIZE 7) +endif() + if (MSVC) # Little fix for MSVC / Windows platforms target_compile_definitions(gsoap diff --git a/dep/jemalloc/CMakeLists.txt b/dep/jemalloc/CMakeLists.txt index 653c322f5f7..879927d9f90 100644 --- a/dep/jemalloc/CMakeLists.txt +++ b/dep/jemalloc/CMakeLists.txt @@ -117,3 +117,12 @@ else() valgrind) endif() + +if(UNITY_BUILDS) + set_target_properties(jemalloc + PROPERTIES UNITY_BUILD ON) + set_target_properties(jemalloc + PROPERTIES + UNITY_BUILD_MODE BATCH + UNITY_BUILD_BATCH_SIZE 8) +endif() diff --git a/dep/libzmq/CMakeLists.txt b/dep/libzmq/CMakeLists.txt index a8fa5764cd2..286ff128d13 100644 --- a/dep/libzmq/CMakeLists.txt +++ b/dep/libzmq/CMakeLists.txt @@ -217,3 +217,12 @@ target_compile_definitions(libzmq -DZMQ_STATIC ${ZMQ_PLATFORM} ${ADDITIONAL_DEFINES}) + +if(UNITY_BUILDS) + set_target_properties(libzmq + PROPERTIES UNITY_BUILD ON) + set_target_properties(libzmq + PROPERTIES + UNITY_BUILD_MODE BATCH + UNITY_BUILD_BATCH_SIZE 2) +endif() diff --git a/dep/recastnavigation/Detour/CMakeLists.txt b/dep/recastnavigation/Detour/CMakeLists.txt index 4ea573681f7..9579c21b63c 100644 --- a/dep/recastnavigation/Detour/CMakeLists.txt +++ b/dep/recastnavigation/Detour/CMakeLists.txt @@ -34,3 +34,12 @@ set_target_properties(Detour PROPERTIES FOLDER "dep") + +if(UNITY_BUILDS) + set_target_properties(Detour + PROPERTIES UNITY_BUILD ON) + set_target_properties(Detour + PROPERTIES + UNITY_BUILD_MODE BATCH + UNITY_BUILD_BATCH_SIZE 7) +endif() diff --git a/dep/recastnavigation/Recast/CMakeLists.txt b/dep/recastnavigation/Recast/CMakeLists.txt index 0346d74001e..feeae85e8a6 100644 --- a/dep/recastnavigation/Recast/CMakeLists.txt +++ b/dep/recastnavigation/Recast/CMakeLists.txt @@ -38,3 +38,12 @@ set_target_properties(Recast PROPERTIES FOLDER "dep") + +if(UNITY_BUILDS) + set_target_properties(Recast + PROPERTIES UNITY_BUILD ON) + set_target_properties(Recast + PROPERTIES + UNITY_BUILD_MODE BATCH + UNITY_BUILD_BATCH_SIZE 2) +endif() diff --git a/dep/zmqpp/CMakeLists.txt b/dep/zmqpp/CMakeLists.txt index 5eba9cb70e3..cae2c08c4fc 100644 --- a/dep/zmqpp/CMakeLists.txt +++ b/dep/zmqpp/CMakeLists.txt @@ -33,3 +33,12 @@ target_compile_definitions(zmqpp -DBUILD_VERSION_MINOR=2 -DBUILD_VERSION_REVISION=0 -DBUILD_VERSION="3.2.0") + +if(UNITY_BUILDS) + set_target_properties(zmqpp + PROPERTIES UNITY_BUILD ON) + set_target_properties(zmqpp + PROPERTIES + UNITY_BUILD_MODE BATCH + UNITY_BUILD_BATCH_SIZE 6) +endif() diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt index 2f9eeebac40..636da64ad9c 100644 --- a/src/common/CMakeLists.txt +++ b/src/common/CMakeLists.txt @@ -80,6 +80,15 @@ set_target_properties(common FOLDER "server") +if(UNITY_BUILDS) + set_target_properties(common + PROPERTIES UNITY_BUILD ON) + set_target_properties(common + PROPERTIES + UNITY_BUILD_MODE BATCH + UNITY_BUILD_BATCH_SIZE 4) +endif() + if(BUILD_SHARED_LIBS) if(UNIX) install(TARGETS common diff --git a/src/server/bnetserver/CMakeLists.txt b/src/server/bnetserver/CMakeLists.txt index 3e4a1f0f895..57a9f1cdfac 100644 --- a/src/server/bnetserver/CMakeLists.txt +++ b/src/server/bnetserver/CMakeLists.txt @@ -70,6 +70,15 @@ set_target_properties(bnetserver FOLDER "server") +if(UNITY_BUILDS) + set_target_properties(bnetserver + PROPERTIES UNITY_BUILD ON) + set_target_properties(bnetserver + PROPERTIES + UNITY_BUILD_MODE BATCH + UNITY_BUILD_BATCH_SIZE 8) +endif() + if (WIN32) if ("${CMAKE_MAKE_PROGRAM}" MATCHES "MSBuild") add_custom_command(TARGET bnetserver diff --git a/src/server/database/CMakeLists.txt b/src/server/database/CMakeLists.txt index b652e7f3ffc..a95ad71b174 100644 --- a/src/server/database/CMakeLists.txt +++ b/src/server/database/CMakeLists.txt @@ -75,3 +75,12 @@ endif() if(USE_COREPCH) add_cxx_pch(database ${PRIVATE_PCH_HEADER}) endif() + +if(UNITY_BUILDS) + set_target_properties(database + PROPERTIES UNITY_BUILD ON) + set_target_properties(database + PROPERTIES + UNITY_BUILD_MODE BATCH + UNITY_BUILD_BATCH_SIZE 8) +endif() diff --git a/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp b/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp index 31967f484b9..c4cea539e13 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp +++ b/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp @@ -33,7 +33,7 @@ EndScriptData */ float const MAX_PLAYER_DISTANCE = 100.0f; -enum Points +enum ScriptedFollowerPoints { POINT_COMBAT_START = 0xFFFFFF }; diff --git a/src/server/game/CMakeLists.txt b/src/server/game/CMakeLists.txt index 6e9a3009f30..bf10ff2c7d5 100644 --- a/src/server/game/CMakeLists.txt +++ b/src/server/game/CMakeLists.txt @@ -61,6 +61,15 @@ set_target_properties(game FOLDER "server") +if(UNITY_BUILDS) + set_target_properties(game + PROPERTIES UNITY_BUILD ON) + set_target_properties(game + PROPERTIES + UNITY_BUILD_MODE BATCH + UNITY_BUILD_BATCH_SIZE 8) +endif() + if(BUILD_SHARED_LIBS) if(UNIX) install(TARGETS game diff --git a/src/server/game/Warden/WardenMac.cpp b/src/server/game/Warden/WardenMac.cpp index 7fa412ab0fd..5f2d05a2278 100644 --- a/src/server/game/Warden/WardenMac.cpp +++ b/src/server/game/Warden/WardenMac.cpp @@ -111,7 +111,7 @@ void WardenMac::RequestHash() _session->SendPacket(&pkt); } -struct keyData { +struct keyDataMac { union { struct @@ -132,7 +132,7 @@ void WardenMac::HandleHashResult(ByteBuffer &buff) // test int keyIn[4]; - keyData mod_seed = { { { { 0x4D, 0x80, 0x8D, 0x2C, 0x77, 0xD9, 0x05, 0xC4, 0x1A, 0x63, 0x80, 0xEC, 0x08, 0x58, 0x6A, 0xFE } } } }; + keyDataMac mod_seed = { { { { 0x4D, 0x80, 0x8D, 0x2C, 0x77, 0xD9, 0x05, 0xC4, 0x1A, 0x63, 0x80, 0xEC, 0x08, 0x58, 0x6A, 0xFE } } } }; for (int i = 0; i < 4; ++i) { diff --git a/src/server/shared/CMakeLists.txt b/src/server/shared/CMakeLists.txt index 2ad80417966..f2412894ba8 100644 --- a/src/server/shared/CMakeLists.txt +++ b/src/server/shared/CMakeLists.txt @@ -55,6 +55,15 @@ set_target_properties(shared FOLDER "server") +if(UNITY_BUILDS) + set_target_properties(shared + PROPERTIES UNITY_BUILD ON) + set_target_properties(shared + PROPERTIES + UNITY_BUILD_MODE BATCH + UNITY_BUILD_BATCH_SIZE 8) +endif() + if(BUILD_SHARED_LIBS) if(UNIX) install(TARGETS shared diff --git a/src/server/shared/DataStores/DBCDatabaseLoader.cpp b/src/server/shared/DataStores/DBCDatabaseLoader.cpp index f8bc8810aa9..8a865386f44 100644 --- a/src/server/shared/DataStores/DBCDatabaseLoader.cpp +++ b/src/server/shared/DataStores/DBCDatabaseLoader.cpp @@ -50,7 +50,7 @@ DBCDatabaseLoader::DBCDatabaseLoader(std::string const& storageName, std::string } } -static char const* nullStr = ""; +static char const* dbcNullStr = ""; char* DBCDatabaseLoader::Load(uint32& records, char**& indexTable) { @@ -130,7 +130,7 @@ char* DBCDatabaseLoader::Load(uint32& records, char**& indexTable) offset += 1; break; case FT_STRING: - *reinterpret_cast(&dataValue[offset]) = const_cast(nullStr); + *reinterpret_cast(&dataValue[offset]) = const_cast(dbcNullStr); offset += sizeof(char*); break; } diff --git a/src/server/worldserver/CMakeLists.txt b/src/server/worldserver/CMakeLists.txt index 38c5459eaa6..15581f45bff 100644 --- a/src/server/worldserver/CMakeLists.txt +++ b/src/server/worldserver/CMakeLists.txt @@ -73,6 +73,15 @@ set_target_properties(worldserver FOLDER "server") +if(UNITY_BUILDS) + set_target_properties(worldserver + PROPERTIES UNITY_BUILD ON) + set_target_properties(worldserver + PROPERTIES + UNITY_BUILD_MODE BATCH + UNITY_BUILD_BATCH_SIZE 4) +endif() + # Add all dynamic projects as dependency to the worldserver if(WORLDSERVER_DYNAMIC_SCRIPT_MODULES_DEPENDENCIES) add_dependencies(worldserver ${WORLDSERVER_DYNAMIC_SCRIPT_MODULES_DEPENDENCIES}) diff --git a/src/tools/client_launcher/CMakeLists.txt b/src/tools/client_launcher/CMakeLists.txt index dce28389e83..a11cfa39bb8 100644 --- a/src/tools/client_launcher/CMakeLists.txt +++ b/src/tools/client_launcher/CMakeLists.txt @@ -29,4 +29,13 @@ target_link_libraries(${target_name} common ) +if(UNITY_BUILDS) + set_target_properties(${target_name} + PROPERTIES UNITY_BUILD ON) + set_target_properties(${target_name} + PROPERTIES + UNITY_BUILD_MODE BATCH + UNITY_BUILD_BATCH_SIZE 8) +endif() + install(TARGETS ${target_name} DESTINATION "${CMAKE_INSTALL_PREFIX}") diff --git a/src/tools/client_patcher/CMakeLists.txt b/src/tools/client_patcher/CMakeLists.txt index 27b5334f361..c584feebff9 100644 --- a/src/tools/client_patcher/CMakeLists.txt +++ b/src/tools/client_patcher/CMakeLists.txt @@ -28,4 +28,13 @@ target_link_libraries(${target_name} minhook ) +if(UNITY_BUILDS) + set_target_properties(${target_name} + PROPERTIES UNITY_BUILD ON) + set_target_properties(${target_name} + PROPERTIES + UNITY_BUILD_MODE BATCH + UNITY_BUILD_BATCH_SIZE 4) +endif() + install(TARGETS ${target_name} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}") diff --git a/src/tools/connection_patcher/CMakeLists.txt b/src/tools/connection_patcher/CMakeLists.txt index 4090ef7e4d5..e50b212cc53 100644 --- a/src/tools/connection_patcher/CMakeLists.txt +++ b/src/tools/connection_patcher/CMakeLists.txt @@ -25,6 +25,15 @@ target_link_libraries(connection_patcher common ) +if(UNITY_BUILDS) + set_target_properties(connection_patcher + PROPERTIES UNITY_BUILD ON) + set_target_properties(connection_patcher + PROPERTIES + UNITY_BUILD_MODE BATCH + UNITY_BUILD_BATCH_SIZE 2) +endif() + if (UNIX) install(TARGETS connection_patcher DESTINATION bin) elseif (WIN32) diff --git a/src/tools/map_extractor/CMakeLists.txt b/src/tools/map_extractor/CMakeLists.txt index d73d2d4a379..ec36fa20fdd 100644 --- a/src/tools/map_extractor/CMakeLists.txt +++ b/src/tools/map_extractor/CMakeLists.txt @@ -44,6 +44,15 @@ set_target_properties(mapextractor FOLDER "tools") +if(UNITY_BUILDS) + set_target_properties(mapextractor + PROPERTIES UNITY_BUILD ON) + set_target_properties(mapextractor + PROPERTIES + UNITY_BUILD_MODE BATCH + UNITY_BUILD_BATCH_SIZE 6) +endif() + if(UNIX) install(TARGETS mapextractor DESTINATION bin) elseif(WIN32) diff --git a/src/tools/mmaps_generator/CMakeLists.txt b/src/tools/mmaps_generator/CMakeLists.txt index 34478fbdabe..fd90bc1da42 100644 --- a/src/tools/mmaps_generator/CMakeLists.txt +++ b/src/tools/mmaps_generator/CMakeLists.txt @@ -42,6 +42,15 @@ set_target_properties(mmaps_generator FOLDER "tools") +if(UNITY_BUILDS) + set_target_properties(mmaps_generator + PROPERTIES UNITY_BUILD ON) + set_target_properties(mmaps_generator + PROPERTIES + UNITY_BUILD_MODE BATCH + UNITY_BUILD_BATCH_SIZE 4) +endif() + if(UNIX) install(TARGETS mmaps_generator DESTINATION bin) elseif(WIN32) diff --git a/src/tools/vmap4_extractor/CMakeLists.txt b/src/tools/vmap4_extractor/CMakeLists.txt index ebb6acbfd4b..4eb430b7fa3 100644 --- a/src/tools/vmap4_extractor/CMakeLists.txt +++ b/src/tools/vmap4_extractor/CMakeLists.txt @@ -41,6 +41,15 @@ set_target_properties(vmap4extractor FOLDER "tools") +if(UNITY_BUILDS) + set_target_properties(vmap4extractor + PROPERTIES UNITY_BUILD ON) + set_target_properties(vmap4extractor + PROPERTIES + UNITY_BUILD_MODE BATCH + UNITY_BUILD_BATCH_SIZE 8) +endif() + if(UNIX) install(TARGETS vmap4extractor DESTINATION bin) elseif(WIN32)