From d5ea5fed18f54faaacbded27fd82a46b9ab3c8e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Cumplido?= Date: Fri, 23 Jan 2026 15:22:41 +0100 Subject: [PATCH] GH-48926: [C++] Upgrade Abseil/Protobuf/GRPC bundled versions --- cpp/cmake_modules/ThirdpartyToolchain.cmake | 102 +++++++++++--------- cpp/thirdparty/versions.txt | 18 ++-- 2 files changed, 64 insertions(+), 56 deletions(-) diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake b/cpp/cmake_modules/ThirdpartyToolchain.cmake index e011375f37a..d5087d1c13b 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() @@ -1864,12 +1864,63 @@ if(ARROW_WITH_THRIFT) list(GET Thrift_VERSION_LIST 2 Thrift_VERSION_PATCH) endif() +# ---------------------------------------------------------------------- +# Abseil defined here so it can be called from build_protobuf() + +function(build_absl) + list(APPEND CMAKE_MESSAGE_INDENT "ABSL: ") + message(STATUS "Building Abseil from source using FetchContent") + set(ABSL_VENDORED + TRUE + PARENT_SCOPE) + + if(CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 13.0) + string(APPEND CMAKE_CXX_FLAGS " -include stdint.h") + endif() + + fetchcontent_declare(absl + ${FC_DECLARE_COMMON_OPTIONS} OVERRIDE_FIND_PACKAGE + URL ${ABSL_SOURCE_URL} + URL_HASH "SHA256=${ARROW_ABSL_BUILD_SHA256_CHECKSUM}") + + prepare_fetchcontent() + + # We have to enable Abseil install to add Abseil targets to an export set. + # But we don't install Abseil by EXCLUDE_FROM_ALL. + set(ABSL_ENABLE_INSTALL ON) + fetchcontent_makeavailable(absl) + + if(CMAKE_VERSION VERSION_LESS 3.28) + set_property(DIRECTORY ${absl_SOURCE_DIR} PROPERTY EXCLUDE_FROM_ALL TRUE) + endif() + + if(APPLE) + # This is due to upstream absl::cctz issue + # https://github.com/abseil/abseil-cpp/issues/283 + find_library(CoreFoundation CoreFoundation) + # When ABSL_ENABLE_INSTALL is ON, the real target is "time" not "absl_time" + # Cannot use set_property on alias targets (absl::time is an alias) + set_property(TARGET time + APPEND + PROPERTY INTERFACE_LINK_LIBRARIES ${CoreFoundation}) + endif() + list(POP_BACK CMAKE_MESSAGE_INDENT) +endfunction() + # ---------------------------------------------------------------------- # Protocol Buffers (required for ORC, Flight and Substrait libraries) function(build_protobuf) list(APPEND CMAKE_MESSAGE_INDENT "Protobuf: ") message(STATUS "Building Protocol Buffers from source using FetchContent") + + # Protobuf requires Abseil. Build Abseil first with OVERRIDE_FIND_PACKAGE + # so that protobuf doesn't build its own copy and we can reuse it on google-cloud-cpp + # if it's also being built. + if(NOT TARGET absl::strings) + build_absl() + endif() + set(PROTOBUF_VENDORED TRUE PARENT_SCOPE) @@ -1885,8 +1936,7 @@ function(build_protobuf) fetchcontent_declare(protobuf ${FC_DECLARE_COMMON_OPTIONS} OVERRIDE_FIND_PACKAGE 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() @@ -3030,46 +3080,6 @@ endfunction() # ---------------------------------------------------------------------- # Dependencies for Arrow Flight RPC -function(build_absl) - list(APPEND CMAKE_MESSAGE_INDENT "ABSL: ") - message(STATUS "Building Abseil from source using FetchContent") - set(ABSL_VENDORED - TRUE - PARENT_SCOPE) - - if(CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 13.0) - string(APPEND CMAKE_CXX_FLAGS " -include stdint.h") - endif() - - fetchcontent_declare(absl - ${FC_DECLARE_COMMON_OPTIONS} OVERRIDE_FIND_PACKAGE - URL ${ABSL_SOURCE_URL} - URL_HASH "SHA256=${ARROW_ABSL_BUILD_SHA256_CHECKSUM}") - - prepare_fetchcontent() - - # We have to enable Abseil install to add Abseil targets to an export set. - # But we don't install Abseil by EXCLUDE_FROM_ALL. - set(ABSL_ENABLE_INSTALL ON) - fetchcontent_makeavailable(absl) - - if(CMAKE_VERSION VERSION_LESS 3.28) - set_property(DIRECTORY ${absl_SOURCE_DIR} PROPERTY EXCLUDE_FROM_ALL TRUE) - endif() - - if(APPLE) - # This is due to upstream absl::cctz issue - # https://github.com/abseil/abseil-cpp/issues/283 - find_library(CoreFoundation CoreFoundation) - # When ABSL_ENABLE_INSTALL is ON, the real target is "time" not "absl_time" - # Cannot use set_property on alias targets (absl::time is an alias) - set_property(TARGET time - APPEND - PROPERTY INTERFACE_LINK_LIBRARIES ${CoreFoundation}) - endif() - list(POP_BACK CMAKE_MESSAGE_INDENT) -endfunction() - function(build_grpc) resolve_dependency(c-ares ARROW_CMAKE_PACKAGE_NAME @@ -3145,8 +3155,7 @@ function(build_grpc) gpr grpc grpc++ - grpc++_reflection - upb) + grpc++_reflection) foreach(target ${GRPC_LIBRARY_TARGETS}) if(TARGET ${target} AND NOT TARGET gRPC::${target}) @@ -3194,8 +3203,7 @@ function(build_grpc) gRPC::address_sorting gRPC::gpr gRPC::grpc - gRPC::grpcpp_for_bundling - gRPC::upb) + gRPC::grpcpp_for_bundling) set(ARROW_BUNDLED_STATIC_LIBS "${ARROW_BUNDLED_STATIC_LIBS}" PARENT_SCOPE) diff --git a/cpp/thirdparty/versions.txt b/cpp/thirdparty/versions.txt index 442cde2c9c0..5fd3e46ee59 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=20250127.0 +ARROW_ABSL_BUILD_SHA256_CHECKSUM=16242f394245627e508ec6bb296b433c90f8d914f73b9c026fddb905e27276e8 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 @@ -72,10 +72,10 @@ ARROW_GFLAGS_BUILD_VERSION=v2.2.2 ARROW_GFLAGS_BUILD_SHA256_CHECKSUM=34af2f15cf7367513b352bdcd2493ab14ce43692d2dcd9dfc499492966c64dcf 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_GOOGLE_CLOUD_CPP_BUILD_VERSION=v2.46.0 +ARROW_GOOGLE_CLOUD_CPP_BUILD_SHA256_CHECKSUM=492734e092e5150d8395797f0d269f3d1e49ba3a959db4a332d15a1f382ff7ee +ARROW_GRPC_BUILD_VERSION=v1.76.0 +ARROW_GRPC_BUILD_SHA256_CHECKSUM=0af37b800953130b47c075b56683ee60bdc3eda3c37fc6004193f5b569758204 ARROW_GTEST_BUILD_VERSION=1.17.0 ARROW_GTEST_BUILD_SHA256_CHECKSUM=65fab701d9829d38cb77c14acdc431d2108bfdbf8979e40eb8ae567edf10b27c 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"