From 35296d3e26dff24aca69b920474acab6af9b9739 Mon Sep 17 00:00:00 2001
From: David Li
Date: Tue, 18 Mar 2025 16:11:45 +0900
Subject: [PATCH] Build/link to Rust iceberg-c library
---
.../IcebergThirdpartyToolchain.cmake | 35 +++++++++++++++++++
src/iceberg/CMakeLists.txt | 6 +++-
2 files changed, 40 insertions(+), 1 deletion(-)
diff --git a/cmake_modules/IcebergThirdpartyToolchain.cmake b/cmake_modules/IcebergThirdpartyToolchain.cmake
index 0f95ea429..da4afcbf9 100644
--- a/cmake_modules/IcebergThirdpartyToolchain.cmake
+++ b/cmake_modules/IcebergThirdpartyToolchain.cmake
@@ -198,3 +198,38 @@ endfunction()
if(ICEBERG_AVRO)
resolve_avro_dependency()
endif()
+
+# ----------------------------------------------------------------------
+# Apache Iceberg (Rust)
+
+function(resolve_iceberg_c_dependency)
+ prepare_fetchcontent()
+
+ fetchcontent_declare(IcebergC
+ ${FC_DECLARE_COMMON_OPTIONS}
+ GIT_REPOSITORY https://github.com/lidavidm/iceberg-rust.git
+ GIT_TAG add-c-binding
+ SOURCE_SUBDIR
+ bindings/c
+ FIND_PACKAGE_ARGS)
+
+ fetchcontent_makeavailable(IcebergC)
+
+ if(icebergc_SOURCE_DIR)
+ message(STATUS "Using vendored Iceberg C library")
+ set(ICEBERG_C_VENDORED TRUE)
+ else()
+ message(STATUS "Using system Iceberg C library")
+ set(ICEBERG_C_VENDORED FALSE)
+ list(APPEND ICEBERG_SYSTEM_DEPENDENCIES IcebergC)
+ endif()
+
+ set(ICEBERG_SYSTEM_DEPENDENCIES
+ ${ICEBERG_SYSTEM_DEPENDENCIES}
+ PARENT_SCOPE)
+ set(ICEBERG_C_VENDORED
+ ${ICEBERG_C_VENDORED}
+ PARENT_SCOPE)
+endfunction()
+
+resolve_iceberg_c_dependency()
diff --git a/src/iceberg/CMakeLists.txt b/src/iceberg/CMakeLists.txt
index 8411c7ac5..b6fb57531 100644
--- a/src/iceberg/CMakeLists.txt
+++ b/src/iceberg/CMakeLists.txt
@@ -21,7 +21,11 @@ add_iceberg_lib(iceberg
SOURCES
${ICEBERG_SOURCES}
PRIVATE_INCLUDES
- ${ICEBERG_INCLUDES})
+ ${ICEBERG_INCLUDES}
+ SHARED_LINK_LIBS
+ IcebergC::iceberg_c_shared
+ STATIC_LINK_LIBS
+ IcebergC::iceberg_c_static)
iceberg_install_all_headers(iceberg)