From a73014065c9935cc6462e79247b4096c97ff90e0 Mon Sep 17 00:00:00 2001 From: AntoinePrv Date: Tue, 30 Jun 2026 11:44:40 +0200 Subject: [PATCH 1/2] Use fetchcontent for xsimd --- cpp/cmake_modules/ThirdpartyToolchain.cmake | 38 ++++++++++++--------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake b/cpp/cmake_modules/ThirdpartyToolchain.cmake index bcbf2e4645a6..08f6604956a6 100644 --- a/cpp/cmake_modules/ThirdpartyToolchain.cmake +++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake @@ -2822,28 +2822,32 @@ if(ARROW_WITH_RAPIDJSON) FALSE) endif() -macro(build_xsimd) +function(build_xsimd) + list(APPEND CMAKE_MESSAGE_INDENT "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}") + prepare_fetchcontent() + fetchcontent_declare(xsimd + ${FC_DECLARE_COMMON_OPTIONS} OVERRIDE_FIND_PACKAGE + URL ${XSIMD_SOURCE_URL} + URL_HASH "SHA256=${ARROW_XSIMD_BUILD_SHA256_CHECKSUM}") + fetchcontent_makeavailable(xsimd) + set(xsimd_INCLUDE_DIR "${xsimd_SOURCE_DIR}/include") add_library(arrow::xsimd INTERFACE IMPORTED) - target_include_directories(arrow::xsimd INTERFACE "${XSIMD_INCLUDE_DIR}") - add_dependencies(arrow::xsimd xsimd_ep) + target_include_directories(arrow::xsimd INTERFACE "${xsimd_INCLUDE_DIR}") - set(XSIMD_VENDORED TRUE) -endmacro() + set(XSIMD_VENDORED + TRUE + PARENT_SCOPE) + set(xsimd_INCLUDE_DIR + "${xsimd_INCLUDE_DIR}" + PARENT_SCOPE) + set(xsimd_FOUND + TRUE + PARENT_SCOPE) + list(POP_BACK CMAKE_MESSAGE_INDENT) +endfunction() # Xsimd is mandatory as its CPU feature detection is the basis for Arrow CpuInfo resolve_dependency(xsimd From 2027caf63e0d69ef78ffa93ba4d78fcf2fb67205 Mon Sep 17 00:00:00 2001 From: AntoinePrv Date: Mon, 6 Jul 2026 14:30:16 +0200 Subject: [PATCH 2/2] Handle cmake<3.28 --- cpp/cmake_modules/ThirdpartyToolchain.cmake | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake b/cpp/cmake_modules/ThirdpartyToolchain.cmake index 08f6604956a6..07054b4bb295 100644 --- a/cpp/cmake_modules/ThirdpartyToolchain.cmake +++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake @@ -2833,6 +2833,10 @@ function(build_xsimd) URL_HASH "SHA256=${ARROW_XSIMD_BUILD_SHA256_CHECKSUM}") fetchcontent_makeavailable(xsimd) + if(CMAKE_VERSION VERSION_LESS 3.28) + set_property(DIRECTORY ${xsimd_SOURCE_DIR} PROPERTY EXCLUDE_FROM_ALL TRUE) + endif() + set(xsimd_INCLUDE_DIR "${xsimd_SOURCE_DIR}/include") add_library(arrow::xsimd INTERFACE IMPORTED) target_include_directories(arrow::xsimd INTERFACE "${xsimd_INCLUDE_DIR}")