From 0b72b56594045dd20d48307fff5bb18c1e297e57 Mon Sep 17 00:00:00 2001 From: scawful Date: Tue, 14 Oct 2025 22:22:00 -0400 Subject: [PATCH] refactor(cmake): enhance Protobuf target handling for MSVC - Introduced YAZE_PROTOBUF_WHOLEARCHIVE_TARGETS to streamline linking of Protobuf targets, excluding "lite" variants. - Updated CMake configurations across various components (yaze, yaze_core_lib, yaze_editor, yaze_net, yaze_agent, z3ed) to utilize the new whole-archive targets for MSVC builds. - Improved test suite linking to ensure all Protobuf symbols are included during the build process. Benefits: - Enhances compatibility and maintainability of Protobuf linking, leading to a more robust build configuration. --- cmake/dependencies.cmake | 7 +++++++ src/app/app.cmake | 4 ++-- src/app/core/core_library.cmake | 4 ++-- src/app/editor/editor_library.cmake | 4 ++-- src/app/net/net_library.cmake | 4 ++-- src/cli/agent.cmake | 4 ++-- src/cli/z3ed.cmake | 4 ++-- test/CMakeLists.txt | 4 ++-- 8 files changed, 21 insertions(+), 14 deletions(-) diff --git a/cmake/dependencies.cmake b/cmake/dependencies.cmake index fb32791a..f06ba4e4 100644 --- a/cmake/dependencies.cmake +++ b/cmake/dependencies.cmake @@ -105,6 +105,13 @@ else() set(YAZE_PROTOBUF_TARGET "") endif() +set(YAZE_PROTOBUF_WHOLEARCHIVE_TARGETS) +foreach(_yaze_proto_candidate IN LISTS YAZE_PROTOBUF_TARGETS) + if(NOT _yaze_proto_candidate MATCHES "lite") + list(APPEND YAZE_PROTOBUF_WHOLEARCHIVE_TARGETS ${_yaze_proto_candidate}) + endif() +endforeach() + # SDL2 include(cmake/sdl2.cmake) diff --git a/src/app/app.cmake b/src/app/app.cmake index f43a7f1c..ecf76291 100644 --- a/src/app/app.cmake +++ b/src/app/app.cmake @@ -42,8 +42,8 @@ target_link_libraries(yaze PRIVATE ) if(YAZE_WITH_GRPC AND YAZE_PROTOBUF_TARGETS) target_link_libraries(yaze PRIVATE ${YAZE_PROTOBUF_TARGETS}) - if(MSVC) - foreach(_yaze_proto_target IN LISTS YAZE_PROTOBUF_TARGETS) + if(MSVC AND YAZE_PROTOBUF_WHOLEARCHIVE_TARGETS) + foreach(_yaze_proto_target IN LISTS YAZE_PROTOBUF_WHOLEARCHIVE_TARGETS) target_link_options(yaze PRIVATE /WHOLEARCHIVE:$) endforeach() endif() diff --git a/src/app/core/core_library.cmake b/src/app/core/core_library.cmake index 9812c321..87d867c5 100644 --- a/src/app/core/core_library.cmake +++ b/src/app/core/core_library.cmake @@ -147,8 +147,8 @@ if(YAZE_WITH_GRPC) ) if(YAZE_PROTOBUF_TARGETS) target_link_libraries(yaze_core_lib PUBLIC ${YAZE_PROTOBUF_TARGETS}) - if(MSVC) - foreach(_yaze_proto_target IN LISTS YAZE_PROTOBUF_TARGETS) + if(MSVC AND YAZE_PROTOBUF_WHOLEARCHIVE_TARGETS) + foreach(_yaze_proto_target IN LISTS YAZE_PROTOBUF_WHOLEARCHIVE_TARGETS) target_link_options(yaze_core_lib PUBLIC /WHOLEARCHIVE:$) endforeach() endif() diff --git a/src/app/editor/editor_library.cmake b/src/app/editor/editor_library.cmake index 14a7bcbe..9bc6f0ec 100644 --- a/src/app/editor/editor_library.cmake +++ b/src/app/editor/editor_library.cmake @@ -151,8 +151,8 @@ if(YAZE_WITH_GRPC) ) if(YAZE_PROTOBUF_TARGETS) target_link_libraries(yaze_editor PRIVATE ${YAZE_PROTOBUF_TARGETS}) - if(MSVC) - foreach(_yaze_proto_target IN LISTS YAZE_PROTOBUF_TARGETS) + if(MSVC AND YAZE_PROTOBUF_WHOLEARCHIVE_TARGETS) + foreach(_yaze_proto_target IN LISTS YAZE_PROTOBUF_WHOLEARCHIVE_TARGETS) target_link_options(yaze_editor PRIVATE /WHOLEARCHIVE:$) endforeach() endif() diff --git a/src/app/net/net_library.cmake b/src/app/net/net_library.cmake index 39178472..e123149d 100644 --- a/src/app/net/net_library.cmake +++ b/src/app/net/net_library.cmake @@ -86,8 +86,8 @@ if(YAZE_WITH_GRPC) ) if(YAZE_PROTOBUF_TARGETS) target_link_libraries(yaze_net PUBLIC ${YAZE_PROTOBUF_TARGETS}) - if(MSVC) - foreach(_yaze_proto_target IN LISTS YAZE_PROTOBUF_TARGETS) + if(MSVC AND YAZE_PROTOBUF_WHOLEARCHIVE_TARGETS) + foreach(_yaze_proto_target IN LISTS YAZE_PROTOBUF_WHOLEARCHIVE_TARGETS) target_link_options(yaze_net PUBLIC /WHOLEARCHIVE:$) endforeach() endif() diff --git a/src/cli/agent.cmake b/src/cli/agent.cmake index 10f227e6..60959a25 100644 --- a/src/cli/agent.cmake +++ b/src/cli/agent.cmake @@ -163,8 +163,8 @@ if(YAZE_WITH_GRPC) ) if(YAZE_PROTOBUF_TARGETS) target_link_libraries(yaze_agent PUBLIC ${YAZE_PROTOBUF_TARGETS}) - if(MSVC) - foreach(_yaze_proto_target IN LISTS YAZE_PROTOBUF_TARGETS) + if(MSVC AND YAZE_PROTOBUF_WHOLEARCHIVE_TARGETS) + foreach(_yaze_proto_target IN LISTS YAZE_PROTOBUF_WHOLEARCHIVE_TARGETS) target_link_options(yaze_agent PUBLIC /WHOLEARCHIVE:$) endforeach() endif() diff --git a/src/cli/z3ed.cmake b/src/cli/z3ed.cmake index 62ac38b6..a40ef931 100644 --- a/src/cli/z3ed.cmake +++ b/src/cli/z3ed.cmake @@ -42,8 +42,8 @@ if(YAZE_WITH_GRPC) target_link_libraries(z3ed PRIVATE grpc++ grpc++_reflection) if(YAZE_PROTOBUF_TARGETS) target_link_libraries(z3ed PRIVATE ${YAZE_PROTOBUF_TARGETS}) - if(MSVC) - foreach(_yaze_proto_target IN LISTS YAZE_PROTOBUF_TARGETS) + if(MSVC AND YAZE_PROTOBUF_WHOLEARCHIVE_TARGETS) + foreach(_yaze_proto_target IN LISTS YAZE_PROTOBUF_WHOLEARCHIVE_TARGETS) target_link_options(z3ed PRIVATE /WHOLEARCHIVE:$) endforeach() endif() diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 4659a306..32416b48 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -48,8 +48,8 @@ if(YAZE_BUILD_TESTS) if(MSVC) target_link_options(${suite_name} PRIVATE /STACK:16777216) # Force whole-archive linking for protobuf to ensure all symbols are included - if(YAZE_WITH_GRPC AND YAZE_PROTOBUF_TARGETS) - foreach(_yaze_proto_target IN LISTS YAZE_PROTOBUF_TARGETS) + if(YAZE_WITH_GRPC AND MSVC AND YAZE_PROTOBUF_WHOLEARCHIVE_TARGETS) + foreach(_yaze_proto_target IN LISTS YAZE_PROTOBUF_WHOLEARCHIVE_TARGETS) target_link_options(${suite_name} PRIVATE /WHOLEARCHIVE:$) endforeach() endif()