Skip to content

Commit 87feab0

Browse files
committed
Use FetchContent for Thrift
1 parent 5ef87b5 commit 87feab0

File tree

3 files changed

+76
-108
lines changed

3 files changed

+76
-108
lines changed

cpp/cmake_modules/ThirdpartyToolchain.cmake

Lines changed: 68 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -1050,25 +1050,36 @@ function(build_boost)
10501050
message(STATUS "Building from source")
10511051

10521052
fetchcontent_declare(boost
1053-
${FC_DECLARE_COMMON_OPTIONS}
1053+
${FC_DECLARE_COMMON_OPTIONS} OVERRIDE_FIND_PACKAGE
10541054
URL ${BOOST_SOURCE_URL}
10551055
URL_HASH "SHA256=${ARROW_BOOST_BUILD_SHA256_CHECKSUM}")
10561056

10571057
prepare_fetchcontent()
1058-
10591058
set(BOOST_ENABLE_COMPATIBILITY_TARGETS ON)
10601059
set(BOOST_SKIP_INSTALL_RULES ON)
1061-
set(BOOST_INCLUDE_LIBRARIES ${ARROW_BOOST_COMPONENTS}
1062-
${ARROW_BOOST_OPTIONAL_COMPONENTS})
1060+
set(BOOST_INCLUDE_LIBRARIES
1061+
${ARROW_BOOST_COMPONENTS}
1062+
${ARROW_BOOST_OPTIONAL_COMPONENTS}
1063+
algorithm
1064+
locale
1065+
multiprecision
1066+
numeric/conversion
1067+
scope_exit)
10631068
if(ARROW_WITH_THRIFT)
10641069
list(APPEND BOOST_INCLUDE_LIBRARIES uuid)
10651070
endif()
10661071

10671072
fetchcontent_makeavailable(boost)
10681073

10691074
foreach(library ${BOOST_INCLUDE_LIBRARIES})
1070-
target_link_libraries(boost_${library} INTERFACE Boost::disable_autolinking)
1075+
# boost_numeric/conversion ->
1076+
# boost_numeric_conversion
1077+
string(REPLACE "/" "_" target_name "boost_${library}")
1078+
target_link_libraries(${target_name} INTERFACE Boost::disable_autolinking)
10711079
endforeach()
1080+
target_link_libraries(boost_headers
1081+
INTERFACE Boost::algorithm Boost::multiprecision
1082+
Boost::numeric_conversion Boost::scope_exit)
10721083

