From 23ae7eb168af8817bec96c1233f96b86b1aad2bd Mon Sep 17 00:00:00 2001 From: Hongxu Xu Date: Fri, 19 Apr 2019 17:27:19 +0800 Subject: [grpc] Supported static linking in Linux --- ports/grpc/00001-fix-uwp.patch | 148 +++++++++++++++++++++++++ ports/grpc/00002-static-linking-in-linux.patch | 16 +++ ports/grpc/CONTROL | 2 +- ports/grpc/fix-uwp.patch | 148 ------------------------- ports/grpc/portfile.cmake | 11 +- 5 files changed, 175 insertions(+), 150 deletions(-) create mode 100644 ports/grpc/00001-fix-uwp.patch create mode 100644 ports/grpc/00002-static-linking-in-linux.patch delete mode 100644 ports/grpc/fix-uwp.patch diff --git a/ports/grpc/00001-fix-uwp.patch b/ports/grpc/00001-fix-uwp.patch new file mode 100644 index 000000000..1811fdf92 --- /dev/null +++ b/ports/grpc/00001-fix-uwp.patch @@ -0,0 +1,148 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index e1013dc561..b02d07ccba 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -90,6 +90,9 @@ if(UNIX) + endif() + if(WIN32) + set(_gRPC_PLATFORM_WINDOWS ON) ++ if(CMAKE_SYSTEM_NAME STREQUAL "WindowsStore") ++ set(_gRPC_PLATFORM_UWP ON) ++ endif() + endif() + + set(CMAKE_POSITION_INDEPENDENT_CODE TRUE) +@@ -107,6 +110,9 @@ if (MSVC) + add_definitions(/wd4267) + # TODO(jtattermusch): needed to build boringssl with VS2017, revisit later + add_definitions(/wd4987 /wd4774 /wd4819 /wd4996 /wd4619) ++ if(_gRPC_PLATFORM_UWP) ++ add_definitions(-DGRPC_ARES=0) ++ endif() + endif() + + if (gRPC_USE_PROTO_LITE) +@@ -177,6 +183,10 @@ file(MAKE_DIRECTORY ${_gRPC_PROTO_GENS_DIR}) + # ``.proto`` files + # + function(protobuf_generate_grpc_cpp) ++ if(_gRPC_PLATFORM_UWP) ++ return() ++ endif() ++ + if(NOT ARGN) + message(SEND_ERROR "Error: PROTOBUF_GENERATE_GRPC_CPP() called without any proto files") + return() +@@ -211,6 +221,7 @@ function(protobuf_generate_grpc_cpp) + endforeach() + endfunction() + ++if(NOT _gRPC_PLATFORM_UWP) + add_custom_target(plugins + DEPENDS + grpc_cpp_plugin +@@ -240,6 +251,8 @@ add_custom_target(tools_cxx + add_custom_target(tools + DEPENDS tools_c tools_cxx) + ++endif() ++ + if (gRPC_BUILD_TESTS) + add_custom_target(buildtests_c) + add_dependencies(buildtests_c algorithm_test) +@@ -3795,7 +3808,6 @@ foreach(_hdr + DESTINATION "${gRPC_INSTALL_INCLUDEDIR}/${_path}" + ) + endforeach() +-endif (gRPC_BUILD_CODEGEN) + + + if (gRPC_INSTALL) +@@ -3805,6 +3817,7 @@ if (gRPC_INSTALL) + ARCHIVE DESTINATION ${gRPC_INSTALL_LIBDIR} + ) + endif() ++endif (gRPC_BUILD_CODEGEN) + + if (gRPC_BUILD_TESTS) + +@@ -3925,7 +3938,7 @@ foreach(_hdr + DESTINATION "${gRPC_INSTALL_INCLUDEDIR}/${_path}" + ) + endforeach() +-endif (gRPC_BUILD_CODEGEN) ++ + + + if (gRPC_INSTALL) +@@ -3935,6 +3948,7 @@ if (gRPC_INSTALL) + ARCHIVE DESTINATION ${gRPC_INSTALL_LIBDIR} + ) + endif() ++endif (gRPC_BUILD_CODEGEN) + + if (gRPC_BUILD_TESTS) + +@@ -4926,7 +4940,6 @@ foreach(_hdr + DESTINATION "${gRPC_INSTALL_INCLUDEDIR}/${_path}" + ) + endforeach() +-endif (gRPC_BUILD_CODEGEN) + + + if (gRPC_INSTALL) +@@ -4936,6 +4949,7 @@ if (gRPC_INSTALL) + ARCHIVE DESTINATION ${gRPC_INSTALL_LIBDIR} + ) + endif() ++endif (gRPC_BUILD_CODEGEN) + + if (gRPC_BUILD_TESTS) + +diff --git a/src/core/lib/iomgr/resource_quota.cc b/src/core/lib/iomgr/resource_quota.cc +index 61c366098e..aac2ce0a9f 100644 +--- a/src/core/lib/iomgr/resource_quota.cc ++++ b/src/core/lib/iomgr/resource_quota.cc +@@ -937,7 +937,7 @@ void grpc_resource_user_alloc(grpc_resource_user* resource_user, size_t size, + void grpc_resource_user_free(grpc_resource_user* resource_user, size_t size) { + gpr_mu_lock(&resource_user->mu); + grpc_resource_quota* resource_quota = resource_user->resource_quota; +- gpr_atm prior = gpr_atm_no_barrier_fetch_add(&resource_quota->used, -size); ++ gpr_atm prior = gpr_atm_no_barrier_fetch_add(&resource_quota->used, -static_cast(size)); + GPR_ASSERT(prior >= static_cast(size)); + bool was_zero_or_negative = resource_user->free_pool <= 0; + resource_user->free_pool += static_cast(size); +diff --git a/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc b/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +index 55efe0e..f538f26 100644 +--- a/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc ++++ b/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +@@ -60,6 +60,8 @@ bool check_bios_data(const char* bios_data_file) { + + static void init_mu(void) { gpr_mu_init(&g_mu); } + ++#if !defined(WINAPI_FAMILY) || WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP ++ + static bool run_powershell() { + SECURITY_ATTRIBUTES sa; + sa.nLength = sizeof(sa); +@@ -97,8 +99,12 @@ static bool run_powershell() { + CloseHandle(h); + return true; + } ++#endif + + bool grpc_alts_is_running_on_gcp() { ++#if defined(WINAPI_FAMILY) && (WINAPI_FAMILY != WINAPI_FAMILY_DESKTOP_APP) ++ g_is_on_compute_engine = false; ++#else + gpr_once_init(&g_once, init_mu); + gpr_mu_lock(&g_mu); + if (!g_compute_engine_detection_done) { +@@ -108,6 +114,7 @@ bool grpc_alts_is_running_on_gcp() { + g_compute_engine_detection_done = true; + } + gpr_mu_unlock(&g_mu); ++#endif + return g_is_on_compute_engine; + } + diff --git a/ports/grpc/00002-static-linking-in-linux.patch b/ports/grpc/00002-static-linking-in-linux.patch new file mode 100644 index 000000000..c3b9b95aa --- /dev/null +++ b/ports/grpc/00002-static-linking-in-linux.patch @@ -0,0 +1,16 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 3839e22..91720a9 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -99,6 +99,11 @@ set(CMAKE_POSITION_INDEPENDENT_CODE TRUE) + + add_definitions(-DPB_FIELD_32BIT) + ++if (gRPC_STATIC_LINKING) ++ set(CMAKE_EXE_LINKER_FLAGS "-Bstatic") ++ set(CMAKE_FIND_LIBRARY_SUFFIXES ".a") ++endif() ++ + if (MSVC) + include(cmake/msvc_static_runtime.cmake) + add_definitions(-D_WIN32_WINNT=0x600 -D_SCL_SECURE_NO_WARNINGS -D_CRT_SECURE_NO_WARNINGS -D_WINSOCK_DEPRECATED_NO_WARNINGS) diff --git a/ports/grpc/CONTROL b/ports/grpc/CONTROL index f1b1d9798..025227d09 100644 --- a/ports/grpc/CONTROL +++ b/ports/grpc/CONTROL @@ -1,4 +1,4 @@ Source: grpc -Version: 1.19.1 +Version: 1.19.1-1 Build-Depends: zlib, openssl, protobuf, c-ares (!uwp) Description: An RPC library and framework diff --git a/ports/grpc/fix-uwp.patch b/ports/grpc/fix-uwp.patch deleted file mode 100644 index 1811fdf92..000000000 --- a/ports/grpc/fix-uwp.patch +++ /dev/null @@ -1,148 +0,0 @@ -diff --git a/CMakeLists.txt b/CMakeLists.txt -index e1013dc561..b02d07ccba 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -90,6 +90,9 @@ if(UNIX) - endif() - if(WIN32) - set(_gRPC_PLATFORM_WINDOWS ON) -+ if(CMAKE_SYSTEM_NAME STREQUAL "WindowsStore") -+ set(_gRPC_PLATFORM_UWP ON) -+ endif() - endif() - - set(CMAKE_POSITION_INDEPENDENT_CODE TRUE) -@@ -107,6 +110,9 @@ if (MSVC) - add_definitions(/wd4267) - # TODO(jtattermusch): needed to build boringssl with VS2017, revisit later - add_definitions(/wd4987 /wd4774 /wd4819 /wd4996 /wd4619) -+ if(_gRPC_PLATFORM_UWP) -+ add_definitions(-DGRPC_ARES=0) -+ endif() - endif() - - if (gRPC_USE_PROTO_LITE) -@@ -177,6 +183,10 @@ file(MAKE_DIRECTORY ${_gRPC_PROTO_GENS_DIR}) - # ``.proto`` files - # - function(protobuf_generate_grpc_cpp) -+ if(_gRPC_PLATFORM_UWP) -+ return() -+ endif() -+ - if(NOT ARGN) - message(SEND_ERROR "Error: PROTOBUF_GENERATE_GRPC_CPP() called without any proto files") - return() -@@ -211,6 +221,7 @@ function(protobuf_generate_grpc_cpp) - endforeach() - endfunction() - -+if(NOT _gRPC_PLATFORM_UWP) - add_custom_target(plugins - DEPENDS - grpc_cpp_plugin -@@ -240,6 +251,8 @@ add_custom_target(tools_cxx - add_custom_target(tools - DEPENDS tools_c tools_cxx) - -+endif() -+ - if (gRPC_BUILD_TESTS) - add_custom_target(buildtests_c) - add_dependencies(buildtests_c algorithm_test) -@@ -3795,7 +3808,6 @@ foreach(_hdr - DESTINATION "${gRPC_INSTALL_INCLUDEDIR}/${_path}" - ) - endforeach() --endif (gRPC_BUILD_CODEGEN) - - - if (gRPC_INSTALL) -@@ -3805,6 +3817,7 @@ if (gRPC_INSTALL) - ARCHIVE DESTINATION ${gRPC_INSTALL_LIBDIR} - ) - endif() -+endif (gRPC_BUILD_CODEGEN) - - if (gRPC_BUILD_TESTS) - -@@ -3925,7 +3938,7 @@ foreach(_hdr - DESTINATION "${gRPC_INSTALL_INCLUDEDIR}/${_path}" - ) - endforeach() --endif (gRPC_BUILD_CODEGEN) -+ - - - if (gRPC_INSTALL) -@@ -3935,6 +3948,7 @@ if (gRPC_INSTALL) - ARCHIVE DESTINATION ${gRPC_INSTALL_LIBDIR} - ) - endif() -+endif (gRPC_BUILD_CODEGEN) - - if (gRPC_BUILD_TESTS) - -@@ -4926,7 +4940,6 @@ foreach(_hdr - DESTINATION "${gRPC_INSTALL_INCLUDEDIR}/${_path}" - ) - endforeach() --endif (gRPC_BUILD_CODEGEN) - - - if (gRPC_INSTALL) -@@ -4936,6 +4949,7 @@ if (gRPC_INSTALL) - ARCHIVE DESTINATION ${gRPC_INSTALL_LIBDIR} - ) - endif() -+endif (gRPC_BUILD_CODEGEN) - - if (gRPC_BUILD_TESTS) - -diff --git a/src/core/lib/iomgr/resource_quota.cc b/src/core/lib/iomgr/resource_quota.cc -index 61c366098e..aac2ce0a9f 100644 ---- a/src/core/lib/iomgr/resource_quota.cc -+++ b/src/core/lib/iomgr/resource_quota.cc -@@ -937,7 +937,7 @@ void grpc_resource_user_alloc(grpc_resource_user* resource_user, size_t size, - void grpc_resource_user_free(grpc_resource_user* resource_user, size_t size) { - gpr_mu_lock(&resource_user->mu); - grpc_resource_quota* resource_quota = resource_user->resource_quota; -- gpr_atm prior = gpr_atm_no_barrier_fetch_add(&resource_quota->used, -size); -+ gpr_atm prior = gpr_atm_no_barrier_fetch_add(&resource_quota->used, -static_cast(size)); - GPR_ASSERT(prior >= static_cast(size)); - bool was_zero_or_negative = resource_user->free_pool <= 0; - resource_user->free_pool += static_cast(size); -diff --git a/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc b/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc -index 55efe0e..f538f26 100644 ---- a/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc -+++ b/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc -@@ -60,6 +60,8 @@ bool check_bios_data(const char* bios_data_file) { - - static void init_mu(void) { gpr_mu_init(&g_mu); } - -+#if !defined(WINAPI_FAMILY) || WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP -+ - static bool run_powershell() { - SECURITY_ATTRIBUTES sa; - sa.nLength = sizeof(sa); -@@ -97,8 +99,12 @@ static bool run_powershell() { - CloseHandle(h); - return true; - } -+#endif - - bool grpc_alts_is_running_on_gcp() { -+#if defined(WINAPI_FAMILY) && (WINAPI_FAMILY != WINAPI_FAMILY_DESKTOP_APP) -+ g_is_on_compute_engine = false; -+#else - gpr_once_init(&g_once, init_mu); - gpr_mu_lock(&g_mu); - if (!g_compute_engine_detection_done) { -@@ -108,6 +114,7 @@ bool grpc_alts_is_running_on_gcp() { - g_compute_engine_detection_done = true; - } - gpr_mu_unlock(&g_mu); -+#endif - return g_is_on_compute_engine; - } - diff --git a/ports/grpc/portfile.cmake b/ports/grpc/portfile.cmake index 355f9a179..e11586258 100644 --- a/ports/grpc/portfile.cmake +++ b/ports/grpc/portfile.cmake @@ -14,7 +14,9 @@ vcpkg_from_github( REF v1.19.1 SHA512 4bb127d946fc16887fd4cf75215f0bc9f6d17dbd36fc4f1b191a64914f96c49dddb41f1b6c72fd24ea0a40f242b4398248f32fcb1fe9a764367be1c2edda9142 HEAD_REF master - PATCHES fix-uwp.patch + PATCHES + 00001-fix-uwp.patch + 00002-static-linking-in-linux.patch ) if(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore") @@ -29,6 +31,12 @@ else() set(gRPC_MSVC_STATIC_RUNTIME OFF) endif() +if(VCPKG_LIBRARY_LINKAGE STREQUAL "static") + set(gRPC_STATIC_LINKING ON) +else() + set(gRPC_STATIC_LINKING OFF) +endif() + if(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore") set(cares_CARES_PROVIDER OFF) else() @@ -41,6 +49,7 @@ vcpkg_configure_cmake( OPTIONS -DgRPC_INSTALL=ON -DgRPC_BUILD_TESTS=OFF + -DgRPC_STATIC_LINKING=${gRPC_STATIC_LINKING} -DgRPC_MSVC_STATIC_RUNTIME=${gRPC_MSVC_STATIC_RUNTIME} -DgRPC_ZLIB_PROVIDER=package -DgRPC_SSL_PROVIDER=package -- cgit v1.2.3 From 49c282da3284bbf14d161c2d6275098b2e4121f2 Mon Sep 17 00:00:00 2001 From: Hongxu Xu Date: Sun, 21 Apr 2019 17:01:16 +0800 Subject: Removed setting CMAKE_FIND_LIBRARY_SUFFIXES to fix configure error in Windows --- ports/grpc/00002-static-linking-in-linux.patch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/grpc/00002-static-linking-in-linux.patch b/ports/grpc/00002-static-linking-in-linux.patch index c3b9b95aa..4c004d16b 100644 --- a/ports/grpc/00002-static-linking-in-linux.patch +++ b/ports/grpc/00002-static-linking-in-linux.patch @@ -7,8 +7,8 @@ index 3839e22..91720a9 100644 add_definitions(-DPB_FIELD_32BIT) +if (gRPC_STATIC_LINKING) ++ # Force to static link + set(CMAKE_EXE_LINKER_FLAGS "-Bstatic") -+ set(CMAKE_FIND_LIBRARY_SUFFIXES ".a") +endif() + if (MSVC) -- cgit v1.2.3