diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake b/cpp/cmake_modules/ThirdpartyToolchain.cmake index 5b8b039357e0d..fef89b021bc76 100644 --- a/cpp/cmake_modules/ThirdpartyToolchain.cmake +++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake @@ -753,7 +753,7 @@ else() ARROW_PROTOBUF_STRIPPED_BUILD_VERSION) # strip the leading `v` set_urls(PROTOBUF_SOURCE_URL - "https://github.com/protocolbuffers/protobuf/releases/download/${ARROW_PROTOBUF_BUILD_VERSION}/protobuf-all-${ARROW_PROTOBUF_STRIPPED_BUILD_VERSION}.tar.gz" + "https://github.com/protocolbuffers/protobuf/releases/download/${ARROW_PROTOBUF_BUILD_VERSION}/protobuf-${ARROW_PROTOBUF_STRIPPED_BUILD_VERSION}.tar.gz" "${THIRDPARTY_MIRROR_URL}/protobuf-${ARROW_PROTOBUF_BUILD_VERSION}.tar.gz") endif() @@ -935,6 +935,7 @@ set(EP_COMMON_CMAKE_ARGS -DCMAKE_CXX_FLAGS_RELEASE=${EP_CXX_FLAGS_RELEASE} -DCMAKE_CXX_FLAGS_RELWITHDEBINFO=${EP_CXX_FLAGS_RELWITHDEBINFO} -DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD} + -DCMAKE_CXX_EXTENSIONS=OFF -DCMAKE_C_FLAGS=${EP_C_FLAGS} -DCMAKE_C_FLAGS_DEBUG=${EP_C_FLAGS_DEBUG} -DCMAKE_C_FLAGS_MISIZEREL=${EP_C_FLAGS_MINSIZEREL} @@ -1855,1303 +1856,239 @@ if(ARROW_WITH_THRIFT) list(GET Thrift_VERSION_LIST 2 Thrift_VERSION_PATCH) endif() -# ---------------------------------------------------------------------- -# Protocol Buffers (required for ORC, Flight and Substrait libraries) - -macro(build_protobuf) - message(STATUS "Building Protocol Buffers from source") - set(PROTOBUF_VENDORED TRUE) - set(PROTOBUF_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/protobuf_ep-install") - set(PROTOBUF_INCLUDE_DIR "${PROTOBUF_PREFIX}/include") - # This flag is based on what the user initially requested but if - # we've fallen back to building protobuf we always build it statically - # so we need to reset the flag so that we can link against it correctly - # later. - set(Protobuf_USE_STATIC_LIBS ON) - # Newer protobuf releases always have a lib prefix independent from CMAKE_STATIC_LIBRARY_PREFIX - set(PROTOBUF_STATIC_LIB - "${PROTOBUF_PREFIX}/lib/libprotobuf${CMAKE_STATIC_LIBRARY_SUFFIX}") - set(PROTOC_STATIC_LIB "${PROTOBUF_PREFIX}/lib/libprotoc${CMAKE_STATIC_LIBRARY_SUFFIX}") - set(Protobuf_PROTOC_LIBRARY "${PROTOC_STATIC_LIB}") - set(PROTOBUF_COMPILER "${PROTOBUF_PREFIX}/bin/protoc") - - # Strip lto flags (which may be added by dh_auto_configure) - # See https://github.com/protocolbuffers/protobuf/issues/7092 - set(PROTOBUF_C_FLAGS ${EP_C_FLAGS}) - set(PROTOBUF_CXX_FLAGS ${EP_CXX_FLAGS}) - string(REPLACE "-flto=auto" "" PROTOBUF_C_FLAGS "${PROTOBUF_C_FLAGS}") - string(REPLACE "-ffat-lto-objects" "" PROTOBUF_C_FLAGS "${PROTOBUF_C_FLAGS}") - string(REPLACE "-flto=auto" "" PROTOBUF_CXX_FLAGS "${PROTOBUF_CXX_FLAGS}") - string(REPLACE "-ffat-lto-objects" "" PROTOBUF_CXX_FLAGS "${PROTOBUF_CXX_FLAGS}") - set(PROTOBUF_CMAKE_ARGS - ${EP_COMMON_CMAKE_ARGS} - "-DCMAKE_CXX_FLAGS=${PROTOBUF_CXX_FLAGS}" - "-DCMAKE_C_FLAGS=${PROTOBUF_C_FLAGS}" - "-DCMAKE_INSTALL_PREFIX=${PROTOBUF_PREFIX}" - -Dprotobuf_BUILD_TESTS=OFF - -Dprotobuf_DEBUG_POSTFIX=) - if(MSVC AND NOT ARROW_USE_STATIC_CRT) - list(APPEND PROTOBUF_CMAKE_ARGS "-Dprotobuf_MSVC_STATIC_RUNTIME=OFF") - endif() - if(ZLIB_ROOT) - list(APPEND PROTOBUF_CMAKE_ARGS "-DZLIB_ROOT=${ZLIB_ROOT}") +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}") + 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(PROTOBUF_EXTERNAL_PROJECT_ADD_ARGS CMAKE_ARGS ${PROTOBUF_CMAKE_ARGS} SOURCE_SUBDIR - "cmake") - - externalproject_add(protobuf_ep - ${EP_COMMON_OPTIONS} ${PROTOBUF_EXTERNAL_PROJECT_ADD_ARGS} - BUILD_BYPRODUCTS "${PROTOBUF_STATIC_LIB}" "${PROTOBUF_COMPILER}" - BUILD_IN_SOURCE 1 - URL ${PROTOBUF_SOURCE_URL} - URL_HASH "SHA256=${ARROW_PROTOBUF_BUILD_SHA256_CHECKSUM}") - - file(MAKE_DIRECTORY "${PROTOBUF_INCLUDE_DIR}") - # For compatibility of CMake's FindProtobuf.cmake. - set(Protobuf_INCLUDE_DIRS "${PROTOBUF_INCLUDE_DIR}") - - add_library(arrow::protobuf::libprotobuf STATIC IMPORTED) - set_target_properties(arrow::protobuf::libprotobuf PROPERTIES IMPORTED_LOCATION - "${PROTOBUF_STATIC_LIB}") - target_include_directories(arrow::protobuf::libprotobuf BEFORE - INTERFACE "${PROTOBUF_INCLUDE_DIR}") - add_library(arrow::protobuf::libprotoc STATIC IMPORTED) - set_target_properties(arrow::protobuf::libprotoc PROPERTIES IMPORTED_LOCATION - "${PROTOC_STATIC_LIB}") - target_include_directories(arrow::protobuf::libprotoc BEFORE - INTERFACE "${PROTOBUF_INCLUDE_DIR}") - add_executable(arrow::protobuf::protoc IMPORTED) - set_target_properties(arrow::protobuf::protoc PROPERTIES IMPORTED_LOCATION - "${PROTOBUF_COMPILER}") - - add_dependencies(arrow::protobuf::libprotobuf protobuf_ep) - add_dependencies(arrow::protobuf::protoc protobuf_ep) - - list(APPEND ARROW_BUNDLED_STATIC_LIBS arrow::protobuf::libprotobuf) - - if(CMAKE_CROSSCOMPILING) - # If we are cross compiling, we need to build protoc for the host - # system also, as it is used when building Arrow - # We do this by calling CMake as a child process - # with CXXFLAGS / CFLAGS and CMake flags cleared. - set(PROTOBUF_HOST_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/protobuf_ep_host-install") - set(PROTOBUF_HOST_COMPILER "${PROTOBUF_HOST_PREFIX}/bin/protoc") + set(ABSL_BUILD_BYPRODUCTS) + set(ABSL_LIBRARIES) - set(PROTOBUF_HOST_CMAKE_ARGS - "-DCMAKE_CXX_FLAGS=" - "-DCMAKE_C_FLAGS=" - "-DCMAKE_INSTALL_PREFIX=${PROTOBUF_HOST_PREFIX}" - -Dprotobuf_BUILD_TESTS=OFF - -Dprotobuf_DEBUG_POSTFIX=) + # 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 + base + city + civil_time + cord_internal + cord + cordz_functions + cordz_handle + cordz_info + cordz_sample_token + crc_cord_state + crc_cpu_detect + crc_internal + crc32c + debugging_internal + decode_rust_punycode + demangle_internal + demangle_rust + die_if_null + examine_stack + exponential_biased + failure_signal_handler + flags_commandlineflag_internal + flags_commandlineflag + flags_config + flags_internal + flags_marshalling + flags_parse + flags_private_handle_accessor + flags_program_name + flags_reflection + flags_usage_internal + flags_usage + graphcycles_internal + hash + hashtablez_sampler + int128 + kernel_timeout_internal + leak_check + log_flags + log_globals + log_initialize + log_internal_check_op + log_internal_conditions + log_internal_fnmatch + log_internal_format + log_internal_globals + log_internal_log_sink_set + log_internal_message + log_internal_nullguard + log_internal_proto + log_internal_structured_proto + log_severity + log_sink + low_level_hash + malloc_internal + periodic_sampler + poison + random_distributions + random_internal_distribution_test_util + random_internal_entropy_pool + random_internal_platform + random_internal_randen_hwaes_impl + random_internal_randen_hwaes + random_internal_randen_slow + random_internal_randen + 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 + string_view + strings_internal + strings + symbolize + synchronization + throw_delegate + time_zone + time + tracing_internal + utf8_for_code_point + vlog_config_internal) + # 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 + absl_check + absl_log + absl_vlog_is_on + algorithm + algorithm_container + any + any_invocable + atomic_hook + base_internal + bind_front + bits + bounded_utf8_length_sequence + btree + charset + check + cleanup + cleanup_internal + common_policy_traits + compare + compressed_tuple + config + container_common + container_memory + cordz_statistics + cordz_update_scope + cordz_update_tracker + core_headers + debugging + dynamic_annotations + endian + errno_saver + fast_type_id + fixed_array + flags + flags_path_util + flat_hash_map + flat_hash_set + function_ref + has_ostream_operator + hash_container_defaults + hash_function_defaults + hash_policy_traits + hashtable_control_bytes + hashtable_debug + hashtable_debug_hooks + inlined_vector + inlined_vector_internal + iterator_traits_internal + iterator_traits_test_helper_internal + layout + log + log_entry + log_internal_append_truncated + log_internal_check_impl + log_internal_config + log_internal_flags + log_internal_log_impl + log_internal_nullstream + log_internal_strip + log_internal_structured + log_internal_voidify + log_sink_registry + log_streamer + log_structured + memory + meta + no_destructor + node_hash_map + node_hash_set + node_slot_policy + non_temporal_arm_intrinsics + non_temporal_memcpy + nullability + numeric + numeric_representation + optional + overload + prefetch + 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 + raw_hash_set_resize_impl + sample_recorder + span + str_format + type_traits + utility + variant + vlog_is_on + weakly_mixed_integer) - externalproject_add(protobuf_ep_host - ${EP_COMMON_OPTIONS} - CMAKE_ARGS ${PROTOBUF_HOST_CMAKE_ARGS} - BUILD_BYPRODUCTS "${PROTOBUF_HOST_COMPILER}" - BUILD_IN_SOURCE 1 - URL ${PROTOBUF_SOURCE_URL} - URL_HASH "SHA256=${ARROW_PROTOBUF_BUILD_SHA256_CHECKSUM}") - - add_executable(arrow::protobuf::host_protoc IMPORTED) - set_target_properties(arrow::protobuf::host_protoc - PROPERTIES IMPORTED_LOCATION "${PROTOBUF_HOST_COMPILER}") - - add_dependencies(arrow::protobuf::host_protoc protobuf_ep_host) - endif() -endmacro() - -if(ARROW_WITH_PROTOBUF) - if(ARROW_FLIGHT_SQL) - # Flight SQL uses proto3 optionals, which require 3.12 or later. - # 3.12.0-3.14.0: need --experimental_allow_proto3_optional - # 3.15.0-: don't need --experimental_allow_proto3_optional - set(ARROW_PROTOBUF_REQUIRED_VERSION "3.12.0") - elseif(ARROW_SUBSTRAIT) - # Substrait protobuf files use proto3 syntax - set(ARROW_PROTOBUF_REQUIRED_VERSION "3.0.0") - else() - set(ARROW_PROTOBUF_REQUIRED_VERSION "2.6.1") - endif() - if(ARROW_ORC - OR ARROW_SUBSTRAIT - OR ARROW_WITH_OPENTELEMETRY) - set(ARROW_PROTOBUF_ARROW_CMAKE_PACKAGE_NAME "Arrow") - set(ARROW_PROTOBUF_ARROW_PC_PACKAGE_NAME "arrow") - elseif(ARROW_FLIGHT) - set(ARROW_PROTOBUF_ARROW_CMAKE_PACKAGE_NAME "ArrowFlight") - set(ARROW_PROTOBUF_ARROW_PC_PACKAGE_NAME "arrow-flight") - else() - message(FATAL_ERROR "ARROW_WITH_PROTOBUF must be propagated in the build tooling installation." - " Please extend the mappings of ARROW_PROTOBUF_ARROW_CMAKE_PACKAGE_NAME and" - " ARROW_PROTOBUF_ARROW_PC_PACKAGE_NAME for newly introduced dependencies on" - " protobuf.") - endif() - # We need to use FORCE_ANY_NEWER_VERSION here to accept Protobuf - # newer version such as 23.4. If we don't use it, 23.4 is processed - # as an incompatible version with 3.12.0 with protobuf-config.cmake - # provided by Protobuf. Because protobuf-config-version.cmake - # requires the same major version. In the example, "23" for 23.4 and - # "3" for 3.12.0 are different. So 23.4 is rejected with 3.12.0. If - # we use FORCE_ANY_NEWER_VERSION here, we can bypass the check and - # use 23.4. - resolve_dependency(Protobuf - ARROW_CMAKE_PACKAGE_NAME - ${ARROW_PROTOBUF_ARROW_CMAKE_PACKAGE_NAME} - ARROW_PC_PACKAGE_NAME - ${ARROW_PROTOBUF_ARROW_PC_PACKAGE_NAME} - FORCE_ANY_NEWER_VERSION - TRUE - HAVE_ALT - TRUE - PC_PACKAGE_NAMES - protobuf - REQUIRED_VERSION - ${ARROW_PROTOBUF_REQUIRED_VERSION}) - - if(NOT Protobuf_USE_STATIC_LIBS AND MSVC_TOOLCHAIN) - add_definitions(-DPROTOBUF_USE_DLLS) - endif() - - if(TARGET arrow::protobuf::libprotobuf) - set(ARROW_PROTOBUF_LIBPROTOBUF arrow::protobuf::libprotobuf) - else() - set(ARROW_PROTOBUF_LIBPROTOBUF protobuf::libprotobuf) - endif() - if(TARGET arrow::protobuf::libprotoc) - set(ARROW_PROTOBUF_LIBPROTOC arrow::protobuf::libprotoc) - else() - set(ARROW_PROTOBUF_LIBPROTOC protobuf::libprotoc) - endif() - if(TARGET arrow::protobuf::host_protoc) - # make sure host protoc is used for compiling protobuf files - # during build of e.g. orc - set(ARROW_PROTOBUF_PROTOC arrow::protobuf::host_protoc) - elseif(TARGET arrow::protobuf::protoc) - set(ARROW_PROTOBUF_PROTOC arrow::protobuf::protoc) - else() - if(NOT TARGET protobuf::protoc) - add_executable(protobuf::protoc IMPORTED) - set_target_properties(protobuf::protoc PROPERTIES IMPORTED_LOCATION - "${PROTOBUF_PROTOC_EXECUTABLE}") - endif() - set(ARROW_PROTOBUF_PROTOC protobuf::protoc) - endif() - - # Log protobuf paths as we often see issues with mixed sources for - # the libraries and protoc. - get_target_property(PROTOBUF_PROTOC_EXECUTABLE ${ARROW_PROTOBUF_PROTOC} - IMPORTED_LOCATION_RELEASE) - if(NOT PROTOBUF_PROTOC_EXECUTABLE) - get_target_property(PROTOBUF_PROTOC_EXECUTABLE ${ARROW_PROTOBUF_PROTOC} - IMPORTED_LOCATION) - endif() - message(STATUS "Found protoc: ${PROTOBUF_PROTOC_EXECUTABLE}") - get_target_property(PROTOBUF_TYPE ${ARROW_PROTOBUF_LIBPROTOBUF} TYPE) - if(NOT STREQUAL "INTERFACE_LIBRARY") - # Protobuf_PROTOC_LIBRARY is set by all versions of FindProtobuf.cmake - message(STATUS "Found libprotoc: ${Protobuf_PROTOC_LIBRARY}") - get_target_property(PROTOBUF_LIBRARY ${ARROW_PROTOBUF_LIBPROTOBUF} IMPORTED_LOCATION) - message(STATUS "Found libprotobuf: ${PROTOBUF_LIBRARY}") - message(STATUS "Found protobuf headers: ${PROTOBUF_INCLUDE_DIR}") - endif() -endif() - -# ---------------------------------------------------------------------- -# Substrait (required by compute engine) - -macro(build_substrait) - message(STATUS "Building Substrait from source") - - # Note: not all protos in Substrait actually matter to plan - # consumption. No need to build the ones we don't need. - set(SUBSTRAIT_PROTOS - algebra - extended_expression - extensions/extensions - plan - type) - set(ARROW_SUBSTRAIT_PROTOS extension_rels) - set(ARROW_SUBSTRAIT_PROTOS_DIR "${CMAKE_SOURCE_DIR}/proto") - - externalproject_add(substrait_ep - ${EP_COMMON_OPTIONS} - CONFIGURE_COMMAND "" - BUILD_COMMAND "" - INSTALL_COMMAND "" - URL ${SUBSTRAIT_SOURCE_URL} - URL_HASH "SHA256=${ARROW_SUBSTRAIT_BUILD_SHA256_CHECKSUM}") - - externalproject_get_property(substrait_ep SOURCE_DIR) - set(SUBSTRAIT_LOCAL_DIR ${SOURCE_DIR}) - - set(SUBSTRAIT_CPP_DIR "${CMAKE_CURRENT_BINARY_DIR}/substrait_ep-generated") - file(MAKE_DIRECTORY ${SUBSTRAIT_CPP_DIR}) - - set(SUBSTRAIT_SUPPRESSED_FLAGS) - if(MSVC) - # Protobuf generated files trigger some spurious warnings on MSVC. - - # Implicit conversion from uint64_t to uint32_t: - list(APPEND SUBSTRAIT_SUPPRESSED_FLAGS "/wd4244") - - # Missing dll-interface: - list(APPEND SUBSTRAIT_SUPPRESSED_FLAGS "/wd4251") - else() - # GH-44954: silence [[deprecated]] declarations in protobuf-generated code - list(APPEND SUBSTRAIT_SUPPRESSED_FLAGS "-Wno-deprecated") - if(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" OR CMAKE_CXX_COMPILER_ID STREQUAL - "Clang") - # Protobuf generated files trigger some errors on CLANG TSAN builds - list(APPEND SUBSTRAIT_SUPPRESSED_FLAGS "-Wno-error=shorten-64-to-32") - endif() - endif() - - set(SUBSTRAIT_SOURCES) - set(SUBSTRAIT_PROTO_GEN_ALL) - foreach(SUBSTRAIT_PROTO ${SUBSTRAIT_PROTOS}) - set(SUBSTRAIT_PROTO_GEN "${SUBSTRAIT_CPP_DIR}/substrait/${SUBSTRAIT_PROTO}.pb") - - foreach(EXT h cc) - set_source_files_properties("${SUBSTRAIT_PROTO_GEN}.${EXT}" - PROPERTIES COMPILE_OPTIONS - "${SUBSTRAIT_SUPPRESSED_FLAGS}" - GENERATED TRUE - SKIP_UNITY_BUILD_INCLUSION TRUE) - list(APPEND SUBSTRAIT_PROTO_GEN_ALL "${SUBSTRAIT_PROTO_GEN}.${EXT}") - endforeach() - add_custom_command(OUTPUT "${SUBSTRAIT_PROTO_GEN}.cc" "${SUBSTRAIT_PROTO_GEN}.h" - COMMAND ${ARROW_PROTOBUF_PROTOC} "-I${SUBSTRAIT_LOCAL_DIR}/proto" - "--cpp_out=${SUBSTRAIT_CPP_DIR}" - "${SUBSTRAIT_LOCAL_DIR}/proto/substrait/${SUBSTRAIT_PROTO}.proto" - DEPENDS ${PROTO_DEPENDS} substrait_ep) - - list(APPEND SUBSTRAIT_SOURCES "${SUBSTRAIT_PROTO_GEN}.cc") - endforeach() - foreach(ARROW_SUBSTRAIT_PROTO ${ARROW_SUBSTRAIT_PROTOS}) - set(ARROW_SUBSTRAIT_PROTO_GEN - "${SUBSTRAIT_CPP_DIR}/substrait/${ARROW_SUBSTRAIT_PROTO}.pb") - foreach(EXT h cc) - set_source_files_properties("${ARROW_SUBSTRAIT_PROTO_GEN}.${EXT}" - PROPERTIES COMPILE_OPTIONS - "${SUBSTRAIT_SUPPRESSED_FLAGS}" - GENERATED TRUE - SKIP_UNITY_BUILD_INCLUSION TRUE) - list(APPEND SUBSTRAIT_PROTO_GEN_ALL "${ARROW_SUBSTRAIT_PROTO_GEN}.${EXT}") - endforeach() - add_custom_command(OUTPUT "${ARROW_SUBSTRAIT_PROTO_GEN}.cc" - "${ARROW_SUBSTRAIT_PROTO_GEN}.h" - COMMAND ${ARROW_PROTOBUF_PROTOC} "-I${SUBSTRAIT_LOCAL_DIR}/proto" - "-I${ARROW_SUBSTRAIT_PROTOS_DIR}" - "--cpp_out=${SUBSTRAIT_CPP_DIR}" - "${ARROW_SUBSTRAIT_PROTOS_DIR}/substrait/${ARROW_SUBSTRAIT_PROTO}.proto" - DEPENDS ${PROTO_DEPENDS} substrait_ep) - - list(APPEND SUBSTRAIT_SOURCES "${ARROW_SUBSTRAIT_PROTO_GEN}.cc") - endforeach() - - add_custom_target(substrait_gen ALL DEPENDS ${SUBSTRAIT_PROTO_GEN_ALL}) - - set(SUBSTRAIT_INCLUDES ${SUBSTRAIT_CPP_DIR} ${PROTOBUF_INCLUDE_DIR}) - - add_library(substrait STATIC ${SUBSTRAIT_SOURCES}) - set_target_properties(substrait PROPERTIES POSITION_INDEPENDENT_CODE ON) - target_compile_options(substrait PRIVATE "${SUBSTRAIT_SUPPRESSED_FLAGS}") - target_include_directories(substrait PUBLIC ${SUBSTRAIT_INCLUDES}) - target_link_libraries(substrait PUBLIC ${ARROW_PROTOBUF_LIBPROTOBUF}) - add_dependencies(substrait substrait_gen) - - list(APPEND ARROW_BUNDLED_STATIC_LIBS substrait) -endmacro() - -if(ARROW_SUBSTRAIT) - # Currently, we can only build Substrait from source. - set(Substrait_SOURCE "BUNDLED") - resolve_dependency(Substrait) -endif() - -# ---------------------------------------------------------------------- -# jemalloc - Unix-only high-performance allocator - -macro(build_jemalloc) - # Our build of jemalloc is specially prefixed so that it will not - # conflict with the default allocator as well as other jemalloc - # installations. - - message(STATUS "Building jemalloc from source") - - set(ARROW_JEMALLOC_USE_SHARED OFF) - set(JEMALLOC_PREFIX - "${CMAKE_CURRENT_BINARY_DIR}/jemalloc_ep-prefix/src/jemalloc_ep/dist/") - set(JEMALLOC_LIB_DIR "${JEMALLOC_PREFIX}/lib") - set(JEMALLOC_STATIC_LIB - "${JEMALLOC_LIB_DIR}/libjemalloc_pic${CMAKE_STATIC_LIBRARY_SUFFIX}") - set(JEMALLOC_CONFIGURE_COMMAND ./configure "AR=${CMAKE_AR}" "CC=${CMAKE_C_COMPILER}") - if(CMAKE_OSX_SYSROOT) - list(APPEND JEMALLOC_CONFIGURE_COMMAND "SDKROOT=${CMAKE_OSX_SYSROOT}") - endif() - if(DEFINED ARROW_JEMALLOC_LG_PAGE) - # Used for arm64 manylinux wheels in order to make the wheel work on both - # 4k and 64k page arm64 systems. - list(APPEND JEMALLOC_CONFIGURE_COMMAND "--with-lg-page=${ARROW_JEMALLOC_LG_PAGE}") - endif() - list(APPEND - JEMALLOC_CONFIGURE_COMMAND - "--prefix=${JEMALLOC_PREFIX}" - "--libdir=${JEMALLOC_LIB_DIR}" - "--with-jemalloc-prefix=je_arrow_" - "--with-private-namespace=je_arrow_private_" - "--without-export" - "--disable-shared" - # Don't override operator new() - "--disable-cxx" - "--disable-libdl" - # See https://github.com/jemalloc/jemalloc/issues/1237 - "--disable-initial-exec-tls" - ${EP_LOG_OPTIONS}) - if(${UPPERCASE_BUILD_TYPE} STREQUAL "DEBUG") - # Enable jemalloc debug checks when Arrow itself has debugging enabled - list(APPEND JEMALLOC_CONFIGURE_COMMAND "--enable-debug") - endif() - - set(JEMALLOC_BUILD_COMMAND ${MAKE} ${MAKE_BUILD_ARGS}) - - if(CMAKE_OSX_SYSROOT) - list(APPEND JEMALLOC_BUILD_COMMAND "SDKROOT=${CMAKE_OSX_SYSROOT}") - endif() - - externalproject_add(jemalloc_ep - ${EP_COMMON_OPTIONS} - URL ${JEMALLOC_SOURCE_URL} - URL_HASH "SHA256=${ARROW_JEMALLOC_BUILD_SHA256_CHECKSUM}" - PATCH_COMMAND touch doc/jemalloc.3 doc/jemalloc.html - # The prefix "je_arrow_" must be kept in sync with the value in memory_pool.cc - CONFIGURE_COMMAND ${JEMALLOC_CONFIGURE_COMMAND} - BUILD_IN_SOURCE 1 - BUILD_COMMAND ${JEMALLOC_BUILD_COMMAND} - BUILD_BYPRODUCTS "${JEMALLOC_STATIC_LIB}" - INSTALL_COMMAND ${MAKE} -j1 install) - - # Don't use the include directory directly so that we can point to a path - # that is unique to our codebase. - set(JEMALLOC_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}/jemalloc_ep-prefix/src/") - # The include directory must exist before it is referenced by a target. - file(MAKE_DIRECTORY "${JEMALLOC_INCLUDE_DIR}") - add_library(jemalloc::jemalloc STATIC IMPORTED) - set_target_properties(jemalloc::jemalloc PROPERTIES IMPORTED_LOCATION - "${JEMALLOC_STATIC_LIB}") - target_link_libraries(jemalloc::jemalloc INTERFACE Threads::Threads) - target_include_directories(jemalloc::jemalloc BEFORE - INTERFACE "${JEMALLOC_INCLUDE_DIR}") - add_dependencies(jemalloc::jemalloc jemalloc_ep) - - list(APPEND ARROW_BUNDLED_STATIC_LIBS jemalloc::jemalloc) - - set(jemalloc_VENDORED TRUE) - # For config.h.cmake - set(ARROW_JEMALLOC_VENDORED ${jemalloc_VENDORED}) -endmacro() - -if(ARROW_JEMALLOC) - if(NOT ARROW_ENABLE_THREADING) - message(FATAL_ERROR "Can't use jemalloc with ARROW_ENABLE_THREADING=OFF") - endif() - resolve_dependency(jemalloc HAVE_ALT TRUE) -endif() - -# ---------------------------------------------------------------------- -# mimalloc - Cross-platform high-performance allocator, from Microsoft - -if(ARROW_MIMALLOC) - if(NOT ARROW_ENABLE_THREADING) - message(FATAL_ERROR "Can't use mimalloc with ARROW_ENABLE_THREADING=OFF") - endif() - - message(STATUS "Building (vendored) mimalloc from source") - # We only use a vendored mimalloc as we want to control its build options. - - set(MIMALLOC_LIB_BASE_NAME "mimalloc") - if(${UPPERCASE_BUILD_TYPE} STREQUAL "DEBUG") - set(MIMALLOC_LIB_BASE_NAME "${MIMALLOC_LIB_BASE_NAME}-${LOWERCASE_BUILD_TYPE}") - endif() - - set(MIMALLOC_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/mimalloc_ep/src/mimalloc_ep") - set(MIMALLOC_INCLUDE_DIR "${MIMALLOC_PREFIX}/include/mimalloc-2.2") - set(MIMALLOC_STATIC_LIB - "${MIMALLOC_PREFIX}/lib/mimalloc-2.2/${CMAKE_STATIC_LIBRARY_PREFIX}${MIMALLOC_LIB_BASE_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}" - ) - - set(MIMALLOC_C_FLAGS ${EP_C_FLAGS}) - if(MINGW) - # Workaround https://github.com/microsoft/mimalloc/issues/910 on RTools40 - set(MIMALLOC_C_FLAGS "${MIMALLOC_C_FLAGS} -DERROR_COMMITMENT_MINIMUM=635") - endif() - - set(MIMALLOC_CMAKE_ARGS - ${EP_COMMON_CMAKE_ARGS} - "-DCMAKE_C_FLAGS=${MIMALLOC_C_FLAGS}" - "-DCMAKE_INSTALL_PREFIX=${MIMALLOC_PREFIX}" - -DMI_OVERRIDE=OFF - -DMI_LOCAL_DYNAMIC_TLS=ON - -DMI_BUILD_OBJECT=OFF - -DMI_BUILD_SHARED=OFF - -DMI_BUILD_TESTS=OFF) - - externalproject_add(mimalloc_ep - ${EP_COMMON_OPTIONS} - URL ${MIMALLOC_SOURCE_URL} - URL_HASH "SHA256=${ARROW_MIMALLOC_BUILD_SHA256_CHECKSUM}" - CMAKE_ARGS ${MIMALLOC_CMAKE_ARGS} - BUILD_BYPRODUCTS "${MIMALLOC_STATIC_LIB}") - - file(MAKE_DIRECTORY ${MIMALLOC_INCLUDE_DIR}) - - add_library(mimalloc::mimalloc STATIC IMPORTED) - set_target_properties(mimalloc::mimalloc PROPERTIES IMPORTED_LOCATION - "${MIMALLOC_STATIC_LIB}") - target_include_directories(mimalloc::mimalloc BEFORE - INTERFACE "${MIMALLOC_INCLUDE_DIR}") - target_link_libraries(mimalloc::mimalloc INTERFACE Threads::Threads) - if(WIN32) - target_link_libraries(mimalloc::mimalloc INTERFACE "bcrypt.lib" "psapi.lib") - endif() - add_dependencies(mimalloc::mimalloc mimalloc_ep) - - list(APPEND ARROW_BUNDLED_STATIC_LIBS mimalloc::mimalloc) - - set(mimalloc_VENDORED TRUE) -endif() - -# ---------------------------------------------------------------------- -# Google gtest - -function(build_gtest) - message(STATUS "Building gtest from source") - set(GTEST_VENDORED TRUE) - fetchcontent_declare(googletest - # We should not specify "EXCLUDE_FROM_ALL TRUE" here. - # Because we install GTest with custom path. - # ${FC_DECLARE_COMMON_OPTIONS} - URL ${GTEST_SOURCE_URL} - URL_HASH "SHA256=${ARROW_GTEST_BUILD_SHA256_CHECKSUM}") - prepare_fetchcontent() - # We can remove this once we remove set(CMAKE_POLICY_VERSION_MINIMUM - # 3.5) from prepare_fetchcontent(). - unset(CMAKE_POLICY_VERSION_MINIMUM) - if(APPLE) - string(APPEND CMAKE_CXX_FLAGS " -Wno-unused-value" " -Wno-ignored-attributes") - endif() - # If we're building static libs for Emscripten, we need to build *everything* as - # static libs. - if(CMAKE_SYSTEM_NAME STREQUAL "Emscripten") - set(BUILD_SHARED_LIBS OFF) - set(BUILD_STATIC_LIBS ON) - else() - set(BUILD_SHARED_LIBS ON) - set(BUILD_STATIC_LIBS OFF) - endif() - # We need to use "cache" variable to override the default - # INSTALL_GTEST option by this value. See also: - # https://cmake.org/cmake/help/latest/policy/CMP0077.html - set(INSTALL_GTEST - OFF - CACHE "BOOL" - "Enable installation of googletest. (Projects embedding googletest may want to turn this OFF.)" - FORCE) - string(APPEND CMAKE_INSTALL_INCLUDEDIR "/arrow-gtest") - fetchcontent_makeavailable(googletest) - foreach(target gmock gmock_main gtest gtest_main) - set_target_properties(${target} - PROPERTIES OUTPUT_NAME "arrow_${target}" - PDB_NAME "arrow_${target}" - PDB_NAME_DEBUG "arrow_${target}d" - COMPILE_PDB_NAME "arrow_${target}" - COMPILE_PDB_NAME_DEBUG "arrow_${target}d" - RUNTIME_OUTPUT_DIRECTORY - "${BUILD_OUTPUT_ROOT_DIRECTORY}" - LIBRARY_OUTPUT_DIRECTORY - "${BUILD_OUTPUT_ROOT_DIRECTORY}" - ARCHIVE_OUTPUT_DIRECTORY - "${BUILD_OUTPUT_ROOT_DIRECTORY}" - PDB_OUTPUT_DIRECTORY - "${BUILD_OUTPUT_ROOT_DIRECTORY}") - endforeach() - install(DIRECTORY "${googletest_SOURCE_DIR}/googlemock/include/" - "${googletest_SOURCE_DIR}/googletest/include/" - DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") - add_library(arrow::GTest::gtest_headers INTERFACE IMPORTED) - target_include_directories(arrow::GTest::gtest_headers - INTERFACE "${googletest_SOURCE_DIR}/googlemock/include/" - "${googletest_SOURCE_DIR}/googletest/include/") - install(TARGETS gmock gmock_main gtest gtest_main - EXPORT arrow_testing_targets - RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" - ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" - LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}") - if(MSVC) - install(FILES $ $ - $ $ - DESTINATION "${CMAKE_INSTALL_BINDIR}" - OPTIONAL) - endif() - add_library(arrow::GTest::gmock ALIAS gmock) - add_library(arrow::GTest::gmock_main ALIAS gmock_main) - add_library(arrow::GTest::gtest ALIAS gtest) - add_library(arrow::GTest::gtest_main ALIAS gtest_main) -endfunction() - -if(ARROW_TESTING) - set(GTestAlt_NEED_CXX_STANDARD_CHECK TRUE) - resolve_dependency(GTest - ARROW_CMAKE_PACKAGE_NAME - ArrowTesting - HAVE_ALT - TRUE - REQUIRED_VERSION - 1.10.0) - - if(GTest_SOURCE STREQUAL "SYSTEM") - find_package(PkgConfig QUIET) - pkg_check_modules(gtest_PC - gtest - NO_CMAKE_PATH - NO_CMAKE_ENVIRONMENT_PATH - QUIET) - if(gtest_PC_FOUND) - string(APPEND ARROW_TESTING_PC_REQUIRES " gtest") - else() - string(APPEND ARROW_TESTING_PC_CFLAGS " -I$") - string(APPEND ARROW_TESTING_PC_CFLAGS ",-I>") - - string(APPEND ARROW_TESTING_PC_LIBS " $") - endif() - set(ARROW_GTEST_GTEST_HEADERS) - set(ARROW_GTEST_GMOCK GTest::gmock) - set(ARROW_GTEST_GTEST GTest::gtest) - set(ARROW_GTEST_GTEST_MAIN GTest::gtest_main) - set(ARROW_GTEST_GMOCK_MAIN GTest::gmock_main) - else() - string(APPEND ARROW_TESTING_PC_CFLAGS " -I\${includedir}/arrow-gtest") - string(APPEND ARROW_TESTING_PC_LIBS " -larrow_gtest") - set(ARROW_GTEST_GTEST_HEADERS arrow::GTest::gtest_headers) - set(ARROW_GTEST_GMOCK arrow::GTest::gmock) - set(ARROW_GTEST_GTEST arrow::GTest::gtest) - set(ARROW_GTEST_GTEST_MAIN arrow::GTest::gtest_main) - set(ARROW_GTEST_GMOCK_MAIN arrow::GTest::gmock_main) - endif() -endif() - -macro(build_benchmark) - message(STATUS "Building benchmark from source") - - set(GBENCHMARK_CMAKE_CXX_FLAGS "${EP_CXX_FLAGS}") - if(APPLE AND (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" OR CMAKE_CXX_COMPILER_ID - STREQUAL "Clang")) - string(APPEND GBENCHMARK_CMAKE_CXX_FLAGS " -stdlib=libc++") - endif() - - set(GBENCHMARK_PREFIX - "${CMAKE_CURRENT_BINARY_DIR}/gbenchmark_ep/src/gbenchmark_ep-install") - set(GBENCHMARK_INCLUDE_DIR "${GBENCHMARK_PREFIX}/include") - set(GBENCHMARK_STATIC_LIB - "${GBENCHMARK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}benchmark${CMAKE_STATIC_LIBRARY_SUFFIX}" - ) - set(GBENCHMARK_MAIN_STATIC_LIB - "${GBENCHMARK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}benchmark_main${CMAKE_STATIC_LIBRARY_SUFFIX}" - ) - set(GBENCHMARK_CMAKE_ARGS - ${EP_COMMON_CMAKE_ARGS} "-DCMAKE_INSTALL_PREFIX=${GBENCHMARK_PREFIX}" - -DBENCHMARK_ENABLE_TESTING=OFF -DCMAKE_CXX_FLAGS=${GBENCHMARK_CMAKE_CXX_FLAGS}) - if(APPLE) - set(GBENCHMARK_CMAKE_ARGS ${GBENCHMARK_CMAKE_ARGS} "-DBENCHMARK_USE_LIBCXX=ON") - endif() - - externalproject_add(gbenchmark_ep - ${EP_COMMON_OPTIONS} - URL ${GBENCHMARK_SOURCE_URL} - URL_HASH "SHA256=${ARROW_GBENCHMARK_BUILD_SHA256_CHECKSUM}" - BUILD_BYPRODUCTS "${GBENCHMARK_STATIC_LIB}" - "${GBENCHMARK_MAIN_STATIC_LIB}" - CMAKE_ARGS ${GBENCHMARK_CMAKE_ARGS}) - - # The include directory must exist before it is referenced by a target. - file(MAKE_DIRECTORY "${GBENCHMARK_INCLUDE_DIR}") - - add_library(benchmark::benchmark STATIC IMPORTED) - set_target_properties(benchmark::benchmark PROPERTIES IMPORTED_LOCATION - "${GBENCHMARK_STATIC_LIB}") - target_include_directories(benchmark::benchmark BEFORE - INTERFACE "${GBENCHMARK_INCLUDE_DIR}") - target_compile_definitions(benchmark::benchmark INTERFACE "BENCHMARK_STATIC_DEFINE") - - add_library(benchmark::benchmark_main STATIC IMPORTED) - set_target_properties(benchmark::benchmark_main - PROPERTIES IMPORTED_LOCATION "${GBENCHMARK_MAIN_STATIC_LIB}") - target_include_directories(benchmark::benchmark_main BEFORE - INTERFACE "${GBENCHMARK_INCLUDE_DIR}") - target_link_libraries(benchmark::benchmark_main INTERFACE benchmark::benchmark) - - add_dependencies(benchmark::benchmark gbenchmark_ep) - add_dependencies(benchmark::benchmark_main gbenchmark_ep) -endmacro() - -if(ARROW_BUILD_BENCHMARKS) - set(BENCHMARK_REQUIRED_VERSION 1.6.1) - resolve_dependency(benchmark - REQUIRED_VERSION - ${BENCHMARK_REQUIRED_VERSION} - IS_RUNTIME_DEPENDENCY - FALSE) -endif() - -macro(build_rapidjson) - message(STATUS "Building RapidJSON from source") - set(RAPIDJSON_PREFIX - "${CMAKE_CURRENT_BINARY_DIR}/rapidjson_ep/src/rapidjson_ep-install") - set(RAPIDJSON_CMAKE_ARGS - ${EP_COMMON_CMAKE_ARGS} - -DRAPIDJSON_BUILD_DOC=OFF - -DRAPIDJSON_BUILD_EXAMPLES=OFF - -DRAPIDJSON_BUILD_TESTS=OFF - "-DCMAKE_INSTALL_PREFIX=${RAPIDJSON_PREFIX}") - - externalproject_add(rapidjson_ep - ${EP_COMMON_OPTIONS} - PREFIX "${CMAKE_BINARY_DIR}" - URL ${RAPIDJSON_SOURCE_URL} - URL_HASH "SHA256=${ARROW_RAPIDJSON_BUILD_SHA256_CHECKSUM}" - CMAKE_ARGS ${RAPIDJSON_CMAKE_ARGS}) - - set(RAPIDJSON_INCLUDE_DIR "${RAPIDJSON_PREFIX}/include") - # The include directory must exist before it is referenced by a target. - file(MAKE_DIRECTORY "${RAPIDJSON_INCLUDE_DIR}") - - add_library(RapidJSON INTERFACE IMPORTED) - target_include_directories(RapidJSON INTERFACE "${RAPIDJSON_INCLUDE_DIR}") - add_dependencies(RapidJSON rapidjson_ep) - - set(RAPIDJSON_VENDORED TRUE) -endmacro() - -if(ARROW_WITH_RAPIDJSON) - set(ARROW_RAPIDJSON_REQUIRED_VERSION "1.1.0") - resolve_dependency(RapidJSON - HAVE_ALT - TRUE - REQUIRED_VERSION - ${ARROW_RAPIDJSON_REQUIRED_VERSION} - IS_RUNTIME_DEPENDENCY - FALSE) -endif() - -macro(build_xsimd) - message(STATUS "Building xsimd from source") - set(XSIMD_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/xsimd_ep/src/xsimd_ep-install") - set(XSIMD_CMAKE_ARGS ${EP_COMMON_CMAKE_ARGS} "-DCMAKE_INSTALL_PREFIX=${XSIMD_PREFIX}") - - externalproject_add(xsimd_ep - ${EP_COMMON_OPTIONS} - PREFIX "${CMAKE_BINARY_DIR}" - URL ${XSIMD_SOURCE_URL} - URL_HASH "SHA256=${ARROW_XSIMD_BUILD_SHA256_CHECKSUM}" - CMAKE_ARGS ${XSIMD_CMAKE_ARGS}) - - set(XSIMD_INCLUDE_DIR "${XSIMD_PREFIX}/include") - # The include directory must exist before it is referenced by a target. - file(MAKE_DIRECTORY "${XSIMD_INCLUDE_DIR}") - - add_library(arrow::xsimd INTERFACE IMPORTED) - target_include_directories(arrow::xsimd INTERFACE "${XSIMD_INCLUDE_DIR}") - add_dependencies(arrow::xsimd xsimd_ep) - - set(XSIMD_VENDORED TRUE) -endmacro() - -if((NOT ARROW_SIMD_LEVEL STREQUAL "NONE") OR (NOT ARROW_RUNTIME_SIMD_LEVEL STREQUAL "NONE" - )) - set(ARROW_USE_XSIMD TRUE) -else() - set(ARROW_USE_XSIMD FALSE) -endif() - -if(ARROW_USE_XSIMD) - resolve_dependency(xsimd - FORCE_ANY_NEWER_VERSION - TRUE - IS_RUNTIME_DEPENDENCY - FALSE - REQUIRED_VERSION - "13.0.0") - - if(xsimd_SOURCE STREQUAL "BUNDLED") - set(ARROW_XSIMD arrow::xsimd) - else() - message(STATUS "xsimd found. Headers: ${xsimd_INCLUDE_DIRS}") - set(ARROW_XSIMD xsimd) - endif() -endif() - -macro(build_zlib) - message(STATUS "Building ZLIB from source") - - # ensure zlib is built with -fpic - # and make sure that the build finds the version in Emscripten ports - # - n.b. the actual linking happens because -sUSE_ZLIB=1 is - # set in the compiler variables, but cmake expects - # it to exist at configuration time if we aren't building it as - # bundled. We need to do this for all packages - # not just zlib as some depend on zlib, but we don't rebuild - # if it exists already - if(CMAKE_SYSTEM_NAME STREQUAL "Emscripten") - # build zlib using Emscripten ports - if(NOT EXISTS ${EMSCRIPTEN_SYSROOT}/lib/wasm32-emscripten/pic/libz.a) - execute_process(COMMAND embuilder --pic --force build zlib) - endif() - add_library(ZLIB::ZLIB STATIC IMPORTED) - set_property(TARGET ZLIB::ZLIB - PROPERTY IMPORTED_LOCATION - "${EMSCRIPTEN_SYSROOT}/lib/wasm32-emscripten/pic/libz.a") - target_include_directories(ZLIB::ZLIB INTERFACE "${EMSCRIPTEN_SYSROOT}/include") - list(APPEND ARROW_BUNDLED_STATIC_LIBS ZLIB::ZLIB) - else() - set(ZLIB_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/zlib_ep/src/zlib_ep-install") - if(MSVC) - if(${UPPERCASE_BUILD_TYPE} STREQUAL "DEBUG") - set(ZLIB_STATIC_LIB_NAME zlibstaticd.lib) - else() - set(ZLIB_STATIC_LIB_NAME zlibstatic.lib) - endif() - else() - set(ZLIB_STATIC_LIB_NAME libz.a) - endif() - set(ZLIB_STATIC_LIB "${ZLIB_PREFIX}/lib/${ZLIB_STATIC_LIB_NAME}") - set(ZLIB_CMAKE_ARGS ${EP_COMMON_CMAKE_ARGS} "-DCMAKE_INSTALL_PREFIX=${ZLIB_PREFIX}") - - externalproject_add(zlib_ep - ${EP_COMMON_OPTIONS} - URL ${ZLIB_SOURCE_URL} - URL_HASH "SHA256=${ARROW_ZLIB_BUILD_SHA256_CHECKSUM}" - BUILD_BYPRODUCTS "${ZLIB_STATIC_LIB}" - CMAKE_ARGS ${ZLIB_CMAKE_ARGS}) - - file(MAKE_DIRECTORY "${ZLIB_PREFIX}/include") - - add_library(ZLIB::ZLIB STATIC IMPORTED) - set(ZLIB_LIBRARIES ${ZLIB_STATIC_LIB}) - set(ZLIB_INCLUDE_DIRS "${ZLIB_PREFIX}/include") - set_target_properties(ZLIB::ZLIB PROPERTIES IMPORTED_LOCATION ${ZLIB_LIBRARIES}) - target_include_directories(ZLIB::ZLIB BEFORE INTERFACE "${ZLIB_INCLUDE_DIRS}") - - add_dependencies(ZLIB::ZLIB zlib_ep) - list(APPEND ARROW_BUNDLED_STATIC_LIBS ZLIB::ZLIB) - endif() - - set(ZLIB_VENDORED TRUE) -endmacro() - -if(ARROW_WITH_ZLIB) - resolve_dependency(ZLIB PC_PACKAGE_NAMES zlib) -endif() - -function(build_lz4) - message(STATUS "Building LZ4 from source using FetchContent") - - # Set LZ4 as vendored - set(LZ4_VENDORED - TRUE - PARENT_SCOPE) - - # Declare the content - fetchcontent_declare(lz4 - URL ${LZ4_SOURCE_URL} - URL_HASH "SHA256=${ARROW_LZ4_BUILD_SHA256_CHECKSUM}" - SOURCE_SUBDIR "build/cmake") - - # Prepare fetch content environment - prepare_fetchcontent() - - # Set LZ4-specific build options as cache variables - set(LZ4_BUILD_CLI - OFF - CACHE BOOL "Don't build LZ4 CLI" FORCE) - set(LZ4_BUILD_LEGACY_LZ4C - OFF - CACHE BOOL "Don't build legacy LZ4 tools" FORCE) - - # Make the dependency available - this will actually perform the download and configure - fetchcontent_makeavailable(lz4) - - # Use LZ4::lz4 as an imported library not an alias of lz4_static so other targets such as orc - # can depend on it as an external library. External libraries are ignored in - # install(TARGETS orc EXPORT orc_targets) and install(EXPORT orc_targets). - add_library(LZ4::lz4 INTERFACE IMPORTED) - target_link_libraries(LZ4::lz4 INTERFACE lz4_static) - - # Add to bundled static libs. - # We must use lz4_static (not imported target) not LZ4::lz4 (imported target). - set(ARROW_BUNDLED_STATIC_LIBS - ${ARROW_BUNDLED_STATIC_LIBS} lz4_static - PARENT_SCOPE) -endfunction() - -if(ARROW_WITH_LZ4) - resolve_dependency(lz4 - HAVE_ALT - TRUE - PC_PACKAGE_NAMES - liblz4) -endif() - -macro(build_zstd) - message(STATUS "Building Zstandard from source") - - set(ZSTD_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/zstd_ep-install") - - set(ZSTD_CMAKE_ARGS - ${EP_COMMON_CMAKE_ARGS} - "-DCMAKE_INSTALL_PREFIX=${ZSTD_PREFIX}" - -DZSTD_BUILD_PROGRAMS=OFF - -DZSTD_BUILD_SHARED=OFF - -DZSTD_BUILD_STATIC=ON - -DZSTD_MULTITHREAD_SUPPORT=OFF) - - if(MSVC) - set(ZSTD_STATIC_LIB "${ZSTD_PREFIX}/lib/zstd_static.lib") - if(ARROW_USE_STATIC_CRT) - list(APPEND ZSTD_CMAKE_ARGS "-DZSTD_USE_STATIC_RUNTIME=ON") - endif() - else() - set(ZSTD_STATIC_LIB "${ZSTD_PREFIX}/lib/libzstd.a") - endif() - - externalproject_add(zstd_ep - ${EP_COMMON_OPTIONS} - CMAKE_ARGS ${ZSTD_CMAKE_ARGS} - SOURCE_SUBDIR "build/cmake" - INSTALL_DIR ${ZSTD_PREFIX} - URL ${ZSTD_SOURCE_URL} - URL_HASH "SHA256=${ARROW_ZSTD_BUILD_SHA256_CHECKSUM}" - BUILD_BYPRODUCTS "${ZSTD_STATIC_LIB}") - - file(MAKE_DIRECTORY "${ZSTD_PREFIX}/include") - - add_library(zstd::libzstd_static STATIC IMPORTED) - set_target_properties(zstd::libzstd_static PROPERTIES IMPORTED_LOCATION - "${ZSTD_STATIC_LIB}") - target_include_directories(zstd::libzstd_static BEFORE - INTERFACE "${ZSTD_PREFIX}/include") - - add_dependencies(zstd::libzstd_static zstd_ep) - - list(APPEND ARROW_BUNDLED_STATIC_LIBS zstd::libzstd_static) - - set(ZSTD_VENDORED TRUE) -endmacro() - -if(ARROW_WITH_ZSTD) - # ARROW-13384: ZSTD_minCLevel was added in v1.4.0, required by ARROW-13091 - resolve_dependency(zstd - HAVE_ALT - TRUE - PC_PACKAGE_NAMES - libzstd - REQUIRED_VERSION - 1.4.0) - - if(ZSTD_VENDORED) - set(ARROW_ZSTD_LIBZSTD zstd::libzstd_static) - else() - if(ARROW_ZSTD_USE_SHARED) - set(ARROW_ZSTD_LIBZSTD zstd::libzstd_shared) - else() - set(ARROW_ZSTD_LIBZSTD zstd::libzstd_static) - endif() - # vcpkg uses zstd::libzstd - if(NOT TARGET ${ARROW_ZSTD_LIBZSTD} AND TARGET zstd::libzstd) - set(ARROW_ZSTD_LIBZSTD zstd::libzstd) - endif() - if(NOT TARGET ${ARROW_ZSTD_LIBZSTD}) - message(FATAL_ERROR "Zstandard target doesn't exist: ${ARROW_ZSTD_LIBZSTD}") - endif() - message(STATUS "Found Zstandard: ${ARROW_ZSTD_LIBZSTD}") - endif() -endif() - -# ---------------------------------------------------------------------- -# RE2 (required for Gandiva) - -macro(build_re2) - message(STATUS "Building RE2 from source") - set(RE2_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/re2_ep-install") - set(RE2_STATIC_LIB - "${RE2_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}re2${CMAKE_STATIC_LIBRARY_SUFFIX}") - - set(RE2_CMAKE_ARGS ${EP_COMMON_CMAKE_ARGS} "-DCMAKE_INSTALL_PREFIX=${RE2_PREFIX}") - - externalproject_add(re2_ep - ${EP_COMMON_OPTIONS} - INSTALL_DIR ${RE2_PREFIX} - URL ${RE2_SOURCE_URL} - URL_HASH "SHA256=${ARROW_RE2_BUILD_SHA256_CHECKSUM}" - CMAKE_ARGS ${RE2_CMAKE_ARGS} - BUILD_BYPRODUCTS "${RE2_STATIC_LIB}") - - file(MAKE_DIRECTORY "${RE2_PREFIX}/include") - add_library(re2::re2 STATIC IMPORTED) - set_target_properties(re2::re2 PROPERTIES IMPORTED_LOCATION "${RE2_STATIC_LIB}") - target_include_directories(re2::re2 BEFORE INTERFACE "${RE2_PREFIX}/include") - - add_dependencies(re2::re2 re2_ep) - set(RE2_VENDORED TRUE) - # Set values so that FindRE2 finds this too - set(RE2_LIB ${RE2_STATIC_LIB}) - set(RE2_INCLUDE_DIR "${RE2_PREFIX}/include") - - list(APPEND ARROW_BUNDLED_STATIC_LIBS re2::re2) -endmacro() - -if(ARROW_WITH_RE2) - resolve_dependency(re2 - HAVE_ALT - TRUE - PC_PACKAGE_NAMES - re2) -endif() - -macro(build_bzip2) - message(STATUS "Building BZip2 from source") - set(BZIP2_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/bzip2_ep-install") - set(BZIP2_STATIC_LIB - "${BZIP2_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}bz2${CMAKE_STATIC_LIBRARY_SUFFIX}" - ) - - set(BZIP2_EXTRA_ARGS "CC=${CMAKE_C_COMPILER}" "CFLAGS=${EP_C_FLAGS}") - - if(CMAKE_OSX_SYSROOT) - list(APPEND BZIP2_EXTRA_ARGS "SDKROOT=${CMAKE_OSX_SYSROOT}") - endif() - - if(CMAKE_AR) - list(APPEND BZIP2_EXTRA_ARGS AR=${CMAKE_AR}) - endif() - - if(CMAKE_RANLIB) - list(APPEND BZIP2_EXTRA_ARGS RANLIB=${CMAKE_RANLIB}) - endif() - - externalproject_add(bzip2_ep - ${EP_COMMON_OPTIONS} - CONFIGURE_COMMAND "" - BUILD_IN_SOURCE 1 - BUILD_COMMAND ${MAKE} libbz2.a ${MAKE_BUILD_ARGS} - ${BZIP2_EXTRA_ARGS} - INSTALL_COMMAND ${MAKE} install -j1 PREFIX=${BZIP2_PREFIX} - ${BZIP2_EXTRA_ARGS} - INSTALL_DIR ${BZIP2_PREFIX} - URL ${ARROW_BZIP2_SOURCE_URL} - URL_HASH "SHA256=${ARROW_BZIP2_BUILD_SHA256_CHECKSUM}" - BUILD_BYPRODUCTS "${BZIP2_STATIC_LIB}") - - file(MAKE_DIRECTORY "${BZIP2_PREFIX}/include") - add_library(BZip2::BZip2 STATIC IMPORTED) - set_target_properties(BZip2::BZip2 PROPERTIES IMPORTED_LOCATION "${BZIP2_STATIC_LIB}") - target_include_directories(BZip2::BZip2 BEFORE INTERFACE "${BZIP2_PREFIX}/include") - set(BZIP2_INCLUDE_DIR "${BZIP2_PREFIX}/include") - - add_dependencies(BZip2::BZip2 bzip2_ep) - - list(APPEND ARROW_BUNDLED_STATIC_LIBS BZip2::BZip2) -endmacro() - -if(ARROW_WITH_BZ2) - resolve_dependency(BZip2 PC_PACKAGE_NAMES bzip2) - - if(${BZip2_SOURCE} STREQUAL "SYSTEM" - AND NOT bzip2_PC_FOUND - AND ARROW_BUILD_STATIC) - get_target_property(BZIP2_TYPE BZip2::BZip2 TYPE) - if(BZIP2_TYPE STREQUAL "INTERFACE_LIBRARY") - # Conan - string(APPEND ARROW_PC_LIBS_PRIVATE - " $>>") - else() - string(APPEND ARROW_PC_LIBS_PRIVATE " $") - endif() - endif() -endif() - -macro(build_utf8proc) - message(STATUS "Building utf8proc from source") - set(UTF8PROC_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/utf8proc_ep-install") - if(MSVC) - set(UTF8PROC_STATIC_LIB "${UTF8PROC_PREFIX}/lib/utf8proc_static.lib") - else() - set(UTF8PROC_STATIC_LIB - "${UTF8PROC_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}utf8proc${CMAKE_STATIC_LIBRARY_SUFFIX}" - ) - endif() - - set(UTF8PROC_CMAKE_ARGS ${EP_COMMON_CMAKE_ARGS} - "-DCMAKE_INSTALL_PREFIX=${UTF8PROC_PREFIX}") - - # We can remove this once we remove -DCMAKE_POLICY_VERSION_MINIMUM=3.5 - # from EP_COMMON_CMAKE_ARGS. - list(REMOVE_ITEM UTF8PROC_CMAKE_ARGS -DCMAKE_POLICY_VERSION_MINIMUM=3.5) - - externalproject_add(utf8proc_ep - ${EP_COMMON_OPTIONS} - CMAKE_ARGS ${UTF8PROC_CMAKE_ARGS} - INSTALL_DIR ${UTF8PROC_PREFIX} - URL ${ARROW_UTF8PROC_SOURCE_URL} - URL_HASH "SHA256=${ARROW_UTF8PROC_BUILD_SHA256_CHECKSUM}" - BUILD_BYPRODUCTS "${UTF8PROC_STATIC_LIB}") - - file(MAKE_DIRECTORY "${UTF8PROC_PREFIX}/include") - add_library(utf8proc::utf8proc STATIC IMPORTED) - set_target_properties(utf8proc::utf8proc - PROPERTIES IMPORTED_LOCATION "${UTF8PROC_STATIC_LIB}" - INTERFACE_COMPILE_DEFINITIONS "UTF8PROC_STATIC") - target_include_directories(utf8proc::utf8proc BEFORE - INTERFACE "${UTF8PROC_PREFIX}/include") - - add_dependencies(utf8proc::utf8proc utf8proc_ep) - - list(APPEND ARROW_BUNDLED_STATIC_LIBS utf8proc::utf8proc) -endmacro() - -if(ARROW_WITH_UTF8PROC) - set(utf8proc_resolve_dependency_args utf8proc PC_PACKAGE_NAMES libutf8proc) - if(NOT ARROW_VCPKG) - # utf8proc in vcpkg doesn't provide version information: - # https://github.com/microsoft/vcpkg/issues/39176 - list(APPEND utf8proc_resolve_dependency_args REQUIRED_VERSION "2.2.0") - endif() - resolve_dependency(${utf8proc_resolve_dependency_args}) -endif() - -macro(build_cares) - message(STATUS "Building c-ares from source") - set(CARES_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/cares_ep-install") - set(CARES_INCLUDE_DIR "${CARES_PREFIX}/include") - - # If you set -DCARES_SHARED=ON then the build system names the library - # libcares_static.a - set(CARES_STATIC_LIB - "${CARES_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}cares${CMAKE_STATIC_LIBRARY_SUFFIX}" - ) - - set(CARES_CMAKE_ARGS "${EP_COMMON_CMAKE_ARGS}" "-DCMAKE_INSTALL_PREFIX=${CARES_PREFIX}" - -DCARES_SHARED=OFF -DCARES_STATIC=ON) - - externalproject_add(cares_ep - ${EP_COMMON_OPTIONS} - URL ${CARES_SOURCE_URL} - URL_HASH "SHA256=${ARROW_CARES_BUILD_SHA256_CHECKSUM}" - CMAKE_ARGS ${CARES_CMAKE_ARGS} - BUILD_BYPRODUCTS "${CARES_STATIC_LIB}") - - file(MAKE_DIRECTORY ${CARES_INCLUDE_DIR}) - - add_library(c-ares::cares STATIC IMPORTED) - set_target_properties(c-ares::cares PROPERTIES IMPORTED_LOCATION "${CARES_STATIC_LIB}") - target_include_directories(c-ares::cares BEFORE INTERFACE "${CARES_INCLUDE_DIR}") - add_dependencies(c-ares::cares cares_ep) - - if(APPLE) - # libresolv must be linked from c-ares version 1.16.1 - find_library(LIBRESOLV_LIBRARY NAMES resolv libresolv REQUIRED) - set_target_properties(c-ares::cares PROPERTIES INTERFACE_LINK_LIBRARIES - "${LIBRESOLV_LIBRARY}") - endif() - - set(CARES_VENDORED TRUE) - - list(APPEND ARROW_BUNDLED_STATIC_LIBS c-ares::cares) -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}") - 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() + 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() # Extracted the dependency information using the Abseil pkg-config files: # grep Requires $PREFIX/lib/pkgconfig/absl_*.pc | \ @@ -3161,28 +2098,36 @@ macro(build_absl) # -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::absl_check PROPERTY INTERFACE_LINK_LIBRARIES + absl::log_internal_check_impl) + set_property(TARGET absl::absl_log PROPERTY INTERFACE_LINK_LIBRARIES + absl::log_internal_log_impl) + set_property(TARGET absl::absl_vlog_is_on + PROPERTY INTERFACE_LINK_LIBRARIES + absl::vlog_config_internal + absl::config + absl::core_headers + absl::strings) 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::algorithm + absl::config + absl::core_headers + absl::meta + absl::nullability) + set_property(TARGET absl::algorithm PROPERTY INTERFACE_LINK_LIBRARIES absl::config) + set_property(TARGET absl::any_invocable + PROPERTY INTERFACE_LINK_LIBRARIES absl::config absl::core_headers - absl::fast_type_id absl::type_traits absl::utility) + set_property(TARGET absl::any PROPERTY INTERFACE_LINK_LIBRARIES absl::config + absl::core_headers 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_internal PROPERTY INTERFACE_LINK_LIBRARIES absl::config + absl::type_traits) set_property(TARGET absl::base PROPERTY INTERFACE_LINK_LIBRARIES absl::atomic_hook @@ -3191,39 +2136,54 @@ macro(build_absl) absl::core_headers absl::dynamic_annotations absl::log_severity + absl::nullability 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::bind_front PROPERTY INTERFACE_LINK_LIBRARIES + absl::compressed_tuple) + set_property(TARGET absl::bits PROPERTY INTERFACE_LINK_LIBRARIES absl::config + absl::core_headers absl::endian) + set_property(TARGET absl::bounded_utf8_length_sequence PROPERTY INTERFACE_LINK_LIBRARIES + absl::bits absl::config) set_property(TARGET absl::btree PROPERTY INTERFACE_LINK_LIBRARIES - absl::container_common + absl::common_policy_traits absl::compare absl::compressed_tuple + absl::config + absl::container_common absl::container_memory absl::cord absl::core_headers absl::layout absl::memory + absl::raw_logging_internal absl::strings absl::throw_delegate absl::type_traits - absl::utility) + absl::weakly_mixed_integer) + set_property(TARGET absl::charset PROPERTY INTERFACE_LINK_LIBRARIES absl::config + absl::string_view) + set_property(TARGET absl::check + PROPERTY INTERFACE_LINK_LIBRARIES + absl::log_internal_check_impl + absl::core_headers + absl::log_internal_check_op + absl::log_internal_conditions + absl::log_internal_message + absl::log_internal_strip) set_property(TARGET absl::city PROPERTY INTERFACE_LINK_LIBRARIES absl::config absl::core_headers absl::endian) + set_property(TARGET absl::cleanup_internal PROPERTY INTERFACE_LINK_LIBRARIES + absl::core_headers absl::utility) 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::common_policy_traits PROPERTY INTERFACE_LINK_LIBRARIES + absl::meta) + set_property(TARGET absl::compare PROPERTY INTERFACE_LINK_LIBRARIES absl::config + 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 @@ -3234,6 +2194,21 @@ macro(build_absl) absl::memory absl::type_traits absl::utility) + set_property(TARGET absl::cord_internal + PROPERTY INTERFACE_LINK_LIBRARIES + absl::compressed_tuple + absl::config + absl::container_memory + absl::compare + absl::core_headers + absl::crc_cord_state + absl::endian + absl::inlined_vector + absl::layout + absl::raw_logging_internal + absl::strings + absl::throw_delegate + absl::type_traits) set_property(TARGET absl::cord PROPERTY INTERFACE_LINK_LIBRARIES absl::base @@ -3244,27 +2219,18 @@ macro(build_absl) absl::cordz_update_scope absl::cordz_update_tracker absl::core_headers + absl::crc32c + absl::crc_cord_state absl::endian - absl::fixed_array absl::function_ref absl::inlined_vector + absl::nullability absl::optional absl::raw_logging_internal + absl::span 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) + absl::type_traits + absl::weakly_mixed_integer) set_property(TARGET absl::cordz_functions PROPERTY INTERFACE_LINK_LIBRARIES absl::config @@ -3275,6 +2241,7 @@ macro(build_absl) PROPERTY INTERFACE_LINK_LIBRARIES absl::base absl::config + absl::no_destructor absl::raw_logging_internal absl::synchronization) set_property(TARGET absl::cordz_info @@ -3291,7 +2258,8 @@ macro(build_absl) absl::span absl::raw_logging_internal absl::stacktrace - absl::synchronization) + absl::synchronization + absl::time) set_property(TARGET absl::cordz_sample_token PROPERTY INTERFACE_LINK_LIBRARIES absl::config absl::cordz_handle absl::cordz_info) @@ -3311,10 +2279,35 @@ macro(build_absl) 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::crc_cord_state + PROPERTY INTERFACE_LINK_LIBRARIES + absl::crc32c + absl::config + absl::strings + absl::no_destructor) + set_property(TARGET absl::crc_cpu_detect PROPERTY INTERFACE_LINK_LIBRARIES absl::base + absl::config absl::optional) + set_property(TARGET absl::crc_internal + PROPERTY INTERFACE_LINK_LIBRARIES + absl::crc_cpu_detect + absl::config + absl::core_headers + absl::endian + absl::prefetch + absl::raw_logging_internal + absl::memory + absl::bits) + set_property(TARGET absl::crc32c + PROPERTY INTERFACE_LINK_LIBRARIES + absl::crc_cpu_detect + absl::crc_internal + absl::non_temporal_memcpy + absl::config + absl::core_headers + absl::endian + absl::prefetch + absl::str_format + absl::strings) set_property(TARGET absl::debugging_internal PROPERTY INTERFACE_LINK_LIBRARIES absl::core_headers @@ -3322,12 +2315,33 @@ macro(build_absl) absl::dynamic_annotations absl::errno_saver absl::raw_logging_internal) + set_property(TARGET absl::debugging PROPERTY INTERFACE_LINK_LIBRARIES absl::stacktrace + absl::leak_check) + set_property(TARGET absl::decode_rust_punycode + PROPERTY INTERFACE_LINK_LIBRARIES + absl::bounded_utf8_length_sequence + absl::config + absl::nullability + absl::utf8_for_code_point) set_property(TARGET absl::demangle_internal PROPERTY INTERFACE_LINK_LIBRARIES - absl::base absl::core_headers) + absl::config absl::demangle_rust) + set_property(TARGET absl::demangle_rust + PROPERTY INTERFACE_LINK_LIBRARIES absl::config absl::core_headers + absl::decode_rust_punycode) + set_property(TARGET absl::die_if_null + PROPERTY INTERFACE_LINK_LIBRARIES + absl::config + absl::core_headers + absl::log + absl::strings) 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::endian + PROPERTY INTERFACE_LINK_LIBRARIES + absl::base + absl::config + absl::core_headers + absl::nullability) set_property(TARGET absl::errno_saver PROPERTY INTERFACE_LINK_LIBRARIES absl::config) set_property(TARGET absl::examine_stack PROPERTY INTERFACE_LINK_LIBRARIES @@ -3345,7 +2359,6 @@ macro(build_absl) 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 @@ -3355,18 +2368,13 @@ macro(build_absl) absl::config absl::core_headers absl::dynamic_annotations + absl::iterator_traits_internal 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) + absl::memory + absl::weakly_mixed_integer) + set_property(TARGET absl::flags_commandlineflag_internal + PROPERTY INTERFACE_LINK_LIBRARIES absl::config absl::dynamic_annotations + absl::fast_type_id) set_property(TARGET absl::flags_commandlineflag PROPERTY INTERFACE_LINK_LIBRARIES absl::config @@ -3374,24 +2382,25 @@ macro(build_absl) 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::no_destructor absl::strings absl::synchronization) set_property(TARGET absl::flags_internal PROPERTY INTERFACE_LINK_LIBRARIES absl::base absl::config + absl::fast_type_id absl::flags_commandlineflag absl::flags_commandlineflag_internal absl::flags_config absl::flags_marshalling + absl::no_destructor absl::synchronization absl::meta absl::utility) @@ -3400,164 +2409,428 @@ macro(build_absl) absl::config absl::core_headers absl::log_severity + absl::int128 + absl::optional + absl::strings + absl::str_format) + set_property(TARGET absl::flags_parse + PROPERTY INTERFACE_LINK_LIBRARIES + absl::algorithm_container + 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::no_destructor + 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::no_destructor + absl::flags_path_util + absl::strings + absl::synchronization) + set_property(TARGET absl::flags_reflection + PROPERTY INTERFACE_LINK_LIBRARIES + absl::config + absl::fast_type_id + absl::flags_commandlineflag + absl::flags_private_handle_accessor + absl::flags_config + absl::strings + absl::synchronization + absl::flat_hash_map + absl::no_destructor) + 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::strings + absl::synchronization) + set_property(TARGET absl::flags_usage + PROPERTY INTERFACE_LINK_LIBRARIES + absl::config + absl::core_headers + absl::flags_usage_internal + absl::no_destructor + absl::raw_logging_internal + absl::strings + absl::synchronization) + set_property(TARGET absl::flags + PROPERTY INTERFACE_LINK_LIBRARIES + absl::config + absl::flags_commandlineflag + absl::flags_config + absl::flags_internal + absl::flags_reflection + absl::core_headers + absl::nullability + absl::strings) + set_property(TARGET absl::flat_hash_map + PROPERTY INTERFACE_LINK_LIBRARIES + absl::container_memory + absl::core_headers + absl::hash_container_defaults + absl::raw_hash_map + absl::algorithm_container + absl::type_traits) + set_property(TARGET absl::flat_hash_set + PROPERTY INTERFACE_LINK_LIBRARIES + absl::container_memory + absl::hash_container_defaults + absl::raw_hash_set + absl::algorithm_container + absl::core_headers + absl::memory + absl::type_traits) + set_property(TARGET absl::function_ref + PROPERTY INTERFACE_LINK_LIBRARIES absl::core_headers absl::any_invocable + 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::has_ostream_operator PROPERTY INTERFACE_LINK_LIBRARIES + absl::config) + set_property(TARGET absl::hash_container_defaults + PROPERTY INTERFACE_LINK_LIBRARIES absl::config + absl::hash_function_defaults) + set_property(TARGET absl::hash_function_defaults + PROPERTY INTERFACE_LINK_LIBRARIES + absl::config + absl::container_common + absl::cord + absl::hash + absl::strings + absl::type_traits) + set_property(TARGET absl::hash_policy_traits + PROPERTY INTERFACE_LINK_LIBRARIES absl::common_policy_traits absl::meta) + set_property(TARGET absl::hash + PROPERTY INTERFACE_LINK_LIBRARIES + absl::bits + absl::city + absl::config + absl::core_headers + absl::endian + absl::fixed_array + absl::function_ref + absl::meta + absl::int128 + absl::strings + absl::optional + absl::variant + absl::utility + absl::low_level_hash + absl::weakly_mixed_integer) + set_property(TARGET absl::hashtable_control_bytes + PROPERTY INTERFACE_LINK_LIBRARIES + absl::bits + absl::config + absl::core_headers + absl::endian) + set_property(TARGET absl::hashtable_debug_hooks PROPERTY INTERFACE_LINK_LIBRARIES + absl::config) + set_property(TARGET absl::hashtable_debug PROPERTY INTERFACE_LINK_LIBRARIES + absl::hashtable_debug_hooks) + set_property(TARGET absl::hashtablez_sampler + PROPERTY INTERFACE_LINK_LIBRARIES + absl::base + absl::config + absl::exponential_biased + absl::no_destructor + absl::raw_logging_internal + absl::sample_recorder + absl::synchronization + absl::time) + set_property(TARGET absl::inlined_vector_internal + PROPERTY INTERFACE_LINK_LIBRARIES + absl::base_internal + absl::compressed_tuple + absl::config + absl::core_headers + absl::memory + absl::span + absl::type_traits) + set_property(TARGET absl::inlined_vector + PROPERTY INTERFACE_LINK_LIBRARIES + absl::algorithm + absl::core_headers + absl::inlined_vector_internal + absl::throw_delegate + absl::memory + absl::type_traits + absl::weakly_mixed_integer) + set_property(TARGET absl::int128 + PROPERTY INTERFACE_LINK_LIBRARIES + absl::compare + absl::config + absl::core_headers + absl::bits) + set_property(TARGET absl::iterator_traits_internal + PROPERTY INTERFACE_LINK_LIBRARIES absl::config absl::type_traits) + set_property(TARGET absl::iterator_traits_test_helper_internal + PROPERTY INTERFACE_LINK_LIBRARIES absl::config) + set_property(TARGET absl::kernel_timeout_internal + PROPERTY INTERFACE_LINK_LIBRARIES + absl::base + absl::config + absl::core_headers + absl::raw_logging_internal + absl::time) + set_property(TARGET absl::layout + PROPERTY INTERFACE_LINK_LIBRARIES + absl::config + absl::core_headers + absl::debugging_internal + 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_entry + PROPERTY INTERFACE_LINK_LIBRARIES + absl::config + absl::core_headers + absl::log_internal_config + absl::log_severity + absl::span absl::strings - absl::str_format) - set_property(TARGET absl::flags_parse + absl::time) + set_property(TARGET absl::log_flags PROPERTY INTERFACE_LINK_LIBRARIES absl::config absl::core_headers - absl::flags_config + absl::log_globals + absl::log_severity + absl::log_internal_config + absl::log_internal_flags 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::flags_marshalling 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 + absl::vlog_config_internal) + set_property(TARGET absl::log_globals PROPERTY INTERFACE_LINK_LIBRARIES + absl::atomic_hook absl::config absl::core_headers - absl::flags_path_util + absl::hash + absl::log_severity + absl::raw_logging_internal absl::strings - absl::synchronization) - set_property(TARGET absl::flags_reflection + absl::vlog_config_internal) + set_property(TARGET absl::log_initialize + PROPERTY INTERFACE_LINK_LIBRARIES + absl::config + absl::log_globals + absl::log_internal_globals + absl::time) + set_property(TARGET absl::log_internal_append_truncated 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 + absl::strings_internal + absl::span) + set_property(TARGET absl::log_internal_check_impl + PROPERTY INTERFACE_LINK_LIBRARIES + absl::core_headers + absl::log_internal_check_op + absl::log_internal_conditions + absl::log_internal_message + absl::log_internal_strip) + set_property(TARGET absl::log_internal_check_op PROPERTY INTERFACE_LINK_LIBRARIES + absl::base absl::config absl::core_headers - absl::flags_usage_internal - absl::strings - absl::synchronization) - set_property(TARGET absl::flags_usage_internal + absl::leak_check + absl::log_internal_nullguard + absl::log_internal_nullstream + absl::log_internal_strip + absl::nullability + absl::strings) + set_property(TARGET absl::log_internal_conditions PROPERTY INTERFACE_LINK_LIBRARIES + absl::base 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 + absl::core_headers + absl::log_internal_voidify) + set_property(TARGET absl::log_internal_config PROPERTY INTERFACE_LINK_LIBRARIES + absl::config absl::core_headers) + set_property(TARGET absl::log_internal_flags PROPERTY INTERFACE_LINK_LIBRARIES + absl::flags) + set_property(TARGET absl::log_internal_fnmatch PROPERTY INTERFACE_LINK_LIBRARIES + absl::config absl::strings) + set_property(TARGET absl::log_internal_format 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 + absl::config + absl::core_headers + absl::log_internal_append_truncated + absl::log_internal_config + absl::log_internal_globals + absl::log_severity + absl::strings + absl::str_format + absl::time + absl::span) + set_property(TARGET absl::log_internal_globals PROPERTY INTERFACE_LINK_LIBRARIES - absl::container_memory - absl::hash_function_defaults - absl::raw_hash_set - absl::algorithm_container + absl::config 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 + absl::log_severity + absl::raw_logging_internal + absl::strings + absl::time) + set_property(TARGET absl::log_internal_log_impl + PROPERTY INTERFACE_LINK_LIBRARIES + absl::log_internal_conditions + absl::log_internal_message + absl::log_internal_strip + absl::absl_vlog_is_on) + set_property(TARGET absl::log_internal_log_sink_set PROPERTY INTERFACE_LINK_LIBRARIES absl::base - absl::base_internal + absl::cleanup absl::config absl::core_headers - absl::malloc_internal - absl::raw_logging_internal) - set_property(TARGET absl::hash + absl::log_internal_config + absl::log_internal_globals + absl::log_globals + absl::log_entry + absl::log_severity + absl::log_sink + absl::no_destructor + absl::raw_logging_internal + absl::synchronization + absl::span + absl::strings) + set_property(TARGET absl::log_internal_message PROPERTY INTERFACE_LINK_LIBRARIES - absl::city + absl::base absl::config absl::core_headers - absl::endian - absl::fixed_array - absl::meta - absl::int128 + absl::errno_saver + absl::examine_stack + absl::inlined_vector + absl::log_internal_append_truncated + absl::log_internal_format + absl::log_internal_globals + absl::log_internal_proto + absl::log_internal_log_sink_set + absl::log_internal_nullguard + absl::log_internal_structured_proto + absl::log_globals + absl::log_entry + absl::log_severity + absl::log_sink + absl::log_sink_registry + absl::memory + absl::nullability + absl::raw_logging_internal + absl::span + absl::strerror absl::strings - absl::optional - absl::variant - absl::utility - absl::low_level_hash) - set_property(TARGET absl::hash_function_defaults + absl::strings_internal + absl::time) + set_property(TARGET absl::log_internal_nullguard + PROPERTY INTERFACE_LINK_LIBRARIES absl::config absl::core_headers) + set_property(TARGET absl::log_internal_nullstream PROPERTY INTERFACE_LINK_LIBRARIES absl::config - absl::cord - absl::hash + absl::core_headers + absl::log_severity 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 + set_property(TARGET absl::log_internal_proto 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::config absl::core_headers - absl::inlined_vector_internal - absl::throw_delegate - absl::memory) - set_property(TARGET absl::inlined_vector_internal + absl::strings + absl::span) + set_property(TARGET absl::log_internal_strip PROPERTY INTERFACE_LINK_LIBRARIES - absl::compressed_tuple absl::core_headers - absl::memory + absl::log_internal_message + absl::log_internal_nullstream + absl::log_severity) + set_property(TARGET absl::log_internal_structured_proto + PROPERTY INTERFACE_LINK_LIBRARIES + absl::log_internal_proto + absl::config 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 + absl::strings + absl::variant) + set_property(TARGET absl::log_internal_structured PROPERTY INTERFACE_LINK_LIBRARIES + absl::any_invocable absl::config absl::core_headers - absl::meta + absl::log_internal_message + absl::log_internal_structured_proto + absl::strings) + set_property(TARGET absl::log_internal_voidify PROPERTY INTERFACE_LINK_LIBRARIES + absl::config absl::core_headers) + set_property(TARGET absl::log_severity PROPERTY INTERFACE_LINK_LIBRARIES absl::config + absl::core_headers) + set_property(TARGET absl::log_sink_registry + PROPERTY INTERFACE_LINK_LIBRARIES + absl::config + absl::log_sink + absl::log_internal_log_sink_set + absl::nullability) + set_property(TARGET absl::log_sink PROPERTY INTERFACE_LINK_LIBRARIES absl::config + absl::log_entry) + set_property(TARGET absl::log_streamer + PROPERTY INTERFACE_LINK_LIBRARIES + absl::config + absl::absl_log + absl::log_severity + absl::optional absl::strings - absl::span + absl::strings_internal 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::log_structured + PROPERTY INTERFACE_LINK_LIBRARIES + absl::config + absl::core_headers + absl::log_internal_structured + absl::strings) + set_property(TARGET absl::log PROPERTY INTERFACE_LINK_LIBRARIES + absl::log_internal_log_impl absl::vlog_is_on) set_property(TARGET absl::low_level_hash PROPERTY INTERFACE_LINK_LIBRARIES - absl::bits absl::config + absl::core_headers absl::endian - absl::int128) + absl::int128 + absl::prefetch) set_property(TARGET absl::malloc_internal PROPERTY INTERFACE_LINK_LIBRARIES absl::base @@ -3569,40 +2842,53 @@ macro(build_absl) 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::no_destructor PROPERTY INTERFACE_LINK_LIBRARIES absl::config + absl::nullability) set_property(TARGET absl::node_hash_map PROPERTY INTERFACE_LINK_LIBRARIES absl::container_memory - absl::hash_function_defaults - absl::node_hash_policy + absl::core_headers + absl::hash_container_defaults + absl::node_slot_policy absl::raw_hash_map absl::algorithm_container - absl::memory) - set_property(TARGET absl::node_hash_policy PROPERTY INTERFACE_LINK_LIBRARIES - absl::config) + absl::memory + absl::type_traits) set_property(TARGET absl::node_hash_set PROPERTY INTERFACE_LINK_LIBRARIES - absl::hash_function_defaults - absl::node_hash_policy + absl::container_memory + absl::core_headers + absl::hash_container_defaults + absl::node_slot_policy absl::raw_hash_set absl::algorithm_container - absl::memory) - set_property(TARGET absl::numeric PROPERTY INTERFACE_LINK_LIBRARIES absl::int128) + absl::memory + absl::type_traits) + set_property(TARGET absl::node_slot_policy PROPERTY INTERFACE_LINK_LIBRARIES + absl::config) + set_property(TARGET absl::non_temporal_arm_intrinsics PROPERTY INTERFACE_LINK_LIBRARIES + absl::config) + set_property(TARGET absl::non_temporal_memcpy + PROPERTY INTERFACE_LINK_LIBRARIES absl::non_temporal_arm_intrinsics + absl::config absl::core_headers) + set_property(TARGET absl::nullability PROPERTY INTERFACE_LINK_LIBRARIES absl::config + absl::core_headers) 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::numeric PROPERTY INTERFACE_LINK_LIBRARIES absl::int128) + set_property(TARGET absl::optional PROPERTY INTERFACE_LINK_LIBRARIES absl::config + absl::utility) + set_property(TARGET absl::overload PROPERTY INTERFACE_LINK_LIBRARIES absl::meta) set_property(TARGET absl::periodic_sampler PROPERTY INTERFACE_LINK_LIBRARIES absl::core_headers absl::exponential_biased) + set_property(TARGET absl::poison PROPERTY INTERFACE_LINK_LIBRARIES absl::config + absl::core_headers absl::malloc_internal) + set_property(TARGET absl::prefetch PROPERTY INTERFACE_LINK_LIBRARIES absl::config + absl::core_headers) set_property(TARGET absl::random_bit_gen_ref PROPERTY INTERFACE_LINK_LIBRARIES + absl::config absl::core_headers absl::random_internal_distribution_caller absl::random_internal_fast_uniform_bits @@ -3623,8 +2909,11 @@ macro(build_absl) 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) + PROPERTY INTERFACE_LINK_LIBRARIES + absl::config + absl::utility + absl::fast_type_id + absl::type_traits) set_property(TARGET absl::random_internal_distribution_test_util PROPERTY INTERFACE_LINK_LIBRARIES absl::config @@ -3633,6 +2922,17 @@ macro(build_absl) absl::strings absl::str_format absl::span) + set_property(TARGET absl::random_internal_entropy_pool + PROPERTY INTERFACE_LINK_LIBRARIES + absl::base + absl::config + absl::core_headers + absl::random_internal_platform + absl::random_internal_randen + absl::random_internal_seed_material + absl::random_seed_gen_exception + absl::span + absl::synchronization) 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 @@ -3644,17 +2944,18 @@ macro(build_absl) 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) + PROPERTY INTERFACE_LINK_LIBRARIES absl::config absl::int128 + absl::type_traits) set_property(TARGET absl::random_internal_mock_helpers - PROPERTY INTERFACE_LINK_LIBRARIES absl::fast_type_id absl::optional) + PROPERTY INTERFACE_LINK_LIBRARIES absl::config 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::config + absl::inlined_vector + absl::random_internal_entropy_pool 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 @@ -3665,22 +2966,6 @@ macro(build_absl) 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 @@ -3688,15 +2973,22 @@ macro(build_absl) 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_hwaes + PROPERTY INTERFACE_LINK_LIBRARIES + absl::random_internal_platform + absl::random_internal_randen_hwaes_impl + absl::config + absl::optional) set_property(TARGET absl::random_internal_randen_slow PROPERTY INTERFACE_LINK_LIBRARIES absl::random_internal_platform absl::config) + 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_salted_seed_seq PROPERTY INTERFACE_LINK_LIBRARIES absl::inlined_vector @@ -3706,7 +2998,7 @@ macro(build_absl) absl::type_traits) set_property(TARGET absl::random_internal_seed_material PROPERTY INTERFACE_LINK_LIBRARIES - absl::core_headers + absl::config absl::optional absl::random_internal_fast_uniform_bits absl::raw_logging_internal @@ -3721,48 +3013,68 @@ macro(build_absl) PROPERTY INTERFACE_LINK_LIBRARIES absl::bits absl::config absl::int128) set_property(TARGET absl::random_random PROPERTY INTERFACE_LINK_LIBRARIES + absl::config 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_gen_exception + PROPERTY INTERFACE_LINK_LIBRARIES absl::config absl::raw_logging_internal) set_property(TARGET absl::random_seed_sequences PROPERTY INTERFACE_LINK_LIBRARIES + absl::config absl::inlined_vector - absl::random_internal_nonsecure_base - absl::random_internal_pool_urbg + absl::nullability + absl::random_internal_entropy_pool absl::random_internal_salted_seed_seq absl::random_internal_seed_material absl::random_seed_gen_exception - absl::span) + absl::span + absl::string_view) set_property(TARGET absl::raw_hash_map - PROPERTY INTERFACE_LINK_LIBRARIES absl::container_memory - absl::raw_hash_set absl::throw_delegate) + PROPERTY INTERFACE_LINK_LIBRARIES + absl::config + absl::common_policy_traits + absl::container_memory + absl::core_headers + absl::raw_hash_set + absl::type_traits + absl::throw_delegate) + set_property(TARGET absl::raw_hash_set_resize_impl PROPERTY INTERFACE_LINK_LIBRARIES + absl::config) set_property(TARGET absl::raw_hash_set PROPERTY INTERFACE_LINK_LIBRARIES absl::bits + absl::common_policy_traits absl::compressed_tuple absl::config absl::container_common absl::container_memory absl::core_headers + absl::dynamic_annotations absl::endian + absl::function_ref + absl::hash + absl::hash_function_defaults absl::hash_policy_traits + absl::hashtable_control_bytes absl::hashtable_debug_hooks - absl::have_sse + absl::hashtablez_sampler + absl::iterator_traits_internal absl::memory absl::meta absl::optional + absl::prefetch + absl::raw_logging_internal absl::utility - absl::hashtablez_sampler) + absl::weakly_mixed_integer) set_property(TARGET absl::raw_logging_internal PROPERTY INTERFACE_LINK_LIBRARIES absl::atomic_hook absl::config absl::core_headers + absl::errno_saver absl::log_severity) set_property(TARGET absl::sample_recorder PROPERTY INTERFACE_LINK_LIBRARIES absl::base absl::synchronization) @@ -3771,72 +3083,110 @@ macro(build_absl) set_property(TARGET absl::span PROPERTY INTERFACE_LINK_LIBRARIES absl::algorithm + absl::config absl::core_headers + absl::nullability absl::throw_delegate - absl::type_traits) + absl::type_traits + absl::weakly_mixed_integer) 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) + PROPERTY INTERFACE_LINK_LIBRARIES + absl::debugging_internal + absl::config + absl::core_headers + absl::dynamic_annotations + absl::raw_logging_internal) set_property(TARGET absl::status PROPERTY INTERFACE_LINK_LIBRARIES absl::atomic_hook absl::config + absl::cord absl::core_headers absl::function_ref - absl::raw_logging_internal absl::inlined_vector + absl::leak_check + absl::memory + absl::no_destructor + absl::nullability + absl::optional + absl::raw_logging_internal + absl::span absl::stacktrace - absl::symbolize - absl::strings - absl::cord absl::str_format - absl::optional) + absl::strerror + absl::strings + absl::symbolize) set_property(TARGET absl::statusor PROPERTY INTERFACE_LINK_LIBRARIES absl::base - absl::status + absl::config absl::core_headers + absl::has_ostream_operator + absl::nullability absl::raw_logging_internal - absl::type_traits + absl::status + absl::str_format absl::strings + absl::type_traits 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::fixed_array + absl::inlined_vector absl::numeric_representation absl::type_traits + absl::utility absl::int128 - absl::span) + absl::span + absl::strings_internal) + set_property(TARGET absl::str_format + PROPERTY INTERFACE_LINK_LIBRARIES + absl::config + absl::core_headers + absl::nullability + absl::span + absl::str_format_internal + absl::string_view) set_property(TARGET absl::strerror PROPERTY INTERFACE_LINK_LIBRARIES absl::config absl::core_headers absl::errno_saver) - set_property(TARGET absl::strings + set_property(TARGET absl::string_view PROPERTY INTERFACE_LINK_LIBRARIES - absl::strings_internal absl::base - absl::bits + absl::config + absl::core_headers + absl::nullability + absl::throw_delegate) + set_property(TARGET absl::strings_internal + PROPERTY INTERFACE_LINK_LIBRARIES 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 + set_property(TARGET absl::strings PROPERTY INTERFACE_LINK_LIBRARIES + absl::string_view + absl::strings_internal + absl::base + absl::bits + absl::charset absl::config absl::core_headers absl::endian + absl::int128 + absl::iterator_traits_internal + absl::memory + absl::nullability absl::raw_logging_internal + absl::throw_delegate absl::type_traits) set_property(TARGET absl::symbolize PROPERTY INTERFACE_LINK_LIBRARIES @@ -3860,10 +3210,13 @@ macro(build_absl) absl::core_headers absl::dynamic_annotations absl::malloc_internal + absl::nullability absl::raw_logging_internal absl::stacktrace absl::symbolize - absl::time) + absl::tracing_internal + absl::time + absl::tracing_internal) set_property(TARGET absl::throw_delegate PROPERTY INTERFACE_LINK_LIBRARIES absl::config absl::raw_logging_internal) set_property(TARGET absl::time @@ -3875,42 +3228,1284 @@ macro(build_absl) 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 + set_property(TARGET absl::tracing_internal PROPERTY INTERFACE_LINK_LIBRARIES absl::base) + set_property(TARGET absl::type_traits PROPERTY INTERFACE_LINK_LIBRARIES absl::config + absl::core_headers) + set_property(TARGET absl::utf8_for_code_point PROPERTY INTERFACE_LINK_LIBRARIES + absl::config) + set_property(TARGET absl::utility PROPERTY INTERFACE_LINK_LIBRARIES absl::config + absl::type_traits) + set_property(TARGET absl::variant PROPERTY INTERFACE_LINK_LIBRARIES absl::config + absl::utility) + set_property(TARGET absl::vlog_config_internal PROPERTY INTERFACE_LINK_LIBRARIES - absl::bad_variant_access - absl::base_internal + absl::base 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) + absl::log_internal_fnmatch + absl::memory + absl::no_destructor + absl::nullability + absl::strings + absl::synchronization + absl::optional) + set_property(TARGET absl::vlog_is_on PROPERTY INTERFACE_LINK_LIBRARIES + absl::absl_vlog_is_on) + set_property(TARGET absl::weakly_mixed_integer PROPERTY INTERFACE_LINK_LIBRARIES + absl::config) + + if(APPLE) + # This is due to upstream absl::cctz issue + # https://github.com/abseil/abseil-cpp/issues/283 + find_library(CoreFoundation CoreFoundation) + set_property(TARGET absl::time + 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() + +if(ARROW_WITH_GOOGLE_CLOUD_CPP + OR ARROW_WITH_GRPC + OR ARROW_WITH_PROTOBUF) + 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 + TRUE + FORCE_ANY_NEWER_VERSION + TRUE + REQUIRED_VERSION + ${ARROW_ABSL_REQUIRED_VERSION}) +endif() + +# ---------------------------------------------------------------------- +# Protocol Buffers (required for ORC, Flight and Substrait libraries) + +macro(build_protobuf) + message(STATUS "Building Protocol Buffers from source") + set(PROTOBUF_VENDORED TRUE) + set(PROTOBUF_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/protobuf_ep-install") + set(PROTOBUF_INCLUDE_DIR "${PROTOBUF_PREFIX}/include") + # This flag is based on what the user initially requested but if + # we've fallen back to building protobuf we always build it statically + # so we need to reset the flag so that we can link against it correctly + # later. + set(Protobuf_USE_STATIC_LIBS ON) + # Newer protobuf releases always have a lib prefix independent from CMAKE_STATIC_LIBRARY_PREFIX + set(PROTOBUF_STATIC_LIB + "${PROTOBUF_PREFIX}/lib/libprotobuf${CMAKE_STATIC_LIBRARY_SUFFIX}") + set(PROTOC_STATIC_LIB "${PROTOBUF_PREFIX}/lib/libprotoc${CMAKE_STATIC_LIBRARY_SUFFIX}") + set(Protobuf_PROTOC_LIBRARY "${PROTOC_STATIC_LIB}") + set(PROTOBUF_COMPILER "${PROTOBUF_PREFIX}/bin/protoc") + set(UTF8_RANGE_LIB + "${PROTOBUF_PREFIX}/lib/libutf8_validity${CMAKE_STATIC_LIBRARY_SUFFIX}") + set(UTF8_VALIDITY_LIB + "${PROTOBUF_PREFIX}/lib/libutf8_range${CMAKE_STATIC_LIBRARY_SUFFIX}") + set(UPB_LIB "${PROTOBUF_PREFIX}/lib/libupb${CMAKE_STATIC_LIBRARY_SUFFIX}") + + add_custom_target(protobuf_dependencies) + add_dependencies(protobuf_dependencies absl_ep) + + set(PROTOBUF_CMAKE_PREFIX) + set(PROTOBUF_CMAKE_PREFIX "${PROTOBUF_CMAKE_PREFIX};${ABSL_PREFIX}") + string(REPLACE ";" ${EP_LIST_SEPARATOR} PROTOBUF_PREFIX_PATH_ALT_SEP + "${PROTOBUF_CMAKE_PREFIX}") + + # Strip lto flags (which may be added by dh_auto_configure) + # See https://github.com/protocolbuffers/protobuf/issues/7092 + set(PROTOBUF_C_FLAGS ${EP_C_FLAGS}) + set(PROTOBUF_CXX_FLAGS ${EP_CXX_FLAGS}) + string(REPLACE "-flto=auto" "" PROTOBUF_C_FLAGS "${PROTOBUF_C_FLAGS}") + string(REPLACE "-ffat-lto-objects" "" PROTOBUF_C_FLAGS "${PROTOBUF_C_FLAGS}") + string(REPLACE "-flto=auto" "" PROTOBUF_CXX_FLAGS "${PROTOBUF_CXX_FLAGS}") + string(REPLACE "-ffat-lto-objects" "" PROTOBUF_CXX_FLAGS "${PROTOBUF_CXX_FLAGS}") + set(PROTOBUF_CMAKE_ARGS + ${EP_COMMON_CMAKE_ARGS} + "-DCMAKE_CXX_FLAGS=${PROTOBUF_CXX_FLAGS}" + "-DCMAKE_C_FLAGS=${PROTOBUF_C_FLAGS}" + "-DCMAKE_INSTALL_PREFIX=${PROTOBUF_PREFIX}" + -DCMAKE_PREFIX_PATH='${PROTOBUF_PREFIX_PATH_ALT_SEP}' + -Dprotobuf_LOCAL_DEPENDENCIES_ONLY=ON + -Dprotobuf_BUILD_TESTS=OFF + -Dprotobuf_DEBUG_POSTFIX=) + if(MSVC AND NOT ARROW_USE_STATIC_CRT) + list(APPEND PROTOBUF_CMAKE_ARGS "-Dprotobuf_MSVC_STATIC_RUNTIME=OFF") + endif() + if(ZLIB_ROOT) + list(APPEND PROTOBUF_CMAKE_ARGS "-DZLIB_ROOT=${ZLIB_ROOT}") + endif() + set(PROTOBUF_EXTERNAL_PROJECT_ADD_ARGS CMAKE_ARGS ${PROTOBUF_CMAKE_ARGS}) + + externalproject_add(protobuf_ep + ${EP_COMMON_OPTIONS} ${PROTOBUF_EXTERNAL_PROJECT_ADD_ARGS} + BUILD_BYPRODUCTS "${PROTOBUF_STATIC_LIB}" + "${PROTOBUF_COMPILER}" + "${PROTOC_STATIC_LIB}" + "${UTF8_RANGE_LIB}" + "${UTF8_VALIDITY_LIB}" + "${UPB_LIB}" + BUILD_IN_SOURCE 1 + URL ${PROTOBUF_SOURCE_URL} + URL_HASH "SHA256=${ARROW_PROTOBUF_BUILD_SHA256_CHECKSUM}" + DEPENDS ${protobuf_dependencies}) + add_dependencies(protobuf_ep protobuf_dependencies) + + file(MAKE_DIRECTORY "${PROTOBUF_INCLUDE_DIR}") + # For compatibility of CMake's FindProtobuf.cmake. + set(Protobuf_INCLUDE_DIRS "${PROTOBUF_INCLUDE_DIR}") + + add_library(utf8_range::utf8_range STATIC IMPORTED) + set_target_properties(utf8_range::utf8_range PROPERTIES IMPORTED_LOCATION + "${UTF8_RANGE_LIB}") + target_include_directories(utf8_range::utf8_range BEFORE + INTERFACE "${PROTOBUF_INCLUDE_DIR}") + + add_library(utf8_range::utf8_validity STATIC IMPORTED) + set_target_properties(utf8_range::utf8_validity PROPERTIES IMPORTED_LOCATION + "${UTF8_VALIDITY_LIB}") + target_include_directories(utf8_range::utf8_validity BEFORE + INTERFACE "${PROTOBUF_INCLUDE_DIR}") + + add_library(upb::upb STATIC IMPORTED) + set_target_properties(upb::upb PROPERTIES IMPORTED_LOCATION "${UPB_LIB}") + target_include_directories(upb::upb BEFORE INTERFACE "${PROTOBUF_INCLUDE_DIR}") + + set(PROTOBUF_ABSL_LIBRARIES + absl::absl_check + absl::absl_log + absl::algorithm + absl::base + absl::bind_front + absl::bits + absl::btree + absl::cleanup + absl::cord + absl::core_headers + absl::debugging + absl::die_if_null + absl::dynamic_annotations + absl::flags + absl::flat_hash_map + absl::flat_hash_set + absl::function_ref + absl::hash + absl::layout + absl::log_initialize + absl::log_globals + absl::log_severity + absl::memory + absl::node_hash_map + absl::node_hash_set + absl::optional + absl::random_distributions + absl::random_random + absl::span + absl::status + absl::statusor + absl::strings + absl::synchronization + absl::time + absl::type_traits + absl::utility + absl::variant) + + add_library(arrow::protobuf::libprotobuf STATIC IMPORTED) + set_target_properties(arrow::protobuf::libprotobuf PROPERTIES IMPORTED_LOCATION + "${PROTOBUF_STATIC_LIB}") + target_include_directories(arrow::protobuf::libprotobuf BEFORE + INTERFACE "${PROTOBUF_INCLUDE_DIR}") + target_link_libraries(arrow::protobuf::libprotobuf + INTERFACE "${PROTOBUF_ABSL_LIBRARIES}" utf8_range::utf8_range + utf8_range::utf8_validity) + add_library(arrow::protobuf::libprotoc STATIC IMPORTED) + set_target_properties(arrow::protobuf::libprotoc PROPERTIES IMPORTED_LOCATION + "${PROTOC_STATIC_LIB}") + + target_include_directories(arrow::protobuf::libprotoc BEFORE + INTERFACE "${PROTOBUF_INCLUDE_DIR}") + target_link_libraries(arrow::protobuf::libprotoc INTERFACE arrow::protobuf::libprotobuf + upb::upb) + add_executable(arrow::protobuf::protoc IMPORTED) + set_target_properties(arrow::protobuf::protoc PROPERTIES IMPORTED_LOCATION + "${PROTOBUF_COMPILER}") + + add_dependencies(arrow::protobuf::libprotobuf protobuf_ep) + add_dependencies(arrow::protobuf::libprotoc protobuf_ep) + add_dependencies(arrow::protobuf::protoc protobuf_ep) + add_dependencies(utf8_range::utf8_range protobuf_ep) + add_dependencies(utf8_range::utf8_validity protobuf_ep) + add_dependencies(upb::upb protobuf_ep) + + list(APPEND ARROW_BUNDLED_STATIC_LIBS arrow::protobuf::libprotobuf + arrow::protobuf::libprotoc) + + if(CMAKE_CROSSCOMPILING) + # If we are cross compiling, we need to build protoc for the host + # system also, as it is used when building Arrow + # We do this by calling CMake as a child process + # with CXXFLAGS / CFLAGS and CMake flags cleared. + set(PROTOBUF_HOST_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/protobuf_ep_host-install") + set(PROTOBUF_HOST_COMPILER "${PROTOBUF_HOST_PREFIX}/bin/protoc") + + set(PROTOBUF_HOST_CMAKE_ARGS + "-DCMAKE_CXX_FLAGS=" + "-DCMAKE_C_FLAGS=" + "-DCMAKE_INSTALL_PREFIX=${PROTOBUF_HOST_PREFIX}" + -Dprotobuf_BUILD_TESTS=OFF + -Dprotobuf_DEBUG_POSTFIX=) + + externalproject_add(protobuf_ep_host + ${EP_COMMON_OPTIONS} + CMAKE_ARGS ${PROTOBUF_HOST_CMAKE_ARGS} + BUILD_BYPRODUCTS "${PROTOBUF_HOST_COMPILER}" + BUILD_IN_SOURCE 1 + URL ${PROTOBUF_SOURCE_URL} + URL_HASH "SHA256=${ARROW_PROTOBUF_BUILD_SHA256_CHECKSUM}") + + add_executable(arrow::protobuf::host_protoc IMPORTED) + set_target_properties(arrow::protobuf::host_protoc + PROPERTIES IMPORTED_LOCATION "${PROTOBUF_HOST_COMPILER}") + + add_dependencies(arrow::protobuf::host_protoc protobuf_ep_host) + endif() +endmacro() + +if(ARROW_WITH_PROTOBUF) + if(ARROW_FLIGHT_SQL) + # Flight SQL uses proto3 optionals, which require 3.12 or later. + # 3.12.0-3.14.0: need --experimental_allow_proto3_optional + # 3.15.0-: don't need --experimental_allow_proto3_optional + set(ARROW_PROTOBUF_REQUIRED_VERSION "3.12.0") + elseif(ARROW_SUBSTRAIT) + # Substrait protobuf files use proto3 syntax + set(ARROW_PROTOBUF_REQUIRED_VERSION "3.0.0") + else() + set(ARROW_PROTOBUF_REQUIRED_VERSION "2.6.1") + endif() + if(ARROW_ORC + OR ARROW_SUBSTRAIT + OR ARROW_WITH_OPENTELEMETRY) + set(ARROW_PROTOBUF_ARROW_CMAKE_PACKAGE_NAME "Arrow") + set(ARROW_PROTOBUF_ARROW_PC_PACKAGE_NAME "arrow") + elseif(ARROW_FLIGHT) + set(ARROW_PROTOBUF_ARROW_CMAKE_PACKAGE_NAME "ArrowFlight") + set(ARROW_PROTOBUF_ARROW_PC_PACKAGE_NAME "arrow-flight") + else() + message(FATAL_ERROR "ARROW_WITH_PROTOBUF must be propagated in the build tooling installation." + " Please extend the mappings of ARROW_PROTOBUF_ARROW_CMAKE_PACKAGE_NAME and" + " ARROW_PROTOBUF_ARROW_PC_PACKAGE_NAME for newly introduced dependencies on" + " protobuf.") + endif() + # We need to use FORCE_ANY_NEWER_VERSION here to accept Protobuf + # newer version such as 23.4. If we don't use it, 23.4 is processed + # as an incompatible version with 3.12.0 with protobuf-config.cmake + # provided by Protobuf. Because protobuf-config-version.cmake + # requires the same major version. In the example, "23" for 23.4 and + # "3" for 3.12.0 are different. So 23.4 is rejected with 3.12.0. If + # we use FORCE_ANY_NEWER_VERSION here, we can bypass the check and + # use 23.4. + resolve_dependency(Protobuf + ARROW_CMAKE_PACKAGE_NAME + ${ARROW_PROTOBUF_ARROW_CMAKE_PACKAGE_NAME} + ARROW_PC_PACKAGE_NAME + ${ARROW_PROTOBUF_ARROW_PC_PACKAGE_NAME} + FORCE_ANY_NEWER_VERSION + TRUE + HAVE_ALT + TRUE + PC_PACKAGE_NAMES + protobuf + REQUIRED_VERSION + ${ARROW_PROTOBUF_REQUIRED_VERSION}) + + if(NOT Protobuf_USE_STATIC_LIBS AND MSVC_TOOLCHAIN) + add_definitions(-DPROTOBUF_USE_DLLS) + endif() + + if(TARGET arrow::protobuf::libprotobuf) + set(ARROW_PROTOBUF_LIBPROTOBUF arrow::protobuf::libprotobuf) + else() + set(ARROW_PROTOBUF_LIBPROTOBUF protobuf::libprotobuf) + endif() + if(TARGET arrow::protobuf::libprotoc) + set(ARROW_PROTOBUF_LIBPROTOC arrow::protobuf::libprotoc) + else() + set(ARROW_PROTOBUF_LIBPROTOC protobuf::libprotoc) + endif() + if(TARGET arrow::protobuf::host_protoc) + # make sure host protoc is used for compiling protobuf files + # during build of e.g. orc + set(ARROW_PROTOBUF_PROTOC arrow::protobuf::host_protoc) + elseif(TARGET arrow::protobuf::protoc) + set(ARROW_PROTOBUF_PROTOC arrow::protobuf::protoc) + else() + if(NOT TARGET protobuf::protoc) + add_executable(protobuf::protoc IMPORTED) + set_target_properties(protobuf::protoc PROPERTIES IMPORTED_LOCATION + "${PROTOBUF_PROTOC_EXECUTABLE}") + endif() + set(ARROW_PROTOBUF_PROTOC protobuf::protoc) + endif() + + # Log protobuf paths as we often see issues with mixed sources for + # the libraries and protoc. + get_target_property(PROTOBUF_PROTOC_EXECUTABLE ${ARROW_PROTOBUF_PROTOC} + IMPORTED_LOCATION_RELEASE) + if(NOT PROTOBUF_PROTOC_EXECUTABLE) + get_target_property(PROTOBUF_PROTOC_EXECUTABLE ${ARROW_PROTOBUF_PROTOC} + IMPORTED_LOCATION) + endif() + message(STATUS "Found protoc: ${PROTOBUF_PROTOC_EXECUTABLE}") + get_target_property(PROTOBUF_TYPE ${ARROW_PROTOBUF_LIBPROTOBUF} TYPE) + if(NOT STREQUAL "INTERFACE_LIBRARY") + # Protobuf_PROTOC_LIBRARY is set by all versions of FindProtobuf.cmake + message(STATUS "Found libprotoc: ${Protobuf_PROTOC_LIBRARY}") + get_target_property(PROTOBUF_LIBRARY ${ARROW_PROTOBUF_LIBPROTOBUF} IMPORTED_LOCATION) + message(STATUS "Found libprotobuf: ${PROTOBUF_LIBRARY}") + message(STATUS "Found protobuf headers: ${PROTOBUF_INCLUDE_DIR}") + endif() +endif() + +# ---------------------------------------------------------------------- +# Substrait (required by compute engine) + +macro(build_substrait) + message(STATUS "Building Substrait from source") + + # Note: not all protos in Substrait actually matter to plan + # consumption. No need to build the ones we don't need. + set(SUBSTRAIT_PROTOS + algebra + extended_expression + extensions/extensions + plan + type) + set(ARROW_SUBSTRAIT_PROTOS extension_rels) + set(ARROW_SUBSTRAIT_PROTOS_DIR "${CMAKE_SOURCE_DIR}/proto") + + externalproject_add(substrait_ep + ${EP_COMMON_OPTIONS} + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" + URL ${SUBSTRAIT_SOURCE_URL} + URL_HASH "SHA256=${ARROW_SUBSTRAIT_BUILD_SHA256_CHECKSUM}") + + externalproject_get_property(substrait_ep SOURCE_DIR) + set(SUBSTRAIT_LOCAL_DIR ${SOURCE_DIR}) + + set(SUBSTRAIT_CPP_DIR "${CMAKE_CURRENT_BINARY_DIR}/substrait_ep-generated") + file(MAKE_DIRECTORY ${SUBSTRAIT_CPP_DIR}) + + set(SUBSTRAIT_SUPPRESSED_FLAGS) + if(MSVC) + # Protobuf generated files trigger some spurious warnings on MSVC. + + # Implicit conversion from uint64_t to uint32_t: + list(APPEND SUBSTRAIT_SUPPRESSED_FLAGS "/wd4244") + + # Missing dll-interface: + list(APPEND SUBSTRAIT_SUPPRESSED_FLAGS "/wd4251") + else() + # GH-44954: silence [[deprecated]] declarations in protobuf-generated code + list(APPEND SUBSTRAIT_SUPPRESSED_FLAGS "-Wno-deprecated") + if(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" OR CMAKE_CXX_COMPILER_ID STREQUAL + "Clang") + # Protobuf generated files trigger some errors on CLANG TSAN builds + list(APPEND SUBSTRAIT_SUPPRESSED_FLAGS "-Wno-error=shorten-64-to-32") + endif() + endif() + + set(SUBSTRAIT_SOURCES) + set(SUBSTRAIT_PROTO_GEN_ALL) + foreach(SUBSTRAIT_PROTO ${SUBSTRAIT_PROTOS}) + set(SUBSTRAIT_PROTO_GEN "${SUBSTRAIT_CPP_DIR}/substrait/${SUBSTRAIT_PROTO}.pb") + + foreach(EXT h cc) + set_source_files_properties("${SUBSTRAIT_PROTO_GEN}.${EXT}" + PROPERTIES COMPILE_OPTIONS + "${SUBSTRAIT_SUPPRESSED_FLAGS}" + GENERATED TRUE + SKIP_UNITY_BUILD_INCLUSION TRUE) + list(APPEND SUBSTRAIT_PROTO_GEN_ALL "${SUBSTRAIT_PROTO_GEN}.${EXT}") + endforeach() + add_custom_command(OUTPUT "${SUBSTRAIT_PROTO_GEN}.cc" "${SUBSTRAIT_PROTO_GEN}.h" + COMMAND ${ARROW_PROTOBUF_PROTOC} "-I${SUBSTRAIT_LOCAL_DIR}/proto" + "--cpp_out=${SUBSTRAIT_CPP_DIR}" + "${SUBSTRAIT_LOCAL_DIR}/proto/substrait/${SUBSTRAIT_PROTO}.proto" + DEPENDS ${PROTO_DEPENDS} substrait_ep) + + list(APPEND SUBSTRAIT_SOURCES "${SUBSTRAIT_PROTO_GEN}.cc") + endforeach() + foreach(ARROW_SUBSTRAIT_PROTO ${ARROW_SUBSTRAIT_PROTOS}) + set(ARROW_SUBSTRAIT_PROTO_GEN + "${SUBSTRAIT_CPP_DIR}/substrait/${ARROW_SUBSTRAIT_PROTO}.pb") + foreach(EXT h cc) + set_source_files_properties("${ARROW_SUBSTRAIT_PROTO_GEN}.${EXT}" + PROPERTIES COMPILE_OPTIONS + "${SUBSTRAIT_SUPPRESSED_FLAGS}" + GENERATED TRUE + SKIP_UNITY_BUILD_INCLUSION TRUE) + list(APPEND SUBSTRAIT_PROTO_GEN_ALL "${ARROW_SUBSTRAIT_PROTO_GEN}.${EXT}") + endforeach() + add_custom_command(OUTPUT "${ARROW_SUBSTRAIT_PROTO_GEN}.cc" + "${ARROW_SUBSTRAIT_PROTO_GEN}.h" + COMMAND ${ARROW_PROTOBUF_PROTOC} "-I${SUBSTRAIT_LOCAL_DIR}/proto" + "-I${ARROW_SUBSTRAIT_PROTOS_DIR}" + "--cpp_out=${SUBSTRAIT_CPP_DIR}" + "${ARROW_SUBSTRAIT_PROTOS_DIR}/substrait/${ARROW_SUBSTRAIT_PROTO}.proto" + DEPENDS ${PROTO_DEPENDS} substrait_ep) + + list(APPEND SUBSTRAIT_SOURCES "${ARROW_SUBSTRAIT_PROTO_GEN}.cc") + endforeach() + + add_custom_target(substrait_gen ALL DEPENDS ${SUBSTRAIT_PROTO_GEN_ALL}) + + set(SUBSTRAIT_INCLUDES ${SUBSTRAIT_CPP_DIR} ${PROTOBUF_INCLUDE_DIR}) + + add_library(substrait STATIC ${SUBSTRAIT_SOURCES}) + set_target_properties(substrait PROPERTIES POSITION_INDEPENDENT_CODE ON) + target_compile_options(substrait PRIVATE "${SUBSTRAIT_SUPPRESSED_FLAGS}") + target_include_directories(substrait PUBLIC ${SUBSTRAIT_INCLUDES}) + target_link_libraries(substrait PUBLIC ${ARROW_PROTOBUF_LIBPROTOBUF}) + add_dependencies(substrait substrait_gen) + + list(APPEND ARROW_BUNDLED_STATIC_LIBS substrait) +endmacro() + +if(ARROW_SUBSTRAIT) + # Currently, we can only build Substrait from source. + set(Substrait_SOURCE "BUNDLED") + resolve_dependency(Substrait) +endif() + +# ---------------------------------------------------------------------- +# jemalloc - Unix-only high-performance allocator + +macro(build_jemalloc) + # Our build of jemalloc is specially prefixed so that it will not + # conflict with the default allocator as well as other jemalloc + # installations. + + message(STATUS "Building jemalloc from source") + + set(ARROW_JEMALLOC_USE_SHARED OFF) + set(JEMALLOC_PREFIX + "${CMAKE_CURRENT_BINARY_DIR}/jemalloc_ep-prefix/src/jemalloc_ep/dist/") + set(JEMALLOC_LIB_DIR "${JEMALLOC_PREFIX}/lib") + set(JEMALLOC_STATIC_LIB + "${JEMALLOC_LIB_DIR}/libjemalloc_pic${CMAKE_STATIC_LIBRARY_SUFFIX}") + set(JEMALLOC_CONFIGURE_COMMAND ./configure "AR=${CMAKE_AR}" "CC=${CMAKE_C_COMPILER}") + if(CMAKE_OSX_SYSROOT) + list(APPEND JEMALLOC_CONFIGURE_COMMAND "SDKROOT=${CMAKE_OSX_SYSROOT}") + endif() + if(DEFINED ARROW_JEMALLOC_LG_PAGE) + # Used for arm64 manylinux wheels in order to make the wheel work on both + # 4k and 64k page arm64 systems. + list(APPEND JEMALLOC_CONFIGURE_COMMAND "--with-lg-page=${ARROW_JEMALLOC_LG_PAGE}") + endif() + list(APPEND + JEMALLOC_CONFIGURE_COMMAND + "--prefix=${JEMALLOC_PREFIX}" + "--libdir=${JEMALLOC_LIB_DIR}" + "--with-jemalloc-prefix=je_arrow_" + "--with-private-namespace=je_arrow_private_" + "--without-export" + "--disable-shared" + # Don't override operator new() + "--disable-cxx" + "--disable-libdl" + # See https://github.com/jemalloc/jemalloc/issues/1237 + "--disable-initial-exec-tls" + ${EP_LOG_OPTIONS}) + if(${UPPERCASE_BUILD_TYPE} STREQUAL "DEBUG") + # Enable jemalloc debug checks when Arrow itself has debugging enabled + list(APPEND JEMALLOC_CONFIGURE_COMMAND "--enable-debug") + endif() + + set(JEMALLOC_BUILD_COMMAND ${MAKE} ${MAKE_BUILD_ARGS}) + + if(CMAKE_OSX_SYSROOT) + list(APPEND JEMALLOC_BUILD_COMMAND "SDKROOT=${CMAKE_OSX_SYSROOT}") + endif() + + externalproject_add(jemalloc_ep + ${EP_COMMON_OPTIONS} + URL ${JEMALLOC_SOURCE_URL} + URL_HASH "SHA256=${ARROW_JEMALLOC_BUILD_SHA256_CHECKSUM}" + PATCH_COMMAND touch doc/jemalloc.3 doc/jemalloc.html + # The prefix "je_arrow_" must be kept in sync with the value in memory_pool.cc + CONFIGURE_COMMAND ${JEMALLOC_CONFIGURE_COMMAND} + BUILD_IN_SOURCE 1 + BUILD_COMMAND ${JEMALLOC_BUILD_COMMAND} + BUILD_BYPRODUCTS "${JEMALLOC_STATIC_LIB}" + INSTALL_COMMAND ${MAKE} -j1 install) + + # Don't use the include directory directly so that we can point to a path + # that is unique to our codebase. + set(JEMALLOC_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}/jemalloc_ep-prefix/src/") + # The include directory must exist before it is referenced by a target. + file(MAKE_DIRECTORY "${JEMALLOC_INCLUDE_DIR}") + add_library(jemalloc::jemalloc STATIC IMPORTED) + set_target_properties(jemalloc::jemalloc PROPERTIES IMPORTED_LOCATION + "${JEMALLOC_STATIC_LIB}") + target_link_libraries(jemalloc::jemalloc INTERFACE Threads::Threads) + target_include_directories(jemalloc::jemalloc BEFORE + INTERFACE "${JEMALLOC_INCLUDE_DIR}") + add_dependencies(jemalloc::jemalloc jemalloc_ep) + + list(APPEND ARROW_BUNDLED_STATIC_LIBS jemalloc::jemalloc) + + set(jemalloc_VENDORED TRUE) + # For config.h.cmake + set(ARROW_JEMALLOC_VENDORED ${jemalloc_VENDORED}) +endmacro() + +if(ARROW_JEMALLOC) + if(NOT ARROW_ENABLE_THREADING) + message(FATAL_ERROR "Can't use jemalloc with ARROW_ENABLE_THREADING=OFF") + endif() + resolve_dependency(jemalloc HAVE_ALT TRUE) +endif() + +# ---------------------------------------------------------------------- +# mimalloc - Cross-platform high-performance allocator, from Microsoft + +if(ARROW_MIMALLOC) + if(NOT ARROW_ENABLE_THREADING) + message(FATAL_ERROR "Can't use mimalloc with ARROW_ENABLE_THREADING=OFF") + endif() + + message(STATUS "Building (vendored) mimalloc from source") + # We only use a vendored mimalloc as we want to control its build options. + + set(MIMALLOC_LIB_BASE_NAME "mimalloc") + if(${UPPERCASE_BUILD_TYPE} STREQUAL "DEBUG") + set(MIMALLOC_LIB_BASE_NAME "${MIMALLOC_LIB_BASE_NAME}-${LOWERCASE_BUILD_TYPE}") + endif() + + set(MIMALLOC_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/mimalloc_ep/src/mimalloc_ep") + set(MIMALLOC_INCLUDE_DIR "${MIMALLOC_PREFIX}/include/mimalloc-2.2") + set(MIMALLOC_STATIC_LIB + "${MIMALLOC_PREFIX}/lib/mimalloc-2.2/${CMAKE_STATIC_LIBRARY_PREFIX}${MIMALLOC_LIB_BASE_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}" + ) + + set(MIMALLOC_C_FLAGS ${EP_C_FLAGS}) + if(MINGW) + # Workaround https://github.com/microsoft/mimalloc/issues/910 on RTools40 + set(MIMALLOC_C_FLAGS "${MIMALLOC_C_FLAGS} -DERROR_COMMITMENT_MINIMUM=635") + endif() + + set(MIMALLOC_CMAKE_ARGS + ${EP_COMMON_CMAKE_ARGS} + "-DCMAKE_C_FLAGS=${MIMALLOC_C_FLAGS}" + "-DCMAKE_INSTALL_PREFIX=${MIMALLOC_PREFIX}" + -DMI_OVERRIDE=OFF + -DMI_LOCAL_DYNAMIC_TLS=ON + -DMI_BUILD_OBJECT=OFF + -DMI_BUILD_SHARED=OFF + -DMI_BUILD_TESTS=OFF) + + externalproject_add(mimalloc_ep + ${EP_COMMON_OPTIONS} + URL ${MIMALLOC_SOURCE_URL} + URL_HASH "SHA256=${ARROW_MIMALLOC_BUILD_SHA256_CHECKSUM}" + CMAKE_ARGS ${MIMALLOC_CMAKE_ARGS} + BUILD_BYPRODUCTS "${MIMALLOC_STATIC_LIB}") + + file(MAKE_DIRECTORY ${MIMALLOC_INCLUDE_DIR}) + + add_library(mimalloc::mimalloc STATIC IMPORTED) + set_target_properties(mimalloc::mimalloc PROPERTIES IMPORTED_LOCATION + "${MIMALLOC_STATIC_LIB}") + target_include_directories(mimalloc::mimalloc BEFORE + INTERFACE "${MIMALLOC_INCLUDE_DIR}") + target_link_libraries(mimalloc::mimalloc INTERFACE Threads::Threads) + if(WIN32) + target_link_libraries(mimalloc::mimalloc INTERFACE "bcrypt.lib" "psapi.lib") + endif() + add_dependencies(mimalloc::mimalloc mimalloc_ep) + + list(APPEND ARROW_BUNDLED_STATIC_LIBS mimalloc::mimalloc) + + set(mimalloc_VENDORED TRUE) +endif() + +# ---------------------------------------------------------------------- +# Google gtest + +function(build_gtest) + message(STATUS "Building gtest from source") + set(GTEST_VENDORED TRUE) + fetchcontent_declare(googletest + # We should not specify "EXCLUDE_FROM_ALL TRUE" here. + # Because we install GTest with custom path. + # ${FC_DECLARE_COMMON_OPTIONS} + URL ${GTEST_SOURCE_URL} + URL_HASH "SHA256=${ARROW_GTEST_BUILD_SHA256_CHECKSUM}") + prepare_fetchcontent() + # We can remove this once we remove set(CMAKE_POLICY_VERSION_MINIMUM + # 3.5) from prepare_fetchcontent(). + unset(CMAKE_POLICY_VERSION_MINIMUM) + if(APPLE) + string(APPEND CMAKE_CXX_FLAGS " -Wno-unused-value" " -Wno-ignored-attributes") + endif() + # If we're building static libs for Emscripten, we need to build *everything* as + # static libs. + if(CMAKE_SYSTEM_NAME STREQUAL "Emscripten") + set(BUILD_SHARED_LIBS OFF) + set(BUILD_STATIC_LIBS ON) + else() + set(BUILD_SHARED_LIBS ON) + set(BUILD_STATIC_LIBS OFF) + endif() + # We need to use "cache" variable to override the default + # INSTALL_GTEST option by this value. See also: + # https://cmake.org/cmake/help/latest/policy/CMP0077.html + set(INSTALL_GTEST + OFF + CACHE "BOOL" + "Enable installation of googletest. (Projects embedding googletest may want to turn this OFF.)" + FORCE) + string(APPEND CMAKE_INSTALL_INCLUDEDIR "/arrow-gtest") + fetchcontent_makeavailable(googletest) + foreach(target gmock gmock_main gtest gtest_main) + set_target_properties(${target} + PROPERTIES OUTPUT_NAME "arrow_${target}" + PDB_NAME "arrow_${target}" + PDB_NAME_DEBUG "arrow_${target}d" + COMPILE_PDB_NAME "arrow_${target}" + COMPILE_PDB_NAME_DEBUG "arrow_${target}d" + RUNTIME_OUTPUT_DIRECTORY + "${BUILD_OUTPUT_ROOT_DIRECTORY}" + LIBRARY_OUTPUT_DIRECTORY + "${BUILD_OUTPUT_ROOT_DIRECTORY}" + ARCHIVE_OUTPUT_DIRECTORY + "${BUILD_OUTPUT_ROOT_DIRECTORY}" + PDB_OUTPUT_DIRECTORY + "${BUILD_OUTPUT_ROOT_DIRECTORY}") + endforeach() + install(DIRECTORY "${googletest_SOURCE_DIR}/googlemock/include/" + "${googletest_SOURCE_DIR}/googletest/include/" + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") + add_library(arrow::GTest::gtest_headers INTERFACE IMPORTED) + target_include_directories(arrow::GTest::gtest_headers + INTERFACE "${googletest_SOURCE_DIR}/googlemock/include/" + "${googletest_SOURCE_DIR}/googletest/include/") + install(TARGETS gmock gmock_main gtest gtest_main + EXPORT arrow_testing_targets + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}") + if(MSVC) + install(FILES $ $ + $ $ + DESTINATION "${CMAKE_INSTALL_BINDIR}" + OPTIONAL) + endif() + add_library(arrow::GTest::gmock ALIAS gmock) + add_library(arrow::GTest::gmock_main ALIAS gmock_main) + add_library(arrow::GTest::gtest ALIAS gtest) + add_library(arrow::GTest::gtest_main ALIAS gtest_main) +endfunction() + +if(ARROW_TESTING) + set(GTestAlt_NEED_CXX_STANDARD_CHECK TRUE) + resolve_dependency(GTest + ARROW_CMAKE_PACKAGE_NAME + ArrowTesting + HAVE_ALT + TRUE + REQUIRED_VERSION + 1.10.0) + + if(GTest_SOURCE STREQUAL "SYSTEM") + find_package(PkgConfig QUIET) + pkg_check_modules(gtest_PC + gtest + NO_CMAKE_PATH + NO_CMAKE_ENVIRONMENT_PATH + QUIET) + if(gtest_PC_FOUND) + string(APPEND ARROW_TESTING_PC_REQUIRES " gtest") + else() + string(APPEND ARROW_TESTING_PC_CFLAGS " -I$") + string(APPEND ARROW_TESTING_PC_CFLAGS ",-I>") + + string(APPEND ARROW_TESTING_PC_LIBS " $") + endif() + set(ARROW_GTEST_GTEST_HEADERS) + set(ARROW_GTEST_GMOCK GTest::gmock) + set(ARROW_GTEST_GTEST GTest::gtest) + set(ARROW_GTEST_GTEST_MAIN GTest::gtest_main) + set(ARROW_GTEST_GMOCK_MAIN GTest::gmock_main) + else() + string(APPEND ARROW_TESTING_PC_CFLAGS " -I\${includedir}/arrow-gtest") + string(APPEND ARROW_TESTING_PC_LIBS " -larrow_gtest") + set(ARROW_GTEST_GTEST_HEADERS arrow::GTest::gtest_headers) + set(ARROW_GTEST_GMOCK arrow::GTest::gmock) + set(ARROW_GTEST_GTEST arrow::GTest::gtest) + set(ARROW_GTEST_GTEST_MAIN arrow::GTest::gtest_main) + set(ARROW_GTEST_GMOCK_MAIN arrow::GTest::gmock_main) + endif() +endif() + +macro(build_benchmark) + message(STATUS "Building benchmark from source") + + set(GBENCHMARK_CMAKE_CXX_FLAGS "${EP_CXX_FLAGS}") + if(APPLE AND (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" OR CMAKE_CXX_COMPILER_ID + STREQUAL "Clang")) + string(APPEND GBENCHMARK_CMAKE_CXX_FLAGS " -stdlib=libc++") + endif() + + set(GBENCHMARK_PREFIX + "${CMAKE_CURRENT_BINARY_DIR}/gbenchmark_ep/src/gbenchmark_ep-install") + set(GBENCHMARK_INCLUDE_DIR "${GBENCHMARK_PREFIX}/include") + set(GBENCHMARK_STATIC_LIB + "${GBENCHMARK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}benchmark${CMAKE_STATIC_LIBRARY_SUFFIX}" + ) + set(GBENCHMARK_MAIN_STATIC_LIB + "${GBENCHMARK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}benchmark_main${CMAKE_STATIC_LIBRARY_SUFFIX}" + ) + set(GBENCHMARK_CMAKE_ARGS + ${EP_COMMON_CMAKE_ARGS} "-DCMAKE_INSTALL_PREFIX=${GBENCHMARK_PREFIX}" + -DBENCHMARK_ENABLE_TESTING=OFF -DCMAKE_CXX_FLAGS=${GBENCHMARK_CMAKE_CXX_FLAGS}) + if(APPLE) + set(GBENCHMARK_CMAKE_ARGS ${GBENCHMARK_CMAKE_ARGS} "-DBENCHMARK_USE_LIBCXX=ON") + endif() + + externalproject_add(gbenchmark_ep + ${EP_COMMON_OPTIONS} + URL ${GBENCHMARK_SOURCE_URL} + URL_HASH "SHA256=${ARROW_GBENCHMARK_BUILD_SHA256_CHECKSUM}" + BUILD_BYPRODUCTS "${GBENCHMARK_STATIC_LIB}" + "${GBENCHMARK_MAIN_STATIC_LIB}" + CMAKE_ARGS ${GBENCHMARK_CMAKE_ARGS}) + + # The include directory must exist before it is referenced by a target. + file(MAKE_DIRECTORY "${GBENCHMARK_INCLUDE_DIR}") + + add_library(benchmark::benchmark STATIC IMPORTED) + set_target_properties(benchmark::benchmark PROPERTIES IMPORTED_LOCATION + "${GBENCHMARK_STATIC_LIB}") + target_include_directories(benchmark::benchmark BEFORE + INTERFACE "${GBENCHMARK_INCLUDE_DIR}") + target_compile_definitions(benchmark::benchmark INTERFACE "BENCHMARK_STATIC_DEFINE") + + add_library(benchmark::benchmark_main STATIC IMPORTED) + set_target_properties(benchmark::benchmark_main + PROPERTIES IMPORTED_LOCATION "${GBENCHMARK_MAIN_STATIC_LIB}") + target_include_directories(benchmark::benchmark_main BEFORE + INTERFACE "${GBENCHMARK_INCLUDE_DIR}") + target_link_libraries(benchmark::benchmark_main INTERFACE benchmark::benchmark) + + add_dependencies(benchmark::benchmark gbenchmark_ep) + add_dependencies(benchmark::benchmark_main gbenchmark_ep) +endmacro() + +if(ARROW_BUILD_BENCHMARKS) + set(BENCHMARK_REQUIRED_VERSION 1.6.1) + resolve_dependency(benchmark + REQUIRED_VERSION + ${BENCHMARK_REQUIRED_VERSION} + IS_RUNTIME_DEPENDENCY + FALSE) +endif() + +macro(build_rapidjson) + message(STATUS "Building RapidJSON from source") + set(RAPIDJSON_PREFIX + "${CMAKE_CURRENT_BINARY_DIR}/rapidjson_ep/src/rapidjson_ep-install") + set(RAPIDJSON_CMAKE_ARGS + ${EP_COMMON_CMAKE_ARGS} + -DRAPIDJSON_BUILD_DOC=OFF + -DRAPIDJSON_BUILD_EXAMPLES=OFF + -DRAPIDJSON_BUILD_TESTS=OFF + "-DCMAKE_INSTALL_PREFIX=${RAPIDJSON_PREFIX}") + + externalproject_add(rapidjson_ep + ${EP_COMMON_OPTIONS} + PREFIX "${CMAKE_BINARY_DIR}" + URL ${RAPIDJSON_SOURCE_URL} + URL_HASH "SHA256=${ARROW_RAPIDJSON_BUILD_SHA256_CHECKSUM}" + CMAKE_ARGS ${RAPIDJSON_CMAKE_ARGS}) + + set(RAPIDJSON_INCLUDE_DIR "${RAPIDJSON_PREFIX}/include") + # The include directory must exist before it is referenced by a target. + file(MAKE_DIRECTORY "${RAPIDJSON_INCLUDE_DIR}") + + add_library(RapidJSON INTERFACE IMPORTED) + target_include_directories(RapidJSON INTERFACE "${RAPIDJSON_INCLUDE_DIR}") + add_dependencies(RapidJSON rapidjson_ep) + + set(RAPIDJSON_VENDORED TRUE) +endmacro() + +if(ARROW_WITH_RAPIDJSON) + set(ARROW_RAPIDJSON_REQUIRED_VERSION "1.1.0") + resolve_dependency(RapidJSON + HAVE_ALT + TRUE + REQUIRED_VERSION + ${ARROW_RAPIDJSON_REQUIRED_VERSION} + IS_RUNTIME_DEPENDENCY + FALSE) +endif() + +macro(build_xsimd) + message(STATUS "Building xsimd from source") + set(XSIMD_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/xsimd_ep/src/xsimd_ep-install") + set(XSIMD_CMAKE_ARGS ${EP_COMMON_CMAKE_ARGS} "-DCMAKE_INSTALL_PREFIX=${XSIMD_PREFIX}") + + externalproject_add(xsimd_ep + ${EP_COMMON_OPTIONS} + PREFIX "${CMAKE_BINARY_DIR}" + URL ${XSIMD_SOURCE_URL} + URL_HASH "SHA256=${ARROW_XSIMD_BUILD_SHA256_CHECKSUM}" + CMAKE_ARGS ${XSIMD_CMAKE_ARGS}) + + set(XSIMD_INCLUDE_DIR "${XSIMD_PREFIX}/include") + # The include directory must exist before it is referenced by a target. + file(MAKE_DIRECTORY "${XSIMD_INCLUDE_DIR}") + + add_library(arrow::xsimd INTERFACE IMPORTED) + target_include_directories(arrow::xsimd INTERFACE "${XSIMD_INCLUDE_DIR}") + add_dependencies(arrow::xsimd xsimd_ep) + + set(XSIMD_VENDORED TRUE) +endmacro() + +if((NOT ARROW_SIMD_LEVEL STREQUAL "NONE") OR (NOT ARROW_RUNTIME_SIMD_LEVEL STREQUAL "NONE" + )) + set(ARROW_USE_XSIMD TRUE) +else() + set(ARROW_USE_XSIMD FALSE) +endif() + +if(ARROW_USE_XSIMD) + resolve_dependency(xsimd + FORCE_ANY_NEWER_VERSION + TRUE + IS_RUNTIME_DEPENDENCY + FALSE + REQUIRED_VERSION + "13.0.0") + + if(xsimd_SOURCE STREQUAL "BUNDLED") + set(ARROW_XSIMD arrow::xsimd) + else() + message(STATUS "xsimd found. Headers: ${xsimd_INCLUDE_DIRS}") + set(ARROW_XSIMD xsimd) + endif() +endif() + +macro(build_zlib) + message(STATUS "Building ZLIB from source") + + # ensure zlib is built with -fpic + # and make sure that the build finds the version in Emscripten ports + # - n.b. the actual linking happens because -sUSE_ZLIB=1 is + # set in the compiler variables, but cmake expects + # it to exist at configuration time if we aren't building it as + # bundled. We need to do this for all packages + # not just zlib as some depend on zlib, but we don't rebuild + # if it exists already + if(CMAKE_SYSTEM_NAME STREQUAL "Emscripten") + # build zlib using Emscripten ports + if(NOT EXISTS ${EMSCRIPTEN_SYSROOT}/lib/wasm32-emscripten/pic/libz.a) + execute_process(COMMAND embuilder --pic --force build zlib) + endif() + add_library(ZLIB::ZLIB STATIC IMPORTED) + set_property(TARGET ZLIB::ZLIB + PROPERTY IMPORTED_LOCATION + "${EMSCRIPTEN_SYSROOT}/lib/wasm32-emscripten/pic/libz.a") + target_include_directories(ZLIB::ZLIB INTERFACE "${EMSCRIPTEN_SYSROOT}/include") + list(APPEND ARROW_BUNDLED_STATIC_LIBS ZLIB::ZLIB) + else() + set(ZLIB_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/zlib_ep/src/zlib_ep-install") + if(MSVC) + if(${UPPERCASE_BUILD_TYPE} STREQUAL "DEBUG") + set(ZLIB_STATIC_LIB_NAME zlibstaticd.lib) + else() + set(ZLIB_STATIC_LIB_NAME zlibstatic.lib) + endif() + else() + set(ZLIB_STATIC_LIB_NAME libz.a) + endif() + set(ZLIB_STATIC_LIB "${ZLIB_PREFIX}/lib/${ZLIB_STATIC_LIB_NAME}") + set(ZLIB_CMAKE_ARGS ${EP_COMMON_CMAKE_ARGS} "-DCMAKE_INSTALL_PREFIX=${ZLIB_PREFIX}") + + externalproject_add(zlib_ep + ${EP_COMMON_OPTIONS} + URL ${ZLIB_SOURCE_URL} + URL_HASH "SHA256=${ARROW_ZLIB_BUILD_SHA256_CHECKSUM}" + BUILD_BYPRODUCTS "${ZLIB_STATIC_LIB}" + CMAKE_ARGS ${ZLIB_CMAKE_ARGS}) + + file(MAKE_DIRECTORY "${ZLIB_PREFIX}/include") + + add_library(ZLIB::ZLIB STATIC IMPORTED) + set(ZLIB_LIBRARIES ${ZLIB_STATIC_LIB}) + set(ZLIB_INCLUDE_DIRS "${ZLIB_PREFIX}/include") + set_target_properties(ZLIB::ZLIB PROPERTIES IMPORTED_LOCATION ${ZLIB_LIBRARIES}) + target_include_directories(ZLIB::ZLIB BEFORE INTERFACE "${ZLIB_INCLUDE_DIRS}") + + add_dependencies(ZLIB::ZLIB zlib_ep) + list(APPEND ARROW_BUNDLED_STATIC_LIBS ZLIB::ZLIB) + endif() + + set(ZLIB_VENDORED TRUE) +endmacro() + +if(ARROW_WITH_ZLIB) + resolve_dependency(ZLIB PC_PACKAGE_NAMES zlib) +endif() + +function(build_lz4) + message(STATUS "Building LZ4 from source using FetchContent") + + # Set LZ4 as vendored + set(LZ4_VENDORED + TRUE + PARENT_SCOPE) + + # Declare the content + fetchcontent_declare(lz4 + URL ${LZ4_SOURCE_URL} + URL_HASH "SHA256=${ARROW_LZ4_BUILD_SHA256_CHECKSUM}" + SOURCE_SUBDIR "build/cmake") + + # Prepare fetch content environment + prepare_fetchcontent() + + # Set LZ4-specific build options as cache variables + set(LZ4_BUILD_CLI + OFF + CACHE BOOL "Don't build LZ4 CLI" FORCE) + set(LZ4_BUILD_LEGACY_LZ4C + OFF + CACHE BOOL "Don't build legacy LZ4 tools" FORCE) + + # Make the dependency available - this will actually perform the download and configure + fetchcontent_makeavailable(lz4) + + # Use LZ4::lz4 as an imported library not an alias of lz4_static so other targets such as orc + # can depend on it as an external library. External libraries are ignored in + # install(TARGETS orc EXPORT orc_targets) and install(EXPORT orc_targets). + add_library(LZ4::lz4 INTERFACE IMPORTED) + target_link_libraries(LZ4::lz4 INTERFACE lz4_static) + + # Add to bundled static libs. + # We must use lz4_static (not imported target) not LZ4::lz4 (imported target). + set(ARROW_BUNDLED_STATIC_LIBS + ${ARROW_BUNDLED_STATIC_LIBS} lz4_static + PARENT_SCOPE) +endfunction() + +if(ARROW_WITH_LZ4) + resolve_dependency(lz4 + HAVE_ALT + TRUE + PC_PACKAGE_NAMES + liblz4) +endif() + +macro(build_zstd) + message(STATUS "Building Zstandard from source") + + set(ZSTD_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/zstd_ep-install") + + set(ZSTD_CMAKE_ARGS + ${EP_COMMON_CMAKE_ARGS} + "-DCMAKE_INSTALL_PREFIX=${ZSTD_PREFIX}" + -DZSTD_BUILD_PROGRAMS=OFF + -DZSTD_BUILD_SHARED=OFF + -DZSTD_BUILD_STATIC=ON + -DZSTD_MULTITHREAD_SUPPORT=OFF) + + if(MSVC) + set(ZSTD_STATIC_LIB "${ZSTD_PREFIX}/lib/zstd_static.lib") + if(ARROW_USE_STATIC_CRT) + list(APPEND ZSTD_CMAKE_ARGS "-DZSTD_USE_STATIC_RUNTIME=ON") + endif() + else() + set(ZSTD_STATIC_LIB "${ZSTD_PREFIX}/lib/libzstd.a") + endif() + + externalproject_add(zstd_ep + ${EP_COMMON_OPTIONS} + CMAKE_ARGS ${ZSTD_CMAKE_ARGS} + SOURCE_SUBDIR "build/cmake" + INSTALL_DIR ${ZSTD_PREFIX} + URL ${ZSTD_SOURCE_URL} + URL_HASH "SHA256=${ARROW_ZSTD_BUILD_SHA256_CHECKSUM}" + BUILD_BYPRODUCTS "${ZSTD_STATIC_LIB}") + + file(MAKE_DIRECTORY "${ZSTD_PREFIX}/include") + + add_library(zstd::libzstd_static STATIC IMPORTED) + set_target_properties(zstd::libzstd_static PROPERTIES IMPORTED_LOCATION + "${ZSTD_STATIC_LIB}") + target_include_directories(zstd::libzstd_static BEFORE + INTERFACE "${ZSTD_PREFIX}/include") + + add_dependencies(zstd::libzstd_static zstd_ep) + + list(APPEND ARROW_BUNDLED_STATIC_LIBS zstd::libzstd_static) + + set(ZSTD_VENDORED TRUE) +endmacro() + +if(ARROW_WITH_ZSTD) + # ARROW-13384: ZSTD_minCLevel was added in v1.4.0, required by ARROW-13091 + resolve_dependency(zstd + HAVE_ALT + TRUE + PC_PACKAGE_NAMES + libzstd + REQUIRED_VERSION + 1.4.0) - if(APPLE) - # This is due to upstream absl::cctz issue - # https://github.com/abseil/abseil-cpp/issues/283 - find_library(CoreFoundation CoreFoundation) - set_property(TARGET absl::time - APPEND - PROPERTY INTERFACE_LINK_LIBRARIES ${CoreFoundation}) + if(ZSTD_VENDORED) + set(ARROW_ZSTD_LIBZSTD zstd::libzstd_static) + else() + if(ARROW_ZSTD_USE_SHARED) + set(ARROW_ZSTD_LIBZSTD zstd::libzstd_shared) + else() + set(ARROW_ZSTD_LIBZSTD zstd::libzstd_static) + endif() + # vcpkg uses zstd::libzstd + if(NOT TARGET ${ARROW_ZSTD_LIBZSTD} AND TARGET zstd::libzstd) + set(ARROW_ZSTD_LIBZSTD zstd::libzstd) + endif() + if(NOT TARGET ${ARROW_ZSTD_LIBZSTD}) + message(FATAL_ERROR "Zstandard target doesn't exist: ${ARROW_ZSTD_LIBZSTD}") + endif() + message(STATUS "Found Zstandard: ${ARROW_ZSTD_LIBZSTD}") endif() +endif() - externalproject_add(absl_ep +# ---------------------------------------------------------------------- +# RE2 (required for Gandiva) + +macro(build_re2) + message(STATUS "Building RE2 from source") + set(RE2_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/re2_ep-install") + set(RE2_STATIC_LIB + "${RE2_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}re2${CMAKE_STATIC_LIBRARY_SUFFIX}") + + set(RE2_CMAKE_ARGS ${EP_COMMON_CMAKE_ARGS} "-DCMAKE_INSTALL_PREFIX=${RE2_PREFIX}") + + externalproject_add(re2_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}) + INSTALL_DIR ${RE2_PREFIX} + URL ${RE2_SOURCE_URL} + URL_HASH "SHA256=${ARROW_RE2_BUILD_SHA256_CHECKSUM}" + CMAKE_ARGS ${RE2_CMAKE_ARGS} + BUILD_BYPRODUCTS "${RE2_STATIC_LIB}") - # Work around https://gitlab.kitware.com/cmake/cmake/issues/15052 - file(MAKE_DIRECTORY ${ABSL_INCLUDE_DIR}) + file(MAKE_DIRECTORY "${RE2_PREFIX}/include") + add_library(re2::re2 STATIC IMPORTED) + set_target_properties(re2::re2 PROPERTIES IMPORTED_LOCATION "${RE2_STATIC_LIB}") + target_include_directories(re2::re2 BEFORE INTERFACE "${RE2_PREFIX}/include") - set(ABSL_VENDORED TRUE) + add_dependencies(re2::re2 re2_ep) + set(RE2_VENDORED TRUE) + # Set values so that FindRE2 finds this too + set(RE2_LIB ${RE2_STATIC_LIB}) + set(RE2_INCLUDE_DIR "${RE2_PREFIX}/include") + + list(APPEND ARROW_BUNDLED_STATIC_LIBS re2::re2) +endmacro() + +if(ARROW_WITH_RE2) + resolve_dependency(re2 + HAVE_ALT + TRUE + PC_PACKAGE_NAMES + re2) +endif() + +macro(build_bzip2) + message(STATUS "Building BZip2 from source") + set(BZIP2_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/bzip2_ep-install") + set(BZIP2_STATIC_LIB + "${BZIP2_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}bz2${CMAKE_STATIC_LIBRARY_SUFFIX}" + ) + + set(BZIP2_EXTRA_ARGS "CC=${CMAKE_C_COMPILER}" "CFLAGS=${EP_C_FLAGS}") + + if(CMAKE_OSX_SYSROOT) + list(APPEND BZIP2_EXTRA_ARGS "SDKROOT=${CMAKE_OSX_SYSROOT}") + endif() + + if(CMAKE_AR) + list(APPEND BZIP2_EXTRA_ARGS AR=${CMAKE_AR}) + endif() + + if(CMAKE_RANLIB) + list(APPEND BZIP2_EXTRA_ARGS RANLIB=${CMAKE_RANLIB}) + endif() + + externalproject_add(bzip2_ep + ${EP_COMMON_OPTIONS} + CONFIGURE_COMMAND "" + BUILD_IN_SOURCE 1 + BUILD_COMMAND ${MAKE} libbz2.a ${MAKE_BUILD_ARGS} + ${BZIP2_EXTRA_ARGS} + INSTALL_COMMAND ${MAKE} install -j1 PREFIX=${BZIP2_PREFIX} + ${BZIP2_EXTRA_ARGS} + INSTALL_DIR ${BZIP2_PREFIX} + URL ${ARROW_BZIP2_SOURCE_URL} + URL_HASH "SHA256=${ARROW_BZIP2_BUILD_SHA256_CHECKSUM}" + BUILD_BYPRODUCTS "${BZIP2_STATIC_LIB}") + + file(MAKE_DIRECTORY "${BZIP2_PREFIX}/include") + add_library(BZip2::BZip2 STATIC IMPORTED) + set_target_properties(BZip2::BZip2 PROPERTIES IMPORTED_LOCATION "${BZIP2_STATIC_LIB}") + target_include_directories(BZip2::BZip2 BEFORE INTERFACE "${BZIP2_PREFIX}/include") + set(BZIP2_INCLUDE_DIR "${BZIP2_PREFIX}/include") + + add_dependencies(BZip2::BZip2 bzip2_ep) + + list(APPEND ARROW_BUNDLED_STATIC_LIBS BZip2::BZip2) +endmacro() + +if(ARROW_WITH_BZ2) + resolve_dependency(BZip2 PC_PACKAGE_NAMES bzip2) + + if(${BZip2_SOURCE} STREQUAL "SYSTEM" + AND NOT bzip2_PC_FOUND + AND ARROW_BUILD_STATIC) + get_target_property(BZIP2_TYPE BZip2::BZip2 TYPE) + if(BZIP2_TYPE STREQUAL "INTERFACE_LIBRARY") + # Conan + string(APPEND ARROW_PC_LIBS_PRIVATE + " $>>") + else() + string(APPEND ARROW_PC_LIBS_PRIVATE " $") + endif() + endif() +endif() + +macro(build_utf8proc) + message(STATUS "Building utf8proc from source") + set(UTF8PROC_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/utf8proc_ep-install") + if(MSVC) + set(UTF8PROC_STATIC_LIB "${UTF8PROC_PREFIX}/lib/utf8proc_static.lib") + else() + set(UTF8PROC_STATIC_LIB + "${UTF8PROC_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}utf8proc${CMAKE_STATIC_LIBRARY_SUFFIX}" + ) + endif() + + set(UTF8PROC_CMAKE_ARGS ${EP_COMMON_CMAKE_ARGS} + "-DCMAKE_INSTALL_PREFIX=${UTF8PROC_PREFIX}") + + # We can remove this once we remove -DCMAKE_POLICY_VERSION_MINIMUM=3.5 + # from EP_COMMON_CMAKE_ARGS. + list(REMOVE_ITEM UTF8PROC_CMAKE_ARGS -DCMAKE_POLICY_VERSION_MINIMUM=3.5) + + externalproject_add(utf8proc_ep + ${EP_COMMON_OPTIONS} + CMAKE_ARGS ${UTF8PROC_CMAKE_ARGS} + INSTALL_DIR ${UTF8PROC_PREFIX} + URL ${ARROW_UTF8PROC_SOURCE_URL} + URL_HASH "SHA256=${ARROW_UTF8PROC_BUILD_SHA256_CHECKSUM}" + BUILD_BYPRODUCTS "${UTF8PROC_STATIC_LIB}") + + file(MAKE_DIRECTORY "${UTF8PROC_PREFIX}/include") + add_library(utf8proc::utf8proc STATIC IMPORTED) + set_target_properties(utf8proc::utf8proc + PROPERTIES IMPORTED_LOCATION "${UTF8PROC_STATIC_LIB}" + INTERFACE_COMPILE_DEFINITIONS "UTF8PROC_STATIC") + target_include_directories(utf8proc::utf8proc BEFORE + INTERFACE "${UTF8PROC_PREFIX}/include") + + add_dependencies(utf8proc::utf8proc utf8proc_ep) + + list(APPEND ARROW_BUNDLED_STATIC_LIBS utf8proc::utf8proc) +endmacro() + +if(ARROW_WITH_UTF8PROC) + set(utf8proc_resolve_dependency_args utf8proc PC_PACKAGE_NAMES libutf8proc) + if(NOT ARROW_VCPKG) + # utf8proc in vcpkg doesn't provide version information: + # https://github.com/microsoft/vcpkg/issues/39176 + list(APPEND utf8proc_resolve_dependency_args REQUIRED_VERSION "2.2.0") + endif() + resolve_dependency(${utf8proc_resolve_dependency_args}) +endif() + +macro(build_cares) + message(STATUS "Building c-ares from source") + set(CARES_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/cares_ep-install") + set(CARES_INCLUDE_DIR "${CARES_PREFIX}/include") + + # If you set -DCARES_SHARED=ON then the build system names the library + # libcares_static.a + set(CARES_STATIC_LIB + "${CARES_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}cares${CMAKE_STATIC_LIBRARY_SUFFIX}" + ) + + set(CARES_CMAKE_ARGS "${EP_COMMON_CMAKE_ARGS}" "-DCMAKE_INSTALL_PREFIX=${CARES_PREFIX}" + -DCARES_SHARED=OFF -DCARES_STATIC=ON) + + externalproject_add(cares_ep + ${EP_COMMON_OPTIONS} + URL ${CARES_SOURCE_URL} + URL_HASH "SHA256=${ARROW_CARES_BUILD_SHA256_CHECKSUM}" + CMAKE_ARGS ${CARES_CMAKE_ARGS} + BUILD_BYPRODUCTS "${CARES_STATIC_LIB}") + + file(MAKE_DIRECTORY ${CARES_INCLUDE_DIR}) + + add_library(c-ares::cares STATIC IMPORTED) + set_target_properties(c-ares::cares PROPERTIES IMPORTED_LOCATION "${CARES_STATIC_LIB}") + target_include_directories(c-ares::cares BEFORE INTERFACE "${CARES_INCLUDE_DIR}") + add_dependencies(c-ares::cares cares_ep) + + if(APPLE) + # libresolv must be linked from c-ares version 1.16.1 + find_library(LIBRESOLV_LIBRARY NAMES resolv libresolv REQUIRED) + set_target_properties(c-ares::cares PROPERTIES INTERFACE_LINK_LIBRARIES + "${LIBRESOLV_LIBRARY}") + endif() + + set(CARES_VENDORED TRUE) + + list(APPEND ARROW_BUNDLED_STATIC_LIBS c-ares::cares) endmacro() +# ---------------------------------------------------------------------- +# Dependencies for Arrow Flight RPC + macro(build_grpc) resolve_dependency(c-ares ARROW_CMAKE_PACKAGE_NAME @@ -3944,9 +4539,6 @@ macro(build_grpc) set(GRPC_STATIC_LIBRARY_GRPCPP_REFLECTION "${GRPC_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}grpc++_reflection${CMAKE_STATIC_LIBRARY_SUFFIX}" ) - set(GRPC_STATIC_LIBRARY_UPB - "${GRPC_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}upb${CMAKE_STATIC_LIBRARY_SUFFIX}" - ) set(GRPC_CPP_PLUGIN "${GRPC_PREFIX}/bin/grpc_cpp_plugin${CMAKE_EXECUTABLE_SUFFIX}") set(GRPC_CMAKE_PREFIX) @@ -4055,7 +4647,6 @@ macro(build_grpc) ${GRPC_STATIC_LIBRARY_GRPCPP} ${GRPC_STATIC_LIBRARY_ADDRESS_SORTING} ${GRPC_STATIC_LIBRARY_GRPCPP_REFLECTION} - ${GRPC_STATIC_LIBRARY_UPB} ${GRPC_CPP_PLUGIN} CMAKE_ARGS ${GRPC_CMAKE_ARGS} DEPENDS ${grpc_dependencies}) @@ -4063,11 +4654,6 @@ macro(build_grpc) # Work around https://gitlab.kitware.com/cmake/cmake/issues/15052 file(MAKE_DIRECTORY ${GRPC_INCLUDE_DIR}) - add_library(gRPC::upb STATIC IMPORTED) - set_target_properties(gRPC::upb PROPERTIES IMPORTED_LOCATION - "${GRPC_STATIC_LIBRARY_UPB}") - target_include_directories(gRPC::upb BEFORE INTERFACE "${GRPC_INCLUDE_DIR}") - set(GRPC_GPR_ABSL_LIBRARIES # We need a flattened list of Abseil libraries for the static linking case, # because our method for creating arrow_bundled_dependencies.a doesn't walk @@ -4086,7 +4672,6 @@ macro(build_grpc) absl::low_level_hash absl::random_distributions absl::random_seed_sequences - absl::random_internal_pool_urbg absl::random_internal_randen absl::random_internal_randen_hwaes absl::random_internal_randen_hwaes_impl @@ -4102,7 +4687,6 @@ macro(build_grpc) absl::cordz_functions absl::exponential_biased absl::cordz_handle - absl::bad_optional_access absl::str_format_internal absl::synchronization absl::graphcycles_internal @@ -4120,7 +4704,6 @@ macro(build_grpc) absl::int128 absl::throw_delegate absl::time_zone - absl::bad_variant_access absl::raw_logging_internal absl::log_severity) @@ -4148,8 +4731,9 @@ macro(build_grpc) "${GRPC_STATIC_LIBRARY_GRPC}") target_link_libraries(gRPC::grpc INTERFACE gRPC::gpr - gRPC::upb gRPC::address_sorting + upb::upb + utf8_range::utf8_range re2::re2 c-ares::cares ZLIB::ZLIB @@ -4198,36 +4782,12 @@ macro(build_grpc) gRPC::address_sorting gRPC::gpr gRPC::grpc - gRPC::grpcpp_for_bundling - gRPC::upb) + gRPC::grpcpp_for_bundling) if(ABSL_VENDORED) list(APPEND ARROW_BUNDLED_STATIC_LIBS ${GRPC_GPR_ABSL_LIBRARIES}) 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 - 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") @@ -4506,6 +5066,7 @@ macro(build_google_cloud_cpp_storage) target_link_libraries(google-cloud-cpp::storage INTERFACE google-cloud-cpp::common google-cloud-cpp::rest-internal + absl::crc32c absl::memory absl::strings absl::str_format @@ -4533,8 +5094,6 @@ macro(build_google_cloud_cpp_storage) # (and then some regexing) list(APPEND ARROW_BUNDLED_STATIC_LIBS - absl::bad_optional_access - absl::bad_variant_access absl::base absl::civil_time absl::cord @@ -4542,6 +5101,7 @@ macro(build_google_cloud_cpp_storage) absl::cordz_functions absl::cordz_info absl::cordz_handle + absl::crc32c absl::debugging_internal absl::demangle_internal absl::exponential_biased @@ -4610,7 +5170,9 @@ function(build_orc) # We can remove this once bundled Apache ORC is 2.2.1 or later. list(APPEND ORC_PATCHES ${CMAKE_CURRENT_LIST_DIR}/orc-2345.patch) endif() - if(Protobuf_VERSION VERSION_GREATER_EQUAL 32.0) + if(Protobuf_VERSION VERSION_GREATER_EQUAL 22.0 + OR (PROTOBUF_VENDORED AND ARROW_PROTOBUF_STRIPPED_BUILD_VERSION VERSION_GREATER_EQUAL + 22.0)) # We can remove this once bundled Apache ORC is 2.2.1 or later. list(APPEND ORC_PATCHES ${CMAKE_CURRENT_LIST_DIR}/orc-2357.patch) endif() @@ -4722,6 +5284,13 @@ 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_CMAKE_PREFIX) + set(ORC_CMAKE_PREFIX "${ORC_CMAKE_PREFIX};${ABSL_PREFIX}") + set(ORC_CMAKE_PREFIX "${ORC_CMAKE_PREFIX};${PROTOBUF_PREFIX}") + + string(REPLACE ";" ${EP_LIST_SEPARATOR} ORC_CMAKE_PREFIX_ALT_SEP + "${ORC_CMAKE_PREFIX}") + set(ORC_CMAKE_ARGS ${EP_COMMON_CMAKE_ARGS} "-DCMAKE_INSTALL_PREFIX=${ORC_PREFIX}" @@ -4731,6 +5300,7 @@ function(build_orc) -DBUILD_TOOLS=OFF -DBUILD_CPP_TESTS=OFF -DINSTALL_VENDORED_LIBS=OFF + -DCMAKE_PREFIX_PATH='${ORC_CMAKE_PREFIX_ALT_SEP}' "-DPROTOBUF_EXECUTABLE=$" "-DPROTOBUF_HOME=${ORC_PROTOBUF_ROOT}" "-DPROTOBUF_INCLUDE_DIR=$" @@ -4814,10 +5384,6 @@ endif() macro(build_opentelemetry) message(STATUS "Building OpenTelemetry from source") - if(Protobuf_VERSION VERSION_GREATER_EQUAL 3.22) - message(FATAL_ERROR "GH-36013: Can't use bundled OpenTelemetry with Protobuf 3.22 or later. " - "Protobuf is version ${Protobuf_VERSION}") - endif() set(OPENTELEMETRY_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/opentelemetry_ep-install") set(OPENTELEMETRY_INCLUDE_DIR "${OPENTELEMETRY_PREFIX}/include") @@ -4898,6 +5464,8 @@ macro(build_opentelemetry) set(_OPENTELEMETRY_DEPENDENCIES "opentelemetry_dependencies") list(APPEND ARROW_BUNDLED_STATIC_LIBS ${OPENTELEMETRY_LIBRARIES}) list(APPEND OPENTELEMETRY_PREFIX_PATH_LIST ${NLOHMANN_JSON_PREFIX}) + list(APPEND OPENTELEMETRY_PREFIX_PATH_LIST ${ABSL_PREFIX}) + list(APPEND OPENTELEMETRY_PREFIX_PATH_LIST ${PROTOBUF_PREFIX}) get_target_property(OPENTELEMETRY_PROTOBUF_INCLUDE_DIR ${ARROW_PROTOBUF_LIBPROTOBUF} INTERFACE_INCLUDE_DIRECTORIES) diff --git a/cpp/thirdparty/versions.txt b/cpp/thirdparty/versions.txt index 9f16db79f125e..f3ffbac3137ce 100644 --- a/cpp/thirdparty/versions.txt +++ b/cpp/thirdparty/versions.txt @@ -23,8 +23,8 @@ # `DEPENDENCIES` array (see the comment on top of the declaration for the # format). -ARROW_ABSL_BUILD_VERSION=20211102.0 -ARROW_ABSL_BUILD_SHA256_CHECKSUM=dcf71b9cba8dc0ca9940c4b316a0c796be8fab42b070bb6b7cab62b48f0e66c4 +ARROW_ABSL_BUILD_VERSION=20250512.1 +ARROW_ABSL_BUILD_SHA256_CHECKSUM=9b7a064305e9fd94d124ffa6cc358592eb42b5da588fb4e07d09254aa40086db ARROW_AWS_C_AUTH_BUILD_VERSION=v0.9.0 ARROW_AWS_C_AUTH_BUILD_SHA256_CHECKSUM=aa6e98864fefb95c249c100da4ae7aed36ba13a8a91415791ec6fad20bec0427 ARROW_AWS_C_CAL_BUILD_VERSION=v0.9.2 @@ -74,8 +74,8 @@ ARROW_GLOG_BUILD_VERSION=v0.5.0 ARROW_GLOG_BUILD_SHA256_CHECKSUM=eede71f28371bf39aa69b45de23b329d37214016e2055269b3b5e7cfd40b59f5 ARROW_GOOGLE_CLOUD_CPP_BUILD_VERSION=v2.22.0 ARROW_GOOGLE_CLOUD_CPP_BUILD_SHA256_CHECKSUM=0c68782e57959c82e0c81def805c01460a042c1aae0c2feee905acaa2a2dc9bf -ARROW_GRPC_BUILD_VERSION=v1.46.3 -ARROW_GRPC_BUILD_SHA256_CHECKSUM=d6cbf22cb5007af71b61c6be316a79397469c58c82a942552a62e708bce60964 +ARROW_GRPC_BUILD_VERSION=v1.69.0 +ARROW_GRPC_BUILD_SHA256_CHECKSUM=cd256d91781911d46a57506978b3979bfee45d5086a1b6668a3ae19c5e77f8dc ARROW_GTEST_BUILD_VERSION=1.16.0 ARROW_GTEST_BUILD_SHA256_CHECKSUM=78c676fc63881529bf97bf9d45948d905a66833fbfa5318ea2cd7478cb98f399 ARROW_JEMALLOC_BUILD_VERSION=5.3.0 @@ -92,8 +92,8 @@ ARROW_OPENTELEMETRY_PROTO_BUILD_VERSION=v1.7.0 ARROW_OPENTELEMETRY_PROTO_BUILD_SHA256_CHECKSUM=11330d850f5e24d34c4246bc8cb21fcd311e7565d219195713455a576bb11bed ARROW_ORC_BUILD_VERSION=2.2.0 ARROW_ORC_BUILD_SHA256_CHECKSUM=b15aca45a7e73ffbd1bbc36a78cd1422d41f07721092a25f43448e6e16f4763b -ARROW_PROTOBUF_BUILD_VERSION=v21.3 -ARROW_PROTOBUF_BUILD_SHA256_CHECKSUM=2f723218f6cb709ae4cdc4fb5ed56a5951fc5d466f0128ce4c946b8c78c8c49f +ARROW_PROTOBUF_BUILD_VERSION=v31.1 +ARROW_PROTOBUF_BUILD_SHA256_CHECKSUM=12bfd76d27b9ac3d65c00966901609e020481b9474ef75c7ff4601ac06fa0b82 # Because of https://github.com/Tencent/rapidjson/pull/1323, we require # a pre-release version of RapidJSON to build with GCC 8 without # warnings. @@ -157,7 +157,7 @@ DEPENDENCIES=( "ARROW_OPENTELEMETRY_URL opentelemetry-cpp-${ARROW_OPENTELEMETRY_BUILD_VERSION}.tar.gz https://github.com/open-telemetry/opentelemetry-cpp/archive/refs/tags/${ARROW_OPENTELEMETRY_BUILD_VERSION}.tar.gz" "ARROW_OPENTELEMETRY_PROTO_URL opentelemetry-proto-${ARROW_OPENTELEMETRY_PROTO_BUILD_VERSION}.tar.gz https://github.com/open-telemetry/opentelemetry-proto/archive/refs/tags/${ARROW_OPENTELEMETRY_PROTO_BUILD_VERSION}.tar.gz" "ARROW_ORC_URL orc-${ARROW_ORC_BUILD_VERSION}.tar.gz https://www.apache.org/dyn/closer.lua/orc/orc-${ARROW_ORC_BUILD_VERSION}/orc-${ARROW_ORC_BUILD_VERSION}.tar.gz?action=download" - "ARROW_PROTOBUF_URL protobuf-${ARROW_PROTOBUF_BUILD_VERSION}.tar.gz https://github.com/google/protobuf/releases/download/${ARROW_PROTOBUF_BUILD_VERSION}/protobuf-all-${ARROW_PROTOBUF_BUILD_VERSION:1}.tar.gz" + "ARROW_PROTOBUF_URL protobuf-${ARROW_PROTOBUF_BUILD_VERSION}.tar.gz https://github.com/google/protobuf/releases/download/${ARROW_PROTOBUF_BUILD_VERSION}/protobuf-${ARROW_PROTOBUF_BUILD_VERSION:1}.tar.gz" "ARROW_RAPIDJSON_URL rapidjson-${ARROW_RAPIDJSON_BUILD_VERSION}.tar.gz https://github.com/miloyip/rapidjson/archive/${ARROW_RAPIDJSON_BUILD_VERSION}.tar.gz" "ARROW_RE2_URL re2-${ARROW_RE2_BUILD_VERSION}.tar.gz https://github.com/google/re2/archive/${ARROW_RE2_BUILD_VERSION}.tar.gz" "ARROW_S2N_TLS_URL s2n-${ARROW_S2N_TLS_BUILD_VERSION}.tar.gz https://github.com/aws/s2n-tls/archive/${ARROW_S2N_TLS_BUILD_VERSION}.tar.gz"