diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake b/cpp/cmake_modules/ThirdpartyToolchain.cmake index 3f381649f5a..0f745f6784f 100644 --- a/cpp/cmake_modules/ThirdpartyToolchain.cmake +++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake @@ -753,7 +753,7 @@ else() ARROW_PROTOBUF_STRIPPED_BUILD_VERSION) # strip the leading `v` set_urls(PROTOBUF_SOURCE_URL - "https://github.com/protocolbuffers/protobuf/releases/download/${ARROW_PROTOBUF_BUILD_VERSION}/protobuf-all-${ARROW_PROTOBUF_STRIPPED_BUILD_VERSION}.tar.gz" + "https://github.com/protocolbuffers/protobuf/releases/download/${ARROW_PROTOBUF_BUILD_VERSION}/protobuf-${ARROW_PROTOBUF_STRIPPED_BUILD_VERSION}.tar.gz" "${THIRDPARTY_MIRROR_URL}/protobuf-${ARROW_PROTOBUF_BUILD_VERSION}.tar.gz") endif() @@ -1884,8 +1884,7 @@ function(build_protobuf) fetchcontent_declare(protobuf URL ${PROTOBUF_SOURCE_URL} - URL_HASH "SHA256=${ARROW_PROTOBUF_BUILD_SHA256_CHECKSUM}" - SOURCE_SUBDIR cmake) + URL_HASH "SHA256=${ARROW_PROTOBUF_BUILD_SHA256_CHECKSUM}") prepare_fetchcontent() @@ -2852,52 +2851,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=$ -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 +2998,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 +3007,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=$ -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 +3048,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. @@ -3147,12 +3071,18 @@ function(build_absl) absl::cordz_handle absl::cordz_info absl::cordz_sample_token + absl::crc32c + absl::crc_cord_state + absl::crc_cpu_detect + absl::crc_internal absl::debugging_internal + absl::decode_rust_punycode absl::demangle_internal + absl::demangle_rust + absl::die_if_null absl::examine_stack absl::exponential_biased absl::failure_signal_handler - absl::flags absl::flags_commandlineflag absl::flags_commandlineflag_internal absl::flags_config @@ -3168,12 +3098,28 @@ function(build_absl) absl::hash absl::hashtablez_sampler absl::int128 + absl::kernel_timeout_internal absl::leak_check - absl::leak_check_disable + absl::log_entry + absl::log_flags + absl::log_globals + absl::log_initialize + absl::log_internal_check_op + absl::log_internal_conditions + absl::log_internal_fnmatch + absl::log_internal_format + absl::log_internal_globals + absl::log_internal_log_sink_set + absl::log_internal_message + absl::log_internal_nullguard + absl::log_internal_proto + absl::log_internal_structured_proto absl::log_severity + absl::log_sink absl::low_level_hash absl::malloc_internal absl::periodic_sampler + absl::poison absl::random_distributions absl::random_internal_distribution_test_util absl::random_internal_platform @@ -3194,15 +3140,19 @@ function(build_absl) absl::statusor absl::str_format_internal absl::strerror + absl::string_view absl::strings absl::strings_internal absl::symbolize absl::synchronization absl::throw_delegate absl::time - absl::time_zone) + absl::time_zone + absl::tracing_internal + absl::utf8_for_code_point + absl::vlog_config_internal) - # 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 +3172,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 +3204,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 +3215,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() + set(_gRPC_PROTOBUF_LIBRARIES "protobuf::libprotobuf") - if(GFLAGS_VENDORED) - add_dependencies(grpc_dependencies gflags_ep) - endif() + set(_gRPC_PROTOBUF_PROTOC_LIBRARIES "protobuf::libprotoc") - if(RE2_VENDORED) - add_dependencies(grpc_dependencies re2_fc) + set(_gRPC_PROTOBUF_PROTOC_EXECUTABLE "$") + + # 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() - add_dependencies(grpc_dependencies ${ARROW_PROTOBUF_LIBPROTOBUF} c-ares::cares - ZLIB::ZLIB) + # 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 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) - endif() + set(gRPC_RE2_PROVIDER "none") + set(_gRPC_RE2_LIBRARIES "re2::re2") - get_target_property(GRPC_Protobuf_PROTOC_LIBRARY ${ARROW_PROTOBUF_LIBPROTOC} - IMPORTED_LOCATION) + set(gRPC_SSL_PROVIDER "none") + set(_gRPC_SSL_LIBRARIES "OpenSSL::SSL;OpenSSL::Crypto") + set(gRPC_ZLIB_PROVIDER "none") + set(_gRPC_ZLIB_LIBRARIES "ZLIB::ZLIB") + set(gRPC_INSTALL OFF) + set(gRPC_BUILD_TESTS OFF) - # 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) + # 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() - # 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) + fetchcontent_makeavailable(grpc) + + if(CMAKE_VERSION VERSION_LESS 3.28) + set_property(DIRECTORY ${grpc_SOURCE_DIR} PROPERTY EXCLUDE_FROM_ALL TRUE) 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 builds gRPC libraries without gRPC:: prefix. + # Create gRPC:: alias targets for consistency. + set(GRPC_LIBRARY_TARGETS + address_sorting + gpr + grpc + grpc++ + grpc++_reflection) - # ZLIB is never vendored - set(GRPC_CMAKE_PREFIX "${GRPC_CMAKE_PREFIX};${ZLIB_ROOT}") + 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 $ ${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,17 +3319,18 @@ 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 gRPC::gpr gRPC::grpc - gRPC::grpcpp_for_bundling - gRPC::upb) - if(ABSL_VENDORED) - list(APPEND ARROW_BUNDLED_STATIC_LIBS ${GRPC_GPR_ABSL_LIBRARIES}) - endif() -endmacro() + gRPC::grpcpp_for_bundling) + 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) diff --git a/cpp/thirdparty/versions.txt b/cpp/thirdparty/versions.txt index fd596f9a24d..d9877d4220e 100644 --- a/cpp/thirdparty/versions.txt +++ b/cpp/thirdparty/versions.txt @@ -23,8 +23,8 @@ # `DEPENDENCIES` array (see the comment on top of the declaration for the # format). -ARROW_ABSL_BUILD_VERSION=20211102.0 -ARROW_ABSL_BUILD_SHA256_CHECKSUM=dcf71b9cba8dc0ca9940c4b316a0c796be8fab42b070bb6b7cab62b48f0e66c4 +ARROW_ABSL_BUILD_VERSION=20250512.1 +ARROW_ABSL_BUILD_SHA256_CHECKSUM=9b7a064305e9fd94d124ffa6cc358592eb42b5da588fb4e07d09254aa40086db ARROW_AWS_C_AUTH_BUILD_VERSION=v0.9.0 ARROW_AWS_C_AUTH_BUILD_SHA256_CHECKSUM=aa6e98864fefb95c249c100da4ae7aed36ba13a8a91415791ec6fad20bec0427 ARROW_AWS_C_CAL_BUILD_VERSION=v0.9.2 @@ -74,8 +74,8 @@ ARROW_GLOG_BUILD_VERSION=v0.5.0 ARROW_GLOG_BUILD_SHA256_CHECKSUM=eede71f28371bf39aa69b45de23b329d37214016e2055269b3b5e7cfd40b59f5 ARROW_GOOGLE_CLOUD_CPP_BUILD_VERSION=v2.22.0 ARROW_GOOGLE_CLOUD_CPP_BUILD_SHA256_CHECKSUM=0c68782e57959c82e0c81def805c01460a042c1aae0c2feee905acaa2a2dc9bf -ARROW_GRPC_BUILD_VERSION=v1.46.3 -ARROW_GRPC_BUILD_SHA256_CHECKSUM=d6cbf22cb5007af71b61c6be316a79397469c58c82a942552a62e708bce60964 +ARROW_GRPC_BUILD_VERSION=v1.76.0 +ARROW_GRPC_BUILD_SHA256_CHECKSUM=0af37b800953130b47c075b56683ee60bdc3eda3c37fc6004193f5b569758204 ARROW_GTEST_BUILD_VERSION=1.16.0 ARROW_GTEST_BUILD_SHA256_CHECKSUM=78c676fc63881529bf97bf9d45948d905a66833fbfa5318ea2cd7478cb98f399 ARROW_JEMALLOC_BUILD_VERSION=5.3.0 @@ -92,8 +92,8 @@ ARROW_OPENTELEMETRY_PROTO_BUILD_VERSION=v1.7.0 ARROW_OPENTELEMETRY_PROTO_BUILD_SHA256_CHECKSUM=11330d850f5e24d34c4246bc8cb21fcd311e7565d219195713455a576bb11bed ARROW_ORC_BUILD_VERSION=2.2.1 ARROW_ORC_BUILD_SHA256_CHECKSUM=52fc762332442e8b05d7182f8c035f9e04d945b9a52be22ab69f28b3f37d4500 -ARROW_PROTOBUF_BUILD_VERSION=v21.3 -ARROW_PROTOBUF_BUILD_SHA256_CHECKSUM=2f723218f6cb709ae4cdc4fb5ed56a5951fc5d466f0128ce4c946b8c78c8c49f +ARROW_PROTOBUF_BUILD_VERSION=v31.1 +ARROW_PROTOBUF_BUILD_SHA256_CHECKSUM=12bfd76d27b9ac3d65c00966901609e020481b9474ef75c7ff4601ac06fa0b82 # Because of https://github.com/Tencent/rapidjson/pull/1323, we require # a pre-release version of RapidJSON to build with GCC 8 without # warnings. @@ -160,7 +160,7 @@ DEPENDENCIES=( "ARROW_OPENTELEMETRY_URL opentelemetry-cpp-${ARROW_OPENTELEMETRY_BUILD_VERSION}.tar.gz https://github.com/open-telemetry/opentelemetry-cpp/archive/refs/tags/${ARROW_OPENTELEMETRY_BUILD_VERSION}.tar.gz" "ARROW_OPENTELEMETRY_PROTO_URL opentelemetry-proto-${ARROW_OPENTELEMETRY_PROTO_BUILD_VERSION}.tar.gz https://github.com/open-telemetry/opentelemetry-proto/archive/refs/tags/${ARROW_OPENTELEMETRY_PROTO_BUILD_VERSION}.tar.gz" "ARROW_ORC_URL orc-${ARROW_ORC_BUILD_VERSION}.tar.gz https://www.apache.org/dyn/closer.lua/orc/orc-${ARROW_ORC_BUILD_VERSION}/orc-${ARROW_ORC_BUILD_VERSION}.tar.gz?action=download" - "ARROW_PROTOBUF_URL protobuf-${ARROW_PROTOBUF_BUILD_VERSION}.tar.gz https://github.com/google/protobuf/releases/download/${ARROW_PROTOBUF_BUILD_VERSION}/protobuf-all-${ARROW_PROTOBUF_BUILD_VERSION:1}.tar.gz" + "ARROW_PROTOBUF_URL protobuf-${ARROW_PROTOBUF_BUILD_VERSION}.tar.gz https://github.com/google/protobuf/releases/download/${ARROW_PROTOBUF_BUILD_VERSION}/protobuf-${ARROW_PROTOBUF_BUILD_VERSION:1}.tar.gz" "ARROW_RAPIDJSON_URL rapidjson-${ARROW_RAPIDJSON_BUILD_VERSION}.tar.gz https://github.com/miloyip/rapidjson/archive/${ARROW_RAPIDJSON_BUILD_VERSION}.tar.gz" "ARROW_RE2_URL re2-${ARROW_RE2_BUILD_VERSION}.tar.gz https://github.com/google/re2/archive/${ARROW_RE2_BUILD_VERSION}.tar.gz" "ARROW_S2N_TLS_URL s2n-${ARROW_S2N_TLS_BUILD_VERSION}.tar.gz https://github.com/aws/s2n-tls/archive/${ARROW_S2N_TLS_BUILD_VERSION}.tar.gz"