@@ -83,8 +83,8 @@ endmacro()
8383function (resolve_arrow_dependency)
8484 prepare_fetchcontent()
8585
86- set (ARROW_BUILD_SHARED OFF )
87- set (ARROW_BUILD_STATIC ON )
86+ set (ARROW_BUILD_SHARED ${ICEBERG_BUILD_SHARED} )
87+ set (ARROW_BUILD_STATIC ${ICEBERG_BUILD_STATIC} )
8888 # Work around undefined symbol: arrow::ipc::ReadSchema(arrow::io::InputStream*, arrow::ipc::DictionaryMemo*)
8989 set (ARROW_IPC ON )
9090 set (ARROW_FILESYSTEM ON )
@@ -113,43 +113,74 @@ function(resolve_arrow_dependency)
113113 fetchcontent_makeavailable(VendoredArrow)
114114
115115 if (vendoredarrow_SOURCE_DIR)
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)
116+ if (ARROW_BUILD_STATIC)
117+ if (NOT TARGET Arrow::arrow_static)
118+ add_library (Arrow::arrow_static INTERFACE IMPORTED )
119+ target_link_libraries (Arrow::arrow_static INTERFACE arrow_static)
120+ target_include_directories (Arrow::arrow_static
121+ INTERFACE ${vendoredarrow_BINARY_DIR} /src
122+ ${vendoredarrow_SOURCE_DIR} /cpp/src)
123+ endif ()
124+
125+ if (NOT TARGET Parquet::parquet_static)
126+ add_library (Parquet::parquet_static INTERFACE IMPORTED )
127+ target_link_libraries (Parquet::parquet_static INTERFACE parquet_static)
128+ target_include_directories (Parquet::parquet_static
129+ INTERFACE ${vendoredarrow_BINARY_DIR} /src
130+ ${vendoredarrow_SOURCE_DIR} /cpp/src)
131+ endif ()
132+
133+ set_target_properties (arrow_static PROPERTIES OUTPUT_NAME
134+ "iceberg_vendored_arrow_static" )
135+ set_target_properties (parquet_static PROPERTIES OUTPUT_NAME
136+ "iceberg_vendored_parquet_static" )
137+ install (TARGETS arrow_static parquet_static
138+ EXPORT iceberg_targets
139+ RUNTIME DESTINATION "${ICEBERG_INSTALL_BINDIR} "
140+ ARCHIVE DESTINATION "${ICEBERG_INSTALL_LIBDIR} "
141+ LIBRARY DESTINATION "${ICEBERG_INSTALL_LIBDIR} " )
142+
143+ if (TARGET arrow_bundled_dependencies)
144+ message (STATUS "arrow_bundled_dependencies found" )
145+ # arrow_bundled_dependencies is only INSTALL_INTERFACE and will not be built by default.
146+ # We need to add it as a dependency to arrow_static so that it will be built.
147+ add_dependencies (arrow_static arrow_bundled_dependencies)
148+ # We cannot install an IMPORTED target, so we need to install the library manually.
149+ get_target_property (arrow_bundled_dependencies_location
150+ arrow_bundled_dependencies IMPORTED_LOCATION )
151+ install (FILES ${arrow_bundled_dependencies_location}
152+ DESTINATION ${ICEBERG_INSTALL_LIBDIR} )
153+ endif ()
122154 endif ()
123155
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)
156+ if (ARROW_BUILD_SHARED)
157+ if (NOT TARGET Arrow::arrow_shared)
158+ add_library (Arrow::arrow_shared INTERFACE IMPORTED )
159+ target_link_libraries (Arrow::arrow_shared INTERFACE arrow_shared)
160+ target_include_directories (Arrow::arrow_shared
161+ INTERFACE ${vendoredarrow_BINARY_DIR} /src
162+ ${vendoredarrow_SOURCE_DIR} /cpp/src)
163+ endif ()
164+
165+ if (NOT TARGET Parquet::parquet_shared)
166+ add_library (Parquet::parquet_shared INTERFACE IMPORTED )
167+ target_link_libraries (Parquet::parquet_shared INTERFACE parquet_shared)
168+ target_include_directories (Parquet::parquet_shared
169+ INTERFACE ${vendoredarrow_BINARY_DIR} /src
170+ ${vendoredarrow_SOURCE_DIR} /cpp/src)
171+ endif ()
172+
173+ set_target_properties (arrow_shared PROPERTIES OUTPUT_NAME "iceberg_vendored_arrow" )
174+ set_target_properties (parquet_shared PROPERTIES OUTPUT_NAME
175+ "iceberg_vendored_parquet" )
176+ install (TARGETS arrow_shared parquet_shared
177+ EXPORT iceberg_targets
178+ RUNTIME DESTINATION "${ICEBERG_INSTALL_BINDIR} "
179+ ARCHIVE DESTINATION "${ICEBERG_INSTALL_LIBDIR} "
180+ LIBRARY DESTINATION "${ICEBERG_INSTALL_LIBDIR} " )
130181 endif ()
131182
132183 set (ARROW_VENDORED TRUE )
133- set_target_properties (arrow_static PROPERTIES OUTPUT_NAME "iceberg_vendored_arrow" )
134- set_target_properties (parquet_static PROPERTIES OUTPUT_NAME
135- "iceberg_vendored_parquet" )
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 arrow_bundled_dependencies
149- IMPORTED_LOCATION )
150- install (FILES ${arrow_bundled_dependencies_location}
151- DESTINATION ${ICEBERG_INSTALL_LIBDIR} )
152- endif ()
153184 else ()
154185 set (ARROW_VENDORED FALSE )
155186 list (APPEND ICEBERG_SYSTEM_DEPENDENCIES Arrow)
@@ -168,6 +199,8 @@ endfunction()
168199
169200function (resolve_avro_dependency)
170201 prepare_fetchcontent()
202+ set (BUILD_SHARED_LIBS ${ICEBERG_BUILD_SHARED} )
203+ set (BUILD_STATIC_LIBS ${ICEBERG_BUILD_STATIC} )
171204
172205 set (AVRO_USE_BOOST
173206 OFF
@@ -221,28 +254,50 @@ function(resolve_avro_dependency)
221254 fetchcontent_makeavailable(avro-cpp)
222255
223256 if (avro-cpp_SOURCE_DIR)
224- if (NOT TARGET avro-cpp::avrocpp_static)
225- add_library (avro-cpp::avrocpp_static INTERFACE IMPORTED )
226- target_link_libraries (avro-cpp::avrocpp_static INTERFACE avrocpp_s)
227- target_include_directories (avro-cpp::avrocpp_static
228- INTERFACE ${avro-cpp_BINARY_DIR }
229- ${avro-cpp_SOURCE_DIR}/lang/c++)
257+ if (BUILD_STATIC_LIBS)
258+ if (NOT TARGET avro-cpp::avrocpp_static)
259+ add_library (avro-cpp::avrocpp_static INTERFACE IMPORTED )
260+ target_link_libraries (avro-cpp::avrocpp_static INTERFACE avrocpp_s)
261+ target_include_directories (avro-cpp::avrocpp_static
262+ INTERFACE ${avro-cpp_BINARY_DIR }
263+ ${avro-cpp_SOURCE_DIR}/lang/c++)
264+ endif ()
265+
266+ set_target_properties (avrocpp_s PROPERTIES OUTPUT_NAME
267+ "iceberg_vendored_avrocpp_static" )
268+ set_target_properties (avrocpp_s PROPERTIES POSITION_INDEPENDENT_CODE ON )
269+ install (TARGETS avrocpp_s
270+ EXPORT iceberg_targets
271+ RUNTIME DESTINATION "${ICEBERG_INSTALL_BINDIR} "
272+ ARCHIVE DESTINATION "${ICEBERG_INSTALL_LIBDIR} "
273+ LIBRARY DESTINATION "${ICEBERG_INSTALL_LIBDIR} " )
274+
275+ # TODO: add vendored ZLIB and Snappy support
276+ find_package (Snappy CONFIG)
277+ if (Snappy_FOUND)
278+ list (APPEND ICEBERG_SYSTEM_DEPENDENCIES Snappy)
279+ endif ()
230280 endif ()
231281
232- set (AVRO_VENDORED TRUE )
233- set_target_properties (avrocpp_s PROPERTIES OUTPUT_NAME "iceberg_vendored_avrocpp" )
234- set_target_properties (avrocpp_s PROPERTIES POSITION_INDEPENDENT_CODE ON )
235- install (TARGETS avrocpp_s
236- EXPORT iceberg_targets
237- RUNTIME DESTINATION "${ICEBERG_INSTALL_BINDIR} "
238- ARCHIVE DESTINATION "${ICEBERG_INSTALL_LIBDIR} "
239- LIBRARY DESTINATION "${ICEBERG_INSTALL_LIBDIR} " )
240-
241- # TODO: add vendored ZLIB and Snappy support
242- find_package (Snappy CONFIG)
243- if (Snappy_FOUND)
244- list (APPEND ICEBERG_SYSTEM_DEPENDENCIES Snappy)
282+ if (BUILD_SHARED_LIBS )
283+ if (NOT TARGET avro-cpp::avrocpp_shared)
284+ add_library (avro-cpp::avrocpp_shared INTERFACE IMPORTED )
285+ target_link_libraries (avro-cpp::avrocpp_shared INTERFACE avrocpp)
286+ target_include_directories (avro-cpp::avrocpp_shared
287+ INTERFACE ${avro-cpp_BINARY_DIR }
288+ ${avro-cpp_SOURCE_DIR}/lang/c++)
289+ endif ()
290+
291+ set_target_properties (avrocpp PROPERTIES OUTPUT_NAME "iceberg_vendored_avrocpp" )
292+ set_target_properties (avrocpp PROPERTIES POSITION_INDEPENDENT_CODE ON )
293+ install (TARGETS avrocpp
294+ EXPORT iceberg_targets
295+ RUNTIME DESTINATION "${ICEBERG_INSTALL_BINDIR} "
296+ ARCHIVE DESTINATION "${ICEBERG_INSTALL_LIBDIR} "
297+ LIBRARY DESTINATION "${ICEBERG_INSTALL_LIBDIR} " )
245298 endif ()
299+
300+ set (AVRO_VENDORED TRUE )
246301 else ()
247302 set (AVRO_VENDORED FALSE )
248303 list (APPEND ICEBERG_SYSTEM_DEPENDENCIES Avro)
0 commit comments