chore: update protobuf linking strategy for Windows

- Adjusted CMake files to conditionally link protobuf using /WHOLEARCHIVE on Windows to include internal symbols while avoiding LNK1241 errors.
- Updated linking logic for `yaze`, `yaze_editor`, `yaze_emu`, `z3ed`, and test suites to ensure compatibility across platforms.

Benefits:
- Improves build stability and compatibility for Windows users by ensuring proper symbol inclusion without resource duplication issues.
This commit is contained in:
scawful
2025-10-18 12:01:12 -04:00
parent 5894809aaf
commit 51cf1681e5
10 changed files with 44 additions and 32 deletions

View File

@@ -34,11 +34,13 @@ if(YAZE_BUILD_EMU AND NOT YAZE_MINIMAL_BUILD)
message(WARNING "yaze_emu needs yaze_test_support but TARGET not found")
endif()
# Apply /WHOLEARCHIVE for protobuf at executable level (Windows)
# Windows: Link protobuf with /WHOLEARCHIVE (not via libraries to avoid LNK1241)
if(WIN32 AND MSVC AND YAZE_WITH_GRPC AND YAZE_PROTOBUF_WHOLEARCHIVE_TARGETS)
foreach(_yaze_proto_target IN LISTS YAZE_PROTOBUF_WHOLEARCHIVE_TARGETS)
target_link_options(yaze_emu PRIVATE /WHOLEARCHIVE:$<TARGET_FILE:${_yaze_proto_target}>)
endforeach()
elseif(YAZE_WITH_GRPC AND YAZE_PROTOBUF_TARGETS)
target_link_libraries(yaze_emu PRIVATE ${YAZE_PROTOBUF_TARGETS})
endif()
# Test engine is always available when tests are built
@@ -61,11 +63,13 @@ if(YAZE_BUILD_EMU AND NOT YAZE_MINIMAL_BUILD)
absl::str_format
)
# Apply /WHOLEARCHIVE for protobuf at executable level (Windows)
# Windows: Link protobuf with /WHOLEARCHIVE (not via libraries to avoid LNK1241)
if(WIN32 AND MSVC AND YAZE_WITH_GRPC AND YAZE_PROTOBUF_WHOLEARCHIVE_TARGETS)
foreach(_yaze_proto_target IN LISTS YAZE_PROTOBUF_WHOLEARCHIVE_TARGETS)
target_link_options(yaze_emu_test PRIVATE /WHOLEARCHIVE:$<TARGET_FILE:${_yaze_proto_target}>)
endforeach()
elseif(YAZE_WITH_GRPC AND YAZE_PROTOBUF_TARGETS)
target_link_libraries(yaze_emu_test PRIVATE ${YAZE_PROTOBUF_TARGETS})
endif()
message(STATUS "✓ yaze_emu_test: Headless emulator test harness configured")