Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
94 changes: 71 additions & 23 deletions cpp/cmake_modules/ThirdpartyToolchain.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -678,6 +678,14 @@ else()
"${THIRDPARTY_MIRROR_URL}/grpc-${ARROW_GRPC_BUILD_VERSION}.tar.gz")
endif()

if(DEFINED ENV{ARROW_GRPC_PROTO_URL})
set(GRPC_PROTO_SOURCE_URL "$ENV{ARROW_GRPC_PROTO_URL}")
else()
set_urls(GRPC_PROTO_SOURCE_URL
"https://github.com/grpc/grpc-proto/archive/${ARROW_GRPC_PROTO_BUILD_VERSION}.tar.gz"
"${THIRDPARTY_MIRROR_URL}/grpc-proto-${ARROW_GRPC_PROTO_BUILD_VERSION}.tar.gz")
endif()

if(DEFINED ENV{ARROW_GTEST_URL})
set(GTEST_SOURCE_URL "$ENV{ARROW_GTEST_URL}")
else()
Expand Down Expand Up @@ -1925,8 +1933,13 @@ function(build_absl)
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")
# Abseil 20260817.0 uses O_NONBLOCK that isn't available on MinGW.
#
# TODO: Remove this workaround once we upgrade to a newer Abseil
# version that includes
# https://github.com/abseil/abseil-cpp/commit/ddbdebc6c8 .
if(MINGW)
string(APPEND CMAKE_CXX_FLAGS " -DO_NONBLOCK=0")
endif()

fetchcontent_declare(absl
Expand Down Expand Up @@ -1960,10 +1973,8 @@ function(build_absl)

list(PREPEND
ARROW_BUNDLED_STATIC_LIBS
absl::bad_any_cast_impl
absl::bad_optional_access
absl::bad_variant_access
absl::base
absl::base_cpu_detect
absl::city
absl::civil_time
absl::cord
Expand All @@ -1974,7 +1985,6 @@ function(build_absl)
absl::cordz_sample_token
absl::crc32c
absl::crc_cord_state
absl::crc_cpu_detect
absl::crc_internal
absl::debugging_internal
absl::decode_rust_punycode
Expand All @@ -1996,11 +2006,13 @@ function(build_absl)
absl::flags_usage
absl::flags_usage_internal
absl::graphcycles_internal
absl::hardening
absl::hash
absl::hashtablez_sampler
absl::int128
absl::kernel_timeout_internal
absl::leak_check
absl::log_entry
absl::log_globals
absl::log_initialize
absl::log_internal_check_op
Expand All @@ -2015,14 +2027,13 @@ function(build_absl)
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_entropy_pool
absl::random_internal_platform
absl::random_internal_pool_urbg
absl::random_internal_randen
absl::random_internal_randen_hwaes
absl::random_internal_randen_hwaes_impl
Expand All @@ -2033,6 +2044,7 @@ function(build_absl)
absl::raw_hash_set
absl::raw_logging_internal
absl::scoped_set_env
absl::source_location
absl::spinlock_wait
absl::stacktrace
absl::status
Expand All @@ -2046,6 +2058,7 @@ function(build_absl)
absl::throw_delegate
absl::time
absl::time_zone
absl::tracing_internal
absl::utf8_for_code_point
absl::vlog_config_internal)
set(ARROW_BUNDLED_STATIC_LIBS
Expand Down Expand Up @@ -3424,10 +3437,21 @@ function(build_grpc)
TRUE
PARENT_SCOPE)

# gRPC's source archive doesn't include the third_party/grpc-proto
# submodule. We disable gRPC_DOWNLOAD_ARCHIVES, so we download it
# by ourselves.
fetchcontent_declare(grpc_proto
${FC_DECLARE_COMMON_OPTIONS}
URL ${GRPC_PROTO_SOURCE_URL}
URL_HASH "SHA256=${ARROW_GRPC_PROTO_BUILD_SHA256_CHECKSUM}")
fetchcontent_makeavailable(grpc_proto)

fetchcontent_declare(grpc
${FC_DECLARE_COMMON_OPTIONS}
URL ${GRPC_SOURCE_URL}
URL_HASH "SHA256=${ARROW_GRPC_BUILD_SHA256_CHECKSUM}")
URL_HASH "SHA256=${ARROW_GRPC_BUILD_SHA256_CHECKSUM}"
PATCH_COMMAND ${CMAKE_COMMAND} -E copy_directory
${grpc_proto_SOURCE_DIR} third_party/grpc-proto)

prepare_fetchcontent()

Expand Down Expand Up @@ -3497,16 +3521,6 @@ function(build_grpc)
add_executable(gRPC::grpc_cpp_plugin ALIAS grpc_cpp_plugin)
endif()

