aboutsummaryrefslogtreecommitdiff
path: root/vcpkg/ports/grpc
diff options
context:
space:
mode:
authorEthan Morgan <ethan@gweithio.com>2026-02-14 16:44:06 +0000
committerEthan Morgan <ethan@gweithio.com>2026-02-14 16:44:06 +0000
commit54409423f767d8b1cf30cb7d0efca6b4ca138823 (patch)
treed915ac7828703ce4b963efdd9728a1777ba18c1e /vcpkg/ports/grpc
move to own git serverHEADmaster
Diffstat (limited to 'vcpkg/ports/grpc')
-rw-r--r--vcpkg/ports/grpc/00001-fix-uwp.patch73
-rw-r--r--vcpkg/ports/grpc/00002-static-linking-in-linux.patch16
-rw-r--r--vcpkg/ports/grpc/00004-link-gdi32-on-windows.patch13
-rw-r--r--vcpkg/ports/grpc/00005-fix-uwp-error.patch47
-rw-r--r--vcpkg/ports/grpc/00006-utf8-range.patch110
-rw-r--r--vcpkg/ports/grpc/00015-disable-download-archive.patch12
-rw-r--r--vcpkg/ports/grpc/00016-fix-plugin-targets.patch12
-rw-r--r--vcpkg/ports/grpc/00017-add-src-upb.patch36
-rw-r--r--vcpkg/ports/grpc/gRPCTargets-vcpkg-tools.cmake10
-rw-r--r--vcpkg/ports/grpc/portfile.cmake104
-rw-r--r--vcpkg/ports/grpc/vcpkg-cmake-wrapper.cmake2
-rw-r--r--vcpkg/ports/grpc/vcpkg.json51
12 files changed, 486 insertions, 0 deletions
diff --git a/vcpkg/ports/grpc/00001-fix-uwp.patch b/vcpkg/ports/grpc/00001-fix-uwp.patch
new file mode 100644
index 0000000..2fff405
--- /dev/null
+++ b/vcpkg/ports/grpc/00001-fix-uwp.patch
@@ -0,0 +1,73 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index fa5b2a0..45d6b78 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -284,6 +284,9 @@ if(UNIX)
+ endif()
+ if(WIN32)
+ set(_gRPC_PLATFORM_WINDOWS ON)
++ if(CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
++ set(_gRPC_PLATFORM_UWP ON)
++ endif()
+ endif()
+
+ if (APPLE AND NOT DEFINED CMAKE_CXX_STANDARD)
+@@ -314,6 +317,9 @@ if(MSVC)
+ set(_gRPC_C_CXX_FLAGS "${_gRPC_C_CXX_FLAGS} /wd4267")
+ # TODO(jtattermusch): needed to build boringssl with VS2017, revisit later
+ set(_gRPC_C_CXX_FLAGS "${_gRPC_C_CXX_FLAGS} /wd4987 /wd4774 /wd4819 /wd4996 /wd4619")
++ if(_gRPC_PLATFORM_UWP)
++ add_definitions(-DGRPC_ARES=0)
++ endif()
+ # Silences thousands of trucation warnings
+ set(_gRPC_C_CXX_FLAGS "${_gRPC_C_CXX_FLAGS} /wd4503")
+ # Tell MSVC to build grpc using utf-8
+@@ -546,6 +552,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()
+@@ -668,6 +678,7 @@ if (gRPC_BUILD_GRPC_RUBY_PLUGIN)
+ list(APPEND _gRPC_PLUGIN_LIST grpc_ruby_plugin)
+ endif ()
+
++if(NOT _gRPC_PLATFORM_UWP)
+ add_custom_target(plugins
+ DEPENDS ${_gRPC_PLUGIN_LIST}
+ )
+@@ -683,6 +694,7 @@ add_custom_target(tools_cxx
+ add_custom_target(tools
+ DEPENDS tools_c tools_cxx)
+
++endif()
+ protobuf_generate_grpc_cpp_with_import_path_correction(
+ src/core/ext/transport/chaotic_good/chaotic_good_frame.proto src/core/ext/transport/chaotic_good/chaotic_good_frame.proto
+ )
+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 462ba6b..06e1a0c 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
+@@ -38,6 +38,7 @@ bool check_bios_data(const char*) { return false; }
+ bool check_windows_registry_product_name(HKEY root_key,
+ const char* reg_key_path,
+ const char* reg_key_name) {
++ #if !defined(WINAPI_FAMILY) || WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP
+ const size_t kProductNameBufferSize = 256;
+ char const expected_substr[] = "Google";
+
+@@ -70,6 +71,9 @@ bool check_windows_registry_product_name(HKEY root_key,
+ }
+
+ return strstr(buffer, expected_substr) != nullptr;
++#else
++ return false;
++#endif
+ }
+
+ } // namespace internal
diff --git a/vcpkg/ports/grpc/00002-static-linking-in-linux.patch b/vcpkg/ports/grpc/00002-static-linking-in-linux.patch
new file mode 100644
index 0000000..8999a24
--- /dev/null
+++ b/vcpkg/ports/grpc/00002-static-linking-in-linux.patch
@@ -0,0 +1,16 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 8f78306f77..e09f8fcc1e 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -211,6 +211,11 @@ if (NOT DEFINED CMAKE_POSITION_INDEPENDENT_CODE)
+ endif()
+ list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules")
+
++if (gRPC_STATIC_LINKING AND NOT _gRPC_PLATFORM_WINDOWS)
++ # Force to static link
++ set(CMAKE_EXE_LINKER_FLAGS "-Bstatic")
++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/vcpkg/ports/grpc/00004-link-gdi32-on-windows.patch b/vcpkg/ports/grpc/00004-link-gdi32-on-windows.patch
new file mode 100644
index 0000000..cb4ebad
--- /dev/null
+++ b/vcpkg/ports/grpc/00004-link-gdi32-on-windows.patch
@@ -0,0 +1,13 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2f633092ae..43fa8f6d97 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -481,7 +481,7 @@ if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/third_party/xds AND gRPC_DOWNLOAD_ARC
+ endif()
+
+ if(WIN32)
+- set(_gRPC_ALLTARGETS_LIBRARIES ${_gRPC_ALLTARGETS_LIBRARIES} ws2_32 crypt32)
++ set(_gRPC_ALLTARGETS_LIBRARIES ${_gRPC_ALLTARGETS_LIBRARIES} wsock32 ws2_32 crypt32 gdi32)
+ set(_gRPC_STATIC_WIN32 STATIC)
+ endif()
+
diff --git a/vcpkg/ports/grpc/00005-fix-uwp-error.patch b/vcpkg/ports/grpc/00005-fix-uwp-error.patch
new file mode 100644
index 0000000..2070760
--- /dev/null
+++ b/vcpkg/ports/grpc/00005-fix-uwp-error.patch
@@ -0,0 +1,47 @@
+diff --git a/src/core/ext/transport/chttp2/transport/hpack_parser.cc b/src/core/ext/transport/chttp2/transport/hpack_parser.cc
+index 84b4e86279..4921002887 100644
+--- a/src/core/ext/transport/chttp2/transport/hpack_parser.cc
++++ b/src/core/ext/transport/chttp2/transport/hpack_parser.cc
+@@ -688,7 +688,7 @@ class HPackParser::Parser {
+ }
+
+ void GPR_ATTRIBUTE_NOINLINE LogHeader(const HPackTable::Memento& memento) {
+- const char* type;
++ const char* type = nullptr;
+ switch (log_info_.type) {
+ case LogInfo::kHeaders:
+ type = "HDR";
+diff --git a/src/core/lib/slice/slice.cc b/src/core/lib/slice/slice.cc
+index f2d49e0bf4..c86a75f1a3 100644
+--- a/src/core/lib/slice/slice.cc
++++ b/src/core/lib/slice/slice.cc
+@@ -189,6 +189,7 @@ grpc_slice grpc_slice_from_moved_buffer(grpc_core::UniquePtr<char> p,
+ size_t len) {
+ uint8_t* ptr = reinterpret_cast<uint8_t*>(p.get());
+ grpc_slice slice;
++ memset(&slice, 0, sizeof(grpc_slice));
+ if (len <= sizeof(slice.data.inlined.bytes)) {
+ slice.refcount = nullptr;
+ slice.data.inlined.length = len;
+@@ -207,7 +208,7 @@ grpc_slice grpc_slice_from_moved_string(grpc_core::UniquePtr<char> p) {
+ }
+
+ grpc_slice grpc_slice_from_cpp_string(std::string str) {
+- grpc_slice slice;
++ grpc_slice slice = { 0 };
+ if (str.size() <= sizeof(slice.data.inlined.bytes)) {
+ slice.refcount = nullptr;
+ slice.data.inlined.length = str.size();
+diff --git a/src/core/server/server.cc b/src/core/server/server.cc
+index c4796d6ae9..6a0289d180 100644
+--- a/src/core/server/server.cc
++++ b/src/core/server/server.cc
+@@ -1284,7 +1284,7 @@ grpc_call_error Server::QueueRequestedCall(size_t cq_idx, RequestedCall* rc) {
+ FailCall(cq_idx, rc, GRPC_ERROR_CREATE("Server Shutdown"));
+ return GRPC_CALL_OK;
+ }
+- RequestMatcherInterface* rm;
++ RequestMatcherInterface* rm = nullptr;
+ switch (rc->type) {
+ case RequestedCall::Type::BATCH_CALL:
+ rm = unregistered_request_matcher_.get();
diff --git a/vcpkg/ports/grpc/00006-utf8-range.patch b/vcpkg/ports/grpc/00006-utf8-range.patch
new file mode 100644
index 0000000..e2677a4
--- /dev/null
+++ b/vcpkg/ports/grpc/00006-utf8-range.patch
@@ -0,0 +1,110 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2d1af5ce7d..791b933345 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -4348,7 +4348,7 @@ if(gRPC_INSTALL)
+ )
+ endif()
+
+-
++if(0)
+ add_library(utf8_range_lib
+ third_party/utf8_range/utf8_range.c
+ )
+@@ -4398,6 +4398,7 @@ if(gRPC_INSTALL)
+ ARCHIVE DESTINATION ${gRPC_INSTALL_LIBDIR}
+ )
+ endif()
++endif()
+
+ if(gRPC_BUILD_TESTS)
+
+@@ -51142,9 +51143,9 @@ generate_pkgconfig(
+ "high performance general RPC framework"
+ "${gRPC_CORE_VERSION}"
+ "absl_algorithm_container absl_any_invocable absl_base absl_bind_front absl_bits absl_check absl_cleanup absl_config absl_cord absl_core_headers absl_flags absl_flags_marshalling absl_flat_hash_map absl_flat_hash_set absl_function_ref absl_hash absl_inlined_vector absl_log absl_log_globals absl_log_severity absl_memory absl_no_destructor absl_optional absl_random_bit_gen_ref absl_random_distributions absl_random_random absl_span absl_status absl_statusor absl_str_format absl_strings absl_synchronization absl_time absl_type_traits absl_utility gpr"
+- "libcares openssl re2 zlib"
++ "libcares openssl re2 zlib utf8_range"
+ "-lgrpc"
+- "-laddress_sorting -lupb_textformat_lib -lupb_json_lib -lupb_wire_lib -lupb_message_lib -lutf8_range_lib -lupb_mini_descriptor_lib -lupb_mem_lib -lupb_base_lib"
++ "-laddress_sorting -lupb_textformat_lib -lupb_json_lib -lupb_wire_lib -lupb_message_lib -lupb_mini_descriptor_lib -lupb_mem_lib -lupb_base_lib"
+ "grpc.pc")
+
+ # grpc_unsecure .pc file
+@@ -51153,9 +51154,9 @@ generate_pkgconfig(
+ "high performance general RPC framework without SSL"
+ "${gRPC_CORE_VERSION}"
+ "absl_algorithm_container absl_any_invocable absl_base absl_bind_front absl_bits absl_check absl_cleanup absl_config absl_cord absl_core_headers absl_flags absl_flags_marshalling absl_flat_hash_map absl_flat_hash_set absl_function_ref absl_hash absl_inlined_vector absl_log absl_log_globals absl_log_severity absl_memory absl_no_destructor absl_optional absl_random_bit_gen_ref absl_random_distributions absl_random_random absl_span absl_status absl_statusor absl_str_format absl_strings absl_synchronization absl_time absl_type_traits absl_utility gpr"
+- "libcares zlib"
++ "libcares zlib utf8_range"
+ "-lgrpc_unsecure"
+- "-laddress_sorting -lupb_wire_lib -lupb_message_lib -lutf8_range_lib -lupb_mini_descriptor_lib -lupb_mem_lib -lupb_base_lib"
++ "-laddress_sorting -lupb_wire_lib -lupb_message_lib -lupb_mini_descriptor_lib -lupb_mem_lib -lupb_base_lib"
+ "grpc_unsecure.pc")
+
+ # grpc++ .pc file
+@@ -51164,9 +51165,9 @@ generate_pkgconfig(
+ "C++ wrapper for gRPC"
+ "${gRPC_CPP_VERSION}"
+ "absl_absl_check absl_absl_log absl_algorithm_container absl_any_invocable absl_base absl_bind_front absl_bits absl_check absl_cleanup absl_config absl_cord absl_core_headers absl_flags absl_flags_marshalling absl_flat_hash_map absl_flat_hash_set absl_function_ref absl_hash absl_inlined_vector absl_log absl_log_globals absl_log_severity absl_memory absl_no_destructor absl_optional absl_random_bit_gen_ref absl_random_distributions absl_random_random absl_span absl_status absl_statusor absl_str_format absl_strings absl_synchronization absl_time absl_type_traits absl_utility gpr grpc"
+- "libcares openssl re2 zlib"
++ "libcares openssl re2 zlib utf8_range"
+ "-lgrpc++"
+- "-laddress_sorting -lupb_textformat_lib -lupb_json_lib -lupb_wire_lib -lupb_message_lib -lutf8_range_lib -lupb_mini_descriptor_lib -lupb_mem_lib -lupb_base_lib"
++ "-laddress_sorting -lupb_textformat_lib -lupb_json_lib -lupb_wire_lib -lupb_message_lib -lupb_mini_descriptor_lib -lupb_mem_lib -lupb_base_lib"
+ "grpc++.pc")
+
+ # grpc++_unsecure .pc file
+@@ -51175,18 +51176,20 @@ generate_pkgconfig(
+ "C++ wrapper for gRPC without SSL"
+ "${gRPC_CPP_VERSION}"
+ "absl_absl_check absl_absl_log absl_algorithm_container absl_any_invocable absl_base absl_bind_front absl_bits absl_check absl_cleanup absl_config absl_cord absl_core_headers absl_flags absl_flags_marshalling absl_flat_hash_map absl_flat_hash_set absl_function_ref absl_hash absl_inlined_vector absl_log absl_log_globals absl_log_severity absl_memory absl_no_destructor absl_optional absl_random_bit_gen_ref absl_random_distributions absl_random_random absl_span absl_status absl_statusor absl_str_format absl_strings absl_synchronization absl_time absl_type_traits absl_utility gpr grpc_unsecure"
+- "libcares zlib"
++ "libcares zlib utf8_range"
+ "-lgrpc++_unsecure"
+- "-laddress_sorting -lupb_wire_lib -lupb_message_lib -lutf8_range_lib -lupb_mini_descriptor_lib -lupb_mem_lib -lupb_base_lib"
++ "-laddress_sorting -lupb_wire_lib -lupb_message_lib -lupb_mini_descriptor_lib -lupb_mem_lib -lupb_base_lib"
+ "grpc++_unsecure.pc")
+
++if(gRPC_BUILD_GRPCPP_OTEL_PLUGIN)
+ # grpcpp_otel_plugin .pc file
+ generate_pkgconfig(
+ "gRPC++ OpenTelemetry Plugin"
+ "OpenTelemetry Plugin for gRPC C++"
+ "${gRPC_CPP_VERSION}"
+ "absl_absl_check absl_absl_log absl_algorithm_container absl_any_invocable absl_base absl_bind_front absl_bits absl_check absl_cleanup absl_config absl_cord absl_core_headers absl_flags absl_flags_marshalling absl_flat_hash_map absl_flat_hash_set absl_function_ref absl_hash absl_inlined_vector absl_log absl_log_globals absl_log_severity absl_memory absl_no_destructor absl_optional absl_random_bit_gen_ref absl_random_distributions absl_random_random absl_span absl_status absl_statusor absl_str_format absl_strings absl_synchronization absl_time absl_type_traits absl_utility gpr grpc grpc++ opentelemetry_api"
+- "libcares openssl re2 zlib"
++ "libcares openssl re2 zlib utf8_range"
+ "-lgrpcpp_otel_plugin"
+- "-laddress_sorting -lupb_textformat_lib -lupb_json_lib -lupb_wire_lib -lupb_message_lib -lutf8_range_lib -lupb_mini_descriptor_lib -lupb_mem_lib -lupb_base_lib"
++ "-laddress_sorting -lupb_textformat_lib -lupb_json_lib -lupb_wire_lib -lupb_message_lib -lupb_mini_descriptor_lib -lupb_mem_lib -lupb_base_lib"
+ "grpcpp_otel_plugin.pc")
++endif()
+diff --git a/cmake/gRPCConfig.cmake.in b/cmake/gRPCConfig.cmake.in
+index d552e0bb4e..5751f503ba 100644
+--- a/cmake/gRPCConfig.cmake.in
++++ b/cmake/gRPCConfig.cmake.in
+@@ -9,6 +9,7 @@ list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/modules)
+ @_gRPC_FIND_ABSL@
+ @_gRPC_FIND_RE2@
+ @_gRPC_FIND_OPENTELEMETRY@
++@_gRPC_FIND_UTF8_RANGE@
+
+ # Targets
+ include(${CMAKE_CURRENT_LIST_DIR}/gRPCTargets.cmake)
+diff --git a/cmake/upb.cmake b/cmake/upb.cmake
+index 9156e5f48f..5323b5f10d 100644
+--- a/cmake/upb.cmake
++++ b/cmake/upb.cmake
+@@ -14,7 +14,9 @@
+
+ set(UPB_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/upb)
+
+-set(_gRPC_UPB_INCLUDE_DIR "${UPB_ROOT_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/third_party/utf8_range")
++set(_gRPC_UPB_INCLUDE_DIR "${UPB_ROOT_DIR}")
+ set(_gRPC_UPB_GRPC_GENERATED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src/core/ext/upb-gen" "${CMAKE_CURRENT_SOURCE_DIR}/src/core/ext/upbdefs-gen")
+
+ set(_gRPC_UPB_LIBRARIES upb)
++set(_gRPC_FIND_UTF8_RANGE "find_dependency(utf8_range CONFIG)")
++add_library(utf8_range_lib ALIAS utf8_range::utf8_range)
+\ No newline at end of file
diff --git a/vcpkg/ports/grpc/00015-disable-download-archive.patch b/vcpkg/ports/grpc/00015-disable-download-archive.patch
new file mode 100644
index 0000000..675c251
--- /dev/null
+++ b/vcpkg/ports/grpc/00015-disable-download-archive.patch
@@ -0,0 +1,12 @@
+diff --git a/cmake/download_archive.cmake b/cmake/download_archive.cmake
+index 820aafa..a59b785 100644
+--- a/cmake/download_archive.cmake
++++ b/cmake/download_archive.cmake
+@@ -19,6 +19,7 @@ file(MAKE_DIRECTORY ${_download_archive_TEMPORARY_DIR})
+ # Note that strip_prefix strips the directory path prefix of the extracted
+ # archive content, and it may strip multiple directories.
+ function(download_archive destination url hash strip_prefix)
++ return()
+ # Fetch and validate
+ set(_TEMPORARY_FILE ${_download_archive_TEMPORARY_DIR}/${strip_prefix}.tar.gz)
+ message(STATUS "Downloading from ${url}, if failed, please try configuring again")
diff --git a/vcpkg/ports/grpc/00016-fix-plugin-targets.patch b/vcpkg/ports/grpc/00016-fix-plugin-targets.patch
new file mode 100644
index 0000000..ce7924c
--- /dev/null
+++ b/vcpkg/ports/grpc/00016-fix-plugin-targets.patch
@@ -0,0 +1,12 @@
+diff --git a/cmake/gRPCConfig.cmake.in b/cmake/gRPCConfig.cmake.in
+index 7cad2abca1..c287f3b413 100644
+--- a/cmake/gRPCConfig.cmake.in
++++ b/cmake/gRPCConfig.cmake.in
+@@ -12,6 +12,6 @@ list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/modules)
+
+ # Targets
+ include(${CMAKE_CURRENT_LIST_DIR}/gRPCTargets.cmake)
+-if(NOT CMAKE_CROSSCOMPILING)
++if(@gRPC_BUILD_CODEGEN@)
+ include(${CMAKE_CURRENT_LIST_DIR}/gRPCPluginTargets.cmake)
+ endif()
diff --git a/vcpkg/ports/grpc/00017-add-src-upb.patch b/vcpkg/ports/grpc/00017-add-src-upb.patch
new file mode 100644
index 0000000..8cb101b
--- /dev/null
+++ b/vcpkg/ports/grpc/00017-add-src-upb.patch
@@ -0,0 +1,36 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 391d113..3774159 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -3969,6 +3969,7 @@ add_library(upb_json_lib ${_gRPC_STATIC_WIN32}
+ third_party/upb/upb/reflection/method_def.c
+ third_party/upb/upb/reflection/oneof_def.c
+ third_party/upb/upb/reflection/service_def.c
++ third_party/upb/upb/reflection/cmake/google/protobuf/descriptor.upb_minitable.c
+ )
+
+ target_compile_features(upb_json_lib PUBLIC cxx_std_17)
+@@ -3992,7 +3993,6 @@ endif()
+ target_include_directories(upb_json_lib
+ PUBLIC $<INSTALL_INTERFACE:${gRPC_INSTALL_INCLUDEDIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+ PRIVATE
+- ${CMAKE_CURRENT_SOURCE_DIR}
+ ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR}
+ ${_gRPC_RE2_INCLUDE_DIR}
+ ${_gRPC_SSL_INCLUDE_DIR}
+@@ -4226,6 +4226,7 @@ add_library(upb_textformat_lib ${_gRPC_STATIC_WIN32}
+ third_party/upb/upb/reflection/service_def.c
+ third_party/upb/upb/text/encode.c
+ third_party/upb/upb/text/internal/encode.c
++ third_party/upb/upb/reflection/cmake/google/protobuf/descriptor.upb_minitable.c
+ )
+
+ target_compile_features(upb_textformat_lib PUBLIC cxx_std_17)
+@@ -4249,7 +4250,6 @@ endif()
+ target_include_directories(upb_textformat_lib
+ PUBLIC $<INSTALL_INTERFACE:${gRPC_INSTALL_INCLUDEDIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+ PRIVATE
+- ${CMAKE_CURRENT_SOURCE_DIR}
+ ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR}
+ ${_gRPC_RE2_INCLUDE_DIR}
+ ${_gRPC_SSL_INCLUDE_DIR}
diff --git a/vcpkg/ports/grpc/gRPCTargets-vcpkg-tools.cmake b/vcpkg/ports/grpc/gRPCTargets-vcpkg-tools.cmake
new file mode 100644
index 0000000..1ed3509
--- /dev/null
+++ b/vcpkg/ports/grpc/gRPCTargets-vcpkg-tools.cmake
@@ -0,0 +1,10 @@
+file(GLOB GRPC_PLUGINS "${_IMPORT_PREFIX}/../@HOST_TRIPLET@/tools/grpc/grpc_*_plugin*")
+
+foreach(PLUGIN ${GRPC_PLUGINS})
+ get_filename_component(PLUGIN_NAME "${PLUGIN}" NAME_WE)
+ add_executable(gRPC::${PLUGIN_NAME} IMPORTED)
+ set_property(TARGET gRPC::${PLUGIN_NAME} APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
+ set_target_properties(gRPC::${PLUGIN_NAME} PROPERTIES
+ IMPORTED_LOCATION_RELEASE "${PLUGIN}"
+ )
+endforeach()
diff --git a/vcpkg/ports/grpc/portfile.cmake b/vcpkg/ports/grpc/portfile.cmake
new file mode 100644
index 0000000..0c14253
--- /dev/null
+++ b/vcpkg/ports/grpc/portfile.cmake
@@ -0,0 +1,104 @@
+if(VCPKG_TARGET_IS_WINDOWS)
+ vcpkg_check_linkage(ONLY_STATIC_LIBRARY)
+endif()
+
+vcpkg_from_github(
+ OUT_SOURCE_PATH SOURCE_PATH
+ REPO grpc/grpc
+ REF "v${VERSION}"
+ SHA512 25783f75295919d0a077e3d0ff70ea2e651eaf107da2ebe8af40a584540f2f56aae0e04c7b809f3b1eb7d5adc3892f84464662d80b1234a111836f454ba84a18
+ HEAD_REF master
+ PATCHES
+ 00001-fix-uwp.patch
+ 00002-static-linking-in-linux.patch
+ 00004-link-gdi32-on-windows.patch
+ 00005-fix-uwp-error.patch
+ 00006-utf8-range.patch
+ 00015-disable-download-archive.patch
+ 00016-fix-plugin-targets.patch
+ 00017-add-src-upb.patch
+)
+file(REMOVE_RECURSE
+ "${SOURCE_PATH}/third_party/abseil-cpp"
+ "${SOURCE_PATH}/third_party/cares"
+ "${SOURCE_PATH}/third_party/protobuf"
+ "${SOURCE_PATH}/third_party/re2"
+ "${SOURCE_PATH}/third_party/utf8_range"
+ "${SOURCE_PATH}/third_party/zlib"
+)
+
+if(VCPKG_CROSSCOMPILING)
+ vcpkg_add_to_path(PREPEND "${CURRENT_HOST_INSTALLED_DIR}/tools/grpc")
+endif()
+
+string(COMPARE EQUAL "${VCPKG_CRT_LINKAGE}" "static" gRPC_MSVC_STATIC_RUNTIME)
+string(COMPARE EQUAL "${VCPKG_LIBRARY_LINKAGE}" "static" gRPC_STATIC_LINKING)
+
+set(cares_CARES_PROVIDER "package")
+if(VCPKG_TARGET_IS_UWP)
+ set(cares_CARES_PROVIDER "OFF")
+endif()
+
+vcpkg_check_features(
+ OUT_FEATURE_OPTIONS FEATURE_OPTIONS
+ FEATURES
+ codegen gRPC_BUILD_CODEGEN
+ systemd gRPC_USE_SYSTEMD
+)
+
+vcpkg_cmake_configure(
+ SOURCE_PATH "${SOURCE_PATH}"
+ OPTIONS ${FEATURE_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
+ -DgRPC_PROTOBUF_PROVIDER=package
+ -DgRPC_ABSL_PROVIDER=package
+ -DgRPC_RE2_PROVIDER=package
+ -DgRPC_CARES_PROVIDER=${cares_CARES_PROVIDER}
+ -DgRPC_BENCHMARK_PROVIDER=none
+ -DgRPC_INSTALL_BINDIR:STRING=bin
+ -DgRPC_INSTALL_LIBDIR:STRING=lib
+ -DgRPC_INSTALL_INCLUDEDIR:STRING=include
+ -DgRPC_INSTALL_CMAKEDIR:STRING=share/grpc
+ "-D_gRPC_PROTOBUF_PROTOC_EXECUTABLE=${CURRENT_HOST_INSTALLED_DIR}/tools/protobuf/protoc${VCPKG_HOST_EXECUTABLE_SUFFIX}"
+ "-DProtobuf_PROTOC_EXECUTABLE=${CURRENT_HOST_INSTALLED_DIR}/tools/protobuf/protoc${VCPKG_HOST_EXECUTABLE_SUFFIX}"
+ -DgRPC_BUILD_GRPCPP_OTEL_PLUGIN=OFF
+ -DgRPC_DOWNLOAD_ARCHIVES=OFF
+ MAYBE_UNUSED_VARIABLES
+ gRPC_MSVC_STATIC_RUNTIME
+ gRPC_USE_SYSTEMD
+)
+
+vcpkg_cmake_install(ADD_BIN_TO_PATH)
+vcpkg_copy_pdbs()
+vcpkg_cmake_config_fixup()
+
+if (VCPKG_TARGET_IS_WINDOWS)
+ file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/lib/pkgconfig" "${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig")
+else()
+ vcpkg_fixup_pkgconfig()
+endif()
+
+if (gRPC_BUILD_CODEGEN)
+ vcpkg_copy_tools(
+ AUTO_CLEAN
+ TOOL_NAMES
+ grpc_php_plugin
+ grpc_python_plugin
+ grpc_node_plugin
+ grpc_objective_c_plugin
+ grpc_csharp_plugin
+ grpc_cpp_plugin
+ grpc_ruby_plugin
+ )
+else()
+ configure_file("${CMAKE_CURRENT_LIST_DIR}/gRPCTargets-vcpkg-tools.cmake" "${CURRENT_PACKAGES_DIR}/share/grpc/gRPCTargets-vcpkg-tools.cmake" @ONLY)
+endif()
+
+file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/share" "${CURRENT_PACKAGES_DIR}/debug/include")
+
+vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/LICENSE")
diff --git a/vcpkg/ports/grpc/vcpkg-cmake-wrapper.cmake b/vcpkg/ports/grpc/vcpkg-cmake-wrapper.cmake
new file mode 100644
index 0000000..9adf028
--- /dev/null
+++ b/vcpkg/ports/grpc/vcpkg-cmake-wrapper.cmake
@@ -0,0 +1,2 @@
+list(REMOVE_AT ARGS 0)
+_find_package(gRPC ${ARGS}) # Shouldn't this be fixed downstream instead of using a Wrapper? \ No newline at end of file
diff --git a/vcpkg/ports/grpc/vcpkg.json b/vcpkg/ports/grpc/vcpkg.json
new file mode 100644
index 0000000..49b5da5
--- /dev/null
+++ b/vcpkg/ports/grpc/vcpkg.json
@@ -0,0 +1,51 @@
+{
+ "name": "grpc",
+ "version-semver": "1.71.0",
+ "port-version": 3,
+ "description": "gRPC is a modern, open source, high-performance remote procedure call (RPC) framework that can run anywhere. gRPC enables client and server applications to communicate transparently, and simplifies the building of connected systems.",
+ "homepage": "https://github.com/grpc/grpc",
+ "license": "Apache-2.0",
+ "dependencies": [
+ "abseil",
+ {
+ "name": "c-ares",
+ "platform": "!uwp"
+ },
+ {
+ "name": "grpc",
+ "host": true,
+ "features": [
+ "codegen"
+ ]
+ },
+ "openssl",
+ "protobuf",
+ {
+ "name": "protobuf",
+ "host": true
+ },
+ "re2",
+ "utf8-range",
+ {
+ "name": "vcpkg-cmake",
+ "host": true
+ },
+ {
+ "name": "vcpkg-cmake-config",
+ "host": true
+ },
+ "zlib"
+ ],
+ "features": {
+ "codegen": {
+ "description": "Build code generator machinery",
+ "supports": "!uwp"
+ },
+ "systemd": {
+ "description": "Build with libsystemd support",
+ "dependencies": [
+ "libsystemd"
+ ]
+ }
+ }
+}