@@ -82,8 +82,8 @@ endmacro()
8282function (resolve_arrow_dependency )
8383 prepare_fetchcontent ()
8484
85- set (ARROW_BUILD_SHARED OFF )
86- set (ARROW_BUILD_STATIC ON )
85+ set (ARROW_BUILD_SHARED ${ICEBERG_BUILD_SHARED} )
86+ set (ARROW_BUILD_STATIC ${ICEBERG_BUILD_STATIC} )
8787 # Work around undefined symbol: arrow::ipc::ReadSchema(arrow::io::InputStream*, arrow::ipc::DictionaryMemo*)
8888 set (ARROW_IPC ON )
8989 set (ARROW_FILESYSTEM ON )
@@ -112,43 +112,74 @@ function(resolve_arrow_dependency)
112112 fetchcontent_makeavailable (VendoredArrow)
113113
114114 if (vendoredarrow_SOURCE_DIR )
115- if (NOT TARGET Arrow::arrow_static)
116- add_library (Arrow::arrow_static INTERFACE IMPORTED )
117- target_link_libraries (Arrow::arrow_static INTERFACE arrow_static )
118- target_include_directories (Arrow::arrow_static
119- INTERFACE ${vendoredarrow_BINARY_DIR} /src
120- ${vendoredarrow_SOURCE_DIR} /cpp/src )
115+ if (ARROW_BUILD_STATIC)
116+ if (NOT TARGET Arrow::arrow_static)
117+ add_library (Arrow::arrow_static INTERFACE IMPORTED )
118+ target_link_libraries (Arrow::arrow_static INTERFACE arrow_static )
119+ target_include_directories (Arrow::arrow_static
120+ INTERFACE ${vendoredarrow_BINARY_DIR} /src
121+ ${vendoredarrow_SOURCE_DIR} /cpp/src )
122+ endif ()
123+
124+ if (NOT TARGET Parquet::parquet_static)
125+ add_library (Parquet::parquet_static INTERFACE IMPORTED )
126+ target_link_libraries (Parquet::parquet_static INTERFACE parquet_static )
127+ target_include_directories (Parquet::parquet_static
128+ INTERFACE ${vendoredarrow_BINARY_DIR} /src
129+ ${vendoredarrow_SOURCE_DIR} /cpp/src )
130+ endif ()
131+
132+ set_target_properties (arrow_static PROPERTIES OUTPUT_NAME
133+ "iceberg_vendored_arrow_static" )
134+ set_target_properties (parquet_static PROPERTIES OUTPUT_NAME
135+ "iceberg_vendored_parquet_static" )
136+ install (TARGETS arrow_static parquet_static
137+ EXPORT iceberg_targets
138+ RUNTIME DESTINATION "${ICEBERG_INSTALL_BINDIR} "
139+ ARCHIVE DESTINATION "${ICEBERG_INSTALL_LIBDIR} "
140+ LIBRARY DESTINATION "${ICEBERG_INSTALL_LIBDIR} " )
141+
142+ if (TARGET arrow_bundled_dependencies)
143+ message (STATUS "arrow_bundled_dependencies found" )
144+ # arrow_bundled_dependencies is only INSTALL_INTERFACE and will not be built by default.
145+ # We need to add it as a dependency to arrow_static so that it will be built.
146+ add_dependencies (arrow_static arrow_bundled_dependencies )
147+ # We cannot install an IMPORTED target, so we need to install the library manually.
148+ get_target_property (arrow_bundled_dependencies_location
149+ arrow_bundled_dependencies IMPORTED_LOCATION )
150+ install (FILES ${arrow_bundled_dependencies_location}
151+ DESTINATION ${ICEBERG_INSTALL_LIBDIR} )
152+ endif ()
121153 endif ()
122154
123- if (NOT TARGET Parquet::parquet_static)
124- add_library (Parquet::parquet_static INTERFACE IMPORTED )
125- target_link_libraries (Parquet::parquet_static INTERFACE parquet_static )
126- target_include_directories (Parquet::parquet_static
127- INTERFACE ${vendoredarrow_BINARY_DIR} /src
128- ${vendoredarrow_SOURCE_DIR} /cpp/src )
155+ if (ARROW_BUILD_SHARED)
156+ if (NOT TARGET Arrow::arrow_shared)
157+ add_library (Arrow::arrow_shared INTERFACE IMPORTED )
158+ target_link_libraries (Arrow::arrow_shared INTERFACE arrow_shared )
159+ target_include_directories (Arrow::arrow_shared
160+ INTERFACE ${vendoredarrow_BINARY_DIR} /src
161+ ${vendoredarrow_SOURCE_DIR} /cpp/src )
162+ endif ()
163+
164+ if (NOT TARGET Parquet::parquet_shared)
165+ add_library (Parquet::parquet_shared INTERFACE IMPORTED )
166+ target_link_libraries (Parquet::parquet_shared INTERFACE parquet_shared )
167+ target_include_directories (Parquet::parquet_shared
168+ INTERFACE ${vendoredarrow_BINARY_DIR} /src
169+ ${vendoredarrow_SOURCE_DIR} /cpp/src )
170+ endif ()
171+
172+ set_target_properties (arrow_shared PROPERTIES OUTPUT_NAME "iceberg_vendored_arrow" )
173+ set_target_properties (parquet_shared PROPERTIES OUTPUT_NAME
174+ "iceberg_vendored_parquet" )
175+ install (TARGETS arrow_shared parquet_shared
176+ EXPORT iceberg_targets
177+ RUNTIME DESTINATION "${ICEBERG_INSTALL_BINDIR} "
178+ ARCHIVE DESTINATION "${ICEBERG_INSTALL_LIBDIR} "
179+ LIBRARY DESTINATION "${ICEBERG_INSTALL_LIBDIR} " )
129180 endif ()
130181
131182 set (ARROW_VENDORED TRUE )
132- set_target_properties (arrow_static PROPERTIES OUTPUT_NAME "iceberg_vendored_arrow" )
133- set_target_properties (parquet_static PROPERTIES OUTPUT_NAME
134- "iceberg_vendored_parquet" )
135- install (TARGETS arrow_static parquet_static
136- EXPORT iceberg_targets
137- RUNTIME DESTINATION "${ICEBERG_INSTALL_BINDIR} "
138- ARCHIVE DESTINATION "${ICEBERG_INSTALL_LIBDIR} "
139- LIBRARY DESTINATION "${ICEBERG_INSTALL_LIBDIR} " )
140-
141- if (TARGET arrow_bundled_dependencies)
142- message (STATUS "arrow_bundled_dependencies found" )
143- # arrow_bundled_dependencies is only INSTALL_INTERFACE and will not be built by default.
144- # We need to add it as a dependency to arrow_static so that it will be built.
145- add_dependencies (arrow_static arrow_bundled_dependencies )
146- # We cannot install an IMPORTED target, so we need to install the library manually.
147- get_target_property (arrow_bundled_dependencies_location arrow_bundled_dependencies
148- IMPORTED_LOCATION )
149- install (FILES ${arrow_bundled_dependencies_location}
150- DESTINATION ${ICEBERG_INSTALL_LIBDIR} )
151- endif ()
152183 else ()
153184 set (ARROW_VENDORED FALSE )
154185 list (APPEND ICEBERG_SYSTEM_DEPENDENCIES Arrow)
@@ -167,6 +198,8 @@ endfunction()
167198
168199function (resolve_avro_dependency )
169200 prepare_fetchcontent ()
201+ set (BUILD_SHARED_LIBS ${ICEBERG_BUILD_SHARED} )
202+ set (BUILD_STATIC_LIBS ${ICEBERG_BUILD_STATIC} )
170203
171204 set (AVRO_USE_BOOST
172205 OFF
@@ -212,28 +245,50 @@ function(resolve_avro_dependency)
212245 fetchcontent_makeavailable (avro-cpp)
213246
214247 if (avro-cpp_SOURCE_DIR )
215- if (NOT TARGET avro-cpp::avrocpp_static)
216- add_library (avro-cpp::avrocpp_static INTERFACE IMPORTED )
217- target_link_libraries (avro-cpp::avrocpp_static INTERFACE avrocpp_s )
218- target_include_directories (avro-cpp::avrocpp_static
219- INTERFACE ${avro-cpp_BINARY_DIR}
220- ${avro-cpp_SOURCE_DIR}/lang/c++ )
248+ if (BUILD_STATIC_LIBS)
249+ if (NOT TARGET avro-cpp::avrocpp_static)
250+ add_library (avro-cpp::avrocpp_static INTERFACE IMPORTED )
251+ target_link_libraries (avro-cpp::avrocpp_static INTERFACE avrocpp_s )
252+ target_include_directories (avro-cpp::avrocpp_static
253+ INTERFACE ${avro-cpp_BINARY_DIR}
254+ ${avro-cpp_SOURCE_DIR}/lang/c++ )
255+ endif ()
256+
257+ set_target_properties (avrocpp_s PROPERTIES OUTPUT_NAME
258+ "iceberg_vendored_avrocpp_static" )
259+ set_target_properties (avrocpp_s PROPERTIES POSITION_INDEPENDENT_CODE ON )
260+ install (TARGETS avrocpp_s
261+ EXPORT iceberg_targets
262+ RUNTIME DESTINATION "${ICEBERG_INSTALL_BINDIR} "
263+ ARCHIVE DESTINATION "${ICEBERG_INSTALL_LIBDIR} "
264+ LIBRARY DESTINATION "${ICEBERG_INSTALL_LIBDIR} " )
265+
266+ # TODO: add vendored ZLIB and Snappy support
267+ find_package (Snappy CONFIG )
268+ if (Snappy_FOUND)
269+ list (APPEND ICEBERG_SYSTEM_DEPENDENCIES Snappy)
270+ endif ()
221271 endif ()
222272
223- set (AVRO_VENDORED TRUE )
224- set_target_properties (avrocpp_s PROPERTIES OUTPUT_NAME "iceberg_vendored_avrocpp" )
225- set_target_properties (avrocpp_s PROPERTIES POSITION_INDEPENDENT_CODE ON )
226- install (TARGETS avrocpp_s
227- EXPORT iceberg_targets
228- RUNTIME DESTINATION "${ICEBERG_INSTALL_BINDIR} "
229- ARCHIVE DESTINATION "${ICEBERG_INSTALL_LIBDIR} "
230- LIBRARY DESTINATION "${ICEBERG_INSTALL_LIBDIR} " )
231-
232- # TODO: add vendored ZLIB and Snappy support
233- find_package (Snappy CONFIG )
234- if (Snappy_FOUND)
235- list (APPEND ICEBERG_SYSTEM_DEPENDENCIES Snappy)
273+ if (BUILD_SHARED_LIBS )
274+ if (NOT TARGET avro-cpp::avrocpp_shared)
275+ add_library (avro-cpp::avrocpp_shared INTERFACE IMPORTED )
276+ target_link_libraries (avro-cpp::avrocpp_shared INTERFACE avrocpp )
277+ target_include_directories (avro-cpp::avrocpp_shared
278+ INTERFACE ${avro-cpp_BINARY_DIR}
279+ ${avro-cpp_SOURCE_DIR}/lang/c++ )
280+ endif ()
281+
282+ set_target_properties (avrocpp PROPERTIES OUTPUT_NAME "iceberg_vendored_avrocpp" )
283+ set_target_properties (avrocpp PROPERTIES POSITION_INDEPENDENT_CODE ON )
284+ install (TARGETS avrocpp
285+ EXPORT iceberg_targets
286+ RUNTIME DESTINATION "${ICEBERG_INSTALL_BINDIR} "
287+ ARCHIVE DESTINATION "${ICEBERG_INSTALL_LIBDIR} "
288+ LIBRARY DESTINATION "${ICEBERG_INSTALL_LIBDIR} " )
236289 endif ()
290+
291+ set (AVRO_VENDORED TRUE )
237292 else ()
238293 set (AVRO_VENDORED FALSE )
239294 list (APPEND ICEBERG_SYSTEM_DEPENDENCIES Avro)
0 commit comments