# 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)
foreach(target ${GRPC_LIBRARY_TARGETS})
if(TARGET ${target})
target_compile_options(${target} INTERFACE -Wno-error=deprecated-declarations)
endif()
endforeach()
endif()

# 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.
Expand All @@ -3533,7 +3547,19 @@ function(build_grpc)
gRPC::address_sorting
gRPC::gpr
gRPC::grpc
gRPC::grpcpp_for_bundling)
gRPC::grpcpp_for_bundling
upb_base_lib
upb_descriptor_lib
upb_hash_lib
upb_json_lib
upb_lex_lib
upb_mem_lib
upb_message_lib
upb_mini_descriptor_lib
upb_mini_table_lib
upb_reflection_lib
upb_textformat_lib
upb_wire_lib)
set(ARROW_BUNDLED_STATIC_LIBS
${ARROW_BUNDLED_STATIC_LIBS}
PARENT_SCOPE)
Expand Down Expand Up @@ -3848,6 +3874,19 @@ function(build_google_cloud_cpp_storage)
PUBLIC $<BUILD_INTERFACE:${_otel_api_includes}>)
endif()

# google-cloud-cpp headers use deprecated Abseil APIs such as
# absl::visit(). They are fixed in google-cloud-cpp 3.9.0 or later
# but google-cloud-cpp 3.9.0 or later requires libcurl 8.7.1 or
# later. We can't require it because some supported platforms such as
# Ubuntu 24.04 ship older libcurl.
#
# TODO: Remove this workaround once we upgrade to google-cloud-cpp
# 3.9.0 or later.
if(NOT MSVC AND TARGET google_cloud_cpp_common)
target_compile_options(google_cloud_cpp_common
INTERFACE -Wno-error=deprecated-declarations)
endif()

if(CMAKE_VERSION VERSION_LESS 3.28)
set_property(DIRECTORY ${google_cloud_cpp_SOURCE_DIR} PROPERTY EXCLUDE_FROM_ALL TRUE)
endif()
Expand Down Expand Up @@ -4035,6 +4074,13 @@ function(build_orc)
if(absl_SOURCE_DIR)
set(ORC_ABSL_INCLUDE_DIR "${absl_SOURCE_DIR}")
endif()
# Protobuf 36.2 headers include utf8_validity.h in utf8_range.
# ORC build needs the utf8_range include directory if we're using a
# bundled Protobuf.
fetchcontent_getproperties(protobuf)
if(protobuf_SOURCE_DIR)
set(ORC_UTF8_RANGE_INCLUDE_DIR "${protobuf_SOURCE_DIR}/third_party/utf8_range")
endif()

get_target_property(ORC_SNAPPY_INCLUDE_DIR ${Snappy_TARGET}
INTERFACE_INCLUDE_DIRECTORIES)
Expand All @@ -4046,10 +4092,12 @@ function(build_orc)
get_target_property(ORC_ZLIB_ROOT ZLIB::ZLIB INTERFACE_INCLUDE_DIRECTORIES)
get_filename_component(ORC_ZLIB_ROOT "${ORC_ZLIB_ROOT}" DIRECTORY)

