From 9f56728f80a45974b0b020344e7099d50b2752b5 Mon Sep 17 00:00:00 2001 From: scawful Date: Fri, 17 Oct 2025 22:57:27 -0400 Subject: [PATCH] chore: update gRPC version to v1.75.1 and remove /WHOLEARCHIVE linking - Upgraded gRPC version from v1.68.0 to v1.75.1 for improved compatibility across all platforms. - Removed /WHOLEARCHIVE linking for protobuf to prevent duplicate version resource errors in the dependency chain. - Updated status messages to reflect the latest gRPC version and build optimizations. Benefits: - Enhances build stability and compatibility with modern toolchains. - Simplifies linking process by avoiding unnecessary options that cause conflicts. --- cmake/grpc.cmake | 16 ++++++---------- cmake/grpc_windows.cmake | 2 +- src/app/app.cmake | 12 ++---------- src/app/editor/editor_library.cmake | 6 +----- src/app/net/net_library.cmake | 6 +----- src/cli/agent.cmake | 6 +----- src/cli/z3ed.cmake | 6 +----- test/CMakeLists.txt | 8 ++------ 8 files changed, 15 insertions(+), 47 deletions(-) diff --git a/cmake/grpc.cmake b/cmake/grpc.cmake index 48a5beca..6fe7c9f0 100644 --- a/cmake/grpc.cmake +++ b/cmake/grpc.cmake @@ -116,19 +116,15 @@ if(APPLE AND CMAKE_OSX_ARCHITECTURES STREQUAL "arm64") set(ABSL_BUILD_TEST_HELPERS OFF CACHE BOOL "" FORCE) endif() -# Declare gRPC with platform-specific versions -# - macOS/Linux: v1.75.1 (has ARM64 + modern Clang fixes) -# - Windows: v1.68.0 (stable, no protobuf resource file issues) +# Declare gRPC version - using latest for all platforms +# v1.75.1 has ARM64 + modern compiler fixes +set(_GRPC_VERSION "v1.75.1") +set(_GRPC_VERSION_REASON "Latest stable - ARM64 macOS + modern Clang/MSVC compatibility") + +# Windows-specific: Disable BoringSSL ASM to avoid NASM build issues if(WIN32) - set(_GRPC_VERSION "v1.68.0") - set(_GRPC_VERSION_REASON "Windows clang-cl + MSVC compatibility, no protobuf LNK1241 errors") - # Disable BoringSSL ASM to avoid NASM build issues on Windows - # ASM optimizations cause NASM flag conflicts with clang-cl set(OPENSSL_NO_ASM ON CACHE BOOL "" FORCE) message(STATUS "Disabling BoringSSL ASM optimizations for Windows build compatibility") -else() - set(_GRPC_VERSION "v1.75.1") - set(_GRPC_VERSION_REASON "ARM64 macOS + modern Clang compatibility") endif() message(STATUS "FetchContent gRPC version: ${_GRPC_VERSION} (${_GRPC_VERSION_REASON})") diff --git a/cmake/grpc_windows.cmake b/cmake/grpc_windows.cmake index caab5422..64cb1fff 100644 --- a/cmake/grpc_windows.cmake +++ b/cmake/grpc_windows.cmake @@ -242,7 +242,7 @@ if(WIN32 AND YAZE_USE_VCPKG_GRPC) message(STATUS " vcpkg gRPC not found (expected if removed from vcpkg.json)") message(STATUS " Using FetchContent build (faster with caching)") message(STATUS " First build: ~10-15 min, subsequent: <1 min (cached)") - message(STATUS " Using gRPC v1.68.0 (stable for Windows, no linker errors)") + message(STATUS " Using gRPC v1.75.1 (latest stable)") message(STATUS " Note: BoringSSL ASM disabled for clang-cl compatibility") message(STATUS "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━") endif() diff --git a/src/app/app.cmake b/src/app/app.cmake index 6cbffb5b..d5e5ab1a 100644 --- a/src/app/app.cmake +++ b/src/app/app.cmake @@ -129,11 +129,7 @@ if(YAZE_WITH_GRPC) ) if(YAZE_PROTOBUF_TARGETS) target_link_libraries(yaze_app_core_lib PUBLIC ${YAZE_PROTOBUF_TARGETS}) - if(MSVC AND YAZE_PROTOBUF_WHOLEARCHIVE_TARGETS) - foreach(_yaze_proto_target IN LISTS YAZE_PROTOBUF_WHOLEARCHIVE_TARGETS) - target_link_options(yaze_app_core_lib PUBLIC /WHOLEARCHIVE:$) - endforeach() - endif() + # NOTE: Removed /WHOLEARCHIVE for protobuf - causes duplicate version.res in dependency chain endif() message(STATUS " - gRPC ROM service + canvas automation enabled") @@ -207,11 +203,7 @@ target_link_libraries(yaze PRIVATE ) if(YAZE_WITH_GRPC AND YAZE_PROTOBUF_TARGETS) target_link_libraries(yaze PRIVATE ${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() + # NOTE: Removed /WHOLEARCHIVE - already linked transitively from libraries endif() # Link test support library (yaze_editor needs TestManager) diff --git a/src/app/editor/editor_library.cmake b/src/app/editor/editor_library.cmake index 7f95cf5c..862d3491 100644 --- a/src/app/editor/editor_library.cmake +++ b/src/app/editor/editor_library.cmake @@ -157,11 +157,7 @@ if(YAZE_WITH_GRPC) ) if(YAZE_PROTOBUF_TARGETS) target_link_libraries(yaze_editor PRIVATE ${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() + # NOTE: Removed /WHOLEARCHIVE for protobuf - causes duplicate version.res in dependency chain endif() endif() diff --git a/src/app/net/net_library.cmake b/src/app/net/net_library.cmake index e123149d..25faa0aa 100644 --- a/src/app/net/net_library.cmake +++ b/src/app/net/net_library.cmake @@ -86,11 +86,7 @@ if(YAZE_WITH_GRPC) ) if(YAZE_PROTOBUF_TARGETS) target_link_libraries(yaze_net PUBLIC ${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() + # NOTE: Removed /WHOLEARCHIVE for protobuf - causes duplicate version.res in dependency chain endif() message(STATUS " - gRPC ROM service enabled") diff --git a/src/cli/agent.cmake b/src/cli/agent.cmake index 6668fbe6..912725c7 100644 --- a/src/cli/agent.cmake +++ b/src/cli/agent.cmake @@ -163,11 +163,7 @@ if(YAZE_WITH_GRPC) ) if(YAZE_PROTOBUF_TARGETS) target_link_libraries(yaze_agent PUBLIC ${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() + # NOTE: Removed /WHOLEARCHIVE for protobuf - causes duplicate version.res in dependency chain endif() # Note: YAZE_WITH_GRPC is defined globally via add_compile_definitions in root CMakeLists.txt diff --git a/src/cli/z3ed.cmake b/src/cli/z3ed.cmake index a40ef931..752a9add 100644 --- a/src/cli/z3ed.cmake +++ b/src/cli/z3ed.cmake @@ -42,10 +42,6 @@ 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 AND YAZE_PROTOBUF_WHOLEARCHIVE_TARGETS) - foreach(_yaze_proto_target IN LISTS YAZE_PROTOBUF_WHOLEARCHIVE_TARGETS) - target_link_options(z3ed PRIVATE /WHOLEARCHIVE:$) - endforeach() - endif() + # NOTE: Removed /WHOLEARCHIVE for protobuf - causes duplicate version.res in dependency chain endif() endif() diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 32416b48..f3dc94a8 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -47,12 +47,8 @@ if(YAZE_BUILD_TESTS) message(STATUS "Configuring Windows stack size for ${suite_name} to 16MB") 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 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() + # NOTE: Removed /WHOLEARCHIVE for protobuf - causes LNK1241 duplicate version.res + # Protobuf symbols are already linked transitively from yaze_test_support else() target_link_options(${suite_name} PRIVATE -Wl,--stack,16777216) endif()