You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by ko...@apache.org on 2024/07/12 01:25:00 UTC
(arrow) branch main updated: GH-43218: [C++] Resolve Abseil like any other dependency in the build system (#43219)
This is an automated email from the ASF dual-hosted git repository.
kou pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow.git
The following commit(s) were added to refs/heads/main by this push:
new e65c1e295d GH-43218: [C++] Resolve Abseil like any other dependency in the build system (#43219)
e65c1e295d is described below
commit e65c1e295d82c7076df484089a63fa3ba2bd55d1
Author: Felipe Oliveira Carvalho <fe...@gmail.com>
AuthorDate: Thu Jul 11 22:24:54 2024 -0300
GH-43218: [C++] Resolve Abseil like any other dependency in the build system (#43219)
### Rationale for this change
The workarounds around Abseil resolution don't seem necessary anymore and they don't work on all possible configurations of the build.
### What changes are included in this PR?
Removal of the `ensure_absl` macro and adding a call to `resolve_dependency` when depending on the Google Cloud SDK (a GCS filesystem dependency) or gRPC (a flight dependency).
### Are these changes tested?
Yes, by me trying different build configurations on my macOS and existing builds in CI.
* GitHub Issue: #43218
Lead-authored-by: Felipe Oliveira Carvalho <fe...@gmail.com>
Co-authored-by: Sutou Kouhei <ko...@cozmixng.org>
Signed-off-by: Sutou Kouhei <ko...@clear-code.com>
---
ci/docker/fedora-39-cpp.dockerfile | 3 +-
cpp/CMakeLists.txt | 2 +-
cpp/cmake_modules/ThirdpartyToolchain.cmake | 57 ++++++++++++++---------------
3 files changed, 30 insertions(+), 32 deletions(-)
diff --git a/ci/docker/fedora-39-cpp.dockerfile b/ci/docker/fedora-39-cpp.dockerfile
index 8ecaa6c3ca..33d1182309 100644
--- a/ci/docker/fedora-39-cpp.dockerfile
+++ b/ci/docker/fedora-39-cpp.dockerfile
@@ -77,8 +77,7 @@ RUN /arrow/ci/scripts/install_sccache.sh unknown-linux-musl /usr/local/bin
# PYARROW_TEST_GANDIVA=OFF: GH-39695: We need to make LLVM symbols visible in
# Python process explicitly if we use LLVM 17 or later.
-ENV absl_SOURCE=BUNDLED \
- ARROW_ACERO=ON \
+ENV ARROW_ACERO=ON \
ARROW_AZURE=OFF \
ARROW_BUILD_TESTS=ON \
ARROW_DEPENDENCY_SOURCE=SYSTEM \
diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt
index 2e2a497184..8247043b8b 100644
--- a/cpp/CMakeLists.txt
+++ b/cpp/CMakeLists.txt
@@ -689,7 +689,7 @@ endif()
if("${ARROW_TEST_LINKAGE}" STREQUAL "shared")
if(ARROW_BUILD_TESTS AND NOT ARROW_BUILD_SHARED)
- message(FATAL_ERROR "If using shared linkage for unit tests, must also \
+ message(FATAL_ERROR "If using ARROW_TEST_LINKAGE=shared, must also \
pass ARROW_BUILD_SHARED=on")
endif()
# Use shared linking for unit tests if it's available
diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake b/cpp/cmake_modules/ThirdpartyToolchain.cmake
index 8cb3ec83f5..5b89a831ff 100644
--- a/cpp/cmake_modules/ThirdpartyToolchain.cmake
+++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake
@@ -2874,33 +2874,6 @@ endmacro()
# ----------------------------------------------------------------------
# Dependencies for Arrow Flight RPC
-macro(ensure_absl)
- if(NOT absl_FOUND)
- if(${absl_SOURCE} STREQUAL "AUTO")
- # We can't use resolve_dependency(absl 20211102) to use Abseil
- # 20211102 or later because Abseil's CMake package uses "EXACT"
- # version match strategy. Our CMake configuration will work with
- # Abseil LTS 20211102 or later. So we want to accept Abseil LTS
- # 20211102 or later. We need to update
- # ARROW_ABSL_REQUIRED_LTS_VERSIONS list when new Abseil LTS is
- # released.
- set(ARROW_ABSL_REQUIRED_LTS_VERSIONS 20230125 20220623 20211102)
- foreach(_VERSION ${ARROW_ABSL_REQUIRED_LTS_VERSIONS})
- find_package(absl ${_VERSION})
- if(absl_FOUND)
- break()
- endif()
- endforeach()
- # If we can't find Abseil LTS 20211102 or later, we use bundled
- # Abseil.
- if(NOT absl_FOUND)
- set(absl_SOURCE "BUNDLED")
- endif()
- endif()
- resolve_dependency(absl)
- endif()
-endmacro()
-
macro(build_absl)
message(STATUS "Building Abseil-cpp from source")
set(absl_FOUND TRUE)
@@ -3845,7 +3818,6 @@ macro(build_grpc)
TRUE
PC_PACKAGE_NAMES
libcares)
- ensure_absl()
message(STATUS "Building gRPC from source")
@@ -4135,12 +4107,40 @@ macro(build_grpc)
endif()
endmacro()
+if(ARROW_WITH_GOOGLE_CLOUD_CPP OR ARROW_WITH_GRPC)
+ set(ARROW_ABSL_REQUIRED_VERSION 20211102)
+ # 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
+ FALSE
+ 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")
endif()
set(ARROW_GRPC_REQUIRED_VERSION "1.30.0")
+ if(absl_SOURCE STREQUAL "BUNDLED" AND NOT gRPC_SOURCE STREQUAL "BUNDLED")
+ # System gRPC can't be used with bundled Abseil
+ message(STATUS "Forcing gRPC_SOURCE to BUNDLED because absl_SOURCE is BUNDLED")
+ set(gRPC_SOURCE "BUNDLED")
+ endif()
if(NOT Protobuf_SOURCE STREQUAL gRPC_SOURCE)
# ARROW-15495: Protobuf/gRPC must come from the same source
message(STATUS "Forcing gRPC_SOURCE to Protobuf_SOURCE (${Protobuf_SOURCE})")
@@ -4259,7 +4259,6 @@ macro(build_google_cloud_cpp_storage)
message(STATUS "Only building the google-cloud-cpp::storage component")
# List of dependencies taken from https://github.com/googleapis/google-cloud-cpp/blob/main/doc/packaging.md
- ensure_absl()
build_crc32c_once()
# Curl is required on all platforms, but building it internally might also trip over S3's copy.