[workflow,srpc] Control linkage, fix build-time link libs (#49882)

This commit is contained in:
Kai Pastor 2026-02-10 04:06:51 +01:00 committed by GitHub
parent dcac240235
commit 3734c0a0ad
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
12 changed files with 209 additions and 165 deletions

129
ports/srpc/cmake.diff Normal file
View File

@ -0,0 +1,129 @@
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 7c2d5b3..32a2f40 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -13,11 +13,9 @@ endif ()
find_package(OpenSSL REQUIRED)
set(protobuf_MODULE_COMPATIBLE ON CACHE BOOL "")
-if (WIN32)
- find_package(Protobuf REQUIRED CONFIG)
-else ()
- find_package(Protobuf 3.5.0 REQUIRED)
-endif ()
+find_package(Protobuf CONFIG REQUIRED)
+# Use target in order to carry link libraries
+set(Protobuf_LIBRARY protobuf::libprotobuf)
if (WIN32)
set (HAVE_SYS_UIO_H_01 false)
@@ -39,12 +37,21 @@ else ()
configure_file(${SNAPPY_DIR}/snappy-stubs-public.h.in ${SNAPPY_DIR}/snappy-stubs-public.h)
else ()
find_package(Snappy 1.1.6 REQUIRED CONFIG)
+ add_library(snappy ALIAS Snappy::snappy)
set(SNAPPY_LIB snappy)
endif ()
if (LZ4_INSTALLED)
+ find_package(lz4 CONFIG REQUIRED)
+ add_library(lz4 ALIAS lz4::lz4)
set(LZ4_LIB lz4)
endif ()
+
+ find_package(ZLIB REQUIRED)
+ add_library(z ALIAS ZLIB::ZLIB)
+
+ find_package(Threads REQUIRED)
+ add_library(pthread ALIAS Threads::Threads)
endif()
include_directories(
@@ -57,11 +64,10 @@ include_directories(
if (WIN32)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP /wd4200")
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP /wd4200 /Zc:__cplusplus /std:c++14")
-else ()
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -fPIC -pipe -std=gnu90")
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fPIC -pipe -std=c++14 -fno-exceptions")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP /wd4200 /Zc:__cplusplus")
endif ()
+set(CMAKE_C_STANDARD 90)
+set(CMAKE_CXX_STANDARD 17)
add_subdirectory(generator)
@@ -108,6 +114,8 @@ if (WIN32)
strncasecmp=_strnicmp
)
+ target_link_libraries(${PROJECT_NAME} PRIVATE protobuf::libprotobuf)
+
install(
TARGETS ${PROJECT_NAME}
ARCHIVE
@@ -118,7 +126,7 @@ if (WIN32)
else ()
set(STATIC_LIB_NAME ${PROJECT_NAME}-static)
set(SHARED_LIB_NAME ${PROJECT_NAME}-shared)
- get_filename_component(Protobuf_LIB_DIR ${Protobuf_LIBRARY} DIRECTORY)
+ set(Protobuf_LIB_DIR "")
link_directories(${OPENSSL_LINK_DIR} ${WORKFLOW_LIB_DIR} ${Protobuf_LIB_DIR})
add_library(
@@ -143,8 +151,18 @@ else ()
$<TARGET_OBJECTS:http>
)
- if (APPLE)
+ if (NOT BUILD_SHARED_LIBS)
+ target_link_libraries(${STATIC_LIB_NAME}
+ PRIVATE
+ OpenSSL::SSL
+ OpenSSL::Crypto
+ pthread
+ ${Protobuf_LIBRARY}
+ workflow
+ z ${SNAPPY_LIB} ${LZ4_LIB})
+ elseif (1)
target_link_libraries(${SHARED_LIB_NAME}
+ PRIVATE
OpenSSL::SSL
OpenSSL::Crypto
pthread
@@ -161,17 +179,22 @@ else ()
add_dependencies(${STATIC_LIB_NAME} LINK_HEADERS)
add_dependencies(${SHARED_LIB_NAME} LINK_HEADERS)
+ if(NOT BUILD_SHARED_LIBS)
+ set_target_properties(${SHARED_LIB_NAME} PROPERTIES EXCLUDE_FROM_ALL 1)
install(
TARGETS ${STATIC_LIB_NAME}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
COMPONENT devel
)
+ else()
+ set_target_properties(${STATIC_LIB_NAME} PROPERTIES EXCLUDE_FROM_ALL 1)
install(
TARGETS ${SHARED_LIB_NAME}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
COMPONENT devel
)
+ endif()
endif ()
diff --git a/srpc-config.cmake.in b/srpc-config.cmake.in
index 54b4323..1cdb97f 100644
--- a/srpc-config.cmake.in
+++ b/srpc-config.cmake.in
@@ -3,7 +3,6 @@
set(SRPC_VERSION "@srpc_VERSION@")
set_and_check(SRPC_INCLUDE_DIR "@PACKAGE_CONFIG_INC_DIR@")
set_and_check(SRPC_LIB_DIR "@PACKAGE_CONFIG_LIB_DIR@")
-set_and_check(SRPC_BIN_DIR "@PACKAGE_CONFIG_BIN_DIR@")
if (EXISTS "${CMAKE_CURRENT_LIST_DIR}/srpc-targets.cmake")
include ("${CMAKE_CURRENT_LIST_DIR}/srpc-targets.cmake")

View File

@ -1,3 +1,7 @@
if(VCPKG_TARGET_IS_WINDOWS)
vcpkg_check_linkage(ONLY_STATIC_LIBRARY)
endif()
vcpkg_from_github(
OUT_SOURCE_PATH SOURCE_PATH
REPO sogou/srpc
@ -5,8 +9,10 @@ vcpkg_from_github(
SHA512 ff28eaf0b9cb02d63efb7419a3b10163096e16d0c750bc74da53f5253d45b08f5589b02cdf41177846d49814afd72fd45bc7797c50311f26d4fffc4b0fcecc14
HEAD_REF master
PATCHES
protobuf.patch
cmake.diff
)
file(REMOVE_RECURSE "${SOURCE_PATH}/third_party")
file(REMOVE_RECURSE "${SOURCE_PATH}/workflow")
string(COMPARE EQUAL "${VCPKG_CRT_LINKAGE}" "static" SRPC_BUILD_STATIC_RUNTIME)
@ -14,15 +20,20 @@ vcpkg_cmake_configure(
SOURCE_PATH ${SOURCE_PATH}
DISABLE_PARALLEL_CONFIGURE
OPTIONS
-DCMAKE_POLICY_DEFAULT_CMP0175=OLD
-DSRPC_BUILD_STATIC_RUNTIME=${SRPC_BUILD_STATIC_RUNTIME}
-DCMAKE_CXX_STANDARD=17
"-DPROTOC=${CURRENT_HOST_INSTALLED_DIR}/tools/protobuf/protoc${VCPKG_HOST_EXECUTABLE_SUFFIX}"
-DLZ4_INSTALLED=1
-DSNAPPY_INSTALLED=1
-DWORKFLOW_INSTALLED=1
MAYBE_UNUSED_VARIABLES
SRPC_BUILD_STATIC_RUNTIME
)
vcpkg_cmake_install()
vcpkg_cmake_config_fixup(CONFIG_PATH lib/cmake/srpc)
vcpkg_copy_pdbs()
vcpkg_cmake_config_fixup(CONFIG_PATH lib/cmake/srpc)
vcpkg_copy_tools(
TOOL_NAMES srpc_generator
AUTO_CLEAN

View File

@ -1,151 +0,0 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7d61f98..2681c22 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -58,11 +58,10 @@ else ()
endif ()
check_include_file_cxx("workflow/Workflow.h" WORKFLOW_INSTALLED)
-if (NOT WORKFLOW_INSTALLED)
+if (0)
if (NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/workflow/workflow-config.cmake.in")
message( FATAL_ERROR "\nWorkflow" ${THIRD_PARTY_FATAL_MESSAGE} )
endif ()
-else ()
if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/workflow/workflow-config.cmake.in")
message("Workflow third_party FOUND. Use for source code dependencies.")
set(WORKFLOW_INSTALLED 0)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 7c2d5b3..89ff1ab 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -16,7 +16,7 @@ set(protobuf_MODULE_COMPATIBLE ON CACHE BOOL "")
if (WIN32)
find_package(Protobuf REQUIRED CONFIG)
else ()
- find_package(Protobuf 3.5.0 REQUIRED)
+ find_package(Protobuf CONFIG REQUIRED)
endif ()
if (WIN32)
@@ -57,10 +57,10 @@ include_directories(
if (WIN32)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP /wd4200")
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP /wd4200 /Zc:__cplusplus /std:c++14")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP /wd4200 /Zc:__cplusplus")
else ()
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -fPIC -pipe -std=gnu90")
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fPIC -pipe -std=c++14 -fno-exceptions")
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -fPIC -pipe")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fPIC -pipe -fno-exceptions")
endif ()
add_subdirectory(generator)
@@ -100,6 +100,7 @@ if (WIN32)
)
add_dependencies(${PROJECT_NAME} LINK_HEADERS)
+ target_link_libraries(${PROJECT_NAME} PUBLIC protobuf::libprotobuf)
target_compile_definitions(
${PROJECT_NAME} PRIVATE
@@ -118,7 +119,6 @@ if (WIN32)
else ()
set(STATIC_LIB_NAME ${PROJECT_NAME}-static)
set(SHARED_LIB_NAME ${PROJECT_NAME}-shared)
- get_filename_component(Protobuf_LIB_DIR ${Protobuf_LIBRARY} DIRECTORY)
link_directories(${OPENSSL_LINK_DIR} ${WORKFLOW_LIB_DIR} ${Protobuf_LIB_DIR})
add_library(
@@ -143,8 +143,10 @@ else ()
$<TARGET_OBJECTS:http>
)
+ target_link_libraries(${SHARED_LIB_NAME} PUBLIC protobuf::libprotobuf)
+ target_link_libraries(${STATIC_LIB_NAME} PUBLIC protobuf::libprotobuf)
if (APPLE)
- target_link_libraries(${SHARED_LIB_NAME}
+ target_link_libraries(${SHARED_LIB_NAME} PUBLIC
OpenSSL::SSL
OpenSSL::Crypto
pthread
diff --git a/src/compress/CMakeLists.txt b/src/compress/CMakeLists.txt
index 818b505..c0d1dde 100644
--- a/src/compress/CMakeLists.txt
+++ b/src/compress/CMakeLists.txt
@@ -51,3 +51,4 @@ else ()
)
endif()
+target_link_libraries(${PROJECT_NAME} PUBLIC protobuf::libprotobuf)
diff --git a/src/generator/CMakeLists.txt b/src/generator/CMakeLists.txt
index c2d72d7..674c5d0 100644
--- a/src/generator/CMakeLists.txt
+++ b/src/generator/CMakeLists.txt
@@ -8,6 +8,7 @@ set(SRC
)
add_executable(${PROJECT_NAME} ${SRC})
+target_link_libraries(${PROJECT_NAME} PUBLIC protobuf::libprotobuf)
if (WIN32)
target_compile_definitions(
${PROJECT_NAME} PRIVATE
diff --git a/src/http/CMakeLists.txt b/src/http/CMakeLists.txt
index 64c0377..1cf1dfc 100644
--- a/src/http/CMakeLists.txt
+++ b/src/http/CMakeLists.txt
@@ -11,6 +11,7 @@ set(SRC
)
add_library(${PROJECT_NAME} OBJECT ${SRC})
+target_link_libraries(${PROJECT_NAME} PUBLIC protobuf::libprotobuf)
if (WIN32)
target_compile_definitions(
${PROJECT_NAME} PRIVATE
diff --git a/src/message/CMakeLists.txt b/src/message/CMakeLists.txt
index 952607f..f947540 100644
--- a/src/message/CMakeLists.txt
+++ b/src/message/CMakeLists.txt
@@ -15,6 +15,7 @@ set(SRC
)
add_library(${PROJECT_NAME} OBJECT ${SRC})
+target_link_libraries(${PROJECT_NAME} PUBLIC protobuf::libprotobuf)
if (WIN32)
target_compile_definitions(
${PROJECT_NAME} PRIVATE
diff --git a/src/module/CMakeLists.txt b/src/module/CMakeLists.txt
index f0041a4..a9d9a65 100644
--- a/src/module/CMakeLists.txt
+++ b/src/module/CMakeLists.txt
@@ -22,6 +22,7 @@ set(SRC
)
add_library(${PROJECT_NAME} OBJECT ${SRC})
+target_link_libraries(${PROJECT_NAME} PUBLIC protobuf::libprotobuf)
if (WIN32)
target_compile_definitions(
diff --git a/src/thrift/CMakeLists.txt b/src/thrift/CMakeLists.txt
index 1d1d61c..dc66723 100644
--- a/src/thrift/CMakeLists.txt
+++ b/src/thrift/CMakeLists.txt
@@ -7,4 +7,4 @@ set(SRC
)
add_library(${PROJECT_NAME} OBJECT ${SRC})
-
+target_link_libraries(${PROJECT_NAME} PUBLIC protobuf::libprotobuf)
diff --git a/srpc-config.cmake.in b/srpc-config.cmake.in
index 54b4323..1cdb97f 100644
--- a/srpc-config.cmake.in
+++ b/srpc-config.cmake.in
@@ -3,7 +3,6 @@
set(SRPC_VERSION "@srpc_VERSION@")
set_and_check(SRPC_INCLUDE_DIR "@PACKAGE_CONFIG_INC_DIR@")
set_and_check(SRPC_LIB_DIR "@PACKAGE_CONFIG_LIB_DIR@")
-set_and_check(SRPC_BIN_DIR "@PACKAGE_CONFIG_BIN_DIR@")
if (EXISTS "${CMAKE_CURRENT_LIST_DIR}/srpc-targets.cmake")
include ("${CMAKE_CURRENT_LIST_DIR}/srpc-targets.cmake")

View File

@ -1,7 +1,7 @@
{
"name": "srpc",
"version-semver": "0.10.4",
"port-version": 1,
"port-version": 2,
"description": "RPC based on Sogou C++ Workflow",
"homepage": "https://github.com/sogou/srpc",
"license": "Apache-2.0",

49
ports/workflow/cmake.diff Normal file
View File

@ -0,0 +1,49 @@
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 455e70c..49cb955 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.10)
-if(ANDROID)
+if(0)
include_directories(${OPENSSL_INCLUDE_DIR})
link_directories(${OPENSSL_LINK_DIR})
else()
@@ -80,10 +80,12 @@ add_library(
$<TARGET_OBJECTS:client>
)
-if(ANDROID)
+if(0)
target_link_libraries(${SHARED_LIB_NAME} PUBLIC ssl crypto c)
target_link_libraries(${STATIC_LIB_NAME} PUBLIC ssl crypto c)
else()
+ find_package(Threads REQUIRED)
+ add_library(pthread ALIAS Threads::Threads)
target_link_libraries(${SHARED_LIB_NAME} PUBLIC OpenSSL::SSL OpenSSL::Crypto pthread)
target_link_libraries(${STATIC_LIB_NAME} PUBLIC OpenSSL::SSL OpenSSL::Crypto pthread)
endif ()
@@ -122,17 +124,22 @@ if (KAFKA STREQUAL "y")
set_target_properties(${KAFKA_SHARED_LIB_NAME} PROPERTIES OUTPUT_NAME "wfkafka" VERSION ${PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR})
endif ()
+if(NOT BUILD_SHARED_LIBS)
+set_target_properties(${SHARED_LIB_NAME} PROPERTIES EXCLUDE_FROM_ALL 1)
install(
TARGETS ${STATIC_LIB_NAME}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
COMPONENT devel
)
+else()
+set_target_properties(${STATIC_LIB_NAME} PROPERTIES EXCLUDE_FROM_ALL 1)
install(
TARGETS ${SHARED_LIB_NAME}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
COMPONENT devel
)
+endif()
if (KAFKA STREQUAL "y")
install(

View File

@ -4,6 +4,8 @@ vcpkg_from_github(
REF "v${VERSION}"
SHA512 78996029efd23ca7843f4089d801729174bf8e6bcb1babbe6f557db0c0b4094069dce38328332ddcddffec6710e77cfd03110264d0c670b8cd42b23dda5061ed
HEAD_REF master
PATCHES
cmake.diff
)
vcpkg_cmake_configure(

View File

@ -1,11 +1,11 @@
{
"name": "workflow",
"version": "0.11.11",
"port-version": 1,
"port-version": 2,
"description": "C++ Parallel Computing and Asynchronous Networking Engine",
"homepage": "https://github.com/sogou/workflow",
"license": "Apache-2.0",
"supports": "!windows | mingw",
"supports": "!windows",
"dependencies": [
"openssl",
{

View File

@ -619,9 +619,6 @@ winpcap:x86-windows=skip
wordnet:arm-neon-android=fail
wordnet:arm64-android=fail
wordnet:x64-android=fail
workflow:arm-neon-android=fail
workflow:arm64-android=fail
workflow:x64-android=fail
# ignore `wpilib` build errors until upgrade to a new release version
wpilib:arm-neon-android=fail # requires full c++20 support
wpilib:arm64-android=fail # requires full c++20 support

View File

@ -204,9 +204,6 @@ winreg:x64-linux=fail
gz-tools:arm-neon-android=fail
gz-tools:arm64-android=fail
gz-tools:x64-android=fail
workflow:arm-neon-android=fail
workflow:arm64-android=fail
workflow:x64-android=fail
zookeeper:arm64-osx=fail
zookeeper:arm64-windows-static-md=fail
zookeeper:arm64-windows=fail

View File

@ -9446,7 +9446,7 @@
},
"srpc": {
"baseline": "0.10.4",
"port-version": 1
"port-version": 2
},
"sse2neon": {
"baseline": "1.9.1",
@ -10702,7 +10702,7 @@
},
"workflow": {
"baseline": "0.11.11",
"port-version": 1
"port-version": 2
},
"workflow-win": {
"baseline": "2026-01-09",

View File

@ -1,5 +1,10 @@
{
"versions": [
{
"git-tree": "e49e93ac45d443a7f74c07ead69f39937cb8f2b4",
"version-semver": "0.10.4",
"port-version": 2
},
{
"git-tree": "4336be6add18045a17054a0c16df338b3cd9097f",
"version-semver": "0.10.4",

View File

@ -1,5 +1,10 @@
{
"versions": [
{
"git-tree": "fbf9964982f5cfc53b5c588d4b6e201cdbeabd02",
"version": "0.11.11",
"port-version": 2
},
{
"git-tree": "7efb5dbcb0ab18e14921361636df4418e0fa50aa",
"version": "0.11.11",