Skip to content
Open
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
63 changes: 32 additions & 31 deletions cpp/cmake_modules/ThirdpartyToolchain.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -1934,13 +1934,6 @@ 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)
Expand Down Expand Up @@ -2100,6 +2093,38 @@ function(build_protobuf)
list(POP_BACK CMAKE_MESSAGE_INDENT)
endfunction()

# Abseil must be resolved before Protobuf because Protobuf 22+ requires
# Abseil during its own configure. See GH-49764.
if(ARROW_WITH_GOOGLE_CLOUD_CPP
OR ARROW_WITH_GRPC
OR ARROW_WITH_PROTOBUF)
# Abseil 20230125 released CRC32C which is necessary for GCS builds
set(ARROW_ABSL_REQUIRED_VERSION 20230125)
# Google Cloud C++ SDK, gRPC and any dependency that pulls Protobuf
# requires Abseil.
if(ARROW_WITH_GOOGLE_CLOUD_CPP
OR ARROW_ORC
OR ARROW_SUBSTRAIT
OR ARROW_WITH_OPENTELEMETRY)
set(ARROW_ABSL_CMAKE_PACKAGE_NAME Arrow)
set(ARROW_ABSL_PC_PACKAGE_NAME arrow)
else()
set(ARROW_ABSL_CMAKE_PACKAGE_NAME ArrowFlight)
set(ARROW_ABSL_PC_PACKAGE_NAME arrow-flight)
endif()
resolve_dependency(absl
ARROW_CMAKE_PACKAGE_NAME
${ARROW_ABSL_CMAKE_PACKAGE_NAME}
ARROW_PC_PACKAGE_NAME
${ARROW_ABSL_PC_PACKAGE_NAME}
HAVE_ALT
TRUE
FORCE_ANY_NEWER_VERSION
TRUE
REQUIRED_VERSION
${ARROW_ABSL_REQUIRED_VERSION})
endif()

if(ARROW_WITH_PROTOBUF)
if(ARROW_FLIGHT_SQL)
# Flight SQL uses proto3 optionals, which require 3.12 or later.
Expand Down Expand Up @@ -3253,30 +3278,6 @@ function(build_grpc)
list(POP_BACK CMAKE_MESSAGE_INDENT)
endfunction()

if(ARROW_WITH_GOOGLE_CLOUD_CPP OR ARROW_WITH_GRPC)
# Abseil 20230125 released CRC32C which is necessary for GCS builds
set(ARROW_ABSL_REQUIRED_VERSION 20230125)
# Google Cloud C++ SDK and gRPC require Google Abseil
if(ARROW_WITH_GOOGLE_CLOUD_CPP)
set(ARROW_ABSL_CMAKE_PACKAGE_NAME Arrow)
set(ARROW_ABSL_PC_PACKAGE_NAME arrow)
else()
set(ARROW_ABSL_CMAKE_PACKAGE_NAME ArrowFlight)
set(ARROW_ABSL_PC_PACKAGE_NAME arrow-flight)
endif()
resolve_dependency(absl
ARROW_CMAKE_PACKAGE_NAME
${ARROW_ABSL_CMAKE_PACKAGE_NAME}
ARROW_PC_PACKAGE_NAME
${ARROW_ABSL_PC_PACKAGE_NAME}
HAVE_ALT
TRUE
FORCE_ANY_NEWER_VERSION
TRUE
REQUIRED_VERSION
${ARROW_ABSL_REQUIRED_VERSION})
endif()

if(ARROW_WITH_GRPC)
if(NOT ARROW_ENABLE_THREADING)
message(FATAL_ERROR "Can't use gRPC with ARROW_ENABLE_THREADING=OFF")
Expand Down
Loading