This is an automated email from the ASF dual-hosted git repository.
raulcd pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow.git
The following commit(s) were added to refs/heads/main by this push:
new dcfb211eee GH-48248: [C++] Use FetchContent for bundled gRPC (#48250)
dcfb211eee is described below
commit dcfb211eeefeee270e524f6270de11427de52d15
Author: Raúl Cumplido <[email protected]>
AuthorDate: Wed Dec 3 12:01:20 2025 +0100
GH-48248: [C++] Use FetchContent for bundled gRPC (#48250)
### Rationale for this change
As a follow up of requiring a minimum CMake version >= 3.25 we discussed
moving our dependencies from ExternalProject to FetchContent. This can simplify
our third party dependency management.
### What changes are included in this PR?
The general change is moving gRPC from `ExternalProject` to `FetchContent`.
We can clean up previously required installation on RE2 and C-Ares. We
can't do it for Abseil or protobuf as those are also used on other
dependencies. We will be able to clean those later.
### Are these changes tested?
Yes, the changes are tested locally and on CI.
### Are there any user-facing changes?
No
* GitHub Issue: #48248
Authored-by: Raúl Cumplido <[email protected]>
Signed-off-by: Raúl Cumplido <[email protected]>
---
cpp/cmake_modules/ThirdpartyToolchain.cmake | 428 ++++++----------------------
1 file changed, 83 insertions(+), 345 deletions(-)
diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake
b/cpp/cmake_modules/ThirdpartyToolchain.cmake
index 3f381649f5..93d4474a0c 100644
--- a/cpp/cmake_modules/ThirdpartyToolchain.cmake
+++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake
@@ -2852,52 +2852,21 @@ function(build_re2)
set(RE2_VENDORED
TRUE
PARENT_SCOPE)
- set(RE2_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/re2_fc-install")
- set(RE2_PREFIX
- "${RE2_PREFIX}"
- PARENT_SCOPE)
fetchcontent_declare(re2
+ ${FC_DECLARE_COMMON_OPTIONS}
URL ${RE2_SOURCE_URL}
URL_HASH "SHA256=${ARROW_RE2_BUILD_SHA256_CHECKSUM}")
prepare_fetchcontent()
# Unity build causes some build errors
set(CMAKE_UNITY_BUILD OFF)
- fetchcontent_makeavailable(re2)
-
- # This custom target ensures re2 is built before we install
- add_custom_target(re2_built DEPENDS re2::re2)
-
- add_custom_command(OUTPUT "${re2_BINARY_DIR}/cmake_install.cmake.saved"
- COMMAND ${CMAKE_COMMAND} -E copy_if_different
- "${re2_BINARY_DIR}/cmake_install.cmake"
- "${re2_BINARY_DIR}/cmake_install.cmake.saved"
- COMMAND ${CMAKE_COMMAND} -E echo
- "# RE2 install disabled to prevent double
installation with Arrow"
- > "${re2_BINARY_DIR}/cmake_install.cmake"
- DEPENDS re2_built
- COMMENT "Disabling RE2 install to prevent double
installation"
- VERBATIM)
-
- add_custom_target(re2_install_disabled ALL
- DEPENDS "${re2_BINARY_DIR}/cmake_install.cmake.saved")
- # Install RE2 to RE2_PREFIX for gRPC to find
- add_custom_command(OUTPUT "${RE2_PREFIX}/.re2_installed"
- COMMAND ${CMAKE_COMMAND} -E copy_if_different
- "${re2_BINARY_DIR}/cmake_install.cmake.saved"
- "${re2_BINARY_DIR}/cmake_install.cmake.tmp"
- COMMAND ${CMAKE_COMMAND}
-DCMAKE_INSTALL_PREFIX=${RE2_PREFIX}
- -DCMAKE_INSTALL_CONFIG_NAME=$<CONFIG> -P
- "${re2_BINARY_DIR}/cmake_install.cmake.tmp" ||
- ${CMAKE_COMMAND} -E true
- COMMAND ${CMAKE_COMMAND} -E touch
"${RE2_PREFIX}/.re2_installed"
- DEPENDS re2_install_disabled
- COMMENT "Installing RE2 to ${RE2_PREFIX} for gRPC"
- VERBATIM)
+ fetchcontent_makeavailable(re2)
- add_custom_target(re2_fc DEPENDS "${RE2_PREFIX}/.re2_installed")
+ if(CMAKE_VERSION VERSION_LESS 3.28)
+ set_property(DIRECTORY ${re2_SOURCE_DIR} PROPERTY EXCLUDE_FROM_ALL TRUE)
+ endif()
set(ARROW_BUNDLED_STATIC_LIBS
${ARROW_BUNDLED_STATIC_LIBS} re2::re2
@@ -3030,10 +2999,6 @@ function(build_cares)
set(CARES_VENDORED
TRUE
PARENT_SCOPE)
- set(CARES_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/cares_fc-install")
- set(CARES_PREFIX
- "${CARES_PREFIX}"
- PARENT_SCOPE)
fetchcontent_declare(cares
URL ${CARES_SOURCE_URL}
@@ -3043,49 +3008,9 @@ function(build_cares)
set(CARES_SHARED OFF)
set(CARES_STATIC ON)
- set(CARES_INSTALL ON)
set(CARES_BUILD_TOOLS OFF)
- set(CARES_BUILD_TESTS OFF)
fetchcontent_makeavailable(cares)
- # gRPC requires c-ares to be installed to a known location.
- # We have to do this in two steps to avoid double installation of c-ares
- # when Arrow is installed.
- # This custom target ensures c-ares is built before we install
- add_custom_target(cares_built DEPENDS c-ares::cares)
-
- # Disable c-ares's install script after it's built to prevent double
installation
- add_custom_command(OUTPUT "${cares_BINARY_DIR}/cmake_install.cmake.saved"
- COMMAND ${CMAKE_COMMAND} -E copy_if_different
- "${cares_BINARY_DIR}/cmake_install.cmake"
- "${cares_BINARY_DIR}/cmake_install.cmake.saved"
- COMMAND ${CMAKE_COMMAND} -E echo
- "# c-ares install disabled to prevent double
installation with Arrow"
- > "${cares_BINARY_DIR}/cmake_install.cmake"
- DEPENDS cares_built
- COMMENT "Disabling c-ares install to prevent double
installation"
- VERBATIM)
-
- add_custom_target(cares_install_disabled ALL
- DEPENDS "${cares_BINARY_DIR}/cmake_install.cmake.saved")
-
- # Install c-ares to CARES_PREFIX for gRPC to find
- add_custom_command(OUTPUT "${CARES_PREFIX}/.cares_installed"
- COMMAND ${CMAKE_COMMAND} -E copy_if_different
- "${cares_BINARY_DIR}/cmake_install.cmake.saved"
- "${cares_BINARY_DIR}/cmake_install.cmake.tmp"
- COMMAND ${CMAKE_COMMAND}
-DCMAKE_INSTALL_PREFIX=${CARES_PREFIX}
- -DCMAKE_INSTALL_CONFIG_NAME=$<CONFIG> -P
- "${cares_BINARY_DIR}/cmake_install.cmake.tmp" ||
- ${CMAKE_COMMAND} -E true
- COMMAND ${CMAKE_COMMAND} -E touch
"${CARES_PREFIX}/.cares_installed"
- DEPENDS cares_install_disabled
- COMMENT "Installing c-ares to ${CARES_PREFIX} for gRPC"
- VERBATIM)
-
- # Make cares_fc depend on the install completion marker
- add_custom_target(cares_fc DEPENDS "${CARES_PREFIX}/.cares_installed")
-
if(APPLE)
# libresolv must be linked from c-ares version 1.16.1
find_library(LIBRESOLV_LIBRARY NAMES resolv libresolv REQUIRED)
@@ -3124,13 +3049,13 @@ function(build_absl)
prepare_fetchcontent()
# We have to enable Abseil install to generate abslConfig.cmake
- # so gRPC can find Abseil through ExternalProject_Add. Our expectation
- # is that this will not be necessary once gRPC supports FetchContent.
+ # so google-cloud-cpp can find Abseil through ExternalProject_Add. Our
expectation
+ # is that this will not be necessary once google-cloud-cpp supports
FetchContent.
set(ABSL_ENABLE_INSTALL ON)
fetchcontent_makeavailable(absl)
# This custom target is required due to a timing issue between FetchContent
- # and the install command below, which is necessary for GRPC to find Abseil
+ # and the install command below, which is necessary for google-cloud-cpp to
find Abseil
# due to mixing FetchContent and ExternalProject_Add.
# Create a target that depends on ALL Abseil libraries that will be
installed.
# This ensures they're all built before we try to install.
@@ -3202,7 +3127,7 @@ function(build_absl)
absl::time
absl::time_zone)
- # gRPC requires Abseil to be installed to a known location.
+ # google-cloud-cpp requires Abseil to be installed to a known location.
# We have to do this in two steps to avoid double installation of Abseil
# when Arrow is installed.
# Disable Abseil's install script this target runs after Abseil is built
@@ -3222,7 +3147,7 @@ function(build_absl)
add_custom_target(absl_install_disabled ALL
DEPENDS "${absl_BINARY_DIR}/cmake_install.cmake.saved")
- # Install Abseil to ABSL_PREFIX for gRPC to find.
+ # Install Abseil to ABSL_PREFIX for google-cloud-cpp to find.
# Using the saved original cmake_install.cmake.saved install script
# for other dependencies to find Abseil.
add_custom_command(OUTPUT "${ABSL_PREFIX}/.absl_installed"
@@ -3254,7 +3179,7 @@ function(build_absl)
list(POP_BACK CMAKE_MESSAGE_INDENT)
endfunction()
-macro(build_grpc)
+function(build_grpc)
resolve_dependency(c-ares
ARROW_CMAKE_PACKAGE_NAME
ArrowFlight
@@ -3265,289 +3190,100 @@ macro(build_grpc)
PC_PACKAGE_NAMES
libcares)
- message(STATUS "Building gRPC from source")
-
- set(GRPC_BUILD_DIR
"${CMAKE_CURRENT_BINARY_DIR}/grpc_ep-prefix/src/grpc_ep-build")
- set(GRPC_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/grpc_ep-install")
- set(GRPC_HOME "${GRPC_PREFIX}")
- set(GRPC_INCLUDE_DIR "${GRPC_PREFIX}/include")
-
- set(GRPC_STATIC_LIBRARY_GPR
-
"${GRPC_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}gpr${CMAKE_STATIC_LIBRARY_SUFFIX}"
- )
- set(GRPC_STATIC_LIBRARY_GRPC
-
"${GRPC_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}grpc${CMAKE_STATIC_LIBRARY_SUFFIX}"
- )
- set(GRPC_STATIC_LIBRARY_GRPCPP
-
"${GRPC_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}grpc++${CMAKE_STATIC_LIBRARY_SUFFIX}"
- )
- set(GRPC_STATIC_LIBRARY_ADDRESS_SORTING
-
"${GRPC_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}address_sorting${CMAKE_STATIC_LIBRARY_SUFFIX}"
- )
- set(GRPC_STATIC_LIBRARY_GRPCPP_REFLECTION
-
"${GRPC_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}grpc++_reflection${CMAKE_STATIC_LIBRARY_SUFFIX}"
- )
- set(GRPC_STATIC_LIBRARY_UPB
-
"${GRPC_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}upb${CMAKE_STATIC_LIBRARY_SUFFIX}"
- )
- set(GRPC_CPP_PLUGIN
"${GRPC_PREFIX}/bin/grpc_cpp_plugin${CMAKE_EXECUTABLE_SUFFIX}")
+ list(APPEND CMAKE_MESSAGE_INDENT "gRPC: ")
+ message(STATUS "Building gRPC from source using FetchContent")
+ set(GRPC_VENDORED
+ TRUE
+ PARENT_SCOPE)
- set(GRPC_CMAKE_PREFIX)
+ fetchcontent_declare(grpc
+ ${FC_DECLARE_COMMON_OPTIONS}
+ URL ${GRPC_SOURCE_URL}
+ URL_HASH "SHA256=${ARROW_GRPC_BUILD_SHA256_CHECKSUM}")
- add_custom_target(grpc_dependencies)
+ prepare_fetchcontent()
- if(ABSL_VENDORED)
- add_dependencies(grpc_dependencies absl_fc)
- endif()
- if(CARES_VENDORED)
- add_dependencies(grpc_dependencies cares_fc)
- endif()
if(PROTOBUF_VENDORED)
- add_dependencies(grpc_dependencies protobuf_fc)
- endif()
-
- if(GFLAGS_VENDORED)
- add_dependencies(grpc_dependencies gflags_ep)
- endif()
+ set(_gRPC_PROTOBUF_LIBRARIES "protobuf::libprotobuf")
- if(RE2_VENDORED)
- add_dependencies(grpc_dependencies re2_fc)
- endif()
+ set(_gRPC_PROTOBUF_PROTOC_LIBRARIES "protobuf::libprotoc")
- add_dependencies(grpc_dependencies ${ARROW_PROTOBUF_LIBPROTOBUF}
c-ares::cares
- ZLIB::ZLIB)
+ set(_gRPC_PROTOBUF_PROTOC_EXECUTABLE "$<TARGET_FILE:protobuf::protoc>")
- # For FetchContent Protobuf, use the install prefix directly
- if(PROTOBUF_VENDORED)
- set(GRPC_PB_ROOT "${PROTOBUF_PREFIX}")
- else()
- get_target_property(GRPC_PROTOBUF_INCLUDE_DIR ${ARROW_PROTOBUF_LIBPROTOBUF}
- INTERFACE_INCLUDE_DIRECTORIES)
- get_filename_component(GRPC_PB_ROOT "${GRPC_PROTOBUF_INCLUDE_DIR}"
DIRECTORY)
+ # gRPC needs this at configure time.
+ get_filename_component(_protobuf_root_dir "${protobuf_SOURCE_DIR}"
DIRECTORY)
+ set(_gRPC_PROTOBUF_WELLKNOWN_INCLUDE_DIR "${_protobuf_root_dir}/src")
endif()
- get_target_property(GRPC_Protobuf_PROTOC_LIBRARY ${ARROW_PROTOBUF_LIBPROTOC}
- IMPORTED_LOCATION)
+ # Use "none" provider for c-ares or re2, either we vendored it or we already
found it.
+ set(gRPC_CARES_PROVIDER
+ "none"
+ CACHE STRING "" FORCE)
+ set(_gRPC_CARES_LIBRARIES "c-ares::cares")
- # For FetchContent c-ares, use the install prefix directly
- if(CARES_VENDORED)
- set(GRPC_CARES_ROOT "${CARES_PREFIX}")
- else()
- get_target_property(GRPC_CARES_INCLUDE_DIR c-ares::cares
- INTERFACE_INCLUDE_DIRECTORIES)
- get_filename_component(GRPC_CARES_ROOT "${GRPC_CARES_INCLUDE_DIR}"
DIRECTORY)
- endif()
+ set(gRPC_RE2_PROVIDER "none")
+ set(_gRPC_RE2_LIBRARIES "re2::re2")
- # For FetchContent RE2, use the install prefix directly
- if(RE2_VENDORED)
- set(GRPC_RE2_ROOT "${RE2_PREFIX}")
- else()
- get_target_property(GRPC_RE2_INCLUDE_DIR re2::re2
INTERFACE_INCLUDE_DIRECTORIES)
- get_filename_component(GRPC_RE2_ROOT "${GRPC_RE2_INCLUDE_DIR}" DIRECTORY)
+ set(gRPC_SSL_PROVIDER "none")
+ set(_gRPC_SSL_LIBRARIES "OpenSSL::SSL;OpenSSL::Crypto")
+ set(gRPC_ZLIB_PROVIDER "package")
+ set(gRPC_INSTALL OFF)
+ set(gRPC_BUILD_TESTS OFF)
+
+ # Add warning suppression flags for gRPC build.
+ if(NOT MSVC)
+ string(APPEND CMAKE_C_FLAGS
+ " -Wno-attributes -Wno-format-security -Wno-unknown-warning-option")
+ string(APPEND CMAKE_CXX_FLAGS
+ " -Wno-attributes -Wno-format-security -Wno-unknown-warning-option")
endif()
- # Put Abseil, etc. first so that local directories are searched
- # before (what are likely) system directories
- set(GRPC_CMAKE_PREFIX "${GRPC_CMAKE_PREFIX};${ABSL_PREFIX}")
- set(GRPC_CMAKE_PREFIX "${GRPC_CMAKE_PREFIX};${GRPC_PB_ROOT}")
- set(GRPC_CMAKE_PREFIX "${GRPC_CMAKE_PREFIX};${GRPC_CARES_ROOT}")
- set(GRPC_CMAKE_PREFIX "${GRPC_CMAKE_PREFIX};${GRPC_RE2_ROOT}")
+ fetchcontent_makeavailable(grpc)
- # ZLIB is never vendored
- set(GRPC_CMAKE_PREFIX "${GRPC_CMAKE_PREFIX};${ZLIB_ROOT}")
+ if(CMAKE_VERSION VERSION_LESS 3.28)
+ set_property(DIRECTORY ${grpc_SOURCE_DIR} PROPERTY EXCLUDE_FROM_ALL TRUE)
+ endif()
+
+ # FetchContent builds gRPC libraries without gRPC:: prefix.
+ # Create gRPC:: alias targets for consistency.
+ set(GRPC_LIBRARY_TARGETS
+ address_sorting
+ gpr
+ grpc
+ grpc++
+ grpc++_reflection
+ upb)
+
+ foreach(target ${GRPC_LIBRARY_TARGETS})
+ if(TARGET ${target} AND NOT TARGET gRPC::${target})
+ add_library(gRPC::${target} ALIAS ${target})
+ endif()
+ endforeach()
- if(RAPIDJSON_VENDORED)
- add_dependencies(grpc_dependencies rapidjson_ep)
+ if(TARGET grpc_cpp_plugin AND NOT TARGET gRPC::grpc_cpp_plugin)
+ add_executable(gRPC::grpc_cpp_plugin ALIAS grpc_cpp_plugin)
endif()
- # Yuck, see https://stackoverflow.com/a/45433229/776560
- string(REPLACE ";" ${EP_LIST_SEPARATOR} GRPC_PREFIX_PATH_ALT_SEP
"${GRPC_CMAKE_PREFIX}")
-
- set(GRPC_C_FLAGS "${EP_C_FLAGS}")
- set(GRPC_CXX_FLAGS "${EP_CXX_FLAGS}")
+ # gRPC headers use deprecated std::iterator that causes compilation errors.
+ # This workaround can be removed once we upgrade to a newer gRPC version.
if(NOT MSVC)
- # Negate warnings that gRPC cannot build under
- # See https://github.com/grpc/grpc/issues/29417
- string(APPEND
- GRPC_C_FLAGS
- " -Wno-attributes"
- " -Wno-format-security"
- " -Wno-unknown-warning-option")
- string(APPEND
- GRPC_CXX_FLAGS
- " -Wno-attributes"
- " -Wno-format-security"
- " -Wno-unknown-warning-option")
- endif()
-
- set(GRPC_CMAKE_ARGS
- "${EP_COMMON_CMAKE_ARGS}"
- "-DCMAKE_C_FLAGS=${GRPC_C_FLAGS}"
- "-DCMAKE_CXX_FLAGS=${GRPC_CXX_FLAGS}"
- -DCMAKE_INSTALL_PREFIX=${GRPC_PREFIX}
- -DCMAKE_PREFIX_PATH='${GRPC_PREFIX_PATH_ALT_SEP}'
- -DOPENSSL_CRYPTO_LIBRARY=${OPENSSL_CRYPTO_LIBRARY}
- -DOPENSSL_INCLUDE_DIR=${OPENSSL_INCLUDE_DIR}
- -DOPENSSL_SSL_LIBRARY=${OPENSSL_SSL_LIBRARY}
- -DgRPC_ABSL_PROVIDER=package
- -DgRPC_BUILD_CSHARP_EXT=OFF
- -DgRPC_BUILD_GRPC_CSHARP_PLUGIN=OFF
- -DgRPC_BUILD_GRPC_NODE_PLUGIN=OFF
- -DgRPC_BUILD_GRPC_OBJECTIVE_C_PLUGIN=OFF
- -DgRPC_BUILD_GRPC_PHP_PLUGIN=OFF
- -DgRPC_BUILD_GRPC_PYTHON_PLUGIN=OFF
- -DgRPC_BUILD_GRPC_RUBY_PLUGIN=OFF
- -DgRPC_BUILD_TESTS=OFF
- -DgRPC_CARES_PROVIDER=package
- -DgRPC_MSVC_STATIC_RUNTIME=${ARROW_USE_STATIC_CRT}
- -DgRPC_PROTOBUF_PROVIDER=package
- -DgRPC_RE2_PROVIDER=package
- -DgRPC_SSL_PROVIDER=package
- -DgRPC_ZLIB_PROVIDER=package)
- if(PROTOBUF_VENDORED)
- list(APPEND GRPC_CMAKE_ARGS -DgRPC_PROTOBUF_PACKAGE_TYPE=CONFIG)
+ foreach(target ${GRPC_LIBRARY_TARGETS})
+ if(TARGET ${target})
+ target_compile_options(${target} INTERFACE
-Wno-error=deprecated-declarations)
+ endif()
+ endforeach()
endif()
- # XXX the gRPC git checkout is huge and takes a long time
- # Ideally, we should be able to use the tarballs, but they don't contain
- # vendored dependencies such as c-ares...
- externalproject_add(grpc_ep
- ${EP_COMMON_OPTIONS}
- URL ${GRPC_SOURCE_URL}
- URL_HASH "SHA256=${ARROW_GRPC_BUILD_SHA256_CHECKSUM}"
- BUILD_BYPRODUCTS ${GRPC_STATIC_LIBRARY_GPR}
- ${GRPC_STATIC_LIBRARY_GRPC}
- ${GRPC_STATIC_LIBRARY_GRPCPP}
- ${GRPC_STATIC_LIBRARY_ADDRESS_SORTING}
- ${GRPC_STATIC_LIBRARY_GRPCPP_REFLECTION}
- ${GRPC_STATIC_LIBRARY_UPB}
- ${GRPC_CPP_PLUGIN}
- CMAKE_ARGS ${GRPC_CMAKE_ARGS}
- DEPENDS ${grpc_dependencies})
-
- # Work around https://gitlab.kitware.com/cmake/cmake/issues/15052
- file(MAKE_DIRECTORY ${GRPC_INCLUDE_DIR})
-
- add_library(gRPC::upb STATIC IMPORTED)
- set_target_properties(gRPC::upb PROPERTIES IMPORTED_LOCATION
- "${GRPC_STATIC_LIBRARY_UPB}")
- target_include_directories(gRPC::upb BEFORE INTERFACE "${GRPC_INCLUDE_DIR}")
-
- set(GRPC_GPR_ABSL_LIBRARIES
- # We need a flattened list of Abseil libraries for the static linking
case,
- # because our method for creating arrow_bundled_dependencies.a doesn't
walk
- # the dependency tree of targets.
- #
- # This list should be updated when we change Abseil / gRPC versions. It
can
- # be generated with:
- # pkg-config --libs --static grpc \
- # | tr " " "\n" \
- # | grep ^-labsl_ \
- # | sed 's/^-labsl_/absl::/'
- absl::raw_hash_set
- absl::hashtablez_sampler
- absl::hash
- absl::city
- absl::low_level_hash
- absl::random_distributions
- absl::random_seed_sequences
- absl::random_internal_pool_urbg
- absl::random_internal_randen
- absl::random_internal_randen_hwaes
- absl::random_internal_randen_hwaes_impl
- absl::random_internal_randen_slow
- absl::random_internal_platform
- absl::random_internal_seed_material
- absl::random_seed_gen_exception
- absl::statusor
- absl::status
- absl::cord
- absl::cordz_info
- absl::cord_internal
- absl::cordz_functions
- absl::exponential_biased
- absl::cordz_handle
- absl::bad_optional_access
- absl::str_format_internal
- absl::synchronization
- absl::graphcycles_internal
- absl::stacktrace
- absl::symbolize
- absl::debugging_internal
- absl::demangle_internal
- absl::malloc_internal
- absl::time
- absl::civil_time
- absl::strings
- absl::strings_internal
- absl::base
- absl::spinlock_wait
- absl::int128
- absl::throw_delegate
- absl::time_zone
- absl::bad_variant_access
- absl::raw_logging_internal
- absl::log_severity)
-
- add_library(gRPC::gpr STATIC IMPORTED)
- set_target_properties(gRPC::gpr PROPERTIES IMPORTED_LOCATION
- "${GRPC_STATIC_LIBRARY_GPR}")
- target_link_libraries(gRPC::gpr INTERFACE ${GRPC_GPR_ABSL_LIBRARIES})
- target_include_directories(gRPC::gpr BEFORE INTERFACE "${GRPC_INCLUDE_DIR}")
-
- add_library(gRPC::address_sorting STATIC IMPORTED)
- set_target_properties(gRPC::address_sorting
- PROPERTIES IMPORTED_LOCATION
- "${GRPC_STATIC_LIBRARY_ADDRESS_SORTING}")
- target_include_directories(gRPC::address_sorting BEFORE INTERFACE
"${GRPC_INCLUDE_DIR}")
-
- add_library(gRPC::grpc++_reflection STATIC IMPORTED)
- set_target_properties(gRPC::grpc++_reflection
- PROPERTIES IMPORTED_LOCATION
- "${GRPC_STATIC_LIBRARY_GRPCPP_REFLECTION}")
- target_include_directories(gRPC::grpc++_reflection BEFORE
- INTERFACE "${GRPC_INCLUDE_DIR}")
-
- add_library(gRPC::grpc STATIC IMPORTED)
- set_target_properties(gRPC::grpc PROPERTIES IMPORTED_LOCATION
- "${GRPC_STATIC_LIBRARY_GRPC}")
- target_link_libraries(gRPC::grpc
- INTERFACE gRPC::gpr
- gRPC::upb
- gRPC::address_sorting
- re2::re2
- c-ares::cares
- ZLIB::ZLIB
- OpenSSL::SSL
- Threads::Threads)
- target_include_directories(gRPC::grpc BEFORE INTERFACE "${GRPC_INCLUDE_DIR}")
-
- add_library(gRPC::grpc++ STATIC IMPORTED)
- set_target_properties(gRPC::grpc++ PROPERTIES IMPORTED_LOCATION
-
"${GRPC_STATIC_LIBRARY_GRPCPP}")
- target_link_libraries(gRPC::grpc++ INTERFACE gRPC::grpc
${ARROW_PROTOBUF_LIBPROTOBUF})
- target_include_directories(gRPC::grpc++ BEFORE INTERFACE
"${GRPC_INCLUDE_DIR}")
-
- add_executable(gRPC::grpc_cpp_plugin IMPORTED)
- set_target_properties(gRPC::grpc_cpp_plugin PROPERTIES IMPORTED_LOCATION
- ${GRPC_CPP_PLUGIN})
-
- add_dependencies(grpc_ep grpc_dependencies)
- add_dependencies(gRPC::grpc++ grpc_ep)
- add_dependencies(gRPC::grpc_cpp_plugin grpc_ep)
- set(GRPC_VENDORED TRUE)
-
# ar -M rejects with the "libgrpc++.a" filename because "+" is a line
# continuation character in these scripts, so we have to create a copy of the
- # static lib that we will bundle later
-
+ # static lib that we will bundle later.
set(GRPC_STATIC_LIBRARY_GRPCPP_FOR_AR
"${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}grpcpp${CMAKE_STATIC_LIBRARY_SUFFIX}"
)
add_custom_command(OUTPUT ${GRPC_STATIC_LIBRARY_GRPCPP_FOR_AR}
COMMAND ${CMAKE_COMMAND} -E copy
$<TARGET_FILE:gRPC::grpc++>
${GRPC_STATIC_LIBRARY_GRPCPP_FOR_AR}
- DEPENDS grpc_ep)
+ DEPENDS gRPC::grpc++)
add_library(gRPC::grpcpp_for_bundling STATIC IMPORTED)
set_target_properties(gRPC::grpcpp_for_bundling
PROPERTIES IMPORTED_LOCATION
@@ -3558,6 +3294,7 @@ macro(build_grpc)
add_custom_target(grpc_copy_grpc++ ALL DEPENDS
"${GRPC_STATIC_LIBRARY_GRPCPP_FOR_AR}")
add_dependencies(gRPC::grpcpp_for_bundling grpc_copy_grpc++)
+ # Add gRPC libraries to bundled static libs.
list(APPEND
ARROW_BUNDLED_STATIC_LIBS
gRPC::address_sorting
@@ -3565,10 +3302,11 @@ macro(build_grpc)
gRPC::grpc
gRPC::grpcpp_for_bundling
gRPC::upb)
- if(ABSL_VENDORED)
- list(APPEND ARROW_BUNDLED_STATIC_LIBS ${GRPC_GPR_ABSL_LIBRARIES})
- endif()
-endmacro()
+ set(ARROW_BUNDLED_STATIC_LIBS
+ "${ARROW_BUNDLED_STATIC_LIBS}"
+ PARENT_SCOPE)
+ list(POP_BACK CMAKE_MESSAGE_INDENT)
+endfunction()
if(ARROW_WITH_GOOGLE_CLOUD_CPP OR ARROW_WITH_GRPC)
set(ARROW_ABSL_REQUIRED_VERSION 20211102)