set(ORC_CXX_FLAGS "${EP_CXX_FLAGS}")
if(ORC_ABSL_INCLUDE_DIR)
set(ORC_CXX_FLAGS "${EP_CXX_FLAGS} -isystem ${ORC_ABSL_INCLUDE_DIR}")
else()
set(ORC_CXX_FLAGS "${EP_CXX_FLAGS}")
string(APPEND ORC_CXX_FLAGS " -isystem ${ORC_ABSL_INCLUDE_DIR}")
endif()
if(ORC_UTF8_RANGE_INCLUDE_DIR)
string(APPEND ORC_CXX_FLAGS " -isystem ${ORC_UTF8_RANGE_INCLUDE_DIR}")
endif()
set(ORC_CMAKE_ARGS
${EP_COMMON_CMAKE_ARGS}
Expand Down
16 changes: 10 additions & 6 deletions cpp/thirdparty/versions.txt
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@
# `DEPENDENCIES` array (see the comment on top of the declaration for the
# format).

ARROW_ABSL_BUILD_VERSION=20250127.0
ARROW_ABSL_BUILD_SHA256_CHECKSUM=16242f394245627e508ec6bb296b433c90f8d914f73b9c026fddb905e27276e8
ARROW_ABSL_BUILD_VERSION=20260817.0
ARROW_ABSL_BUILD_SHA256_CHECKSUM=f7e05179df39c45434cad433f5783840bb3788ef322976f9138bc6b72b3a107d
ARROW_AWS_C_AUTH_BUILD_VERSION=v0.10.1
ARROW_AWS_C_AUTH_BUILD_SHA256_CHECKSUM=85d737f0f735256f1931e85e4cadbe228d88698f7b59a9b390b49ef5d0778a43
ARROW_AWS_C_CAL_BUILD_VERSION=v0.9.13
Expand Down Expand Up @@ -72,8 +72,11 @@ ARROW_GLOG_BUILD_VERSION=v0.5.0
ARROW_GLOG_BUILD_SHA256_CHECKSUM=eede71f28371bf39aa69b45de23b329d37214016e2055269b3b5e7cfd40b59f5
ARROW_GOOGLE_CLOUD_CPP_BUILD_VERSION=v3.2.0
ARROW_GOOGLE_CLOUD_CPP_BUILD_SHA256_CHECKSUM=79ed6303d5b0c46f627bf8b38b5bd6b007c85e76c88722eb570a495bc2b579a0
ARROW_GRPC_BUILD_VERSION=v1.76.0
ARROW_GRPC_BUILD_SHA256_CHECKSUM=0af37b800953130b47c075b56683ee60bdc3eda3c37fc6004193f5b569758204
ARROW_GRPC_BUILD_VERSION=v1.85.0-pre1
ARROW_GRPC_BUILD_SHA256_CHECKSUM=598f189d8a187b35e87401d306cd9227008289ba40f1205a2e15f433bc93cc32
# This must be synchronized with the grpc-proto version in gRPC's CMakeLists.txt.
ARROW_GRPC_PROTO_BUILD_VERSION=dd549fc4ed04b60b0fdd3866b82ef0a7c87c6e4f
ARROW_GRPC_PROTO_BUILD_SHA256_CHECKSUM=6aaa807572edfe307eaddc15161ce684d02d054e3fca36b38993efc85575ddfa
ARROW_GTEST_BUILD_VERSION=1.18.0
ARROW_GTEST_BUILD_SHA256_CHECKSUM=6e3191c1455468b3fc35a417fb565c1c5071aee1b7e7f85e30cf48a98d37d8b5
ARROW_JEMALLOC_BUILD_VERSION=5.3.0
Expand All @@ -90,8 +93,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=v31.1
ARROW_PROTOBUF_BUILD_SHA256_CHECKSUM=12bfd76d27b9ac3d65c00966901609e020481b9474ef75c7ff4601ac06fa0b82
ARROW_PROTOBUF_BUILD_VERSION=v36.2
ARROW_PROTOBUF_BUILD_SHA256_CHECKSUM=3d9642a662d10e68ebae5e53f14dcce5105684212d5078f8e0d47d1ab3ae6b64
# Because of https://github.com/Tencent/rapidjson/pull/1323, we require
# a pre-release version of RapidJSON to build with GCC 8 without
# warnings.
Expand Down Expand Up @@ -157,6 +160,7 @@ DEPENDENCIES=(
"ARROW_GLOG_URL glog-${ARROW_GLOG_BUILD_VERSION}.tar.gz https://github.com/google/glog/archive/${ARROW_GLOG_BUILD_VERSION}.tar.gz"
"ARROW_GOOGLE_CLOUD_CPP_URL google-cloud-cpp-${ARROW_GOOGLE_CLOUD_CPP_BUILD_VERSION}.tar.gz https://github.com/googleapis/google-cloud-cpp/archive/${ARROW_GOOGLE_CLOUD_CPP_BUILD_VERSION}.tar.gz"
"ARROW_GRPC_URL grpc-${ARROW_GRPC_BUILD_VERSION}.tar.gz https://github.com/grpc/grpc/archive/${ARROW_GRPC_BUILD_VERSION}.tar.gz"
"ARROW_GRPC_PROTO_URL grpc-proto-${ARROW_GRPC_PROTO_BUILD_VERSION}.tar.gz https://github.com/grpc/grpc-proto/archive/${ARROW_GRPC_PROTO_BUILD_VERSION}.tar.gz"
"ARROW_GTEST_URL gtest-${ARROW_GTEST_BUILD_VERSION}.tar.gz https://github.com/google/googletest/releases/download/v${ARROW_GTEST_BUILD_VERSION}/googletest-${ARROW_GTEST_BUILD_VERSION}.tar.gz"
"ARROW_JEMALLOC_URL jemalloc-${ARROW_JEMALLOC_BUILD_VERSION}.tar.bz2 https://github.com/jemalloc/jemalloc/releases/download/${ARROW_JEMALLOC_BUILD_VERSION}/jemalloc-${ARROW_JEMALLOC_BUILD_VERSION}.tar.bz2"
"ARROW_LZ4_URL lz4-${ARROW_LZ4_BUILD_VERSION}.tar.gz https://github.com/lz4/lz4/archive/${ARROW_LZ4_BUILD_VERSION}.tar.gz"
Expand Down
Loading