10731084
set(BOOST_VENDORED
10741085
TRUE
@@ -1630,102 +1641,63 @@ endif()
16301641
# ----------------------------------------------------------------------
16311642
# Thrift
16321643

1633-
macro(build_thrift)
1634-
message(STATUS "Building Apache Thrift from source")
1635-
set(THRIFT_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/thrift_ep-install")
1636-
set(THRIFT_INCLUDE_DIR "${THRIFT_PREFIX}/include")
1637-
set(THRIFT_CMAKE_ARGS
1638-
${EP_COMMON_CMAKE_ARGS}
1639-
"-DCMAKE_INSTALL_PREFIX=${THRIFT_PREFIX}"
1640-
"-DCMAKE_INSTALL_RPATH=${THRIFT_PREFIX}/lib"
1641-
# Work around https://gitlab.kitware.com/cmake/cmake/issues/18865
1642-
-DBoost_NO_BOOST_CMAKE=ON
1643-
-DBUILD_COMPILER=OFF
1644-
-DBUILD_EXAMPLES=OFF
1645-
-DBUILD_TUTORIALS=OFF
1646-
-DCMAKE_DEBUG_POSTFIX=
1647-
-DWITH_AS3=OFF
1648-
-DWITH_CPP=ON
1649-
-DWITH_C_GLIB=OFF
1650-
-DWITH_JAVA=OFF
1651-
-DWITH_JAVASCRIPT=OFF
1652-
-DWITH_LIBEVENT=OFF
1653-
-DWITH_NODEJS=OFF
1654-
-DWITH_PYTHON=OFF
1655-
-DWITH_QT5=OFF
1656-
-DWITH_ZLIB=OFF)
1657-
1658-
# Thrift also uses boost. Forward important boost settings if there were ones passed.
1659-
if(DEFINED BOOST_ROOT)
1660-
list(APPEND THRIFT_CMAKE_ARGS "-DBOOST_ROOT=${BOOST_ROOT}")
1661-
endif()
1662-
list(APPEND
1663-
THRIFT_CMAKE_ARGS
1664-
"-DBoost_INCLUDE_DIR=$<TARGET_PROPERTY:Boost::headers,INTERFACE_INCLUDE_DIRECTORIES>"
1665-
)
1666-
if(DEFINED Boost_NAMESPACE)
1667-
list(APPEND THRIFT_CMAKE_ARGS "-DBoost_NAMESPACE=${Boost_NAMESPACE}")
1668-
endif()
1644+
function(build_thrift)
1645+
list(APPEND CMAKE_MESSAGE_INDENT "Thrift: ")
1646+
message(STATUS "Building from source")
16691647

1648+
fetchcontent_declare(thrift
1649+
${FC_DECLARE_COMMON_OPTIONS}
1650+
URL ${THRIFT_SOURCE_URL}
1651+
URL_HASH "SHA256=${ARROW_THRIFT_BUILD_SHA256_CHECKSUM}")
1652+
1653+
prepare_fetchcontent()
1654+
set(BUILD_COMPILER OFF)
1655+
set(BUILD_EXAMPLES OFF)
1656+
set(BUILD_TUTORIALS OFF)
1657+
set(CMAKE_UNITY_BUILD OFF)
1658+
set(WITH_AS3 OFF)
1659+
set(WITH_CPP ON)
1660+
set(WITH_C_GLIB OFF)
1661+
set(WITH_JAVA OFF)
1662+
set(WITH_JAVASCRIPT OFF)
1663+
set(WITH_LIBEVENT OFF)
16701664
if(MSVC)
16711665
if(ARROW_USE_STATIC_CRT)
1672-
set(THRIFT_LIB_SUFFIX "mt")
1673-
list(APPEND THRIFT_CMAKE_ARGS "-DWITH_MT=ON")
1666+
set(WITH_MT ON)
16741667
else()
1675-
set(THRIFT_LIB_SUFFIX "md")
1676-
list(APPEND THRIFT_CMAKE_ARGS "-DWITH_MT=OFF")
1668+
set(WITH_MT OFF)
16771669
endif()
1678-
# NOTE(amoeba): When you bump Thrift to >=0.21.0, change bin to lib
1679-
set(THRIFT_LIB
1680-
"${THRIFT_PREFIX}/bin/${CMAKE_IMPORT_LIBRARY_PREFIX}thrift${THRIFT_LIB_SUFFIX}${CMAKE_IMPORT_LIBRARY_SUFFIX}"
1681-
)
1682-
else()
1683-
set(THRIFT_LIB
1684-
"${THRIFT_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}thrift${CMAKE_STATIC_LIBRARY_SUFFIX}"
1685-
)
16861670
endif()
1671+
set(WITH_NODEJS OFF)
1672+
set(WITH_PYTHON OFF)
1673+
set(WITH_QT5 OFF)
1674+
set(WITH_ZLIB OFF)
1675+
1676+
# Remove Apache Arrow's CMAKE_MODULE_PATH to ensure using Apache
1677+
# Thrift's cmake_modules/.
1678+
list(POP_FRONT CMAKE_MODULE_PATH)
1679+
fetchcontent_makeavailable(thrift)
16871680

16881681
if(BOOST_VENDORED)
1689-
set(THRIFT_DEPENDENCIES ${THRIFT_DEPENDENCIES} Boost::headers)
1682+
target_link_libraries(thrift PRIVATE $<BUILD_LOCAL_INTERFACE:Boost::headers>
1683+
$<BUILD_LOCAL_INTERFACE:Boost::locale>)
16901684
endif()
16911685

1692-
set(THRIFT_PATCH_COMMAND)
1693-
if(CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 15.0)
1694-
# Thrift 0.21.0 doesn't support GCC 15.
1695-
# https://github.com/apache/arrow/issues/45096
1696-
# https://github.com/apache/thrift/pull/3078
1697-
find_program(PATCH patch REQUIRED)
1698-
list(APPEND
1699-
THRIFT_PATCH_COMMAND
1700-
${PATCH}
1701-
-p1
1702-
-i
1703-
${CMAKE_CURRENT_LIST_DIR}/thrift-cstdint.patch)
1704-
endif()
1686+
add_library(thrift::thrift INTERFACE IMPORTED)
1687+
target_link_libraries(thrift::thrift INTERFACE thrift)
17051688

1706-
externalproject_add(thrift_ep
1707-
${EP_COMMON_OPTIONS}
1708-
URL ${THRIFT_SOURCE_URL}
1709-
URL_HASH "SHA256=${ARROW_THRIFT_BUILD_SHA256_CHECKSUM}"
1710-
BUILD_BYPRODUCTS "${THRIFT_LIB}"
1711-
CMAKE_ARGS ${THRIFT_CMAKE_ARGS}
1712-
DEPENDS ${THRIFT_DEPENDENCIES}
1713-
PATCH_COMMAND ${THRIFT_PATCH_COMMAND})
1714-
1715-
add_library(thrift::thrift STATIC IMPORTED)
1716-
# The include directory must exist before it is referenced by a target.
1717-
file(MAKE_DIRECTORY "${THRIFT_INCLUDE_DIR}")
1718-
set_target_properties(thrift::thrift PROPERTIES IMPORTED_LOCATION "${THRIFT_LIB}")
1719-
target_include_directories(thrift::thrift BEFORE INTERFACE "${THRIFT_INCLUDE_DIR}")
1720-
if(ARROW_USE_BOOST)
1721-
target_link_libraries(thrift::thrift INTERFACE Boost::headers)
1722-
endif()
1723-
add_dependencies(thrift::thrift thrift_ep)
1724-
set(Thrift_VERSION ${ARROW_THRIFT_BUILD_VERSION})
1725-
set(THRIFT_VENDORED TRUE)
1689+
set(Thrift_VERSION
1690+
${ARROW_THRIFT_BUILD_VERSION}
1691+
PARENT_SCOPE)
1692+
set(THRIFT_VENDORED
1693+
TRUE
1694+
PARENT_SCOPE)
1695+
set(ARROW_BUNDLED_STATIC_LIBS
1696+
${ARROW_BUNDLED_STATIC_LIBS} thrift
1697+
PARENT_SCOPE)
17261698

1727-
list(APPEND ARROW_BUNDLED_STATIC_LIBS thrift::thrift)
1728-
endmacro()
1699+
list(POP_BACK CMAKE_MESSAGE_INDENT)
1700+
endfunction()
17291701

17301702
if(ARROW_WITH_THRIFT)
17311703
# Thrift C++ code generated by 0.13 requires 0.11 or greater
@@ -2580,9 +2552,8 @@ function(build_lz4)
25802552

25812553
# Add to bundled static libs.
25822554
# We must use lz4_static (not imported target) not LZ4::lz4 (imported target).
2583-
list(APPEND ARROW_BUNDLED_STATIC_LIBS lz4_static)
25842555
set(ARROW_BUNDLED_STATIC_LIBS
2585-
${ARROW_BUNDLED_STATIC_LIBS}
2556+
${ARROW_BUNDLED_STATIC_LIBS} lz4_static
25862557
PARENT_SCOPE)
25872558
endfunction()
25882559

@@ -5151,9 +5122,8 @@ function(build_awssdk)
51515122
set(AWSSDK_VENDORED
51525123
TRUE
51535124
PARENT_SCOPE)
5154-
list(APPEND ARROW_BUNDLED_STATIC_LIBS ${AWSSDK_LINK_LIBRARIES})
51555125
set(ARROW_BUNDLED_STATIC_LIBS
5156-
${ARROW_BUNDLED_STATIC_LIBS}
5126+
${ARROW_BUNDLED_STATIC_LIBS} ${AWSSDK_LINK_LIBRARIES}
51575127
PARENT_SCOPE)
51585128
set(AWSSDK_LINK_LIBRARIES
51595129
${AWSSDK_LINK_LIBRARIES}
@@ -5219,15 +5189,13 @@ function(build_azure_sdk)
52195189
set(AZURE_SDK_VENDORED
52205190
TRUE
52215191
PARENT_SCOPE)
5222-
list(APPEND
5223-
ARROW_BUNDLED_STATIC_LIBS
5224-
Azure::azure-core
5225-
Azure::azure-identity
5226-
Azure::azure-storage-blobs
5227-
Azure::azure-storage-common
5228-
Azure::azure-storage-files-datalake)
52295192
set(ARROW_BUNDLED_STATIC_LIBS
52305193
${ARROW_BUNDLED_STATIC_LIBS}
5194+
Azure::azure-core
5195+
Azure::azure-identity
5196+
Azure::azure-storage-blobs
5197+
Azure::azure-storage-common
5198+
Azure::azure-storage-files-datalake
52315199
PARENT_SCOPE)
52325200
endfunction()
52335201

cpp/src/arrow/flight/sql/CMakeLists.txt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -117,9 +117,9 @@ if(ARROW_BUILD_TESTS OR ARROW_BUILD_EXAMPLES)
117117
set(ARROW_FLIGHT_SQL_TEST_SRCS server_test.cc
118118
server_session_middleware_internals_test.cc)
119119

120-
set(ARROW_FLIGHT_SQL_TEST_LIBS ${SQLite3_LIBRARIES})
120+
set(ARROW_FLIGHT_SQL_TEST_LIBS ${SQLite3_LIBRARIES} Boost::headers)
121121
set(ARROW_FLIGHT_SQL_ACERO_SRCS example/acero_server.cc)
122-
set(ARROW_FLIGHT_SQL_EXTRA_LINK_LIBS "")
122+
set(ARROW_FLIGHT_SQL_TEST_EXTRA_LINK_LIBS "")
123123

124124
if(ARROW_COMPUTE
125125
AND ARROW_PARQUET
@@ -130,7 +130,7 @@ if(ARROW_BUILD_TESTS OR ARROW_BUILD_EXAMPLES)
130130
else()
131131
list(APPEND ARROW_FLIGHT_SQL_TEST_LIBS arrow_substrait_shared)
132132
endif()
133-
list(APPEND ARROW_FLIGHT_SQL_EXTRA_LINK_LIBS arrow_compute_testing)
133+
list(APPEND ARROW_FLIGHT_SQL_TEST_EXTRA_LINK_LIBS arrow_compute_testing)
134134

135135
if(ARROW_BUILD_EXAMPLES)
136136
add_executable(acero-flight-sql-server ${ARROW_FLIGHT_SQL_ACERO_SRCS}
@@ -149,7 +149,7 @@ if(ARROW_BUILD_TESTS OR ARROW_BUILD_EXAMPLES)
149149
${ARROW_FLIGHT_SQL_TEST_LINK_LIBS}
150150
${ARROW_FLIGHT_SQL_TEST_LIBS}
151151
EXTRA_LINK_LIBS
152-
${ARROW_FLIGHT_SQL_EXTRA_LINK_LIBS}
152+
${ARROW_FLIGHT_SQL_TEST_EXTRA_LINK_LIBS}
153153
EXTRA_INCLUDES
154154
"${CMAKE_CURRENT_BINARY_DIR}/../"
155155
LABELS
@@ -158,8 +158,8 @@ if(ARROW_BUILD_TESTS OR ARROW_BUILD_EXAMPLES)
158158
add_executable(flight-sql-test-server test_server_cli.cc
159159
${ARROW_FLIGHT_SQL_TEST_SERVER_SRCS})
160160
target_link_libraries(flight-sql-test-server
161-
PRIVATE ${ARROW_FLIGHT_SQL_TEST_LINK_LIBS} ${GFLAGS_LIBRARIES}
162-
${SQLite3_LIBRARIES})
161+
PRIVATE ${ARROW_FLIGHT_SQL_TEST_LINK_LIBS}
162+
${ARROW_FLIGHT_SQL_TEST_LIBS} ${GFLAGS_LIBRARIES})
163163

164164
add_executable(flight-sql-test-app test_app_cli.cc)
165165
target_link_libraries(flight-sql-test-app PRIVATE ${ARROW_FLIGHT_SQL_TEST_LINK_LIBS}

cpp/thirdparty/versions.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,8 +107,8 @@ ARROW_SUBSTRAIT_BUILD_VERSION=v0.44.0
107107
ARROW_SUBSTRAIT_BUILD_SHA256_CHECKSUM=f989a862f694e7dbb695925ddb7c4ce06aa6c51aca945105c075139aed7e55a2
108108
ARROW_S2N_TLS_BUILD_VERSION=v1.5.21
109109
ARROW_S2N_TLS_BUILD_SHA256_CHECKSUM=203d69d6f557f6ab303438ad186fca13fd2c60581b2cca6348a9fbee10d79995
110-
ARROW_THRIFT_BUILD_VERSION=0.20.0
111-
ARROW_THRIFT_BUILD_SHA256_CHECKSUM=b5d8311a779470e1502c027f428a1db542f5c051c8e1280ccd2163fa935ff2d6
110+
ARROW_THRIFT_BUILD_VERSION=0.22.0
111+
ARROW_THRIFT_BUILD_SHA256_CHECKSUM=794a0e455787960d9f27ab92c38e34da27e8deeda7a5db0e59dc64a00df8a1e5
112112
ARROW_UTF8PROC_BUILD_VERSION=v2.10.0
113113
ARROW_UTF8PROC_BUILD_SHA256_CHECKSUM=6f4f1b639daa6dca9f80bc5db1233e9cbaa31a67790887106160b33ef743f136
114114
ARROW_XSIMD_BUILD_VERSION=13.0.0

0 commit comments

Comments
 (0)