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.
This commit is contained in:
@@ -105,6 +105,13 @@ else()
|
|||||||
set(YAZE_PROTOBUF_TARGET "")
|
set(YAZE_PROTOBUF_TARGET "")
|
||||||
endif()
|
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
|
# SDL2
|
||||||
include(cmake/sdl2.cmake)
|
include(cmake/sdl2.cmake)
|
||||||
|
|
||||||
|
|||||||
@@ -42,8 +42,8 @@ target_link_libraries(yaze PRIVATE
|
|||||||
)
|
)
|
||||||
if(YAZE_WITH_GRPC AND YAZE_PROTOBUF_TARGETS)
|
if(YAZE_WITH_GRPC AND YAZE_PROTOBUF_TARGETS)
|
||||||
target_link_libraries(yaze PRIVATE ${YAZE_PROTOBUF_TARGETS})
|
target_link_libraries(yaze PRIVATE ${YAZE_PROTOBUF_TARGETS})
|
||||||
if(MSVC)
|
if(MSVC AND YAZE_PROTOBUF_WHOLEARCHIVE_TARGETS)
|
||||||
foreach(_yaze_proto_target IN LISTS YAZE_PROTOBUF_TARGETS)
|
foreach(_yaze_proto_target IN LISTS YAZE_PROTOBUF_WHOLEARCHIVE_TARGETS)
|
||||||
target_link_options(yaze PRIVATE /WHOLEARCHIVE:$<TARGET_FILE:${_yaze_proto_target}>)
|
target_link_options(yaze PRIVATE /WHOLEARCHIVE:$<TARGET_FILE:${_yaze_proto_target}>)
|
||||||
endforeach()
|
endforeach()
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
@@ -147,8 +147,8 @@ if(YAZE_WITH_GRPC)
|
|||||||
)
|
)
|
||||||
if(YAZE_PROTOBUF_TARGETS)
|
if(YAZE_PROTOBUF_TARGETS)
|
||||||
target_link_libraries(yaze_core_lib PUBLIC ${YAZE_PROTOBUF_TARGETS})
|
target_link_libraries(yaze_core_lib PUBLIC ${YAZE_PROTOBUF_TARGETS})
|
||||||
if(MSVC)
|
if(MSVC AND YAZE_PROTOBUF_WHOLEARCHIVE_TARGETS)
|
||||||
foreach(_yaze_proto_target IN LISTS YAZE_PROTOBUF_TARGETS)
|
foreach(_yaze_proto_target IN LISTS YAZE_PROTOBUF_WHOLEARCHIVE_TARGETS)
|
||||||
target_link_options(yaze_core_lib PUBLIC /WHOLEARCHIVE:$<TARGET_FILE:${_yaze_proto_target}>)
|
target_link_options(yaze_core_lib PUBLIC /WHOLEARCHIVE:$<TARGET_FILE:${_yaze_proto_target}>)
|
||||||
endforeach()
|
endforeach()
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
@@ -151,8 +151,8 @@ if(YAZE_WITH_GRPC)
|
|||||||
)
|
)
|
||||||
if(YAZE_PROTOBUF_TARGETS)
|
if(YAZE_PROTOBUF_TARGETS)
|
||||||
target_link_libraries(yaze_editor PRIVATE ${YAZE_PROTOBUF_TARGETS})
|
target_link_libraries(yaze_editor PRIVATE ${YAZE_PROTOBUF_TARGETS})
|
||||||
if(MSVC)
|
if(MSVC AND YAZE_PROTOBUF_WHOLEARCHIVE_TARGETS)
|
||||||
foreach(_yaze_proto_target IN LISTS YAZE_PROTOBUF_TARGETS)
|
foreach(_yaze_proto_target IN LISTS YAZE_PROTOBUF_WHOLEARCHIVE_TARGETS)
|
||||||
target_link_options(yaze_editor PRIVATE /WHOLEARCHIVE:$<TARGET_FILE:${_yaze_proto_target}>)
|
target_link_options(yaze_editor PRIVATE /WHOLEARCHIVE:$<TARGET_FILE:${_yaze_proto_target}>)
|
||||||
endforeach()
|
endforeach()
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
@@ -86,8 +86,8 @@ if(YAZE_WITH_GRPC)
|
|||||||
)
|
)
|
||||||
if(YAZE_PROTOBUF_TARGETS)
|
if(YAZE_PROTOBUF_TARGETS)
|
||||||
target_link_libraries(yaze_net PUBLIC ${YAZE_PROTOBUF_TARGETS})
|
target_link_libraries(yaze_net PUBLIC ${YAZE_PROTOBUF_TARGETS})
|
||||||
if(MSVC)
|
if(MSVC AND YAZE_PROTOBUF_WHOLEARCHIVE_TARGETS)
|
||||||
foreach(_yaze_proto_target IN LISTS YAZE_PROTOBUF_TARGETS)
|
foreach(_yaze_proto_target IN LISTS YAZE_PROTOBUF_WHOLEARCHIVE_TARGETS)
|
||||||
target_link_options(yaze_net PUBLIC /WHOLEARCHIVE:$<TARGET_FILE:${_yaze_proto_target}>)
|
target_link_options(yaze_net PUBLIC /WHOLEARCHIVE:$<TARGET_FILE:${_yaze_proto_target}>)
|
||||||
endforeach()
|
endforeach()
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
@@ -163,8 +163,8 @@ if(YAZE_WITH_GRPC)
|
|||||||
)
|
)
|
||||||
if(YAZE_PROTOBUF_TARGETS)
|
if(YAZE_PROTOBUF_TARGETS)
|
||||||
target_link_libraries(yaze_agent PUBLIC ${YAZE_PROTOBUF_TARGETS})
|
target_link_libraries(yaze_agent PUBLIC ${YAZE_PROTOBUF_TARGETS})
|
||||||
if(MSVC)
|
if(MSVC AND YAZE_PROTOBUF_WHOLEARCHIVE_TARGETS)
|
||||||
foreach(_yaze_proto_target IN LISTS YAZE_PROTOBUF_TARGETS)
|
foreach(_yaze_proto_target IN LISTS YAZE_PROTOBUF_WHOLEARCHIVE_TARGETS)
|
||||||
target_link_options(yaze_agent PUBLIC /WHOLEARCHIVE:$<TARGET_FILE:${_yaze_proto_target}>)
|
target_link_options(yaze_agent PUBLIC /WHOLEARCHIVE:$<TARGET_FILE:${_yaze_proto_target}>)
|
||||||
endforeach()
|
endforeach()
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
@@ -42,8 +42,8 @@ if(YAZE_WITH_GRPC)
|
|||||||
target_link_libraries(z3ed PRIVATE grpc++ grpc++_reflection)
|
target_link_libraries(z3ed PRIVATE grpc++ grpc++_reflection)
|
||||||
if(YAZE_PROTOBUF_TARGETS)
|
if(YAZE_PROTOBUF_TARGETS)
|
||||||
target_link_libraries(z3ed PRIVATE ${YAZE_PROTOBUF_TARGETS})
|
target_link_libraries(z3ed PRIVATE ${YAZE_PROTOBUF_TARGETS})
|
||||||
if(MSVC)
|
if(MSVC AND YAZE_PROTOBUF_WHOLEARCHIVE_TARGETS)
|
||||||
foreach(_yaze_proto_target IN LISTS YAZE_PROTOBUF_TARGETS)
|
foreach(_yaze_proto_target IN LISTS YAZE_PROTOBUF_WHOLEARCHIVE_TARGETS)
|
||||||
target_link_options(z3ed PRIVATE /WHOLEARCHIVE:$<TARGET_FILE:${_yaze_proto_target}>)
|
target_link_options(z3ed PRIVATE /WHOLEARCHIVE:$<TARGET_FILE:${_yaze_proto_target}>)
|
||||||
endforeach()
|
endforeach()
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
@@ -48,8 +48,8 @@ if(YAZE_BUILD_TESTS)
|
|||||||
if(MSVC)
|
if(MSVC)
|
||||||
target_link_options(${suite_name} PRIVATE /STACK:16777216)
|
target_link_options(${suite_name} PRIVATE /STACK:16777216)
|
||||||
# Force whole-archive linking for protobuf to ensure all symbols are included
|
# Force whole-archive linking for protobuf to ensure all symbols are included
|
||||||
if(YAZE_WITH_GRPC AND YAZE_PROTOBUF_TARGETS)
|
if(YAZE_WITH_GRPC AND MSVC AND YAZE_PROTOBUF_WHOLEARCHIVE_TARGETS)
|
||||||
foreach(_yaze_proto_target IN LISTS YAZE_PROTOBUF_TARGETS)
|
foreach(_yaze_proto_target IN LISTS YAZE_PROTOBUF_WHOLEARCHIVE_TARGETS)
|
||||||
target_link_options(${suite_name} PRIVATE /WHOLEARCHIVE:$<TARGET_FILE:${_yaze_proto_target}>)
|
target_link_options(${suite_name} PRIVATE /WHOLEARCHIVE:$<TARGET_FILE:${_yaze_proto_target}>)
|
||||||
endforeach()
|
endforeach()
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
Reference in New Issue
Block a user