From 661081d03605c3805b85fb89d2c7a7d583578629 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 1/2] 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 df937cc14cb..11211b0a6b8 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() @@ -3037,46 +3087,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 @@ -3152,8 +3162,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}) @@ -3201,8 +3210,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" From cdf2f315117d942f55de27dace9823b547cedccb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Cumplido?= Date: Wed, 28 Jan 2026 10:35:22 +0100 Subject: [PATCH 2/2] Remove crc32c and upgrade (temporarily) to google cloud cpp prepare-for-v3.0.0 branch --- cpp/cmake_modules/ThirdpartyToolchain.cmake | 59 +++------------------ cpp/thirdparty/versions.txt | 3 -- 2 files changed, 7 insertions(+), 55 deletions(-) diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake b/cpp/cmake_modules/ThirdpartyToolchain.cmake index 11211b0a6b8..74775133315 100644 --- a/cpp/cmake_modules/ThirdpartyToolchain.cmake +++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake @@ -629,14 +629,6 @@ else() "${THIRDPARTY_MIRROR_URL}/cares-${ARROW_CARES_BUILD_VERSION}.tar.gz") endif() -if(DEFINED ENV{ARROW_CRC32C_URL}) - set(CRC32C_SOURCE_URL "$ENV{ARROW_CRC32C_URL}") -else() - set_urls(CRC32C_SOURCE_URL - "https://github.com/google/crc32c/archive/${ARROW_CRC32C_BUILD_VERSION}.tar.gz" - ) -endif() - if(DEFINED ENV{ARROW_GBENCHMARK_URL}) set(GBENCHMARK_SOURCE_URL "$ENV{ARROW_GBENCHMARK_URL}") else() @@ -3300,44 +3292,6 @@ endif() # ---------------------------------------------------------------------- # GCS and dependencies -function(build_crc32c_once) - list(APPEND CMAKE_MESSAGE_INDENT "CRC32C: ") - message(STATUS "Building CRC32C from source using FetchContent") - set(CRC32C_VENDORED - TRUE - PARENT_SCOPE) - set(CRC32C_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/crc32c_fc-install") - set(CRC32C_PREFIX - "${CRC32C_PREFIX}" - PARENT_SCOPE) - - fetchcontent_declare(crc32c - ${FC_DECLARE_COMMON_OPTIONS} OVERRIDE_FIND_PACKAGE - URL ${CRC32C_SOURCE_URL} - URL_HASH "SHA256=${ARROW_CRC32C_BUILD_SHA256_CHECKSUM}") - - prepare_fetchcontent() - - set(CRC32C_BUILD_TESTS OFF) - set(CRC32C_BUILD_BENCHMARKS OFF) - set(CRC32C_USE_GLOG OFF) - fetchcontent_makeavailable(crc32c) - - if(CMAKE_VERSION VERSION_LESS 3.28) - set_property(DIRECTORY ${crc32c_SOURCE_DIR} PROPERTY EXCLUDE_FROM_ALL TRUE) - endif() - - # Create alias target for consistency (crc32c exports as Crc32c::crc32c when installed) - if(NOT TARGET Crc32c::crc32c) - add_library(Crc32c::crc32c ALIAS crc32c) - endif() - - set(ARROW_BUNDLED_STATIC_LIBS - ${ARROW_BUNDLED_STATIC_LIBS} Crc32c::crc32c - PARENT_SCOPE) - list(POP_BACK CMAKE_MESSAGE_INDENT) -endfunction() - function(build_nlohmann_json) list(APPEND CMAKE_MESSAGE_INDENT "nlohmann-json: ") message(STATUS "Building nlohmann-json from source using FetchContent") @@ -3378,18 +3332,19 @@ function(build_google_cloud_cpp_storage) TRUE PARENT_SCOPE) - # List of dependencies taken from https://github.com/googleapis/google-cloud-cpp/blob/main/doc/packaging.md - build_crc32c_once() - fetchcontent_declare(google_cloud_cpp ${FC_DECLARE_COMMON_OPTIONS} - URL ${google_cloud_cpp_storage_SOURCE_URL} - URL_HASH "SHA256=${ARROW_GOOGLE_CLOUD_CPP_BUILD_SHA256_CHECKSUM}") + GIT_REPOSITORY https://github.com/googleapis/google-cloud-cpp.git + GIT_TAG 2b9130f6b28457d9f92eb2e1a98d6aa5d730303f # prepare-for-v3.0.0 branch + ) prepare_fetchcontent() message(STATUS "Only building the google-cloud-cpp::storage component") - set(GOOGLE_CLOUD_CPP_ENABLE storage) + # Disable auto-added features (monitoring, trace, opentelemetry, universe_domain) + # that require gRPC - storage only needs REST/curl + set(GOOGLE_CLOUD_CPP_ENABLE + "storage;-monitoring;-trace;-opentelemetry;-universe_domain") # We need this to build with OpenSSL 3.0. # See also: https://github.com/googleapis/google-cloud-cpp/issues/8544 set(GOOGLE_CLOUD_CPP_ENABLE_WERROR OFF) diff --git a/cpp/thirdparty/versions.txt b/cpp/thirdparty/versions.txt index 5fd3e46ee59..5523f366b69 100644 --- a/cpp/thirdparty/versions.txt +++ b/cpp/thirdparty/versions.txt @@ -64,8 +64,6 @@ ARROW_BZIP2_BUILD_VERSION=1.0.8 ARROW_BZIP2_BUILD_SHA256_CHECKSUM=ab5a03176ee106d3f0fa90e381da478ddae405918153cca248e682cd0c4a2269 ARROW_CARES_BUILD_VERSION=1.17.2 ARROW_CARES_BUILD_SHA256_CHECKSUM=4803c844ce20ce510ef0eb83f8ea41fa24ecaae9d280c468c582d2bb25b3913d -ARROW_CRC32C_BUILD_VERSION=1.1.2 -ARROW_CRC32C_BUILD_SHA256_CHECKSUM=ac07840513072b7fcebda6e821068aa04889018f24e10e46181068fb214d7e56 ARROW_GBENCHMARK_BUILD_VERSION=v1.8.3 ARROW_GBENCHMARK_BUILD_SHA256_CHECKSUM=6bc180a57d23d4d9515519f92b0c83d61b05b5bab188961f36ac7b06b0d9e9ce ARROW_GFLAGS_BUILD_VERSION=v2.2.2 @@ -146,7 +144,6 @@ DEPENDENCIES=( "ARROW_BROTLI_URL brotli-${ARROW_BROTLI_BUILD_VERSION}.tar.gz https://github.com/google/brotli/archive/${ARROW_BROTLI_BUILD_VERSION}.tar.gz" "ARROW_BZIP2_URL bzip2-${ARROW_BZIP2_BUILD_VERSION}.tar.gz https://sourceware.org/pub/bzip2/bzip2-${ARROW_BZIP2_BUILD_VERSION}.tar.gz" "ARROW_CARES_URL cares-${ARROW_CARES_BUILD_VERSION}.tar.gz https://github.com/c-ares/c-ares/releases/download/cares-${ARROW_CARES_BUILD_VERSION//./_}/c-ares-${ARROW_CARES_BUILD_VERSION}.tar.gz" - "ARROW_CRC32C_URL crc32c-${ARROW_CRC32C_BUILD_VERSION}.tar.gz https://github.com/google/crc32c/archive/refs/tags/${ARROW_CRC32C_BUILD_VERSION}.tar.gz" "ARROW_GBENCHMARK_URL gbenchmark-${ARROW_GBENCHMARK_BUILD_VERSION}.tar.gz https://github.com/google/benchmark/archive/${ARROW_GBENCHMARK_BUILD_VERSION}.tar.gz" "ARROW_GFLAGS_URL gflags-${ARROW_GFLAGS_BUILD_VERSION}.tar.gz https://github.com/gflags/gflags/archive/${ARROW_GFLAGS_BUILD_VERSION}.tar.gz" "ARROW_GLOG_URL glog-${ARROW_GLOG_BUILD_VERSION}.tar.gz https://github.com/google/glog/archive/${ARROW_GLOG_BUILD_VERSION}.tar.gz"