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 de02131ab0 GH-48074: [C++] Use FetchContent for bundled Abseil (#48075)
de02131ab0 is described below
commit de02131ab01efc7281f6bea9a1d8b0fa32da0737
Author: Raúl Cumplido <[email protected]>
AuthorDate: Sat Nov 15 09:29:03 2025 +0100
GH-48074: [C++] Use FetchContent for bundled Abseil (#48075)
### Rationale for this change
As a follow up of requiring a minimum CMake version >= 3.25 we discussed
moving our dependencies from ExternalProject to FetchContent. This can heavily
simplify our third party dependency management. Moving abseil is the first step
to simplify some of them.
### What changes are included in this PR?
The general change is moving from `ExternalProject` to `FetchContent`. In
more detail this gets rid of all the manual definition of targets for all
abseil libraries with it's dependency management. This is removing around 900
lines of custom code which is not necessary with FetchContent.
It also add some required integration due to other dependencies, like grpc,
using `ExternalProject`. We not only have to build but also install in order
for those other dependencies to find abseil. This causes some timing issues
between config, build, install that requires us to create a custom target to
depend on so the other dependencies find abseil. As we have to install abseil
for those to find it we also want to not install abseil outside of the build
path that's why we override [...]
### Are these changes tested?
Yes, the changes are tested locally and on CI.
### Are there any user-facing changes?
No
* GitHub Issue: #48074
Lead-authored-by: Raúl Cumplido <[email protected]>
Co-authored-by: Sutou Kouhei <[email protected]>
Signed-off-by: Sutou Kouhei <[email protected]>
---
cpp/cmake_modules/ThirdpartyToolchain.cmake | 1068 ++++-----------------------
1 file changed, 140 insertions(+), 928 deletions(-)
diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake
b/cpp/cmake_modules/ThirdpartyToolchain.cmake
index 1724c0d3a3..910f256c81 100644
--- a/cpp/cmake_modules/ThirdpartyToolchain.cmake
+++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake
@@ -2993,921 +2993,144 @@ endmacro()
# ----------------------------------------------------------------------
# Dependencies for Arrow Flight RPC
-macro(build_absl)
- message(STATUS "Building Abseil-cpp from source")
- set(absl_FOUND TRUE)
- set(absl_VERSION ${ARROW_ABSL_BUILD_VERSION})
- set(ABSL_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/absl_ep-install")
- set(ABSL_INCLUDE_DIR "${ABSL_PREFIX}/include")
- set(ABSL_CMAKE_ARGS "${EP_COMMON_CMAKE_ARGS}" -DABSL_RUN_TESTS=OFF
- "-DCMAKE_INSTALL_PREFIX=${ABSL_PREFIX}")
+function(build_absl)
+ list(APPEND CMAKE_MESSAGE_INDENT "ABSL: ")
+ message(STATUS "Building Abseil from source using FetchContent")
+ set(ABSL_VENDORED
+ TRUE
+ PARENT_SCOPE)
+ set(ABSL_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/absl_fc-install")
+ set(ABSL_PREFIX
+ "${ABSL_PREFIX}"
+ PARENT_SCOPE)
+
if(CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION
VERSION_GREATER_EQUAL 13.0)
- set(ABSL_CXX_FLAGS "${EP_CXX_FLAGS} -include stdint.h")
- list(APPEND ABSL_CMAKE_ARGS "-DCMAKE_CXX_FLAGS=${ABSL_CXX_FLAGS}")
- endif()
- set(ABSL_BUILD_BYPRODUCTS)
- set(ABSL_LIBRARIES)
-
- # Abseil produces the following libraries, each is fairly small, but there
- # are (as you can see), many of them. We need to add the libraries first,
- # and then describe how they depend on each other. The list can be
- # refreshed using:
- # ls -1 $PREFIX/lib/libabsl_*.a | sed -e 's/.*libabsl_//' -e 's/.a$//'
- set(_ABSL_LIBS
- bad_any_cast_impl
- bad_optional_access
- bad_variant_access
- base
- city
- civil_time
- cord
- cord_internal
- cordz_functions
- cordz_handle
- cordz_info
- cordz_sample_token
- debugging_internal
- demangle_internal
- examine_stack
- exponential_biased
- failure_signal_handler
- flags
- flags_commandlineflag
- flags_commandlineflag_internal
- flags_config
- flags_internal
- flags_marshalling
- flags_parse
- flags_private_handle_accessor
- flags_program_name
- flags_reflection
- flags_usage
- flags_usage_internal
- graphcycles_internal
- hash
- hashtablez_sampler
- int128
- leak_check
- leak_check_disable
- log_severity
- low_level_hash
- malloc_internal
- periodic_sampler
- random_distributions
- random_internal_distribution_test_util
- random_internal_platform
- random_internal_pool_urbg
- random_internal_randen
- random_internal_randen_hwaes
- random_internal_randen_hwaes_impl
- random_internal_randen_slow
- random_internal_seed_material
- random_seed_gen_exception
- random_seed_sequences
- raw_hash_set
- raw_logging_internal
- scoped_set_env
- spinlock_wait
- stacktrace
- status
- statusor
- str_format_internal
- strerror
- strings
- strings_internal
- symbolize
- synchronization
- throw_delegate
- time
- time_zone
- wyhash)
- # Abseil creates a number of header-only targets, which are needed to
resolve dependencies.
- # The list can be refreshed using:
- # comm -13 <(ls -l $PREFIX/lib/libabsl_*.a | sed -e 's/.*libabsl_//' -e
's/.a$//' | sort -u) \
- # <(ls -1 $PREFIX/lib/pkgconfig/absl_*.pc | sed -e 's/.*absl_//'
-e 's/.pc$//' | sort -u)
- set(_ABSL_INTERFACE_LIBS
- algorithm
- algorithm_container
- any
- atomic_hook
- bad_any_cast
- base_internal
- bind_front
- bits
- btree
- cleanup
- cleanup_internal
- compare
- compressed_tuple
- config
- container_common
- container_memory
- cordz_statistics
- cordz_update_scope
- cordz_update_tracker
- core_headers
- counting_allocator
- debugging
- dynamic_annotations
- endian
- errno_saver
- fast_type_id
- fixed_array
- flags_path_util
- flat_hash_map
- flat_hash_set
- function_ref
- hash_function_defaults
- hash_policy_traits
- hashtable_debug
- hashtable_debug_hooks
- have_sse
- inlined_vector
- inlined_vector_internal
- kernel_timeout_internal
- layout
- memory
- meta
- node_hash_map
- node_hash_policy
- node_hash_set
- numeric
- numeric_representation
- optional
- pretty_function
- random_bit_gen_ref
- random_internal_distribution_caller
- random_internal_fast_uniform_bits
- random_internal_fastmath
- random_internal_generate_real
- random_internal_iostream_state_saver
- random_internal_mock_helpers
- random_internal_nonsecure_base
- random_internal_pcg_engine
- random_internal_randen_engine
- random_internal_salted_seed_seq
- random_internal_traits
- random_internal_uniform_helper
- random_internal_wide_multiply
- random_random
- raw_hash_map
- sample_recorder
- span
- str_format
- type_traits
- utility
- variant)
-
- foreach(_ABSL_LIB ${_ABSL_LIBS})
- set(_ABSL_STATIC_LIBRARY
-
"${ABSL_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}absl_${_ABSL_LIB}${CMAKE_STATIC_LIBRARY_SUFFIX}"
- )
- add_library(absl::${_ABSL_LIB} STATIC IMPORTED)
- set_target_properties(absl::${_ABSL_LIB} PROPERTIES IMPORTED_LOCATION
-
${_ABSL_STATIC_LIBRARY})
- target_include_directories(absl::${_ABSL_LIB} BEFORE INTERFACE
"${ABSL_INCLUDE_DIR}")
- list(APPEND ABSL_BUILD_BYPRODUCTS ${_ABSL_STATIC_LIBRARY})
- endforeach()
- foreach(_ABSL_LIB ${_ABSL_INTERFACE_LIBS})
- add_library(absl::${_ABSL_LIB} INTERFACE IMPORTED)
- target_include_directories(absl::${_ABSL_LIB} BEFORE INTERFACE
"${ABSL_INCLUDE_DIR}")
- endforeach()
+ string(APPEND CMAKE_CXX_FLAGS " -include stdint.h")
+ endif()
+
+ fetchcontent_declare(absl
+ URL ${ABSL_SOURCE_URL}
+ URL_HASH "SHA256=${ARROW_ABSL_BUILD_SHA256_CHECKSUM}")
- # Extracted the dependency information using the Abseil pkg-config files:
- # grep Requires $PREFIX/lib/pkgconfig/absl_*.pc | \
- # sed -e 's;.*/absl_;set_property(TARGET absl::;' \
- # -e 's/.pc:Requires:/ PROPERTY INTERFACE_LINK_LIBRARIES /' \
- # -E -e 's/ = 20[0-9]{6},?//g' \
- # -e 's/absl_/absl::/g' \
- # -e 's/$/)/' | \
- # grep -v 'INTERFACE_LINK_LIBRARIES[ ]*)'
- set_property(TARGET absl::algorithm PROPERTY INTERFACE_LINK_LIBRARIES
absl::config)
- set_property(TARGET absl::algorithm_container
- PROPERTY INTERFACE_LINK_LIBRARIES absl::algorithm
absl::core_headers
- absl::meta)
- set_property(TARGET absl::any
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::bad_any_cast
- absl::config
- absl::core_headers
- absl::fast_type_id
- absl::type_traits
- absl::utility)
- set_property(TARGET absl::atomic_hook PROPERTY INTERFACE_LINK_LIBRARIES
absl::config
- absl::core_headers)
- set_property(TARGET absl::bad_any_cast PROPERTY INTERFACE_LINK_LIBRARIES
- absl::bad_any_cast_impl
absl::config)
- set_property(TARGET absl::bad_any_cast_impl
- PROPERTY INTERFACE_LINK_LIBRARIES absl::config
absl::raw_logging_internal)
- set_property(TARGET absl::bad_optional_access
- PROPERTY INTERFACE_LINK_LIBRARIES absl::config
absl::raw_logging_internal)
- set_property(TARGET absl::bad_variant_access
- PROPERTY INTERFACE_LINK_LIBRARIES absl::config
absl::raw_logging_internal)
- set_property(TARGET absl::base
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::atomic_hook
- absl::base_internal
- absl::config
- absl::core_headers
- absl::dynamic_annotations
- absl::log_severity
- absl::raw_logging_internal
- absl::spinlock_wait
- absl::type_traits)
- set_property(TARGET absl::base_internal PROPERTY INTERFACE_LINK_LIBRARIES
absl::config
- absl::type_traits)
- set_property(TARGET absl::bind_front
- PROPERTY INTERFACE_LINK_LIBRARIES absl::base_internal
- absl::compressed_tuple)
- set_property(TARGET absl::bits PROPERTY INTERFACE_LINK_LIBRARIES
absl::core_headers)
- set_property(TARGET absl::btree
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::container_common
- absl::compare
- absl::compressed_tuple
- absl::container_memory
- absl::cord
- absl::core_headers
- absl::layout
- absl::memory
- absl::strings
- absl::throw_delegate
- absl::type_traits
- absl::utility)
- set_property(TARGET absl::city PROPERTY INTERFACE_LINK_LIBRARIES absl::config
- absl::core_headers absl::endian)
- set_property(TARGET absl::cleanup
- PROPERTY INTERFACE_LINK_LIBRARIES absl::cleanup_internal
absl::config
- absl::core_headers)
- set_property(TARGET absl::cleanup_internal
- PROPERTY INTERFACE_LINK_LIBRARIES absl::base_internal
absl::core_headers
- absl::utility)
- set_property(TARGET absl::compare PROPERTY INTERFACE_LINK_LIBRARIES
absl::core_headers
- absl::type_traits)
- set_property(TARGET absl::compressed_tuple PROPERTY INTERFACE_LINK_LIBRARIES
- absl::utility)
- set_property(TARGET absl::container_common PROPERTY INTERFACE_LINK_LIBRARIES
- absl::type_traits)
- set_property(TARGET absl::container_memory
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::config
- absl::memory
- absl::type_traits
- absl::utility)
- set_property(TARGET absl::cord
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::base
- absl::config
- absl::cord_internal
- absl::cordz_functions
- absl::cordz_info
- absl::cordz_update_scope
- absl::cordz_update_tracker
- absl::core_headers
- absl::endian
- absl::fixed_array
- absl::function_ref
- absl::inlined_vector
- absl::optional
- absl::raw_logging_internal
- absl::strings
- absl::type_traits)
- set_property(TARGET absl::cord_internal
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::base_internal
- absl::compressed_tuple
- absl::config
- absl::core_headers
- absl::endian
- absl::inlined_vector
- absl::layout
- absl::raw_logging_internal
- absl::strings
- absl::throw_delegate
- absl::type_traits)
- set_property(TARGET absl::cordz_functions
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::config
- absl::core_headers
- absl::exponential_biased
- absl::raw_logging_internal)
- set_property(TARGET absl::cordz_handle
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::base
- absl::config
- absl::raw_logging_internal
- absl::synchronization)
- set_property(TARGET absl::cordz_info
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::base
- absl::config
- absl::cord_internal
- absl::cordz_functions
- absl::cordz_handle
- absl::cordz_statistics
- absl::cordz_update_tracker
- absl::core_headers
- absl::inlined_vector
- absl::span
- absl::raw_logging_internal
- absl::stacktrace
- absl::synchronization)
- set_property(TARGET absl::cordz_sample_token
- PROPERTY INTERFACE_LINK_LIBRARIES absl::config
absl::cordz_handle
- absl::cordz_info)
- set_property(TARGET absl::cordz_statistics
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::config
- absl::core_headers
- absl::cordz_update_tracker
- absl::synchronization)
- set_property(TARGET absl::cordz_update_scope
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::config
- absl::cord_internal
- absl::cordz_info
- absl::cordz_update_tracker
- absl::core_headers)
- set_property(TARGET absl::cordz_update_tracker PROPERTY
INTERFACE_LINK_LIBRARIES
- absl::config)
- set_property(TARGET absl::core_headers PROPERTY INTERFACE_LINK_LIBRARIES
absl::config)
- set_property(TARGET absl::counting_allocator PROPERTY
INTERFACE_LINK_LIBRARIES
- absl::config)
- set_property(TARGET absl::debugging PROPERTY INTERFACE_LINK_LIBRARIES
absl::stacktrace
- absl::leak_check)
- set_property(TARGET absl::debugging_internal
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::core_headers
- absl::config
- absl::dynamic_annotations
- absl::errno_saver
- absl::raw_logging_internal)
- set_property(TARGET absl::demangle_internal PROPERTY INTERFACE_LINK_LIBRARIES
- absl::base
absl::core_headers)
- set_property(TARGET absl::dynamic_annotations PROPERTY
INTERFACE_LINK_LIBRARIES
- absl::config)
- set_property(TARGET absl::endian PROPERTY INTERFACE_LINK_LIBRARIES absl::base
- absl::config absl::core_headers)
- set_property(TARGET absl::errno_saver PROPERTY INTERFACE_LINK_LIBRARIES
absl::config)
- set_property(TARGET absl::examine_stack
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::stacktrace
- absl::symbolize
- absl::config
- absl::core_headers
- absl::raw_logging_internal)
- set_property(TARGET absl::exponential_biased PROPERTY
INTERFACE_LINK_LIBRARIES
- absl::config
absl::core_headers)
- set_property(TARGET absl::failure_signal_handler
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::examine_stack
- absl::stacktrace
- absl::base
- absl::config
- absl::core_headers
- absl::errno_saver
- absl::raw_logging_internal)
- set_property(TARGET absl::fast_type_id PROPERTY INTERFACE_LINK_LIBRARIES
absl::config)
- set_property(TARGET absl::fixed_array
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::compressed_tuple
- absl::algorithm
- absl::config
- absl::core_headers
- absl::dynamic_annotations
- absl::throw_delegate
- absl::memory)
- set_property(TARGET absl::flags
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::config
- absl::flags_commandlineflag
- absl::flags_config
- absl::flags_internal
- absl::flags_reflection
- absl::base
- absl::core_headers
- absl::strings)
- set_property(TARGET absl::flags_commandlineflag
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::config
- absl::fast_type_id
- absl::flags_commandlineflag_internal
- absl::optional
- absl::strings)
- set_property(TARGET absl::flags_commandlineflag_internal
- PROPERTY INTERFACE_LINK_LIBRARIES absl::config
absl::fast_type_id)
- set_property(TARGET absl::flags_config
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::config
- absl::flags_path_util
- absl::flags_program_name
- absl::core_headers
- absl::strings
- absl::synchronization)
- set_property(TARGET absl::flags_internal
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::base
- absl::config
- absl::flags_commandlineflag
- absl::flags_commandlineflag_internal
- absl::flags_config
- absl::flags_marshalling
- absl::synchronization
- absl::meta
- absl::utility)
- set_property(TARGET absl::flags_marshalling
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::config
- absl::core_headers
- absl::log_severity
- absl::strings
- absl::str_format)
- set_property(TARGET absl::flags_parse
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::config
- absl::core_headers
- absl::flags_config
- absl::flags
- absl::flags_commandlineflag
- absl::flags_commandlineflag_internal
- absl::flags_internal
- absl::flags_private_handle_accessor
- absl::flags_program_name
- absl::flags_reflection
- absl::flags_usage
- absl::strings
- absl::synchronization)
- set_property(TARGET absl::flags_path_util PROPERTY INTERFACE_LINK_LIBRARIES
- absl::config
absl::strings)
- set_property(TARGET absl::flags_private_handle_accessor
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::config
- absl::flags_commandlineflag
- absl::flags_commandlineflag_internal
- absl::strings)
- set_property(TARGET absl::flags_program_name
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::config
- absl::core_headers
- absl::flags_path_util
- absl::strings
- absl::synchronization)
- set_property(TARGET absl::flags_reflection
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::config
- absl::flags_commandlineflag
- absl::flags_private_handle_accessor
- absl::flags_config
- absl::strings
- absl::synchronization
- absl::flat_hash_map)
- set_property(TARGET absl::flags_usage
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::config
- absl::core_headers
- absl::flags_usage_internal
- absl::strings
- absl::synchronization)
- set_property(TARGET absl::flags_usage_internal
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::config
- absl::flags_config
- absl::flags
- absl::flags_commandlineflag
- absl::flags_internal
- absl::flags_path_util
- absl::flags_private_handle_accessor
- absl::flags_program_name
- absl::flags_reflection
- absl::flat_hash_map
- absl::strings
- absl::synchronization)
- set_property(TARGET absl::flat_hash_map
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::container_memory
- absl::hash_function_defaults
- absl::raw_hash_map
- absl::algorithm_container
- absl::memory)
- set_property(TARGET absl::flat_hash_set
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::container_memory
- absl::hash_function_defaults
- absl::raw_hash_set
- absl::algorithm_container
- absl::core_headers
- absl::memory)
- set_property(TARGET absl::function_ref
- PROPERTY INTERFACE_LINK_LIBRARIES absl::base_internal
absl::core_headers
- absl::meta)
- set_property(TARGET absl::graphcycles_internal
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::base
- absl::base_internal
- absl::config
- absl::core_headers
- absl::malloc_internal
- absl::raw_logging_internal)
- set_property(TARGET absl::hash
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::city
- absl::config
- absl::core_headers
- absl::endian
- absl::fixed_array
- absl::meta
- absl::int128
- absl::strings
- absl::optional
- absl::variant
- absl::utility
- absl::low_level_hash)
- set_property(TARGET absl::hash_function_defaults
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::config
- absl::cord
- absl::hash
- absl::strings)
- set_property(TARGET absl::hash_policy_traits PROPERTY
INTERFACE_LINK_LIBRARIES
- absl::meta)
- set_property(TARGET absl::hashtable_debug PROPERTY INTERFACE_LINK_LIBRARIES
-
absl::hashtable_debug_hooks)
- set_property(TARGET absl::hashtable_debug_hooks PROPERTY
INTERFACE_LINK_LIBRARIES
- absl::config)
- set_property(TARGET absl::hashtablez_sampler
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::base
- absl::exponential_biased
- absl::have_sse
- absl::sample_recorder
- absl::synchronization)
- set_property(TARGET absl::inlined_vector
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::algorithm
- absl::core_headers
- absl::inlined_vector_internal
- absl::throw_delegate
- absl::memory)
- set_property(TARGET absl::inlined_vector_internal
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::compressed_tuple
- absl::core_headers
- absl::memory
- absl::span
- absl::type_traits)
- set_property(TARGET absl::int128 PROPERTY INTERFACE_LINK_LIBRARIES
absl::config
- absl::core_headers absl::bits)
- set_property(TARGET absl::kernel_timeout_internal
- PROPERTY INTERFACE_LINK_LIBRARIES absl::core_headers
- absl::raw_logging_internal absl::time)
- set_property(TARGET absl::layout
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::config
- absl::core_headers
- absl::meta
- absl::strings
- absl::span
- absl::utility)
- set_property(TARGET absl::leak_check PROPERTY INTERFACE_LINK_LIBRARIES
absl::config
- absl::core_headers)
- set_property(TARGET absl::log_severity PROPERTY INTERFACE_LINK_LIBRARIES
- absl::core_headers)
- set_property(TARGET absl::low_level_hash
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::bits
- absl::config
- absl::endian
- absl::int128)
- set_property(TARGET absl::malloc_internal
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::base
- absl::base_internal
- absl::config
- absl::core_headers
- absl::dynamic_annotations
- absl::raw_logging_internal)
- set_property(TARGET absl::memory PROPERTY INTERFACE_LINK_LIBRARIES
absl::core_headers
- absl::meta)
- set_property(TARGET absl::meta PROPERTY INTERFACE_LINK_LIBRARIES
absl::type_traits)
- set_property(TARGET absl::node_hash_map
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::container_memory
- absl::hash_function_defaults
- absl::node_hash_policy
- absl::raw_hash_map
- absl::algorithm_container
- absl::memory)
- set_property(TARGET absl::node_hash_policy PROPERTY INTERFACE_LINK_LIBRARIES
- absl::config)
- set_property(TARGET absl::node_hash_set
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::hash_function_defaults
- absl::node_hash_policy
- absl::raw_hash_set
- absl::algorithm_container
- absl::memory)
- set_property(TARGET absl::numeric PROPERTY INTERFACE_LINK_LIBRARIES
absl::int128)
- set_property(TARGET absl::numeric_representation PROPERTY
INTERFACE_LINK_LIBRARIES
- absl::config)
- set_property(TARGET absl::optional
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::bad_optional_access
- absl::base_internal
- absl::config
- absl::core_headers
- absl::memory
- absl::type_traits
- absl::utility)
- set_property(TARGET absl::periodic_sampler
- PROPERTY INTERFACE_LINK_LIBRARIES absl::core_headers
- absl::exponential_biased)
- set_property(TARGET absl::random_bit_gen_ref
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::core_headers
- absl::random_internal_distribution_caller
- absl::random_internal_fast_uniform_bits
- absl::type_traits)
- set_property(TARGET absl::random_distributions
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::base_internal
- absl::config
- absl::core_headers
- absl::random_internal_generate_real
- absl::random_internal_distribution_caller
- absl::random_internal_fast_uniform_bits
- absl::random_internal_fastmath
- absl::random_internal_iostream_state_saver
- absl::random_internal_traits
- absl::random_internal_uniform_helper
- absl::random_internal_wide_multiply
- absl::strings
- absl::type_traits)
- set_property(TARGET absl::random_internal_distribution_caller
- PROPERTY INTERFACE_LINK_LIBRARIES absl::config absl::utility
- absl::fast_type_id)
- set_property(TARGET absl::random_internal_distribution_test_util
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::config
- absl::core_headers
- absl::raw_logging_internal
- absl::strings
- absl::str_format
- absl::span)
- set_property(TARGET absl::random_internal_fast_uniform_bits
- PROPERTY INTERFACE_LINK_LIBRARIES absl::config)
- set_property(TARGET absl::random_internal_fastmath PROPERTY
INTERFACE_LINK_LIBRARIES
- absl::bits)
- set_property(TARGET absl::random_internal_generate_real
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::bits
- absl::random_internal_fastmath
- absl::random_internal_traits
- absl::type_traits)
- set_property(TARGET absl::random_internal_iostream_state_saver
- PROPERTY INTERFACE_LINK_LIBRARIES absl::int128
absl::type_traits)
- set_property(TARGET absl::random_internal_mock_helpers
- PROPERTY INTERFACE_LINK_LIBRARIES absl::fast_type_id
absl::optional)
- set_property(TARGET absl::random_internal_nonsecure_base
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::core_headers
- absl::optional
- absl::random_internal_pool_urbg
- absl::random_internal_salted_seed_seq
- absl::random_internal_seed_material
- absl::span
- absl::type_traits)
- set_property(TARGET absl::random_internal_pcg_engine
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::config
- absl::int128
- absl::random_internal_fastmath
- absl::random_internal_iostream_state_saver
- absl::type_traits)
- set_property(TARGET absl::random_internal_platform PROPERTY
INTERFACE_LINK_LIBRARIES
- absl::config)
- set_property(TARGET absl::random_internal_pool_urbg
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::base
- absl::config
- absl::core_headers
- absl::endian
- absl::random_internal_randen
- absl::random_internal_seed_material
- absl::random_internal_traits
- absl::random_seed_gen_exception
- absl::raw_logging_internal
- absl::span)
- set_property(TARGET absl::random_internal_randen
- PROPERTY INTERFACE_LINK_LIBRARIES absl::random_internal_platform
- absl::random_internal_randen_hwaes
- absl::random_internal_randen_slow)
- set_property(TARGET absl::random_internal_randen_engine
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::endian
- absl::random_internal_iostream_state_saver
- absl::random_internal_randen
- absl::raw_logging_internal
- absl::type_traits)
- set_property(TARGET absl::random_internal_randen_hwaes
- PROPERTY INTERFACE_LINK_LIBRARIES absl::random_internal_platform
- absl::random_internal_randen_hwaes_impl absl::config)
- set_property(TARGET absl::random_internal_randen_hwaes_impl
- PROPERTY INTERFACE_LINK_LIBRARIES absl::random_internal_platform
- absl::config)
- set_property(TARGET absl::random_internal_randen_slow
- PROPERTY INTERFACE_LINK_LIBRARIES absl::random_internal_platform
- absl::config)
- set_property(TARGET absl::random_internal_salted_seed_seq
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::inlined_vector
- absl::optional
- absl::span
- absl::random_internal_seed_material
- absl::type_traits)
- set_property(TARGET absl::random_internal_seed_material
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::core_headers
- absl::optional
- absl::random_internal_fast_uniform_bits
- absl::raw_logging_internal
- absl::span
- absl::strings)
- set_property(TARGET absl::random_internal_traits PROPERTY
INTERFACE_LINK_LIBRARIES
- absl::config)
- set_property(TARGET absl::random_internal_uniform_helper
- PROPERTY INTERFACE_LINK_LIBRARIES absl::config
- absl::random_internal_traits absl::type_traits)
- set_property(TARGET absl::random_internal_wide_multiply
- PROPERTY INTERFACE_LINK_LIBRARIES absl::bits absl::config
absl::int128)
- set_property(TARGET absl::random_random
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::random_distributions
- absl::random_internal_nonsecure_base
- absl::random_internal_pcg_engine
- absl::random_internal_pool_urbg
- absl::random_internal_randen_engine
- absl::random_seed_sequences)
- set_property(TARGET absl::random_seed_gen_exception PROPERTY
INTERFACE_LINK_LIBRARIES
- absl::config)
- set_property(TARGET absl::random_seed_sequences
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::inlined_vector
- absl::random_internal_nonsecure_base
- absl::random_internal_pool_urbg
- absl::random_internal_salted_seed_seq
- absl::random_internal_seed_material
- absl::random_seed_gen_exception
- absl::span)
- set_property(TARGET absl::raw_hash_map
- PROPERTY INTERFACE_LINK_LIBRARIES absl::container_memory
- absl::raw_hash_set absl::throw_delegate)
- set_property(TARGET absl::raw_hash_set
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::bits
- absl::compressed_tuple
- absl::config
- absl::container_common
- absl::container_memory
- absl::core_headers
- absl::endian
- absl::hash_policy_traits
- absl::hashtable_debug_hooks
- absl::have_sse
- absl::memory
- absl::meta
- absl::optional
- absl::utility
- absl::hashtablez_sampler)
- set_property(TARGET absl::raw_logging_internal
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::atomic_hook
- absl::config
- absl::core_headers
- absl::log_severity)
- set_property(TARGET absl::sample_recorder PROPERTY INTERFACE_LINK_LIBRARIES
absl::base
- absl::synchronization)
- set_property(TARGET absl::scoped_set_env PROPERTY INTERFACE_LINK_LIBRARIES
absl::config
- absl::raw_logging_internal)
- set_property(TARGET absl::span
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::algorithm
- absl::core_headers
- absl::throw_delegate
- absl::type_traits)
- set_property(TARGET absl::spinlock_wait
- PROPERTY INTERFACE_LINK_LIBRARIES absl::base_internal
absl::core_headers
- absl::errno_saver)
- set_property(TARGET absl::stacktrace
- PROPERTY INTERFACE_LINK_LIBRARIES absl::debugging_internal
absl::config
- absl::core_headers)
- set_property(TARGET absl::status
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::atomic_hook
- absl::config
- absl::core_headers
- absl::function_ref
- absl::raw_logging_internal
- absl::inlined_vector
- absl::stacktrace
- absl::symbolize
- absl::strings
- absl::cord
- absl::str_format
- absl::optional)
- set_property(TARGET absl::statusor
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::base
- absl::status
- absl::core_headers
- absl::raw_logging_internal
- absl::type_traits
- absl::strings
- absl::utility
- absl::variant)
- set_property(TARGET absl::str_format PROPERTY INTERFACE_LINK_LIBRARIES
- absl::str_format_internal)
- set_property(TARGET absl::str_format_internal
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::bits
- absl::strings
- absl::config
- absl::core_headers
- absl::numeric_representation
- absl::type_traits
- absl::int128
- absl::span)
- set_property(TARGET absl::strerror PROPERTY INTERFACE_LINK_LIBRARIES
absl::config
- absl::core_headers
absl::errno_saver)
- set_property(TARGET absl::strings
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::strings_internal
- absl::base
- absl::bits
- absl::config
- absl::core_headers
- absl::endian
- absl::int128
- absl::memory
- absl::raw_logging_internal
- absl::throw_delegate
- absl::type_traits)
- set_property(TARGET absl::strings_internal
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::config
- absl::core_headers
- absl::endian
- absl::raw_logging_internal
- absl::type_traits)
- set_property(TARGET absl::symbolize
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::debugging_internal
- absl::demangle_internal
- absl::base
- absl::config
- absl::core_headers
- absl::dynamic_annotations
- absl::malloc_internal
- absl::raw_logging_internal
- absl::strings)
- set_property(TARGET absl::synchronization
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::graphcycles_internal
- absl::kernel_timeout_internal
- absl::atomic_hook
- absl::base
- absl::base_internal
- absl::config
- absl::core_headers
- absl::dynamic_annotations
- absl::malloc_internal
- absl::raw_logging_internal
- absl::stacktrace
- absl::symbolize
- absl::time)
- set_property(TARGET absl::throw_delegate PROPERTY INTERFACE_LINK_LIBRARIES
absl::config
- absl::raw_logging_internal)
- set_property(TARGET absl::time
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::base
- absl::civil_time
- absl::core_headers
- absl::int128
- absl::raw_logging_internal
- absl::strings
- absl::time_zone)
- set_property(TARGET absl::type_traits PROPERTY INTERFACE_LINK_LIBRARIES
absl::config)
- set_property(TARGET absl::utility PROPERTY INTERFACE_LINK_LIBRARIES
absl::base_internal
- absl::config absl::type_traits)
- set_property(TARGET absl::variant
- PROPERTY INTERFACE_LINK_LIBRARIES
- absl::bad_variant_access
- absl::base_internal
- absl::config
- absl::core_headers
- absl::type_traits
- absl::utility)
- set_property(TARGET absl::wyhash PROPERTY INTERFACE_LINK_LIBRARIES
absl::config
- absl::endian absl::int128)
+ prepare_fetchcontent()
+
+ # We have to enable Abseil install to generate abslConfig.cmake
+ # so gRPC can find Abseil through ExternalProject_Add. Our expectation
+ # is that this will not be necessary once gRPC supports FetchContent.
+ set(ABSL_ENABLE_INSTALL ON)
+ fetchcontent_makeavailable(absl)
+
+ # This custom target is required due to a timing issue between FetchContent
+ # and the install command below, which is necessary for GRPC to find Abseil
+ # due to mixing FetchContent and ExternalProject_Add.
+ # Create a target that depends on ALL Abseil libraries that will be
installed.
+ # This ensures they're all built before we try to install.
+ add_custom_target(absl_built
+ DEPENDS absl::bad_any_cast_impl
+ absl::bad_optional_access
+ absl::bad_variant_access
+ absl::base
+ absl::city
+ absl::civil_time
+ absl::cord
+ absl::cord_internal
+ absl::cordz_functions
+ absl::cordz_handle
+ absl::cordz_info
+ absl::cordz_sample_token
+ absl::debugging_internal
+ absl::demangle_internal
+ absl::examine_stack
+ absl::exponential_biased
+ absl::failure_signal_handler
+ absl::flags
+ absl::flags_commandlineflag
+ absl::flags_commandlineflag_internal
+ absl::flags_config
+ absl::flags_internal
+ absl::flags_marshalling
+ absl::flags_parse
+ absl::flags_private_handle_accessor
+ absl::flags_program_name
+ absl::flags_reflection
+ absl::flags_usage
+ absl::flags_usage_internal
+ absl::graphcycles_internal
+ absl::hash
+ absl::hashtablez_sampler
+ absl::int128
+ absl::leak_check
+ absl::leak_check_disable
+ absl::log_severity
+ absl::low_level_hash
+ absl::malloc_internal
+ absl::periodic_sampler
+ absl::random_distributions
+ absl::random_internal_distribution_test_util
+ absl::random_internal_platform
+ absl::random_internal_pool_urbg
+ absl::random_internal_randen
+ absl::random_internal_randen_hwaes
+ absl::random_internal_randen_hwaes_impl
+ absl::random_internal_randen_slow
+ absl::random_internal_seed_material
+ absl::random_seed_gen_exception
+ absl::random_seed_sequences
+ absl::raw_hash_set
+ absl::raw_logging_internal
+ absl::scoped_set_env
+ absl::spinlock_wait
+ absl::stacktrace
+ absl::status
+ absl::statusor
+ absl::str_format_internal
+ absl::strerror
+ absl::strings
+ absl::strings_internal
+ absl::symbolize
+ absl::synchronization
+ absl::throw_delegate
+ absl::time
+ absl::time_zone)
+
+ # gRPC requires Abseil to be installed to a known location.
+ # We have to do this in two steps to avoid double installation of Abseil
+ # when Arrow is installed.
+ # Disable Abseil's install script this target runs after Abseil is built
+ # and replaces its cmake_install.cmake with a no-op so Arrow does not
install it
+ # outside of the build tree.
+ add_custom_command(OUTPUT "${absl_BINARY_DIR}/cmake_install.cmake.saved"
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different
+ "${absl_BINARY_DIR}/cmake_install.cmake"
+ "${absl_BINARY_DIR}/cmake_install.cmake.saved"
+ COMMAND ${CMAKE_COMMAND} -E echo
+ "# Abseil install disabled to prevent double
installation with Arrow"
+ > "${absl_BINARY_DIR}/cmake_install.cmake"
+ DEPENDS absl_built
+ COMMENT "Disabling Abseil's install to prevent double
installation"
+ VERBATIM)
+
+ add_custom_target(absl_install_disabled ALL
+ DEPENDS "${absl_BINARY_DIR}/cmake_install.cmake.saved")
+
+ # Install Abseil to ABSL_PREFIX for gRPC to find.
+ # Using the saved original cmake_install.cmake.saved install script
+ # for other dependencies to find Abseil.
+ add_custom_command(OUTPUT "${ABSL_PREFIX}/.absl_installed"
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different
+ "${absl_BINARY_DIR}/cmake_install.cmake.saved"
+ "${absl_BINARY_DIR}/cmake_install.cmake.tmp"
+ COMMAND ${CMAKE_COMMAND}
-DCMAKE_INSTALL_PREFIX=${ABSL_PREFIX}
+ -DCMAKE_INSTALL_CONFIG_NAME=$<CONFIG> -P
+ "${absl_BINARY_DIR}/cmake_install.cmake.tmp" ||
+ ${CMAKE_COMMAND} -E true
+ COMMAND ${CMAKE_COMMAND} -E touch
"${ABSL_PREFIX}/.absl_installed"
+ DEPENDS absl_install_disabled
+ COMMENT "Installing Abseil to ${ABSL_PREFIX} for gRPC"
+ VERBATIM)
+
+ # Make absl_fc depend on the install completion marker
+ add_custom_target(absl_fc DEPENDS "${ABSL_PREFIX}/.absl_installed")
if(APPLE)
# This is due to upstream absl::cctz issue
@@ -3917,19 +3140,8 @@ macro(build_absl)
APPEND
PROPERTY INTERFACE_LINK_LIBRARIES ${CoreFoundation})
endif()
-
- externalproject_add(absl_ep
- ${EP_COMMON_OPTIONS}
- URL ${ABSL_SOURCE_URL}
- URL_HASH "SHA256=${ARROW_ABSL_BUILD_SHA256_CHECKSUM}"
- CMAKE_ARGS ${ABSL_CMAKE_ARGS}
- BUILD_BYPRODUCTS ${ABSL_BUILD_BYPRODUCTS})
-
- # Work around https://gitlab.kitware.com/cmake/cmake/issues/15052
- file(MAKE_DIRECTORY ${ABSL_INCLUDE_DIR})
-
- set(ABSL_VENDORED TRUE)
-endmacro()
+ list(POP_BACK CMAKE_MESSAGE_INDENT)
+endfunction()
macro(build_grpc)
resolve_dependency(c-ares
@@ -3974,7 +3186,7 @@ macro(build_grpc)
add_custom_target(grpc_dependencies)
if(ABSL_VENDORED)
- add_dependencies(grpc_dependencies absl_ep)
+ add_dependencies(grpc_dependencies absl_fc)
endif()
if(CARES_VENDORED)
add_dependencies(grpc_dependencies cares_ep)
@@ -4433,7 +3645,7 @@ macro(build_google_cloud_cpp_storage)
add_custom_target(google_cloud_cpp_dependencies)
if(ABSL_VENDORED)
- add_dependencies(google_cloud_cpp_dependencies absl_ep)
+ add_dependencies(google_cloud_cpp_dependencies absl_fc)
endif()
if(ZLIB_VENDORED)
add_dependencies(google_cloud_cpp_dependencies zlib_ep)