@@ -22,170 +22,25 @@ set(ICEBERG_VENDOR_DEPENDENCIES)
2222set (ICEBERG_ARROW_INSTALL_INTERFACE_LIBS)
2323
2424# ----------------------------------------------------------------------
25- # Resolve the dependencies
25+ # Versions and URLs for toolchain builds
2626
27- set (ICEBERG_THIRDPARTY_DEPENDENCIES Arrow)
28-
29- message (STATUS "Using ${ICEBERG_DEPENDENCY_SOURCE} approach to find dependencies" )
30-
31- # For each dependency, set dependency source to global default, if unset
32- foreach (DEPENDENCY ${ICEBERG_THIRDPARTY_DEPENDENCIES} )
33- if ("${${DEPENDENCY} _SOURCE}" STREQUAL "" )
34- set (${DEPENDENCY} _SOURCE ${ICEBERG_DEPENDENCY_SOURCE} )
35- endif ()
36- endforeach ()
37-
38- macro (build_dependency DEPENDENCY_NAME)
39- if ("${DEPENDENCY_NAME} " STREQUAL "Arrow" )
40- build_arrow()
41- else ()
42- message (FATAL_ERROR "Unknown thirdparty dependency to build: ${DEPENDENCY_NAME} " )
43- endif ()
44- endmacro ()
45-
46- function (provide_cmake_module MODULE_NAME ICEBERG_CMAKE_PACKAGE_NAME)
47- set (module "${CMAKE_SOURCE_DIR} /cmake_modules/${MODULE_NAME} .cmake" )
48- if (EXISTS "${module} " )
49- message (STATUS "Providing CMake module for ${MODULE_NAME} as part of ${ICEBERG_CMAKE_PACKAGE_NAME} CMake package"
50- )
51- install (FILES "${module} "
52- DESTINATION "${ICEBERG_INSTALL_CMAKEDIR} /${ICEBERG_CMAKE_PACKAGE_NAME} " )
53- endif ()
54- endfunction ()
55-
56- # Find modules are needed by the consumer in case of a static build, or if the
57- # linkage is PUBLIC or INTERFACE.
58- function (provide_find_module PACKAGE_NAME ICEBERG_CMAKE_PACKAGE_NAME)
59- provide_cmake_module("Find${PACKAGE_NAME} " ${ICEBERG_CMAKE_PACKAGE_NAME} )
60- endfunction ()
61-
62- macro (resolve_dependency DEPENDENCY_NAME)
63- set (options )
64- set (one_value_args
65- ICEBERG_CMAKE_PACKAGE_NAME
66- FORCE_ANY_NEWER_VERSION
67- HAVE_ALT
68- REQUIRED_VERSION
69- USE_CONFIG)
70- set (multi_value_args COMPONENTS OPTIONAL_COMPONENTS)
71- cmake_parse_arguments (ARG
72- "${options} "
73- "${one_value_args} "
74- "${multi_value_args} "
75- ${ARGN} )
76- if (ARG_UNPARSED_ARGUMENTS)
77- message (SEND_ERROR "Error: unrecognized arguments: ${ARG_UNPARSED_ARGUMENTS} " )
78- endif ()
79-
80- if (ARG_HAVE_ALT)
81- set (PACKAGE_NAME "${DEPENDENCY_NAME} Alt" )
82- else ()
83- set (PACKAGE_NAME ${DEPENDENCY_NAME} )
84- endif ()
85- set (FIND_PACKAGE_ARGUMENTS ${PACKAGE_NAME} )
86- if (ARG_REQUIRED_VERSION AND NOT ARG_FORCE_ANY_NEWER_VERSION)
87- list (APPEND FIND_PACKAGE_ARGUMENTS ${ARG_REQUIRED_VERSION} )
88- endif ()
89- if (ARG_USE_CONFIG)
90- list (APPEND FIND_PACKAGE_ARGUMENTS CONFIG)
91- endif ()
92- if (ARG_COMPONENTS)
93- list (APPEND FIND_PACKAGE_ARGUMENTS COMPONENTS ${ARG_COMPONENTS} )
94- endif ()
95- if (ARG_OPTIONAL_COMPONENTS)
96- list (APPEND FIND_PACKAGE_ARGUMENTS OPTIONAL_COMPONENTS ${ARG_OPTIONAL_COMPONENTS} )
97- endif ()
98-
99- if (${DEPENDENCY_NAME} _SOURCE STREQUAL "AUTO" )
100- find_package (${FIND_PACKAGE_ARGUMENTS} )
101- set (COMPATIBLE ${${PACKAGE_NAME} _FOUND})
102- if (COMPATIBLE
103- AND ARG_FORCE_ANY_NEWER_VERSION
104- AND ARG_REQUIRED_VERSION)
105- if (${${PACKAGE_NAME} _VERSION} VERSION_LESS ${ARG_REQUIRED_VERSION} )
106- message (DEBUG "Couldn't find ${DEPENDENCY_NAME} >= ${ARG_REQUIRED_VERSION} " )
107- set (COMPATIBLE FALSE )
108- endif ()
109- endif ()
110- if (COMPATIBLE)
111- set (${DEPENDENCY_NAME} _SOURCE "SYSTEM" )
112- else ()
113- build_dependency(${DEPENDENCY_NAME} )
114- set (${DEPENDENCY_NAME} _SOURCE "VENDOR" )
115- endif ()
116- elseif (${DEPENDENCY_NAME} _SOURCE STREQUAL "VENDOR" )
117- build_dependency(${DEPENDENCY_NAME} )
118- elseif (${DEPENDENCY_NAME} _SOURCE STREQUAL "SYSTEM" )
119- find_package (${FIND_PACKAGE_ARGUMENTS} REQUIRED)
120- if (ARG_FORCE_ANY_NEWER_VERSION AND ARG_REQUIRED_VERSION)
121- if (${${PACKAGE_NAME} _VERSION} VERSION_LESS ${ARG_REQUIRED_VERSION} )
122- message (FATAL_ERROR "Couldn't find ${DEPENDENCY_NAME} >= ${ARG_REQUIRED_VERSION} " )
123- endif ()
124- endif ()
125- endif ()
126- if (${DEPENDENCY_NAME} _SOURCE STREQUAL "SYSTEM" )
127- # IcebergCore -> _Iceberg_Core
128- string (REGEX REPLACE "([A-Z])" "_\\ 1" ARG_ICEBERG_CMAKE_PACKAGE_NAME_SNAKE
129- ${ARG_ICEBERG_CMAKE_PACKAGE_NAME} )
130- # _Iceberg_Core -> Iceberg_Core
131- string (SUBSTRING ${ARG_ICEBERG_CMAKE_PACKAGE_NAME_SNAKE} 1 -1
132- ARG_ICEBERG_CMAKE_PACKAGE_NAME_SNAKE)
133- # Iceberg_Core -> ICEBERG_CORE
134- string (TOUPPER ${ARG_ICEBERG_CMAKE_PACKAGE_NAME_SNAKE}
135- ARG_ICEBERG_CMAKE_PACKAGE_NAME_UPPER_SNAKE)
136- provide_find_module(${PACKAGE_NAME} ${ARG_ICEBERG_CMAKE_PACKAGE_NAME} )
137- list (APPEND ${ARG_ICEBERG_CMAKE_PACKAGE_NAME_UPPER_SNAKE} _SYSTEM_DEPENDENCIES
138- ${PACKAGE_NAME} )
139- endif ()
140- endmacro ()
141-
142- # ----------------------------------------------------------------------
143- # Thirdparty versions, environment variables, source URLs
144-
145- set (THIRDPARTY_DIR "${CMAKE_SOURCE_DIR} /thirdparty" )
146-
147- # ----------------------------------------------------------------------
148- # Versions and URLs for toolchain builds, which also can be used to configure
149- # offline builds Note: We should not use the Apache dist server for build
150- # dependencies
151-
152- macro (set_urls URLS)
153- set (${URLS} ${ARGN} )
154- endmacro ()
155-
156- # Read toolchain versions from thirdparty/versions.txt
157- file (STRINGS "${THIRDPARTY_DIR} /versions.txt" TOOLCHAIN_VERSIONS_TXT)
158- foreach (_VERSION_ENTRY ${TOOLCHAIN_VERSIONS_TXT} )
159- # Exclude comments
160- if (NOT ((_VERSION_ENTRY MATCHES "^[^#][A-Za-z0-9-_]+_VERSION=" )
161- OR (_VERSION_ENTRY MATCHES "^[^#][A-Za-z0-9-_]+_CHECKSUM=" )))
162- continue ()
163- endif ()
164-
165- string (REGEX MATCH "^[^=]*" _VARIABLE_NAME ${_VERSION_ENTRY} )
166- string (REPLACE "${_VARIABLE_NAME} =" "" _VARIABLE_VALUE ${_VERSION_ENTRY} )
167-
168- # Skip blank or malformed lines
169- if (_VARIABLE_VALUE STREQUAL "" )
170- continue ()
171- endif ()
172-
173- # For debugging
174- message (STATUS "${_VARIABLE_NAME} : ${_VARIABLE_VALUE} " )
175-
176- set (${_VARIABLE_NAME} ${_VARIABLE_VALUE} )
177- endforeach ()
27+ set (ICEBERG_ARROW_BUILD_VERSION "18.1.0" )
28+ set (ICEBERG_ARROW_BUILD_SHA256_CHECKSUM
29+ "2dc8da5f8796afe213ecc5e5aba85bb82d91520eff3cf315784a52d0fa61d7fc" )
30+ set (ARROW_VENDORED TRUE )
17831
17932if (DEFINED ENV{ICEBERG_ARROW_URL})
18033 set (ARROW_SOURCE_URL "$ENV{ICEBERG_ARROW_URL} " )
18134else ()
182- set_urls (ARROW_SOURCE_URL
183- "https://www.apache.org/dyn/closer.cgi?action=download&filename=/arrow/arrow-${ICEBERG_ARROW_BUILD_VERSION} /apache-arrow-${ICEBERG_ARROW_BUILD_VERSION} .tar.gz"
184- "https://downloads.apache.org/arrow/arrow-${ICEBERG_ARROW_BUILD_VERSION} /apache-arrow-${ICEBERG_ARROW_BUILD_VERSION} .tar.gz"
185- "https://github.com/apache/arrow/releases/download/apache-arrow-${ICEBERG_ARROW_BUILD_VERSION} /apache-arrow-${ICEBERG_ARROW_BUILD_VERSION} .tar.gz"
35+ set (ARROW_SOURCE_URL
36+ "https://www.apache.org/dyn/closer.cgi?action=download&filename=/arrow/arrow-${ICEBERG_ARROW_BUILD_VERSION} /apache-arrow-${ICEBERG_ARROW_BUILD_VERSION} .tar.gz"
37+ "https://downloads.apache.org/arrow/arrow-${ICEBERG_ARROW_BUILD_VERSION} /apache-arrow-${ICEBERG_ARROW_BUILD_VERSION} .tar.gz"
38+ "https://github.com/apache/arrow/releases/download/apache-arrow-${ICEBERG_ARROW_BUILD_VERSION} /apache-arrow-${ICEBERG_ARROW_BUILD_VERSION} .tar.gz"
18639 )
18740endif ()
18841
42+ # ----------------------------------------------------------------------
43+ # FetchContent
18944
19045include (FetchContent)
19146set (FC_DECLARE_COMMON_OPTIONS)
@@ -203,18 +58,7 @@ endmacro()
20358# ----------------------------------------------------------------------
20459# Apache Arrow
20560
206- function (resolve_arrow)
207- fetchcontent_declare(Arrow
208- ${FC_DECLARE_COMMON_OPTIONS}
209- URL ${ARROW_SOURCE_URL}
210- URL_HASH "SHA256=${ICEBERG_ARROW_BUILD_SHA256_CHECKSUM} "
211- SOURCE_SUBDIR
212- cpp
213- FIND_PACKAGE_ARGS
214- NAMES
215- Arrow
216- CONFIG)
217-
61+ function (resolve_arrow_dependency)
21862 set (ARROW_BUILD_SHARED
21963 OFF
22064 CACHE BOOL "" FORCE)
@@ -231,58 +75,59 @@ function(resolve_arrow)
23175 "NONE"
23276 CACHE STRING "" FORCE)
23377
78+ fetchcontent_declare(Arrow
79+ ${FC_DECLARE_COMMON_OPTIONS}
80+ URL ${ARROW_SOURCE_URL}
81+ URL_HASH "SHA256=${ICEBERG_ARROW_BUILD_SHA256_CHECKSUM} "
82+ SOURCE_SUBDIR
83+ cpp
84+ FIND_PACKAGE_ARGS
85+ NAMES
86+ Arrow
87+ CONFIG)
88+
23489 # Add Arrow cmake modules to the search path
23590 list (PREPEND CMAKE_MODULE_PATH
23691 ${CMAKE_CURRENT_BINARY_DIR} /_deps/arrow-src/cpp/cmake_modules)
23792
23893 fetchcontent_makeavailable(Arrow)
23994
240- fetchcontent_getproperties(Arrow)
241- message ("arrow_SOURCE_DIR: ${arrow_SOURCE_DIR} " )
242- message ("arrow_BINARY_DIR: ${arrow_BINARY_DIR} " )
243- message ("arrow_POPULATED: ${arrow_POPULATED} " )
244-
245- # Why Arrow::arrow_static is not available if built from source?
24695 if (NOT TARGET Arrow::arrow_static)
247- message ("Adding Arrow::arrow_static" )
24896 add_library (Arrow::arrow_static INTERFACE IMPORTED )
24997 target_link_libraries (Arrow::arrow_static INTERFACE arrow_static)
25098 target_include_directories (Arrow::arrow_static INTERFACE ${arrow_SOURCE_DIR} /cpp/src
25199 ${arrow_BINARY_DIR} /src)
252100 endif ()
253101
102+ fetchcontent_getproperties(Arrow)
254103 if (arrow_SOURCE_DIR)
255- message ( "arrow_SOURCE_DIR: ${arrow_SOURCE_DIR} " )
104+ set (ARROW_VENDORED TRUE )
256105 install (TARGETS arrow_static
257106 RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR} "
258107 ARCHIVE DESTINATION "${ICEBERG_INSTALL_LIBDIR} "
259108 LIBRARY DESTINATION "${ICEBERG_INSTALL_LIBDIR} " )
260109
261110 get_target_property (ARROW_STATIC_LIB arrow_static OUTPUT_NAME )
262- message ("ARROW_STATIC_LIB: ${ARROW_STATIC_LIB} " )
263111 set (ARROW_STATIC_LIB_NAME
264112 "${CMAKE_STATIC_LIBRARY_PREFIX}${ARROW_STATIC_LIB}${CMAKE_STATIC_LIBRARY_SUFFIX} " )
265- message ("ARROW_STATIC_LIB_NAME: ${ARROW_STATIC_LIB_NAME} " )
266113 list (APPEND ICEBERG_VENDOR_DEPENDENCIES
267- "iceberg::vendored_Arrow |${ARROW_STATIC_LIB_NAME} " )
114+ "Iceberg::arrow_vendored |${ARROW_STATIC_LIB_NAME} " )
268115 else ()
116+ set (ARROW_VENDORED FALSE )
269117 list (APPEND ICEBERG_SYSTEM_DEPENDENCIES Arrow)
270118 endif ()
271119
272- set (ICEBERG_VENDOR_DEPENDENCIES ${ICEBERG_VENDOR_DEPENDENCIES} PARENT_SCOPE)
273- set (ICEBERG_SYSTEM_DEPENDENCIES ${ICEBERG_SYSTEM_DEPENDENCIES} PARENT_SCOPE)
120+ set (ICEBERG_VENDOR_DEPENDENCIES
121+ ${ICEBERG_VENDOR_DEPENDENCIES}
122+ PARENT_SCOPE)
123+ set (ICEBERG_SYSTEM_DEPENDENCIES
124+ ${ICEBERG_SYSTEM_DEPENDENCIES}
125+ PARENT_SCOPE)
126+ set (ARROW_VENDORED
127+ ${ARROW_VENDORED}
128+ PARENT_SCOPE)
274129endfunction ()
275130
276131if (ICEBERG_ARROW)
277- resolve_arrow()
278-
279- if (ARROW_VENDORED)
280- set (ICEBERG_ARROW_VERSION ${ICEBERG_ARROW_BUILD_VERSION} )
281- message (STATUS "ICEBERG_VENDOR_DEPENDENCIES: ${ICEBERG_VENDOR_DEPENDENCIES} "
282- )
283- else ()
284- set (ICEBERG_ARROW_VERSION ${ArrowAlt_VERSION} )
285- message (STATUS "Found Arrow static library: ${ARROW_STATIC_LIB} " )
286- message (STATUS "Found Arrow headers: ${ARROW_INCLUDE_DIR} " )
287- endif ()
132+ resolve_arrow_dependency()
288133endif ()
0 commit comments