From f59b9e6417dd90bdd1aa3d4e265a3f850537104c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Cumplido?= Date: Thu, 6 Nov 2025 16:24:00 +0100 Subject: [PATCH 1/4] GH-48074: [C++] Use FetchContent for bundled Abseil --- cpp/cmake_modules/ThirdpartyToolchain.cmake | 1045 +++---------------- 1 file changed, 123 insertions(+), 922 deletions(-) diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake b/cpp/cmake_modules/ThirdpartyToolchain.cmake index 1724c0d3a3de..f282519a73b5 100644 --- a/cpp/cmake_modules/ThirdpartyToolchain.cmake +++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake @@ -1011,6 +1011,9 @@ if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.28) endif() macro(prepare_fetchcontent) + set(_SAVED_CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}") + set(_SAVED_CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}") + set(_SAVED_CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}") set(BUILD_SHARED_LIBS OFF) set(BUILD_STATIC_LIBS ON) set(BUILD_TESTING OFF) @@ -1043,6 +1046,14 @@ macro(prepare_fetchcontent) endif() endmacro() +macro(cleanup_fetchcontent) + # Restore output directories + # TODO: Investigate why without this tests fail to get correctly installed + set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${_SAVED_CMAKE_ARCHIVE_OUTPUT_DIRECTORY}") + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${_SAVED_CMAKE_LIBRARY_OUTPUT_DIRECTORY}") + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${_SAVED_CMAKE_RUNTIME_OUTPUT_DIRECTORY}") +endmacro() + # ---------------------------------------------------------------------- # Find pthreads @@ -2994,920 +3005,122 @@ 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}) + message(STATUS "Building Abseil from source using FetchContent") + set(ABSL_VENDORED TRUE) 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}") + + # Configure Abseil options before FetchContent + set(ABSL_PROPAGATE_CXX_STD ON) + # TODO: Investigate why with this abseil gets installed also on our install dir (along with Arrow) + # Must enable install to generate abslConfig.cmake so GRPC can find Abseil + set(ABSL_ENABLE_INSTALL ON) + 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() - # 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) + fetchcontent_declare( + absl + URL ${ABSL_SOURCE_URL} + URL_HASH "SHA256=${ARROW_ABSL_BUILD_SHA256_CHECKSUM}" + ) + + prepare_fetchcontent() + + set(CMAKE_INSTALL_PREFIX_SAVED "${CMAKE_INSTALL_PREFIX}") + set(CMAKE_INSTALL_PREFIX "${ABSL_PREFIX}") + fetchcontent_makeavailable(absl) + + # Restore original install prefix + set(CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX_SAVED}") + cleanup_fetchcontent() + + # 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) + + # Install Abseil to ABSL_PREFIX. This is necessary for gRPC to find Abseil + # when using ExternalProject_Add. + add_custom_command( + OUTPUT "${ABSL_PREFIX}/.absl_installed" + COMMAND ${CMAKE_COMMAND} --install ${absl_BINARY_DIR} --prefix ${ABSL_PREFIX} || ${CMAKE_COMMAND} -E true + COMMAND ${CMAKE_COMMAND} -E touch "${ABSL_PREFIX}/.absl_installed" + DEPENDS absl_built + COMMENT "Installing Abseil (errors about scoped_set_env are expected and ignored)" + VERBATIM + ) + + add_custom_target(absl_ep ALL DEPENDS "${ABSL_PREFIX}/.absl_installed") if(APPLE) # This is due to upstream absl::cctz issue @@ -3917,18 +3130,6 @@ 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() macro(build_grpc) From b81600cfe6000e1ee68fd1473d50dca05bb4df18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Cumplido?= Date: Thu, 6 Nov 2025 18:39:56 +0100 Subject: [PATCH 2/4] Avoid double installation by creating temporary no-op cmake install abseil --- cpp/cmake_modules/ThirdpartyToolchain.cmake | 62 ++++++++++++++------- 1 file changed, 43 insertions(+), 19 deletions(-) diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake b/cpp/cmake_modules/ThirdpartyToolchain.cmake index f282519a73b5..969d8dd6b2c5 100644 --- a/cpp/cmake_modules/ThirdpartyToolchain.cmake +++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake @@ -3012,19 +3012,17 @@ macro(build_absl) # Configure Abseil options before FetchContent set(ABSL_PROPAGATE_CXX_STD ON) - # TODO: Investigate why with this abseil gets installed also on our install dir (along with Arrow) - # Must enable install to generate abslConfig.cmake so GRPC can find Abseil + # We have to enable abseil install to generate abslConfig.cmake + # so GRPC can find Abseil thorught ExternalProject_Add set(ABSL_ENABLE_INSTALL ON) 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 - URL ${ABSL_SOURCE_URL} - URL_HASH "SHA256=${ARROW_ABSL_BUILD_SHA256_CHECKSUM}" - ) + fetchcontent_declare(absl + URL ${ABSL_SOURCE_URL} + URL_HASH "SHA256=${ARROW_ABSL_BUILD_SHA256_CHECKSUM}") prepare_fetchcontent() @@ -3109,18 +3107,44 @@ macro(build_absl) absl::time absl::time_zone) - # Install Abseil to ABSL_PREFIX. This is necessary for gRPC to find Abseil - # when using ExternalProject_Add. - add_custom_command( - OUTPUT "${ABSL_PREFIX}/.absl_installed" - COMMAND ${CMAKE_COMMAND} --install ${absl_BINARY_DIR} --prefix ${ABSL_PREFIX} || ${CMAKE_COMMAND} -E true - COMMAND ${CMAKE_COMMAND} -E touch "${ABSL_PREFIX}/.absl_installed" - DEPENDS absl_built - COMMENT "Installing Abseil (errors about scoped_set_env are expected and ignored)" - VERBATIM - ) - - add_custom_target(absl_ep ALL DEPENDS "${ABSL_PREFIX}/.absl_installed") + # 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=$ -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_ep depend on the install completion marker + add_custom_target(absl_ep DEPENDS "${ABSL_PREFIX}/.absl_installed") if(APPLE) # This is due to upstream absl::cctz issue From 6054875a09231a95d8a79e6389d304e6b5fd9c33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Cumplido?= Date: Fri, 14 Nov 2025 10:34:36 +0100 Subject: [PATCH 3/4] Apply suggestions from code review Co-authored-by: Sutou Kouhei --- cpp/cmake_modules/ThirdpartyToolchain.cmake | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake b/cpp/cmake_modules/ThirdpartyToolchain.cmake index 969d8dd6b2c5..c9623976bf86 100644 --- a/cpp/cmake_modules/ThirdpartyToolchain.cmake +++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake @@ -3012,8 +3012,8 @@ macro(build_absl) # Configure Abseil options before FetchContent set(ABSL_PROPAGATE_CXX_STD ON) - # We have to enable abseil install to generate abslConfig.cmake - # so GRPC can find Abseil thorught ExternalProject_Add + # We have to enable Abseil install to generate abslConfig.cmake + # so gRPC can find Abseil thorught ExternalProject_Add set(ABSL_ENABLE_INSTALL ON) if(CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 13.0) @@ -3037,7 +3037,7 @@ macro(build_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 + # 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 @@ -3107,7 +3107,7 @@ macro(build_absl) absl::time absl::time_zone) - # GRPC requires Abseil to be installed to a known location. + # 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 @@ -3127,9 +3127,9 @@ macro(build_absl) add_custom_target(absl_install_disabled ALL DEPENDS "${absl_BINARY_DIR}/cmake_install.cmake.saved") - # Install Abseil to ABSL_PREFIX for gRPC to find + # 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 + # 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" From 541ca51e78bb2cb670d977c9032f1ea8a1a40624 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Cumplido?= Date: Fri, 14 Nov 2025 13:12:49 +0100 Subject: [PATCH 4/4] Move build_absl from macro to function and clean up for this. Also move target from abls_ep to absl_fc --- cpp/cmake_modules/ThirdpartyToolchain.cmake | 51 ++++++++------------- 1 file changed, 19 insertions(+), 32 deletions(-) diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake b/cpp/cmake_modules/ThirdpartyToolchain.cmake index c9623976bf86..910f256c81e4 100644 --- a/cpp/cmake_modules/ThirdpartyToolchain.cmake +++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake @@ -1011,9 +1011,6 @@ if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.28) endif() macro(prepare_fetchcontent) - set(_SAVED_CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}") - set(_SAVED_CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}") - set(_SAVED_CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}") set(BUILD_SHARED_LIBS OFF) set(BUILD_STATIC_LIBS ON) set(BUILD_TESTING OFF) @@ -1046,14 +1043,6 @@ macro(prepare_fetchcontent) endif() endmacro() -macro(cleanup_fetchcontent) - # Restore output directories - # TODO: Investigate why without this tests fail to get correctly installed - set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${_SAVED_CMAKE_ARCHIVE_OUTPUT_DIRECTORY}") - set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${_SAVED_CMAKE_LIBRARY_OUTPUT_DIRECTORY}") - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${_SAVED_CMAKE_RUNTIME_OUTPUT_DIRECTORY}") -endmacro() - # ---------------------------------------------------------------------- # Find pthreads @@ -3004,17 +2993,16 @@ endmacro() # ---------------------------------------------------------------------- # Dependencies for Arrow Flight RPC -macro(build_absl) +function(build_absl) + list(APPEND CMAKE_MESSAGE_INDENT "ABSL: ") message(STATUS "Building Abseil from source using FetchContent") - set(ABSL_VENDORED TRUE) - set(ABSL_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/absl_ep-install") - set(ABSL_INCLUDE_DIR "${ABSL_PREFIX}/include") - - # Configure Abseil options before FetchContent - set(ABSL_PROPAGATE_CXX_STD ON) - # We have to enable Abseil install to generate abslConfig.cmake - # so gRPC can find Abseil thorught ExternalProject_Add - set(ABSL_ENABLE_INSTALL ON) + 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) string(APPEND CMAKE_CXX_FLAGS " -include stdint.h") @@ -3026,14 +3014,12 @@ macro(build_absl) prepare_fetchcontent() - set(CMAKE_INSTALL_PREFIX_SAVED "${CMAKE_INSTALL_PREFIX}") - set(CMAKE_INSTALL_PREFIX "${ABSL_PREFIX}") + # 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) - # Restore original install prefix - set(CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX_SAVED}") - cleanup_fetchcontent() - # 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. @@ -3143,8 +3129,8 @@ macro(build_absl) COMMENT "Installing Abseil to ${ABSL_PREFIX} for gRPC" VERBATIM) - # Make absl_ep depend on the install completion marker - add_custom_target(absl_ep DEPENDS "${ABSL_PREFIX}/.absl_installed") + # 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 @@ -3154,7 +3140,8 @@ macro(build_absl) APPEND PROPERTY INTERFACE_LINK_LIBRARIES ${CoreFoundation}) endif() -endmacro() + list(POP_BACK CMAKE_MESSAGE_INDENT) +endfunction() macro(build_grpc) resolve_dependency(c-ares @@ -3199,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) @@ -3658,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)